Đồ án cơ sở ngành mạng đề tài phần nguyên lí hệ điều hành ứng dụng cơ chế đồng bộ các process cho bài toán sản xuất – tiêu dùng Đồ án cơ sở ngành mạng đề tài phần nguyên lí hệ điều hành ứng dụng cơ chế đồng bộ các process cho bài toán sản xuất – tiêu dùng
Trang 1Phần Lập trình mạng: Xây dựng ứng dụng trên máy điện thoại quản lý thu chi,
chương trình cho phép người dùng gửi dữ liệu đến email để lưu giữ.
Trang 2
MỤC LỤC
ĐẠI HỌC ĐÀ NẴNG 1
NHẬN XÉT CỦA GIẢNG VIÊN 2
CHƯƠNG 1 GIỚI THIỆU TỔNG QUAN ĐỀ TÀI 4
1 Nội dung đề tài 4
Vận dụng cơ chế đồng bộ các process để xây dựng bài toán sản xuất-tiêu dùng, tránh tranh chấp tài nguyên khi dùng chung một biến semaphore 4
2 Mục tiêu 4
3 Môi trường áp dụng 4
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 4
1 Tiến trình 4
2 Đồng bộ tiến trình 7
3 Giới thiệu Semaphore 7
CHƯƠNG 3 CÀI ĐẶT VÀ TRIỂN KHAI 12
PHẦN II: LẬP TRÌNH MẠNG 14
CHƯƠNG 1 GIỚI THIỆU TỔNG QUAN ĐỀ TÀI 14
1 Nội dung đề tài 14
Xây dựng ứng dụng trên máy điện thoại quản lý thu chi Chương trình cho phép người dùng nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ 14
2 Mục tiêu 14
3 Môi trường áp dụng 14
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 14
1 SMTP: 15
2 POP3: 16
3 IMAP: 17
4 So sánh POP3 và IMAP: 17
CHƯƠNG 3 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 19
1 Bài toán và yêu cầu: 19
2 Phân tích hệ thống: 19
3 Xây dựng ứng dụng 23
CHƯƠNG 4 TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 24
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 29
Trang 3PHẦN I: NGUYÊN LÝ HỆ ĐIỀU HÀNH
Ứng dụng cơ chế đồng bộ các process cho bài toán
Sản xuất – Tiêu dùng
CHƯƠNG 1.GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
1 Nội dung đề tài
Vận dụng cơ chế đồng bộ các process để xây dựng bài toán sản xuất-tiêu dùng,tránh tranh chấp tài nguyên khi dùng chung một biến semaphore
Để hổ trợ hoạt động đa nhiệm, hệ thống máy tính cần phải có khả năng thựchiện nhiều tác vụ xử lý đồng thời nhưng việc điều khiển hoạt động song hành ở cấp
độ phần cứng là rất khó khăn.Vì vậy,các nhà thiết kế hệ điều hành đề xuất một môhình song hành giả lập bằng cách chuyển đổi bộ xử lý qua lại giữa các chương trình
để duy trì hoạt động của nhiều chương trình phải cùng một thời điểm
Trong mô hình này các chương trình của hệ thống được tổ chức thành các tiếntrình(process) Như vậy có thể coi tiến trình là một chương trình đang xử lý, nó sử
Trang 4dụng một con trỏ lệnh, tập các thanh ghi và các biến Để hoàn thành nhiệm vụ củamình, các tiến trình còn có thể yêu cầu một số tài nguyên hệ thống như: CPU, bộ nhớ
và các thiết bị Chúng ta cần phân biệt rõ tiến trình và chương trình
Chương trình là một thực thể thụ động chưa các chỉ thị điều khiển máy tính thihành một tác vụ cụ thể nào đó Khi thực hiện các chỉ thị này, chương trình đượcchuyển thành các tiến trình là một thực thể hoạt động, với con trỏ lệnh xác định kèmthem tài nguyên phục vụ cho hoạt động
Vậy tiến trình là một bộ phận của một chương trình đang thực hiện, đơn vị thựchiện tiến trình là processer
b) Đặc điểm của tiến trình
Điều phối hoạt động của các tiến trình là một vấn đề rất phức tạp, đòi hỏi hệđiều hành khi giải quyết phải xem xét nhiều yếu tố khác nhau để có thể đạt đượcnhững mục tiêu đề ra Một số đặc tính của tiến trình cần được quan tâm như tiêuchuẩn điều phối :
Khi một tiến trình nhận được CPU, chủ yếu nó chỉ sử dụng CPU đến khi phátsinh một yêu cầu nhập xuất? Hoạt động của các tiến trình như thế thường bao gồmnhiều lượt sử dụng CPU , mỗi lượt trong một thời gian khá ngắn
Khi một tiến trình nhận được CPU, nó có khuynh hướng sử dụng CPU đến khihết thời gian dành cho nó? Hoạt động của các tiến trình như thế thường bao gồm một
số ít lượt sử dụng CPU, nhưng mỗi lượt trong một thời gian đủ dài
Người sử dụng theo kiểu tương tác thường yêu cầu được hồi đáp tức thời đốivới các yêu cầu của họ, trong khi các tiến trình của tác vụ được xử lý theo lô nóichung có thể trì hoãn trong một thời gian chấp nhận được
Các tiến trình có thể được phân cấp theo một số tiêu chuẩn đánh giá nào đó,một cách hợp lý, các tiến trình quan trọng hơn (có độ ưu tiên cao hơn) cần được ưu
Trang 5tiên hơn.
Một số quan điểm ưu tiên chọn những tiến trình đã sử dụng CPU nhiều thờigian nhất vì hy vọng chúng sẽ cần ít thời gian nhất để hoàn tất và rời khỏi hệ thống Tuy nhiên cũng có quan điểm cho rằng các tiến trình nhận được CPU trong ít thờigian là những tiến trình đã phải chờ lâu nhất, do vậy ưu tiên chọn chúng
Có thể giảm thiểu thời gian chờ đợi trung bình của các tiến trình bằng cách chocác tiến trình cần ít thời gian nhất để hoàn tất được thực hiện trước Tuy nhiên đángtiếc là rất hiếm khi biết được tiến trình cần bao nhiêu thời gian nữa để kết thúc xử lý
c) Trạng thái của tiến trình
Trạng thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiệnthời của tiến trình tại thời điếm đó Trong quá trình sống một tiến trình thay đổitrạng thái do nhiều nguyên nhân như: phải chờ một sự kiện nào đó xảy ra, hay đợimột thao tác nhập xuất hoàn tất, buộc phải dừng hoạt động do hết thời gian xửlý……
Tại một thời điểm một tiến trình có thể nhận một trong các trạng thái sau :
* Mới tạo (new): tiến trình đang được tạo lập
* Running: các chỉ thị của tiến trình đang được xử lý
* Blocked: tiến trình chờ được cấp phát tài nguyên, hay chờ một sự kiện xảy
ra
* Ready (ready): tiến trình chờ được cấp phát CPU để xử lý
* Waiting (đợi): tiến trình phải dừng vì thiếu tài nguyên hoặc chờ một sự kiệnnào đó
* Kết thúc(halt) : tiến trình hoàn tất xử lý
d) Các loại tiến trình
Các tiến trình trong hệ thống có thể chia thành hai loại: tiến trình tuần tự vàtiến trình song song
Trang 6 Tiến trình tuần tự là các tiến trình mà điểm khởi tạo của nó là điểm kết thúccủa tiến trình trước đó.Tiến trình tuần tự xuất hiện trong các hệ điều hành đơn nhiệmnhư hệ điều hành MSDOS.
Tiến trình song song là các tiến trình mà điểm khởi tạo của tiến trình này nằm
ở thân của các tiến trình khác, tức là có thể khởi tạo một tiến trình mới khi các tiếntrình đó chưa kết thúc Các tiến trình song song xuất hiện trong hệ điều hành đanhiệm
2 Đồng bộ tiến trình
a.Mục tiêu của đồng bộ
- Đảm bảo truy xuất độc
- Đảm bảo cơ chế phối hợp giữa các tiến trình
b.Nguyên tắc đồng bộ
- Tại một thời điểm chỉ có một tiến trình trong miền găng
- Không có sự ràng buộc về tốc độ của các tiến trình và số bộ xử lý trong hệthống
- Một tiến trình tạm dừng bên ngoài miền găng không được ngăn cản tiến trìnhkhác vào miền găng
- Không có tiến trình chờ vô hạn để vào miền găng
3 Giới thiệu Semaphore
Semaphore là một biến được bảo vệ (hay là một kiểu dữ liệu trừu tượng), tạo
thành một phương pháp để hạn chế truy nhập tới tài nguyên dùng chung trong môi
trường đa lập trình(multiprogramming) Đây là một phát minh của Edsger Dijkstra
và được sử dụng lần đầu tiên trong hệ điều hành THE Giá trị của semaphore đượckhởi tạo bằng số các tài nguyên tương đương được chia sẻ cái mà cài đặt điều khiển.Trong trường hợp đặc biệt, khi mà chỉ có một tài nguyên tương đương được chia sẻ,semaphore được gọi là semaphore nhị phân Trong trường hợp khái quát, semaphorethường được gọi là biến đếm semaphore
Phân loại.
Có hai loại Semaphore:
Trang 7Semaphore nhị phân chỉ có 2 giá trị là 0 và 1 Nếu Semaphore có hai giá trị hay
là semaphore nhị phân thì nó có vai trò như Mutex trong tương tác các luồng.Semaphore nhị phân thường được khởi tạo tại giá trị 1 Khi tài nguyên đang được sửdụng, luồng truy nhập gọi P(S) để giảm giá trị của nó về 0, và khôi phục giá trị 1
bằng toán tử V khi tài nguyên sẵn sàng được được thả ra.
Semaphore khác có các giá trị nhiều hơn 2
a) Khởi tạo Semahore
Có hai cách khai báo semaphore:
Semaphore(int num)
Semaphore(int num,boolean how)
Trong đó: num: chỉ định số giấy phép ban đầu Do đó, nó chỉ định số luồng có
thể truy cập tài nguyên được chia sẻ cùng một lúc Nếu nó là một, thì chỉ có mộtluồng có thể truy cập tài nguyên tại một thời điểm Theo mặc định, tất cả các chuỗichờ được cấp giấy phép theo thứ tự không xác định Bằng cách đặt cách thực hiện, ta
có thể đảm bảo rằng các chuỗi chờ được cấp giấy phép theo thứ tự mà chúng yêu cầuquyền truy cập
Tham số “how” có nghĩa là các thread sau sẽ được đẩy vào tiếp theo hình thức
FIFO (first-in first-out), tức là Semaphores sẽ tống tất cả các thread muốn truy cậpvào hàm xử lý vào một queue dạng FIFO và cứ lấy ra num thread một ra xử lý, xongrồi lại lấy tiếp num thread tiếp theo và cứ thế
b) Các hàm trong Semaphore:
public void acquire() throw InterruptedException:
Có được một giấy phép từ semaphore này, ngăn chặn cho đến khi có sẵn, hoặcthread bị gián đoạn
Trang 8Có được giấy phép, nếu có sẵn và trả về ngay lập tức, giảm số lượng giấy phép
• Một số luồng khác làm interrupts luồng hiện tại
Nếu thread hiện tại:
• Có trạng thái ngắt được đặt khi nhập vào phương thức này; hoặc bị gián đoạntrong khi chờ giấy phép, thì sau đó InterruptedException được ném và trạng thái ngắtcủa luồng hiện tại sẽ bị xóa
public void release() :
Hàm này phát hành một giấy phép, trả lại nó cho semaphore
Phát hành một giấy phép, tăng số lượng giấy phép có sẵn bằng một Nếu bất kỳthread đang cố gắng để có được một giấy phép, sau đó một được chọn và đưa ra giấyphép vừa được phát hành
4 Thread
Luồng (Thread) là một phần của tiến trình sở hữu riêng ngăn xếp (stack) và
thực thi độc lập ngay trong mã lệnh của tiến trình
Trong mỗi tiến trình có thể tạo ra nhiều luồng hoạt động song song với nhau
(như cách tiến trình hoạt động song song)
Ưu điểm của luồng là hoạt động trong cùng không gian địa chỉ của tiến trình
Khi chương trình chính bắt đầu chính là một luồng (thread)
Luồng điều khiển hàm main() của chương trình được gọi là luồng chính Các
luồng khác do tiến trình tạo ra được gọi là luồng phụ
5 Xây dựng bài toán thực tế - Phòng khám bệnh
- Bệnh nhân đóng vai trò là những nhà sản xuất
- Bác sĩ có vai trò như 1 nhà tiêu dùng
- Cả 2 dùng chung tài nguyên đó là các ghế chờ khám(tài nguyên dùng chung)
Trang 9- Bài toán giải quyết vấn đề với 1 người tiêu dùng và nhiều nhà sản xuất
- Phòng khám sẽ có các ghế chờ như 1 hàng đợi: bệnh nhân sẽ ngồi chờ khám ởghế và bác sĩ lấy bệnh nhân từ đó mà khám bệnh
-Vấn đề cần giải quyết là bác sĩ sẽ không khám khi các hàng đợi trống, và bệnhnhân sẽ không được vào hàng đợi khi các ghế chờ đã đầy chỗ, cả 2 không được tranhchấp tài nguyên dùng chung
-Mô tả thuật toán:
Với giải pháp Semaphore, ta khai báo các biến:
Semaphore medical_chair ; // Ghế khám bệnh
Semaphore chairs; // Số ghế chờ khám bệnh
Semaphore medical; // bác sĩ khám bệnh
int waiting_customers; // Theo dõi số lượng bệnh nhân chờ đợi
int number_of_chair; // Đếm số lượng ghế chờ hiện tại sẵn sàng
int MEDICAL_TIME = 5000; // thời gian khám bệnh
Trang 10Hình 2: Sơ đồ thuật toán Phòng khám bệnh
a) Khởi tạo constructor ban đầu:
Ban đầu khi chưa có khách hàng thì ghế khám bệnh trống và bác ngủ sĩ ngủ chờ khách hàng vào khám bệnh; ghế chờ trống:
medical_chair = new Semaphore(1, true);
chairs = new Semaphore(0, true);
medical = new Semaphore(0, true);
number_of_chairs = chair_number;
waiting_customers = 0;
b) Khách hàng muốn khám bệnh:
if(medical_chair.availablePermits() <= 0) customerSitDown(c);
if(c.wantsmedical()) { barber_chair.acquire();
medical(c);
}
c) Khách hàng khám bệnh:
if(waiting_customers < number_of_chairs) { waiting_customers++;
chairs.acquire();
Trang 11} } else { System.out.println(c + " rời đi vì phòng khám đã đầy khách");
Trang 12Hình 4: Kết quả chạy chương trình Phòng khám bệnh
Hình 5: Kết quả chạy chương trình Phòng khám bệnh
KẾT LUẬN
- Hiểu thêm về cơ chế đồng bộ các process, thread
- Ứng dụng được bài toán thực tế
Trang 13PHẦN II: LẬP TRÌNH MẠNG Xây dựng ứng dụng trên máy điện thoại quản lý thu chi.
Chương trình cho phép người dùng nhập, quản lý thu chi theo ngày/tháng; gửi
dữ liệu đến email để lưu giữ.
CHƯƠNG 1.GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
1 Nội dung đề tài
Xây dựng ứng dụng trên máy điện thoại quản lý thu chi Chương trình cho phépngười dùng nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ
2 Mục tiêu
Tìm hiểu được các hoạt động trong một ứng dụng di động, các giao thức email:SMTP, POP3, IMAP; áp dụng kỹ thuật này vào các trường hợp cần thiết khi xây dựngứng dụng
3 Môi trường áp dụng
Chương trình mô phỏng sẽ được viết bằng ngôn ngữ Java
Trong đồ án môn học này, em sử dụng phần mềm Android Studio để phát triểnứng dụng
CHƯƠNG 2.CƠ SỞ LÝ THUYẾT
Nhờ sự phát triển của công nghệ thông tin nói chúng và Internet nói riêng, nhiềucông việc, tác vụ của con người đã có thể thực hiện một cách dễ dàng hơn Trong đó,vấn đề quản lí các thông tin cá nhân hàng ngày như lịch sinh hoạt, chi tiêu, sinh hoạthàng ngày đang ngày càng được quan tâm
Bên cạnh đó, việc sử dụng các ứng dụng sử dụng trên nền tảng điện thoại giúptăng cao tính ứng dụng, tiện lợi khi có thể cập nhật bất cứ lúc nào Một vấn đề được ra
là làm thế nào nếu các thông tin dữ liệu trong di động xảy ra hỏng hóc, hay đơn giản
Trang 14là khi người sử dụng muốn tiếp tục lưu lại những thông tin mình đã dùng trước đó khilần nữa cài đặt lại phần mềm
Trong bài đồ án này sẽ tập trung tìm hiểu về một ứng dụng di động trong quản líthu chi cá nhân theo ngày, và được sao lưu, phục hồi dữ liệu thông qua Email Có cácgiao thức đang được triển khai phổ biến hiện nay là SMTP, IMAP và POP3
1 SMTP:
a) Khái quát:
SMTP (tiếng Anh: Simple Mail Transfer Protocol - giao thức truyền tải thư tínđơn giản) là một chuẩn truyền tải thư điện tử qua mạng Internet SMTP được địnhnghĩa trong bản RFC 821 (STD 10) và được chỉnh lý bằng bản RFC 1123 (STD 3),.Giao thức hiện dùng được là ESMTP (extended SMTP - SMTP mở rộng), được địnhnghĩa trong bản RFC 2821
Mặc dầu các Server và các phần mềm quản lí thư điện tử sử dụng SMTP để gửi
và nhận thư, nhưng ở cấp độ người dùng cá nhân, trong các phần mềm Client để nhậngửi thư thì STMP chỉ ứng dụng để gửi thư mà thôi, việc nhận thư thường dùng cácgiao thức khác là IMAP hay POP3
SMTP sử dụng port 25 để giao tiếp giữa cái Mail Server với nhau Còn đối vớicác Client thì thường truyền thư đến Server thông qua port 587 Cũng có ngoại lệ một
số nhà cung cấp dịch vụ dùng port 465 thay vì tuân theo tiêu chuẩn (port 587) chomục đích kể trên
Kết nối SMTP được đảm bảo an toàn bằng SSL, thường được biết đến với tên làSMTPS
Mặc dầu những hệ thống Mail Server hay các Web Mail dùng các chuẩn riêngcủa họ để cho phép các tài khoản truy cập vào hòm thư trong hệ thống của họ, tất cảđều sử dụng giao thức SMTP để gửi hoặc nhận email từ phạm vi bên ngoài hệ thống
b) Quá trình email di chuyển trong MTS(Mail Taransfer System) bằng SMTP:
Bản thân các ứng dụng gửi email đóng vai trò các MUA (Mail User Agent) Khingười thực hiện gửi, email sẽ được chuyển tới MSA (Mail Submit Agent) cũng chính
là MTA (Mail Transfer Agent) biên đầu, thường thì MSA và MTA biên đầu cùng
Trang 15chạy trên một máy Email sau đó tiếp tục được chuyển tiếp (relay) thông qua cácMTA trong một trường mạng cho tới khi chạm MTA biên cuối MTA này có nhiệm
vụ thực hiện truy vấn DNS để tìm ra MX (Mail Exchanger) Server thích hợp dựa trêntên miền đằng sau dấu @ (vd: @gmail.com) và chuyển tiếp tới các MX record cótrong kết quả tìm được Email cuối cùng sẽ được chuyển và lưu trữ tại MDA (MailDelivery Agent) theo định dạng mailbox Vậy, nhiệm vụ SMTP là thực hiện vậnchuyển email từ email client (MUA) tới hộp thư của người nhận (MDA)
Quá trình chuyển email
Một khi đã chuyển thư đến Mail Server cục bộ, mail sẽ được người dùng đọcthông qua giao thức IMAP hoặc POP3
2 POP3:
POP3 (Post Office Protocol version 3, RFC 1939) là giao thức nhận email, cho
phép người dùng tải thư về máy, đọc và quản lý thư trên máy cục bộ Thư sau khi tải
về sẽ có thể được xóa khỏi máy chủ hoặc lưu trữ dưới dạng bản sao do dung lượng lưutrữ trên máy chủ hạn chế POP3 sử dụng port mặc định là 110 để thực hiện thủ tục nhận mail Tuy nhiên, có thể sử dụng port 995 để mã hóa kết nối trên kênh truyền SSL Thủ tục nhận mail trên POP3 diễn ra như sau:
Người dùng thông qua Email Client gửi yêu cầu kết nối tới Email Server (MDA), quá trinh bắt tay 3 bước diễn ra để tạo kết nối TCP