Hệ điều hành
HỆ ĐIỀU HÀNH
Phạm Đăng Hả[email protected]
Bộ môn Khoa học Máy tínhViện Công nghệ Thông tin & Truyền Thông
Ngày 13 tháng 3 năm 2012
1 / 217
Chương 2: Quản lý tiến trình
Chương 2 Quản lý tiến trình
2 / 217
Chương 2: Quản lý tiến trình
Giới thiệu
Khi chương trình đang thực hiệnĐược cung cấp tài nguyên (CPU, bộ nhớ, thiết bị vào/ra. . .)
để hoàn thành công việcTài nguyên được cấp khi bắt đầu chương trình hay trong khichương trình đang thực hiện
Gọi là tiến trình (process)
Hệ thống bao gồm tập các tiến trình thực hiện đồng thời
Tiến trình hệ điều hành Thực hiện mã lệnh hệ thốngTiến trình người dùng Thực hiện mã lệnh người dùng
Tiến trình có thể chứa một hoặc nhiều luồng điều khiển
Trách nhiệm của Hệ điều hành: Đảm bảo họat động của tiếntrình và tiểu trình (luồng)
Tạo/xóa tiến trình (người dùng, hệ thống)Điều phối tiến trìnhCung cấp cơ chế đồng bộ, truyền thông và ngăn ngừa tìnhtrạng bế tắc giữa các tiến trình
3 / 217
Chương 2: Quản lý tiến trình
Nội dung chính
1 Tiến trình
2 Luồng (Thread)
3 Điều phối CPU
4 Tài nguyên găng và điều độ tiến trình
5 Bế tắc và xử lý bế tắc
4 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
Nội dung chính
1 Tiến trình
2 Luồng (Thread)
3 Điều phối CPU
4 Tài nguyên găng và điều độ tiến trình
5 Bế tắc và xử lý bế tắc
5 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
1 Tiến trìnhKhái niệm tiến trìnhĐiều phối tiến trình (Process Scheduling)Thao tác trên tiến trìnhHợp tác tiến trìnhTruyền thông liên tiến trình
6 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình
Trạng thái hệ thốngVi xử lý: Giá trị các thanh ghiBộ nhớ: Nội dung các ô nhớThiết bị ngoại vi: Trạng thái thiết bị
Thực hiện chương trình ⇒Trạng thái hệ thống thay đổiThay đổi rời rạc, theo từng câu lệnh được thực hiện
q0 q1 q2 qn . . .
Tiến trình là một dãy thay đổi trạng thái của hệ thống
Chuyển từ trạng thái này sang trạng thái khác được thực hiệntheo yêu cầu nằm trong chương trình của người sử dụngXuất phát từ một trạng thái ban đầu�� ��Tiến trình là sự thực hiện chương trình
7 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình
Trạng thái hệ thốngVi xử lý: Giá trị các thanh ghiBộ nhớ: Nội dung các ô nhớThiết bị ngoại vi: Trạng thái thiết bị
Thực hiện chương trình ⇒Trạng thái hệ thống thay đổiThay đổi rời rạc, theo từng câu lệnh được thực hiện
q0 q1 q2 qn . . .
Tiến trình là một dãy thay đổi trạng thái của hệ thống
Chuyển từ trạng thái này sang trạng thái khác được thực hiệntheo yêu cầu nằm trong chương trình của người sử dụngXuất phát từ một trạng thái ban đầu�� ��Tiến trình là sự thực hiện chương trình
7 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình
Trạng thái hệ thốngVi xử lý: Giá trị các thanh ghiBộ nhớ: Nội dung các ô nhớThiết bị ngoại vi: Trạng thái thiết bị
Thực hiện chương trình ⇒Trạng thái hệ thống thay đổiThay đổi rời rạc, theo từng câu lệnh được thực hiện
q0 q1 q2 qn . . .
Tiến trình là một dãy thay đổi trạng thái của hệ thống
Chuyển từ trạng thái này sang trạng thái khác được thực hiệntheo yêu cầu nằm trong chương trình của người sử dụngXuất phát từ một trạng thái ban đầu
�� ��Tiến trình là sự thực hiện chương trình
7 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình
Trạng thái hệ thốngVi xử lý: Giá trị các thanh ghiBộ nhớ: Nội dung các ô nhớThiết bị ngoại vi: Trạng thái thiết bị
Thực hiện chương trình ⇒Trạng thái hệ thống thay đổiThay đổi rời rạc, theo từng câu lệnh được thực hiện
q0 q1 q2 qn . . .
Tiến trình là một dãy thay đổi trạng thái của hệ thống
Chuyển từ trạng thái này sang trạng thái khác được thực hiệntheo yêu cầu nằm trong chương trình của người sử dụngXuất phát từ một trạng thái ban đầu�� ��Tiến trình là sự thực hiện chương trình
7 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình >< chương trình
Chương trình: thực thể thụ động (nội dung file trên đĩa)Mã chương trình: Lệnh máy (CD2190EA...)
Dữ liệu: Biến được lưu trữ và sử dụng trong bộ nhớBiến toàn cụcBiến được cung cấp động (malloc, new,..)Biến stack (tham số hàm, biến cục bộ )
Thư viện liên kết động (DLL)Không được dịch & liên kết cùng với chương trình
Khi chương trình đang thực hiện, tài nguyên tối thiểu cần cóBộ nhớ cho mã chương trình và dữ liệuCác thanh ghi của VXL phục vụ cho quá trình thực hiện
Tiến trình: thực thể chủ động (bộ đếm lệnh, tập tài nguyên)
Một chương trình có thểChỉ là một phần của trạng thái tiến trình
Một chương trình, nhiều tiến trình( bộ dữ liệu khác nhau)gcc hello.c ‖ gcc baitap.c
Gọi tới nhiều tiến trình
8 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình >< chương trình
Chương trình: thực thể thụ động (nội dung file trên đĩa)Mã chương trình: Lệnh máy (CD2190EA...)
Dữ liệu: Biến được lưu trữ và sử dụng trong bộ nhớBiến toàn cụcBiến được cung cấp động (malloc, new,..)Biến stack (tham số hàm, biến cục bộ )
Thư viện liên kết động (DLL)Không được dịch & liên kết cùng với chương trình
Khi chương trình đang thực hiện, tài nguyên tối thiểu cần cóBộ nhớ cho mã chương trình và dữ liệuCác thanh ghi của VXL phục vụ cho quá trình thực hiện
Tiến trình: thực thể chủ động (bộ đếm lệnh, tập tài nguyên)
Một chương trình có thểChỉ là một phần của trạng thái tiến trình
Một chương trình, nhiều tiến trình( bộ dữ liệu khác nhau)gcc hello.c ‖ gcc baitap.c
Gọi tới nhiều tiến trình
8 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình >< chương trình
Chương trình: thực thể thụ động (nội dung file trên đĩa)Mã chương trình: Lệnh máy (CD2190EA...)
Dữ liệu: Biến được lưu trữ và sử dụng trong bộ nhớBiến toàn cụcBiến được cung cấp động (malloc, new,..)Biến stack (tham số hàm, biến cục bộ )
Thư viện liên kết động (DLL)Không được dịch & liên kết cùng với chương trình
Khi chương trình đang thực hiện, tài nguyên tối thiểu cần cóBộ nhớ cho mã chương trình và dữ liệuCác thanh ghi của VXL phục vụ cho quá trình thực hiện
Tiến trình: thực thể chủ động (bộ đếm lệnh, tập tài nguyên)
Một chương trình có thểChỉ là một phần của trạng thái tiến trình
Một chương trình, nhiều tiến trình( bộ dữ liệu khác nhau)gcc hello.c ‖ gcc baitap.c
Gọi tới nhiều tiến trình
8 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình >< chương trình
Chương trình: thực thể thụ động (nội dung file trên đĩa)Mã chương trình: Lệnh máy (CD2190EA...)
Dữ liệu: Biến được lưu trữ và sử dụng trong bộ nhớBiến toàn cụcBiến được cung cấp động (malloc, new,..)Biến stack (tham số hàm, biến cục bộ )
Thư viện liên kết động (DLL)Không được dịch & liên kết cùng với chương trình
Khi chương trình đang thực hiện, tài nguyên tối thiểu cần cóBộ nhớ cho mã chương trình và dữ liệuCác thanh ghi của VXL phục vụ cho quá trình thực hiện
Tiến trình: thực thể chủ động (bộ đếm lệnh, tập tài nguyên)
Một chương trình có thểChỉ là một phần của trạng thái tiến trình
Một chương trình, nhiều tiến trình( bộ dữ liệu khác nhau)gcc hello.c ‖ gcc baitap.c
Gọi tới nhiều tiến trình8 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Dịch và thực hiên một chương trình
9 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Thực hiện một chương trình
Hệ điều hành tạo một tiến trình và phân phối vùng nhớ cho nóBộ thực hiện (loader/exec)
Đọc và dịch (interprets) file thực thi (header file)Thiết lập không gian địa chỉ cho tiến trình để chứa mã lệnh vàdữ liệu từ file thực thiĐặt các tham số dòng lệnh, biến môi trường (argc, argv, envp)vào stackThiết lập các thanh ghi của VXL tới các giá trị thích hợp vàgọi hàm "_start()" (hàm của hệ điều hành)
Chương trình bắt đầu thực hiện tại "_start()". Hàm này gọitới hàm main()(hàm của chương trình)⇒"Tiến trình" đang thực hiện, không còn đề cập đến"chương trình" nữaKhi hàm main() kết thúc, OS gọi tới hàm "_exit()" để hủybỏ tiến trình và thu hồi tài nguyên
Tiến trình là chương trình đang thực hiện
10 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Thực hiện một chương trình
Hệ điều hành tạo một tiến trình và phân phối vùng nhớ cho nó
Bộ thực hiện (loader/exec)Đọc và dịch (interprets) file thực thi (header file)Thiết lập không gian địa chỉ cho tiến trình để chứa mã lệnh vàdữ liệu từ file thực thiĐặt các tham số dòng lệnh, biến môi trường (argc, argv, envp)vào stackThiết lập các thanh ghi của VXL tới các giá trị thích hợp vàgọi hàm "_start()" (hàm của hệ điều hành)
Chương trình bắt đầu thực hiện tại "_start()". Hàm này gọitới hàm main()(hàm của chương trình)⇒"Tiến trình" đang thực hiện, không còn đề cập đến"chương trình" nữaKhi hàm main() kết thúc, OS gọi tới hàm "_exit()" để hủybỏ tiến trình và thu hồi tài nguyên
Tiến trình là chương trình đang thực hiện
10 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Thực hiện một chương trình
Hệ điều hành tạo một tiến trình và phân phối vùng nhớ cho nóBộ thực hiện (loader/exec)
Đọc và dịch (interprets) file thực thi (header file)Thiết lập không gian địa chỉ cho tiến trình để chứa mã lệnh vàdữ liệu từ file thực thiĐặt các tham số dòng lệnh, biến môi trường (argc, argv, envp)vào stackThiết lập các thanh ghi của VXL tới các giá trị thích hợp vàgọi hàm "_start()" (hàm của hệ điều hành)
Chương trình bắt đầu thực hiện tại "_start()". Hàm này gọitới hàm main()(hàm của chương trình)⇒"Tiến trình" đang thực hiện, không còn đề cập đến"chương trình" nữaKhi hàm main() kết thúc, OS gọi tới hàm "_exit()" để hủybỏ tiến trình và thu hồi tài nguyên
Tiến trình là chương trình đang thực hiện
10 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Thực hiện một chương trình
Hệ điều hành tạo một tiến trình và phân phối vùng nhớ cho nóBộ thực hiện (loader/exec)
Đọc và dịch (interprets) file thực thi (header file)Thiết lập không gian địa chỉ cho tiến trình để chứa mã lệnh vàdữ liệu từ file thực thiĐặt các tham số dòng lệnh, biến môi trường (argc, argv, envp)vào stackThiết lập các thanh ghi của VXL tới các giá trị thích hợp vàgọi hàm "_start()" (hàm của hệ điều hành)
Chương trình bắt đầu thực hiện tại "_start()". Hàm này gọitới hàm main()(hàm của chương trình)⇒"Tiến trình" đang thực hiện, không còn đề cập đến"chương trình" nữa
Khi hàm main() kết thúc, OS gọi tới hàm "_exit()" để hủybỏ tiến trình và thu hồi tài nguyên
Tiến trình là chương trình đang thực hiện
10 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Thực hiện một chương trình
Hệ điều hành tạo một tiến trình và phân phối vùng nhớ cho nóBộ thực hiện (loader/exec)
Đọc và dịch (interprets) file thực thi (header file)Thiết lập không gian địa chỉ cho tiến trình để chứa mã lệnh vàdữ liệu từ file thực thiĐặt các tham số dòng lệnh, biến môi trường (argc, argv, envp)vào stackThiết lập các thanh ghi của VXL tới các giá trị thích hợp vàgọi hàm "_start()" (hàm của hệ điều hành)
Chương trình bắt đầu thực hiện tại "_start()". Hàm này gọitới hàm main()(hàm của chương trình)⇒"Tiến trình" đang thực hiện, không còn đề cập đến"chương trình" nữaKhi hàm main() kết thúc, OS gọi tới hàm "_exit()" để hủybỏ tiến trình và thu hồi tài nguyên
Tiến trình là chương trình đang thực hiện
10 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Thực hiện một chương trình
Hệ điều hành tạo một tiến trình và phân phối vùng nhớ cho nóBộ thực hiện (loader/exec)
Đọc và dịch (interprets) file thực thi (header file)Thiết lập không gian địa chỉ cho tiến trình để chứa mã lệnh vàdữ liệu từ file thực thiĐặt các tham số dòng lệnh, biến môi trường (argc, argv, envp)vào stackThiết lập các thanh ghi của VXL tới các giá trị thích hợp vàgọi hàm "_start()" (hàm của hệ điều hành)
Chương trình bắt đầu thực hiện tại "_start()". Hàm này gọitới hàm main()(hàm của chương trình)⇒"Tiến trình" đang thực hiện, không còn đề cập đến"chương trình" nữaKhi hàm main() kết thúc, OS gọi tới hàm "_exit()" để hủybỏ tiến trình và thu hồi tài nguyên
Tiến trình là chương trình đang thực hiện10 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Trạng thái tiến trình
Khi thực hiện, tiến trình thay đổi trạng thái
Khởi tạo (New) Tiến trình đang được khởi tạo
Sẵn sàng (Ready) Tiến trình đang đợi sử dụng processor vật lý
Thực hiện (Running) Các câu lệnh của tiến trình đang được
thực hiện
Chờ đợi (Waiting) Tiến trình đang chờ đợi một sự kiện nào
đó xuất hiện (sự hoàn thành thao tác vào/ra)
Kết thúc (Terminated) Tiến trình thực hiện xong
Trạng thái của tiến trình là một phần trong hoạt động hiện tại củatiến trình
11 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Lưu đồ thay đổi trạng thái tiến trình (Silberschatz 2002)
Hệ thống có một processor
Có duy nhất một tiến trình ở trạng thái thực hiện
Có thể có nhiều tiến trình ở trạng thái chờ đợi hoặc sẵn sàng
12 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Lưu đồ thay đổi trạng thái tiến trình (Silberschatz 2002)
Hệ thống có một processor
Có duy nhất một tiến trình ở trạng thái thực hiện
Có thể có nhiều tiến trình ở trạng thái chờ đợi hoặc sẵn sàng
12 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Khối điều khiển tiến trình (PCB: Process Control Block)
Mỗi tiến trình được thể hiện trong hệ thống bởi một khối điềukhiển tiến trìnhPCB: cấu trúc thông tin cho phép xác định duy nhất một tt
Trạng thái tiến trình
Bộ đếm lệnh
Các thanh ghi của CPU
Thông tin dùng để điều phối tiến trình
Thông tin quản lý bộ nhớ
Thông tin tài nguyên có thể sử dụng
Thông tin thống kê
. . .
Con trỏ tới một PCB khác13 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Danh sách tiến trình
head
tail
14 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Danh sách tiến trình
head
tail
14 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình đơn luồng và tiến trình đa luồng
Tiến trình đơn luồng : Là chương trình thực hiện chỉ một
luồng thực thi
Có một luồng câu lệnh thực thi
⇒ Cho phép thực hiện chỉ một nhiệm vụ tại một thời điểm
Tiến trình đa luồng : Là tiến trình có nhiều luồng thực thi
⇒ Cho phép thực hiện nhiều hơn một nhiệm vụ tại một thời
điểm
15 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.1 Khái niệm tiến trình
Tiến trình đơn luồng và tiến trình đa luồng
Tiến trình đơn luồng : Là chương trình thực hiện chỉ một
luồng thực thi
Có một luồng câu lệnh thực thi
⇒ Cho phép thực hiện chỉ một nhiệm vụ tại một thời điểm
Tiến trình đa luồng : Là tiến trình có nhiều luồng thực thi
⇒ Cho phép thực hiện nhiều hơn một nhiệm vụ tại một thời
điểm
15 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
1 Tiến trìnhKhái niệm tiến trìnhĐiều phối tiến trình (Process Scheduling)Thao tác trên tiến trìnhHợp tác tiến trìnhTruyền thông liên tiến trình
16 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Giới thiệu
Mục đích Sử dụng tối đa thời gian của CPU
⇒ Cần có nhiều tiến trình trong hệ thống
Vấn đề Luân chuyển CPU giữa các tiến trình
⇒ Phải có hàng đợi cho các tiến trình
Hệ thống một processor
⇒ Một tiến trình thực hiện
⇒ Các tiến trình khác phải đợi tới khi CPU tự do
17 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Các hàng đợi tiến trình I
Hệ thống có nhiều hàng đợi dành cho tiến trìnhJob-queue Tập các tiến trình trong hệ thốngReady-Queue Tập các tiến trình tồn tại trong bộ nhớ, đangsẵn sàng và chờ đợi để được thực hiệnDevice queues Tập các tiến trình đang chờ đợi một thiết bịvào ra. Phân biệt hàng đợi cho từng thiết bị
18 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Các hàng đợi tiến trình II
Các tiến trình di chuyển giữa hàng đợi khác nhau
Tiến trình mới tạo, được đặt trong hàng đợi sẵn sàng, và đợicho tới khi được lựa chọn để thực hiện
19 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Các hàng đợi tiến trình III
Tiến trình đã được chọn và đang thực hiên
1 Đưa ra một yêu cầu vào ra: đợi trong một hàng đợi thiết bị2 Tạo một tiến trình con và đợi tiến trình con kết thúc3 Hết thời gian sử dụng CPU, phải quay lại hàng đợi sẵn sàng
Trường hợp (1&2) sau khi sự kiện chờ đợi hoàn thành,
Tiến trình sẽ chuyển từ trạng thái đợi sang trạng thái sẵn sàng
Tiến trình quay lại hàng đợi sẵn sàng
Tiến trình tiếp tục chu kỳ (sẵn sàng, thực hiện, chờ đợi) cho
tới khi kết thúc
Xóa khỏi tất cả các hàng đợi
PCB và tài nguyên đã cấp được giải phóng
20 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Bộ điều phối (Scheduler)
Lựa chọn tiến trình trong các hàng đợi
Điều phối công việc (Job scheduler; Long-term scheduler)
Điều phối CPU (CPU scheduler; Short-term scheduler)
21 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Điều phối công việc
Chọn các tiến trình từ hàng đợi tiến trình được lưu trong cácvùng đệm (đĩa từ) và đưa vào bộ nhớ để thực hiện
Thực hiện không thường xuyên (đơn vị giây/phút)
Điều khiển mức độ đa chương trình (số t/trình trong bộ nhớ )
Khi mức độ đa chương trình ổn định, điều phối công việcđược gọi chỉ khi có tiến trình rời khỏi hệ thống
Vấn đề lựa chọn công việc
Tiến trình thiên về vào/ra: sử dụng ít thời gian CPUTiến trình thiên về tính toán: sử dụng nhiều thời gian CPUCần lựa chọn lẫn cả 2 loại tiến tình⇒ tt vào ra: hàng đợi sẵn sàng rỗng, lãng phí CPU⇒ tt tính toán: hàng đợi thiết bị rỗng, lãng phí thiết bị
22 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Điều phối CPU
Lựa chọn một tiến trình từ hàng đợi các tiến trình đang sẵnsàng thực hiện và phân phối CPU cho nó
Được thực hiện thường xuyên (VD: 100ms/lần)
Tiến trình thực hiện vài ms rồi thực hiện vào raLựa chọn tiến trình mới, đang sẵn sàng
Phải thực hiện nhanh
10ms để quyết định ⇒10/(110)=9% thời gian CPU lãng phí
Vấn đề luân chuyển CPU từ tiến trình này tới tiến trình khác
Phải lưu trạng thái của tiến trình cũ (PCB) và khôi phụctrạng thái cho tiến trình mớiThời gian luân chuyển là lãng phíCó thể được hỗ trợ bởi phần cứng
Vấn đề lựa chọn tiến trình (điều phối CPU)
23 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Swapping tiến trình (Medium-term scheduler)
Nhiệm vụ
Đưa t/trình ra khỏi bộ nhớ (làm giảm mức độ đa chương trình)Sau đó đưa tiến trình quay trở lại (có thể ở vị trí khác) và tiếptục thực hiện
Mục đích: Giải phóng vùng nhớ, tạo vùng nhớ tự do rộng hơn
24 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.2 Điều phối tiến trình
Chuyển ngữ cảnh (context switch)
Chuyển CPU từ tiến trình này sang tiến trình khác (hoán đổitiến trình thực hiện)Thực hiện khi xuất hiện tín hiệu ngắt (ngắt thời gian) hoặctiến trình đưa ra lời gọi hệ thống (thực hiện và ra)Lưu đồ của chuyển CPU giữa các t/trình(Silberschatz 2002)
25 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
1 Tiến trìnhKhái niệm tiến trìnhĐiều phối tiến trình (Process Scheduling)Thao tác trên tiến trìnhHợp tác tiến trìnhTruyền thông liên tiến trình
26 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Thao tác trên tiến trình
Tạo tiến trình
Kết thúc tiến trình
27 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Tạo tiến trình
Tiến trình có thể tạo nhiều tiến trình mới cùng hoạt động(CreateProcess(), fork())
Tiến trình tạo: tiến trình chaTiến trình được tạo: tiến trình con
Tiến trình con có thể tạo tiến trình con khác ⇒Cây tiến trình
Vấn đề phân phối tài nguyên
Tiến trình con lấy tài nguyên từ hệ điều hànhTiến trình con lấy tài nguyên từ tiến trình cha
Tất cả các tài nguyênMột phần tài nguyên của tiến trình cha (ngăn ngừa việc tạoquá nhiều tiến trình con)
Vấn đề thực hiện
Tiến trình cha tiếp tục thực hiện đồng thời với tiến trình conTiến trình cha đợi tiến trình con kết thúc
28 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Kết thúc tiến trình
Hoàn thành câu lệnh cuối và yêu cầu HĐH xóa nó (exit)
Gửi trả dữ liệu tới tiến trình chaCác tài nguyên đã cung cấp được trả lại hệ thống
Tiến trình cha có thể kết thúc sự thực hiện của tiến trình con
Tiến trình cha phải biết định danh tiến trình con ⇒ tiến trìnhcon phải gửi định danh cho tiến trình cha khi được khởi tạoSử dụng lời gọi hệ thống (abort)
Tiến trình cha kết thúc tiến trình con khi
Tiến trình con sử dụng vượt quá mức tài nguyên được cấpNhiệm vụ cung cấp cho tiến trình con không còn cần thiết nữaTiến trình cha kết thúc và hệ điều hành không cho phép tiếntrình con tồn tại khi tiến trình cha kết thúc⇒Cascading termination. VD, kết thúc hệ thống
29 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Một số hàm với tiến trình trong WIN32 API
CreateProcess(. . .)LPCTSTR Tên của chương trình được thực hiệnLPTSTR Tham số dòng lệnhLPSECURITY_ATTRIBUTES Thuộc tính an ninh t/trình
LPSECURITY_ATTRIBUTES Thuộc tính an ninh luồng
BOOL Cho phép kế thừa các thẻ thiết bị (TRUE/FALSE )DWORD Cờ tạo tiến trình (VD CREATE_NEW_CONSOLE )LPVOID Trỏ tới khối môi trườngLPCTSTR Đường dẫn đầy đủ đến chương trìnhLPSTARTUPINFO Cấu trúc thông tin cho tiến trình mớiLPPROCESS_INFORMATION Thông tin về tiến trình mới
TerminateProcess(HANDLE hProcess, UINT uExitCode)hProcess Thẻ tiến trình bị kết thúc đóng
uExitCode Mã kết thúc tiến trìnhWaitForSingleObject(HANDLE hHandle, DWORD dwMs)
hHandle Thẻ đối tượngdwMs Thời gian chờ đợi (INFINITE )
30 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Một số hàm với tiến trình trong WIN32 API
CreateProcess(. . .)LPCTSTR Tên của chương trình được thực hiệnLPTSTR Tham số dòng lệnhLPSECURITY_ATTRIBUTES Thuộc tính an ninh t/trình
LPSECURITY_ATTRIBUTES Thuộc tính an ninh luồng
BOOL Cho phép kế thừa các thẻ thiết bị (TRUE/FALSE )DWORD Cờ tạo tiến trình (VD CREATE_NEW_CONSOLE )LPVOID Trỏ tới khối môi trườngLPCTSTR Đường dẫn đầy đủ đến chương trìnhLPSTARTUPINFO Cấu trúc thông tin cho tiến trình mớiLPPROCESS_INFORMATION Thông tin về tiến trình mới
TerminateProcess(HANDLE hProcess, UINT uExitCode)hProcess Thẻ tiến trình bị kết thúc đóng
uExitCode Mã kết thúc tiến trình
WaitForSingleObject(HANDLE hHandle, DWORD dwMs)hHandle Thẻ đối tượngdwMs Thời gian chờ đợi (INFINITE )
30 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Một số hàm với tiến trình trong WIN32 API
CreateProcess(. . .)LPCTSTR Tên của chương trình được thực hiệnLPTSTR Tham số dòng lệnhLPSECURITY_ATTRIBUTES Thuộc tính an ninh t/trình
LPSECURITY_ATTRIBUTES Thuộc tính an ninh luồng
BOOL Cho phép kế thừa các thẻ thiết bị (TRUE/FALSE )DWORD Cờ tạo tiến trình (VD CREATE_NEW_CONSOLE )LPVOID Trỏ tới khối môi trườngLPCTSTR Đường dẫn đầy đủ đến chương trìnhLPSTARTUPINFO Cấu trúc thông tin cho tiến trình mớiLPPROCESS_INFORMATION Thông tin về tiến trình mới
TerminateProcess(HANDLE hProcess, UINT uExitCode)hProcess Thẻ tiến trình bị kết thúc đóng
uExitCode Mã kết thúc tiến trìnhWaitForSingleObject(HANDLE hHandle, DWORD dwMs)
hHandle Thẻ đối tượngdwMs Thời gian chờ đợi (INFINITE )
30 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.3 Thao tác trên tiến trình
Ví dụ
#include <windows.h>#include <stdio.h>int main(){
STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);
CreateProcess("Child.exe",NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);
WaitForSingleObject(pi.hProcess,10000);//INFINITE
TerminateProcess(pi.hProcess, 0);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return 0;
}
31 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
Project 1: Tiny shell
Giới thiệuThiết kế và cài đặt một shell đơn giản (myShell)
Mục đíchNghiên cứu các API quản lý tiến trình trong WindowsHiểu cách cài đặt và các thức shell làm việc
Nội dungShell nhận lệnh, phân tích và tạo tiến trình con thực hiện
foreground mode: Shell phải đợi tiến trình kết thúcbackground mode: Shell và tiến trình thực hiện song song
Shell chứa các câu lệnh quản lý tiến trìnhList: in ra DS tiến trình (process Id, Cmd name, status)Kill, Stop, Resume.. một background process
Shell hiểu một số lệnh đặc biệt (exit, help, date, time, dir,..)path/addpath : xem và đặt lại biến môi trường
Shell có thể nhận tín hiệu ngắt từ bàn phím để hủy bỏforeground process đang thực hiện (CRTL+C)Shell có thể thực hiện được file *.bat
32 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
Project 1: Tiny shell → Ví dụ
33 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.4 Hợp tác tiến trình
1 Tiến trìnhKhái niệm tiến trìnhĐiều phối tiến trình (Process Scheduling)Thao tác trên tiến trìnhHợp tác tiến trìnhTruyền thông liên tiến trình
34 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.4 Hợp tác tiến trình
Phân loại tiến trình
Các tiến trình tuần tựĐiểm bắt đầu của tiến trình này nằm sau điểm kết thúc củatiến trình kia
Các tiến trình song songĐiểm bắt đầu của tiến trình này nằm giữa điểm bắt đầu vàkết thúc của tiến trình kiaĐộc lập: Không ảnh hưởng tới hoặc bị ảnh hưởng bởi tiếntrình khác đang thực hiện trong hệ thống
Có hợp tác: Ảnh hưởng tới hoặc chịu ảnh hưởng bởi tiếntrình khác đang thực hiện trong hệ thốngHợp tác tiến trình nhằm
Chia sẻ thông tinTăng tốc độ tính toán:Module hóaTiện dụng
Hợp tác tiến trình đòi hỏi cơ chế cho phépTruyền thông giữa các tiến trìnhĐồng bộ hóa hoạt động của các tiến trình
35 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.4 Hợp tác tiến trình
Phân loại tiến trình
Các tiến trình tuần tựĐiểm bắt đầu của tiến trình này nằm sau điểm kết thúc củatiến trình kia
Các tiến trình song songĐiểm bắt đầu của tiến trình này nằm giữa điểm bắt đầu vàkết thúc của tiến trình kiaĐộc lập: Không ảnh hưởng tới hoặc bị ảnh hưởng bởi tiếntrình khác đang thực hiện trong hệ thống
Có hợp tác: Ảnh hưởng tới hoặc chịu ảnh hưởng bởi tiếntrình khác đang thực hiện trong hệ thốngHợp tác tiến trình nhằm
Chia sẻ thông tinTăng tốc độ tính toán:Module hóaTiện dụng
Hợp tác tiến trình đòi hỏi cơ chế cho phépTruyền thông giữa các tiến trìnhĐồng bộ hóa hoạt động của các tiến trình
35 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.4 Hợp tác tiến trình
Bài toán người sản xuất (producer)-người tiêu thụ(consumer) I
Hệ thống gồm 2 tiến trìnhProducer sản xuất ra các sản phẩmConsumer tiêu thụ các sản phẩm được sản xuất ra
Ứng dụngChương trình in (producer) sản xuất ra các ký tự được tiêuthụ bởi bộ điều khiển máy in (consumer)Trình dịch (producer) sản xuất ra mã hợp ngữ, trình hợp ngữ(consumer/producer) tiêu thụ mã hợp ngữ rồi sản xuất ramodule đối tượng được bộ thực hiện (consumer) tiêu thụ
36 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.4 Hợp tác tiến trình
Bài toán người sản xuất (producer)-người tiêu thụ(consumer) II
Producer và Consumer hoạt động đồng thời
Sử dụng vùng đệm dùng chung (Buffer) chứa sản phẩm đượcđiền vào bởi producer và được lấy ra bởi consumer
IN Vị trí trống kế tiếp trong vùng đệm;OUT Vị trí đầy đầu tiên trong vùng đệm.
Counter Số sản phẩm trong vùng đệm
Producer và Consumer phải đồng bộ
Consumer không cố gắng tiêu thụ một sản phẩm chưa đượcsản xuất
Vùng đệm dung lượng vô hạn
Khi Buffer rỗng, Consumer phải đợiProducer không phải đợi khi đặt sản phẩm vào buffer
Vùng đệm dung lượng hữu hạn
Khi Buffer rỗng, Consumer phải đợiProducer phải đợi nếu vùng đệm đầy
37 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.4 Hợp tác tiến trình
Bài toán người sản xuất (producer)-người tiêu thụ(consumer) III
Producer
while(1){/*produce an item in nextProduced*/while (Counter == BUFFER_SIZE) ; /*do nothing*/Buffer[IN] = nextProduced;IN = (IN + 1) % BUFFER_SIZE;Counter++;
}
Consumer
while(1){while(Counter == 0) ; /*do nothing*/nextConsumed = Buffer[OUT];OUT =(OUT + 1) % BUFFER_SIZE;Counter--;/*consume the item in nextConsumed*/
}
38 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
1 Tiến trìnhKhái niệm tiến trìnhĐiều phối tiến trình (Process Scheduling)Thao tác trên tiến trìnhHợp tác tiến trìnhTruyền thông liên tiến trình
39 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Trao đổi giữa các tiến trình
Dùng mô hình bộ nhớ phân chia
Các tiến trình chia sẻ vùng nhớ chínhMã cài đặt được viết tường minh bởi ngườilập trình ứng dụngVí dụ: Bài toán Producer-Consumer
Dùng mô hình truyền thông liên tiến trình(Interprocess communication)
Là cơ chế cho phép các tiến trình truyềnthông và đồng bộ các hoạt độngThường được sử dụng trong các hệ phântán khi các tiến trình truyền thông nằmtrên các máy khác nhau (chat)Đảm bảo bởi hệ thống truyền thông điệp
40 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Trao đổi giữa các tiến trình
Dùng mô hình bộ nhớ phân chia
Các tiến trình chia sẻ vùng nhớ chínhMã cài đặt được viết tường minh bởi ngườilập trình ứng dụngVí dụ: Bài toán Producer-Consumer
Dùng mô hình truyền thông liên tiến trình(Interprocess communication)
Là cơ chế cho phép các tiến trình truyềnthông và đồng bộ các hoạt độngThường được sử dụng trong các hệ phântán khi các tiến trình truyền thông nằmtrên các máy khác nhau (chat)Đảm bảo bởi hệ thống truyền thông điệp
40 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Hệ thống truyền thông điệp
Cho phép các tiến trình trao đổi với nhau không qua sử dụngcác biến phân chia
Yêu cầu 2 thao tác cơ bảnSend (msg) Các msg có kích thước cố định hoặc thay đổi
Cố định : dễ cài đặt mức hệ thống, nhiệm vụ lập trình khóThay đổi: cài đặt mức hệ thống phức tạp, lập trình đơn giản
Receive (msg)
Nếu 2 tiến trình P và Q muốn trao đổi, chúng cầnThiết lập một liên kết truyền thông (vật lý/logic) giữa chúngTrao đổi các messages nhờ các thao tác send/receive
Các vấn đề cài đặtCác liên kết được thiết lập như thế nào?Một liên kết có thể dùng cho nhiều hơn 2 tiến trình?Bao nhiêu liên kết có thể tồn tại giữa mọi cặp tiến trình?Kích thước thông báo mà liên kết chấp nhận cố định/thay đổi?Liên kết một hay hai chiều?
41 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Hệ thống truyền thông điệp
Cho phép các tiến trình trao đổi với nhau không qua sử dụngcác biến phân chia
Yêu cầu 2 thao tác cơ bảnSend (msg) Các msg có kích thước cố định hoặc thay đổi
Cố định : dễ cài đặt mức hệ thống, nhiệm vụ lập trình khóThay đổi: cài đặt mức hệ thống phức tạp, lập trình đơn giản
Receive (msg)
Nếu 2 tiến trình P và Q muốn trao đổi, chúng cầnThiết lập một liên kết truyền thông (vật lý/logic) giữa chúngTrao đổi các messages nhờ các thao tác send/receive
Các vấn đề cài đặtCác liên kết được thiết lập như thế nào?Một liên kết có thể dùng cho nhiều hơn 2 tiến trình?Bao nhiêu liên kết có thể tồn tại giữa mọi cặp tiến trình?Kích thước thông báo mà liên kết chấp nhận cố định/thay đổi?Liên kết một hay hai chiều?
41 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Truyền thông trực tiếp
Các tiến trình phải gọi tên tiến trình nhận/gửi một cách
tường minh
send (P, message) - gửi một thống báo tới tiến trình P
receive(Q, message) - Nhận một thông báo từ tiến trình Q
Tính chất của liên kết truyền thông
Các liên kết được thiết lập tự động
Một liên kết gắn chỉ với cặp tiến trình truyền thông
Chỉ tồn tại một liên kết giữa cặp tiến trình
Liên kết có thể là một chiều, nhưng thường hai chiều
42 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Truyền thông trực tiếp
Các tiến trình phải gọi tên tiến trình nhận/gửi một cách
tường minh
send (P, message) - gửi một thống báo tới tiến trình P
receive(Q, message) - Nhận một thông báo từ tiến trình Q
Tính chất của liên kết truyền thông
Các liên kết được thiết lập tự động
Một liên kết gắn chỉ với cặp tiến trình truyền thông
Chỉ tồn tại một liên kết giữa cặp tiến trình
Liên kết có thể là một chiều, nhưng thường hai chiều
42 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Truyền thông gián tiếp
Các thông điệp được gửi/nhận tới/từ các hòm thư
(mailboxes), cổng (ports)Mỗi hòm thư có định danh duy nhấtCác tiến trình có thể trao đổi nếu chúng dùng chung hòm thư
Tính chất các liên kếtCác liên kết được thiết lập chỉ khi các tiến trình dùng chunghòm thưMột liên kết có thể được gắn với nhiều tiến trìnhMỗi cặp tiến trình có thể dùng chung nhiều liên kết truyềnthôngLiên kết có thể một hay hai chiều
Các thao tácTạo hòm thưGửi/nhận thông báo qua hòm thư
send(A, msg): Gửi một msg tới hòm thư Areceive(A, msg): Nhận một msg từ hòm thư A
Hủy bỏ hòm thư
43 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Truyền thông gián tiếp
Các thông điệp được gửi/nhận tới/từ các hòm thư
(mailboxes), cổng (ports)Mỗi hòm thư có định danh duy nhấtCác tiến trình có thể trao đổi nếu chúng dùng chung hòm thư
Tính chất các liên kếtCác liên kết được thiết lập chỉ khi các tiến trình dùng chunghòm thưMột liên kết có thể được gắn với nhiều tiến trìnhMỗi cặp tiến trình có thể dùng chung nhiều liên kết truyềnthôngLiên kết có thể một hay hai chiều
Các thao tácTạo hòm thưGửi/nhận thông báo qua hòm thư
send(A, msg): Gửi một msg tới hòm thư Areceive(A, msg): Nhận một msg từ hòm thư A
Hủy bỏ hòm thư
43 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Truyền thông gián tiếp
Các thông điệp được gửi/nhận tới/từ các hòm thư
(mailboxes), cổng (ports)Mỗi hòm thư có định danh duy nhấtCác tiến trình có thể trao đổi nếu chúng dùng chung hòm thư
Tính chất các liên kếtCác liên kết được thiết lập chỉ khi các tiến trình dùng chunghòm thưMột liên kết có thể được gắn với nhiều tiến trìnhMỗi cặp tiến trình có thể dùng chung nhiều liên kết truyềnthôngLiên kết có thể một hay hai chiều
Các thao tácTạo hòm thưGửi/nhận thông báo qua hòm thư
send(A, msg): Gửi một msg tới hòm thư Areceive(A, msg): Nhận một msg từ hòm thư A
Hủy bỏ hòm thư
43 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Vấn đề đồng bộ hóa
Truyền thông điệp có thể phải chờ đợi (blocking), hoặc khôngchờ đợi (non blocking)
Blocking Truyền thông đồng bộNon-blocking Truyền thông không đồng bộ
Các thủ tục send() và receive() có thể bị chờ đợi hoặckhông chờ đợi
Blocking send Tiến trình gửi thông báo và đợi cho tới khimsg được nhận bởi tiến trình nhận hoặc bởi hòm thưNon blockking send Tiến trình gửi thông báo và tiếp tục làmviệcBlocking receive Tiến trình nhận phải đợi cho tới khi cóthông báoNon-blocking receive Tiến trình nhận trả về hoặc một thôngbáo có giá trị, hoặc một giá trị null
44 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Vùng đệm
Các thông điệp trao đổi giữa các tiến trình được lưu tronghàng đợi tạm thời
Hàng đợi có thể được cài đặt theoKhả năng chứa 0 (Zero capacity): Độ dài hàng đợi là 0
Không tồn tại thông điệp trong đường liên kết⇒ Sender phải đợi cho tới khi thông điệp được nhận
Khả năng chứa có giới hạn(Bound capacity)
Hàng đợi có độ dài n ⇒ chứa nhiều nhất n thông điệpNếu hàng đợi không đầy, thông điệp sẽ được lưu vào trongvùng đệm và Sender tiếp tục bình thườngNếu hàng đợi đầy, sender phải đợi cho tới khi có chỗ trống
Khả năng chứa không giới hạn (Unbound capacity)
Sender không bao giờ phải đợi
45 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Truyền thông trong hệ thống Client-Server
Socket
RPC (Remote Procedure Calls)
RMI (Remote Method Invocation) Cơ chếtruyền thông của Java
46 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Socket
Được xem như một đầu mút cho truyền thông
Bao gồm cặp địa chỉ IP và cổng: 161.25.19.8:1625
Truyền thông thực hiện giữa các cặp SocketsWin32API: Winsock
47 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Socket
Được xem như một đầu mút cho truyền thôngBao gồm cặp địa chỉ IP và cổng: 161.25.19.8:1625
Truyền thông thực hiện giữa các cặp SocketsWin32API: Winsock
47 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Socket
Được xem như một đầu mút cho truyền thôngBao gồm cặp địa chỉ IP và cổng: 161.25.19.8:1625
Truyền thông thực hiện giữa các cặp Sockets
Win32API: Winsock
47 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Socket
Được xem như một đầu mút cho truyền thôngBao gồm cặp địa chỉ IP và cổng: 161.25.19.8:1625
Truyền thông thực hiện giữa các cặp SocketsWin32API: Winsock
47 / 217
Chương 2: Quản lý tiến trình
1. Tiến trình
1.5 Truyền thông liên tiến trình
Bài tập
Tìm hiểu các phương pháp truyền thôngClient-Server
Viết chương trình giải quyết bài toánProducer-Consumer
48 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
Nội dung chính
1 Tiến trình
2 Luồng (Thread)
3 Điều phối CPU
4 Tài nguyên găng và điều độ tiến trình
5 Bế tắc và xử lý bế tắc
49 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
2 Luồng (Thread)Giới thiệuMô hình đa luồngCài đặt luồng với WindowsVấn đề đa luồng
50 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Vector
Tính toán trên vector kích thước lớn
for(k = 0; k < n; k ++){a[k] = b[k] ∗ c[k];
}
Với hệ thống nhiều vi xử lý
51 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Vector
Tính toán trên vector kích thước lớn
for(k = 0; k < n; k ++){a[k] = b[k] ∗ c[k];
}
Với hệ thống nhiều vi xử lý
51 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Chat
Process Q
while(1){Receive(P,Msg);PrintLine(Msg);ReadLine(Msg);Send(P,Msg);
}
Vấn đề nhận Msg
IBlocking ReceiveINon-blocking Receive
Giải quyết
Thực hiện song songReceive & Send
Process P
while(1){ReadLine(Msg);Send(Q,Msg);Receive(Q,Msg);PrintLine(Msg);
}
52 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Chat
Process Q
while(1){Receive(P,Msg);PrintLine(Msg);ReadLine(Msg);Send(P,Msg);
}
Vấn đề nhận Msg
IBlocking ReceiveINon-blocking Receive
Giải quyết
Thực hiện song songReceive & Send
Process P
while(1){ReadLine(Msg);Send(Q,Msg);Receive(Q,Msg);PrintLine(Msg);
}
52 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Chat
Process Q
while(1){Receive(P,Msg);PrintLine(Msg);ReadLine(Msg);Send(P,Msg);
}
Vấn đề nhận Msg
IBlocking ReceiveINon-blocking Receive
Giải quyết
Thực hiện song songReceive & Send
Process P
while(1){ReadLine(Msg);Send(Q,Msg);Receive(Q,Msg);PrintLine(Msg);
}
52 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Chat
Process Q
while(1){Receive(P,Msg);PrintLine(Msg);ReadLine(Msg);Send(P,Msg);
}
Vấn đề nhận Msg
IBlocking ReceiveINon-blocking Receive
Giải quyết
Thực hiện song songReceive & Send
Process P
while(1){ReadLine(Msg);Send(Q,Msg);Receive(Q,Msg);PrintLine(Msg);
}
52 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Chat
Process Q
while(1){Receive(P,Msg);PrintLine(Msg);ReadLine(Msg);Send(P,Msg);
}
Vấn đề nhận Msg
IBlocking ReceiveINon-blocking Receive
Giải quyết
Thực hiện song songReceive & Send
Process P
while(1){ReadLine(Msg);Send(Q,Msg);Receive(Q,Msg);PrintLine(Msg);
}
52 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Chương trình - Tiến trình - Luồng
Chương trình: Dãy lệnh, các biến,..Tiến trình: Chương trình đang thực hiện: Stack, t/bị, VXL,..
Luồng: C/trình đang thực hiện trong ngữ cảnh tiến trìnhNhiều processor → Nhiều luồng, mỗi luồng trên một VXL
Khác nhau về giá trị các thanh ghi, nội dung stack53 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình đơn luồng và đa luồng
Hệ điều hành truyền thống (MS-DOS, UNIX)
Tiến trình có một luồng điều khiển (heavyweight process)
Hệ điều hành hiện nay (Windows, Linux)
Tiến trình có thể gồm nhiều luồngCó thể thực hiện nhiều nhiệm vụ tại một thời điểm
54 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình đơn luồng và đa luồng
Hệ điều hành truyền thống (MS-DOS, UNIX)
Tiến trình có một luồng điều khiển (heavyweight process)
Hệ điều hành hiện nay (Windows, Linux)
Tiến trình có thể gồm nhiều luồngCó thể thực hiện nhiều nhiệm vụ tại một thời điểm
54 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Ví dụ: Word processor (Tanenbaum 2001)
55 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Khái niệm luồng
Là đơn vị sử dụng CPU cơ bản, gồm
Định danh luồng (ID Thread)Bộ đếm chương trình (Program Computer)Tập các thanh ghi (Rigisters)Không gian stack
Chia sẻ cùng các luồng khác trong cùng một tiến trình
Đoạn mã lệnhĐoạn dữ liệu (đối tượng toàn cục)Các tài nguyên hệ điều hành khác (file đang mở )
Các luồng có thể thực hiện cùng đoạn mã với ngữ cảnh (Tậpthanh ghi, Bộ đếm chương trình, stack) khác nhau
Còn được gọi là tiến trình nhẹ (LWP: Lightweight Process)
Một tiến trình có ít nhất là một luồng
56 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Khái niệm luồng
Là đơn vị sử dụng CPU cơ bản, gồm
Định danh luồng (ID Thread)Bộ đếm chương trình (Program Computer)Tập các thanh ghi (Rigisters)Không gian stack
Chia sẻ cùng các luồng khác trong cùng một tiến trình
Đoạn mã lệnhĐoạn dữ liệu (đối tượng toàn cục)Các tài nguyên hệ điều hành khác (file đang mở )
Các luồng có thể thực hiện cùng đoạn mã với ngữ cảnh (Tậpthanh ghi, Bộ đếm chương trình, stack) khác nhau
Còn được gọi là tiến trình nhẹ (LWP: Lightweight Process)
Một tiến trình có ít nhất là một luồng
56 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Khái niệm luồng
Là đơn vị sử dụng CPU cơ bản, gồm
Định danh luồng (ID Thread)Bộ đếm chương trình (Program Computer)Tập các thanh ghi (Rigisters)Không gian stack
Chia sẻ cùng các luồng khác trong cùng một tiến trình
Đoạn mã lệnhĐoạn dữ liệu (đối tượng toàn cục)Các tài nguyên hệ điều hành khác (file đang mở )
Các luồng có thể thực hiện cùng đoạn mã với ngữ cảnh (Tậpthanh ghi, Bộ đếm chương trình, stack) khác nhau
Còn được gọi là tiến trình nhẹ (LWP: Lightweight Process)
Một tiến trình có ít nhất là một luồng
56 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Khái niệm luồng
Là đơn vị sử dụng CPU cơ bản, gồm
Định danh luồng (ID Thread)Bộ đếm chương trình (Program Computer)Tập các thanh ghi (Rigisters)Không gian stack
Chia sẻ cùng các luồng khác trong cùng một tiến trình
Đoạn mã lệnhĐoạn dữ liệu (đối tượng toàn cục)Các tài nguyên hệ điều hành khác (file đang mở )
Các luồng có thể thực hiện cùng đoạn mã với ngữ cảnh (Tậpthanh ghi, Bộ đếm chương trình, stack) khác nhau
Còn được gọi là tiến trình nhẹ (LWP: Lightweight Process)
Một tiến trình có ít nhất là một luồng
56 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Khái niệm luồng
Là đơn vị sử dụng CPU cơ bản, gồm
Định danh luồng (ID Thread)Bộ đếm chương trình (Program Computer)Tập các thanh ghi (Rigisters)Không gian stack
Chia sẻ cùng các luồng khác trong cùng một tiến trình
Đoạn mã lệnhĐoạn dữ liệu (đối tượng toàn cục)Các tài nguyên hệ điều hành khác (file đang mở )
Các luồng có thể thực hiện cùng đoạn mã với ngữ cảnh (Tậpthanh ghi, Bộ đếm chương trình, stack) khác nhau
Còn được gọi là tiến trình nhẹ (LWP: Lightweight Process)
Một tiến trình có ít nhất là một luồng
56 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình >< Luồng
Tiến trình
Tiến trình có đoạn mã/dữliệu/heap & các đoạn khác
Phải có ít nhất một luồng trongmỗi tiến trình
Các luồng trong phạm vi một tiếntrình chia sẻ mã/dữ liệu/heap,vào/ra nhưng có stack và tậpthanh ghi riêng
Thao tác khởi tạo, luân chuyểntiến trình tốn kém
Bảo vệ tốt do có không gian điạchỉ riêng
Khi tiến trình kết thúc, các tàinguyên được đòi lại và các luồngphải kết thúc theo
Luồng
Luồng không có đoạn dữ liệu hayheap riêng
Luồng không đứng riêng mà nằmtrong một tiến trình
Có thể tồn tại nhiều luồng trongmỗi tiến trình. Luồng đầu là luồngchính và sở hữu không gian stackcủa tiến trình
Thao tác khởi tạo và luân chuyểnluồng không tốn kém
Không gian điạ chỉ chung, cầnphải bảo vệ
Luồng kết thúc, stack của nó đượcthu hồi
57 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình >< Luồng
Tiến trình
Tiến trình có đoạn mã/dữliệu/heap & các đoạn khác
Phải có ít nhất một luồng trongmỗi tiến trình
Các luồng trong phạm vi một tiếntrình chia sẻ mã/dữ liệu/heap,vào/ra nhưng có stack và tậpthanh ghi riêng
Thao tác khởi tạo, luân chuyểntiến trình tốn kém
Bảo vệ tốt do có không gian điạchỉ riêng
Khi tiến trình kết thúc, các tàinguyên được đòi lại và các luồngphải kết thúc theo
Luồng
Luồng không có đoạn dữ liệu hayheap riêng
Luồng không đứng riêng mà nằmtrong một tiến trình
Có thể tồn tại nhiều luồng trongmỗi tiến trình. Luồng đầu là luồngchính và sở hữu không gian stackcủa tiến trình
Thao tác khởi tạo và luân chuyểnluồng không tốn kém
Không gian điạ chỉ chung, cầnphải bảo vệ
Luồng kết thúc, stack của nó đượcthu hồi
57 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình >< Luồng
Tiến trình
Tiến trình có đoạn mã/dữliệu/heap & các đoạn khác
Phải có ít nhất một luồng trongmỗi tiến trình
Các luồng trong phạm vi một tiếntrình chia sẻ mã/dữ liệu/heap,vào/ra nhưng có stack và tậpthanh ghi riêng
Thao tác khởi tạo, luân chuyểntiến trình tốn kém
Bảo vệ tốt do có không gian điạchỉ riêng
Khi tiến trình kết thúc, các tàinguyên được đòi lại và các luồngphải kết thúc theo
Luồng
Luồng không có đoạn dữ liệu hayheap riêng
Luồng không đứng riêng mà nằmtrong một tiến trình
Có thể tồn tại nhiều luồng trongmỗi tiến trình. Luồng đầu là luồngchính và sở hữu không gian stackcủa tiến trình
Thao tác khởi tạo và luân chuyểnluồng không tốn kém
Không gian điạ chỉ chung, cầnphải bảo vệ
Luồng kết thúc, stack của nó đượcthu hồi
57 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình >< Luồng
Tiến trình
Tiến trình có đoạn mã/dữliệu/heap & các đoạn khác
Phải có ít nhất một luồng trongmỗi tiến trình
Các luồng trong phạm vi một tiếntrình chia sẻ mã/dữ liệu/heap,vào/ra nhưng có stack và tậpthanh ghi riêng
Thao tác khởi tạo, luân chuyểntiến trình tốn kém
Bảo vệ tốt do có không gian điạchỉ riêng
Khi tiến trình kết thúc, các tàinguyên được đòi lại và các luồngphải kết thúc theo
Luồng
Luồng không có đoạn dữ liệu hayheap riêng
Luồng không đứng riêng mà nằmtrong một tiến trình
Có thể tồn tại nhiều luồng trongmỗi tiến trình. Luồng đầu là luồngchính và sở hữu không gian stackcủa tiến trình
Thao tác khởi tạo và luân chuyểnluồng không tốn kém
Không gian điạ chỉ chung, cầnphải bảo vệ
Luồng kết thúc, stack của nó đượcthu hồi
57 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình >< Luồng
Tiến trình
Tiến trình có đoạn mã/dữliệu/heap & các đoạn khác
Phải có ít nhất một luồng trongmỗi tiến trình
Các luồng trong phạm vi một tiếntrình chia sẻ mã/dữ liệu/heap,vào/ra nhưng có stack và tậpthanh ghi riêng
Thao tác khởi tạo, luân chuyểntiến trình tốn kém
Bảo vệ tốt do có không gian điạchỉ riêng
Khi tiến trình kết thúc, các tàinguyên được đòi lại và các luồngphải kết thúc theo
Luồng
Luồng không có đoạn dữ liệu hayheap riêng
Luồng không đứng riêng mà nằmtrong một tiến trình
Có thể tồn tại nhiều luồng trongmỗi tiến trình. Luồng đầu là luồngchính và sở hữu không gian stackcủa tiến trình
Thao tác khởi tạo và luân chuyểnluồng không tốn kém
Không gian điạ chỉ chung, cầnphải bảo vệ
Luồng kết thúc, stack của nó đượcthu hồi
57 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Tiến trình >< Luồng
Tiến trình
Tiến trình có đoạn mã/dữliệu/heap & các đoạn khác
Phải có ít nhất một luồng trongmỗi tiến trình
Các luồng trong phạm vi một tiếntrình chia sẻ mã/dữ liệu/heap,vào/ra nhưng có stack và tậpthanh ghi riêng
Thao tác khởi tạo, luân chuyểntiến trình tốn kém
Bảo vệ tốt do có không gian điạchỉ riêng
Khi tiến trình kết thúc, các tàinguyên được đòi lại và các luồngphải kết thúc theo
Luồng
Luồng không có đoạn dữ liệu hayheap riêng
Luồng không đứng riêng mà nằmtrong một tiến trình
Có thể tồn tại nhiều luồng trongmỗi tiến trình. Luồng đầu là luồngchính và sở hữu không gian stackcủa tiến trình
Thao tác khởi tạo và luân chuyểnluồng không tốn kém
Không gian điạ chỉ chung, cầnphải bảo vệ
Luồng kết thúc, stack của nó đượcthu hồi
57 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Lợi ích của lập trình đa luồng
Tăng tính đáp ứng với người dùngCho phép chương trình vẫn thực hiện ngay khi một phần đangchờ đợi (block) hoặc đang thực hiện tính toán tăng cường
Ví dụ trình duyệt Web (Web browser) đa luồngMột luồng tương tác với người dùngMột luồng thực hiện nhiệm vụ tải dữ liệu
Chia sẻ tài nguyênCác luồng chia sẻ bộ nhớ và tài nguyên của tiến trình chứa nó
Tốt cho các thuật toán song song (sử dụng chung các CTDL)Trao đổi giữa các luồng thông qua bộ nhớ phân chia
Cho phép một ứng dụng chứa nhiều luồng hoạt động trongcùng không gian địa chỉ
Tính kinh tếCác thao tác khởi tạo, hủy bỏ và luân chuyển luồng ít tốn kém
Minh họa được tính song song trên bộ đơn VXL do thời gianluân chuyển CPU nhanh (Thực tế chỉ một luồng thực hiện)
Sử dụng kiến trúc nhiều vi xử lýCác luồng chạy song song thực sự trên các bộ VXL khác nhau.
58 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Lợi ích của lập trình đa luồng
Tăng tính đáp ứng với người dùngCho phép chương trình vẫn thực hiện ngay khi một phần đangchờ đợi (block) hoặc đang thực hiện tính toán tăng cường
Ví dụ trình duyệt Web (Web browser) đa luồngMột luồng tương tác với người dùngMột luồng thực hiện nhiệm vụ tải dữ liệu
Chia sẻ tài nguyênCác luồng chia sẻ bộ nhớ và tài nguyên của tiến trình chứa nó
Tốt cho các thuật toán song song (sử dụng chung các CTDL)Trao đổi giữa các luồng thông qua bộ nhớ phân chia
Cho phép một ứng dụng chứa nhiều luồng hoạt động trongcùng không gian địa chỉ
Tính kinh tếCác thao tác khởi tạo, hủy bỏ và luân chuyển luồng ít tốn kém
Minh họa được tính song song trên bộ đơn VXL do thời gianluân chuyển CPU nhanh (Thực tế chỉ một luồng thực hiện)
Sử dụng kiến trúc nhiều vi xử lýCác luồng chạy song song thực sự trên các bộ VXL khác nhau.
58 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Lợi ích của lập trình đa luồng
Tăng tính đáp ứng với người dùngCho phép chương trình vẫn thực hiện ngay khi một phần đangchờ đợi (block) hoặc đang thực hiện tính toán tăng cường
Ví dụ trình duyệt Web (Web browser) đa luồngMột luồng tương tác với người dùngMột luồng thực hiện nhiệm vụ tải dữ liệu
Chia sẻ tài nguyênCác luồng chia sẻ bộ nhớ và tài nguyên của tiến trình chứa nó
Tốt cho các thuật toán song song (sử dụng chung các CTDL)Trao đổi giữa các luồng thông qua bộ nhớ phân chia
Cho phép một ứng dụng chứa nhiều luồng hoạt động trongcùng không gian địa chỉ
Tính kinh tếCác thao tác khởi tạo, hủy bỏ và luân chuyển luồng ít tốn kém
Minh họa được tính song song trên bộ đơn VXL do thời gianluân chuyển CPU nhanh (Thực tế chỉ một luồng thực hiện)
Sử dụng kiến trúc nhiều vi xử lýCác luồng chạy song song thực sự trên các bộ VXL khác nhau.
58 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Lợi ích của lập trình đa luồng
Tăng tính đáp ứng với người dùngCho phép chương trình vẫn thực hiện ngay khi một phần đangchờ đợi (block) hoặc đang thực hiện tính toán tăng cường
Ví dụ trình duyệt Web (Web browser) đa luồngMột luồng tương tác với người dùngMột luồng thực hiện nhiệm vụ tải dữ liệu
Chia sẻ tài nguyênCác luồng chia sẻ bộ nhớ và tài nguyên của tiến trình chứa nó
Tốt cho các thuật toán song song (sử dụng chung các CTDL)Trao đổi giữa các luồng thông qua bộ nhớ phân chia
Cho phép một ứng dụng chứa nhiều luồng hoạt động trongcùng không gian địa chỉ
Tính kinh tếCác thao tác khởi tạo, hủy bỏ và luân chuyển luồng ít tốn kém
Minh họa được tính song song trên bộ đơn VXL do thời gianluân chuyển CPU nhanh (Thực tế chỉ một luồng thực hiện)
Sử dụng kiến trúc nhiều vi xử lýCác luồng chạy song song thực sự trên các bộ VXL khác nhau.
58 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Lợi ích của lập trình đa luồng → Ví dụ
Tính toán trên vector
for(k = 0; k < n; k ++){a[k] = b[k] ∗ c[k];
}
Mô hình đa luồng
void fn(a,b)for(k = a; k < b; k ++){
a[k] = b[k] ∗ c[k];}
void main(){CreateThread(fn(0, n/4));CreateThread(fn(n/4, n/2));CreateThread(fn(n/2, 3n/4));CreateThread(fn(3n/4, n));}
Câu hỏi
Tạo 4 tiến trình-CreateProcess() thay cho 4 luồng-CreateThread()
59 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Lợi ích của lập trình đa luồng → Ví dụ
Tính toán trên vector
for(k = 0; k < n; k ++){a[k] = b[k] ∗ c[k];
}
Mô hình đa luồng
void fn(a,b)for(k = a; k < b; k ++){
a[k] = b[k] ∗ c[k];}
void main(){CreateThread(fn(0, n/4));CreateThread(fn(n/4, n/2));CreateThread(fn(n/2, 3n/4));CreateThread(fn(3n/4, n));}
Câu hỏi
Tạo 4 tiến trình-CreateProcess() thay cho 4 luồng-CreateThread()
59 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Cài đặt luồng
Cài đặt trong không gian người dùng
Cài đặt trong không gian nhân
60 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Cài đặt luồng
Cài đặt trong không gian người dùng
Cài đặt trong không gian nhân
60 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Luồng người dùng (User -Level Threads)
Quản lý các luồng được thực hiện bởi chương trình ứng dụng
Nhân hệ thống không biết gì về sự tồn tại luồngĐiều phối tiến trình như một đơn vị duy nhấtGán cho mỗi tiến trình một trạng thái duy nhất
Sẵn sàng, chờ đợi, thực hiện,..
Chương trình ứng dụng được lập trình theo mô hình đa luồngbởi sử dụng thư viện luồng
Thư viện hỗ trợ tạo, hủy bỏ, truyền thông điệp giữa các luồng,điều phối, lưu trữ, khôi phục trạng thái (context) luồng ,..
Ưu điểmNhanh chóng trong tạo và quản lý luồng
Nhược điểmKhi một luồng rơi vào trạng thái chờ đợi, tất cả các luồngtrong cùng tiến trình bị chờ đợi theo ⇒Không tận dụng đượcưu điểm của mô hình lập trình đa luồng
61 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.1 Giới thiệu
Luồng mức hệ thống (Kernel - Level threads)
Nhân duy trì thông tin về tiến trình và các luồng
Quản lý luồng được thực hiện bởi nhân
Không tồn tại các mã quản lý luồng trong ứng dụngĐiều phối luồng được thực hiện bởi nhân, dựa trên các luồng
Nhược điểm:
Chậm trong tạo và quản lý luồng
Ưu điểm:
Một luồng chờ đợi vào ra, không ảnh hưởng tới luồng khácTrong môi trường đa VXL, nhân có thể điều phối các luồngcho các VXL khác nhau
Hệ điều hành: Windows NT/2000/XP, Linux, OS/2,..
62 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.2 Mô hình đa luồng
2 Luồng (Thread)Giới thiệuMô hình đa luồngCài đặt luồng với WindowsVấn đề đa luồng
63 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.2 Mô hình đa luồng
Giới thiệu
Nhiều hệ thống hỗ trợ cả luồng mức người dùng và luồng mức hệthống ⇒ Nhiều mô hình đa luồng khác nhau
64 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.2 Mô hình đa luồng
Mô hình nhiều-một
Ánh xạ nhiều luồng mức người dùngtới một luồng mức hệ thống
Quản lý luồng được thực hiện trongkhông gian người dùng
Hiệu quảCho phép tạo nhiều luồng tùy ýToàn bộ tiến trình sẽ bị khóa nếumột luồng bị khóa
Không thể chạy song song trên cácmáy nhiều vi xử lý (Chỉ một luồng cóthể truy nhập nhân tại một thời điểm)
Dùng trong hệ điều hành không hỗ trợluồng hệ thống
65 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.2 Mô hình đa luồng
Mô hình một-một
Ánh xạ mỗi luồng mức người dùng tới một luồng hệ thốngCho phép thực hiện luồng khác khi một luồng bị chờ đợiCho phép chạy song song đa luồng trên máy nhiều vi xử lý
Tạo luồng mức người dùng đòi hỏi tạo một luồng mức hệthống tương ứng
Ảnh hướng tới hiệu năng của ứng dụngChi phi cao ⇒ Giới hạn số luồng được hệ thống hỗ trợ
Được sử dụng trong Window NT/2000/XP66 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.2 Mô hình đa luồng
Mô hình nhiều-nhiều
Nhiều luồng mức người dùng ánh xạtới một số nhỏ luồng mức hệ thống
Số lượng luồng nhân có thể được xácđịnh theo máy hoặc theo ứng dụng
VD: Được cấp nhiều luồng nhân hơntrên hệ thống nhiều VXL
Có được ưu điểm của 2 mô hình trên
Cho phép tạo nhiều luồng mức ứngdụng theo yêu cầuCác luồng nhân tương ứng có thểchạy song song trên hệ nhiều VXLMột luồng bị khóa, nhân có thể chophép luồng khác thực hiện
Ví dụ: UNIX
67 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.3 Cài đặt luồng với Windows
2 Luồng (Thread)Giới thiệuMô hình đa luồngCài đặt luồng với WindowsVấn đề đa luồng
68 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.3 Cài đặt luồng với Windows
Một số hàm với luồng trong WIN32 API
HANDLE CreateThread(. . .);LPSECURITY_ATTRIBUTESlpThreadAttributes,
⇒Trỏ tới cấu trúc an ninh: thẻ trả về có thể được kế thừa?DWORD dwStackSize,⇒Kích thước ban đầu của stack cho luồng mớiLPTHREAD_START_ROUTINE lpStartAddress,
⇒Trỏ tới hàm được thực hiện bởi luồng mớiLPVOID lpParameter,⇒Trỏ tới các biến được gửi tới luồng mới (tham số của hàm)DWORD dwCreationFlags,⇒Phương pháp tạo luồng
CREATE_SUSPENDED : Luồng ở trạng thái tạm ngừng0: Luồng được thực hiện ngay lập tức
LPDWORD lpThreadId⇒Biến ghi nhận định danh luồng mới
Kết quả trả về: Thẻ của luồng mới hoặc giá trị NULL nếukhông tạo được luồng mới
69 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.3 Cài đặt luồng với Windows
Ví dụ
#include <windows.h>#include <stdio.h>void Routine(int *n){
printf("My argument is %d\n", &n);}int main(){
int i, P[5]; DWORD Id;HANDLE hHandles[5];for (i=0;i < 5;i++) {
P[i] = i;hHandles[i] = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)Routine,&P[i],0,&Id);printf("Thread %d was created\n",Id);
}for (i=0;i < 5;i++)
WaitForSingleObject(hHandles[i],INFINITE);return 0;
}70 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.3 Cài đặt luồng với Windows
Java Threads
Được cài đặt bởiMở rộng lớp Thread (Thread class)Cài đặt giao diện có thể thực thi được (Runnable interface)
Được quản lý bởi máy ảo Java (Java Virtual Machine)
Các trạng thái có thể
Tồn tại một phương thức run(), sẽ được thực hiện trên JVM
Luồng được thực hiện bởi gọi phương thức start()Cung cấp vùng nhớ và khởi tạo luồng mới trong máy ảo JavaGọi tới phương thức run()
71 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.3 Cài đặt luồng với Windows
Ví dụ
class Sum extends Thread{int low, up, S;public Sum(int a, int b){
low = a; up = b; S= 0;System.out.println("This is Thread "+this.getId());
}public void run(){for(int i= low; i < up; i ++) S+= i;
System.out.println(this.getId()+ " : " + S);}
}public class Tester {
public static void main(String[] args) {Sum T1 = new Sum(1,100); T1.start();Sum T2 = new Sum(10,200); T2.start();System.out.println("Main process terminated");
}}
72 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
2 Luồng (Thread)Giới thiệuMô hình đa luồngCài đặt luồng với WindowsVấn đề đa luồng
73 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Ví dụ
#include <windows.h>#include <stdio.h>int x = 0, y = 1;void T1(){
while(1){ x = y + 1; printf("%4d", x); }}void T2(){
while(1){ y = 2; y = y * 2; }}
int main(){HANDLE h1, h2; DWORD Id;h1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)T1,NULL,0,&Id);h2=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)T2,NULL,0,&Id);WaitForSingleObject(h1,INFINITE);WaitForSingleObject(h2,INFINITE);return 0;}
74 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Kết quả thực hiện
75 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Giải thích
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
76 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Giải thích
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
76 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Giải thích
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
76 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Giải thích
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
76 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
2.4 Vấn đề đa luồng
Giải thích
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
76 / 217
Chương 2: Quản lý tiến trình
2. Luồng (Thread)
Bài tập
Cài đặt bài toán Producer-Consumer sửdụng khái niệm luồng
Viết chương trình trao đổi thông báo giữa2 máy (chat)
77 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
Nội dung chính
1 Tiến trình
2 Luồng (Thread)
3 Điều phối CPU
4 Tài nguyên găng và điều độ tiến trình
5 Bế tắc và xử lý bế tắc
78 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
3 Điều phối CPU
Các khái niệm cơ bản
Tiêu chuẩn điều phối
Các thuật toán điều phối CPU
Điều phối đa xử lý
79 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Giới thiệu
Hệ thống có một processor → Chỉ có một tiến trình được
thực hiện tại một thời điểm
Tiến trình được thực hiện (chiếm dụng VXL) cho tới khi phải
chờ đợi một thao tác vào ra
Hệ đơn chương trình: CPU không được sử dụng ⇒Lãng phí
Hệ đa chương trình: cố gắng sử dụng CPU (đang rảnh rỗi)
cho các tiến trình khác (đang chờ đợi)
Cần nhiều tiến trình sẵn sàng trong bộ nhớ tại một thời điểm
Khi một tiến trình phải chờ, hệ điều hành lấy lại processor để
phân cho tiến trình khác
Điều phối processor quan trong với hệ điều hành đa nhiệm
Luân chuyển CPU giữa các tiến trình → khai thác hệ thống
hiệu quả hơn
Điều phối processor là nền tảng trong thiết kế hệ điều hành
80 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Giới thiệu
Hệ thống có một processor → Chỉ có một tiến trình được
thực hiện tại một thời điểm
Tiến trình được thực hiện (chiếm dụng VXL) cho tới khi phải
chờ đợi một thao tác vào ra
Hệ đơn chương trình: CPU không được sử dụng ⇒Lãng phí
Hệ đa chương trình: cố gắng sử dụng CPU (đang rảnh rỗi)
cho các tiến trình khác (đang chờ đợi)
Cần nhiều tiến trình sẵn sàng trong bộ nhớ tại một thời điểm
Khi một tiến trình phải chờ, hệ điều hành lấy lại processor để
phân cho tiến trình khác
Điều phối processor quan trong với hệ điều hành đa nhiệm
Luân chuyển CPU giữa các tiến trình → khai thác hệ thống
hiệu quả hơn
Điều phối processor là nền tảng trong thiết kế hệ điều hành
80 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Giới thiệu
Hệ thống có một processor → Chỉ có một tiến trình được
thực hiện tại một thời điểm
Tiến trình được thực hiện (chiếm dụng VXL) cho tới khi phải
chờ đợi một thao tác vào ra
Hệ đơn chương trình: CPU không được sử dụng ⇒Lãng phí
Hệ đa chương trình: cố gắng sử dụng CPU (đang rảnh rỗi)
cho các tiến trình khác (đang chờ đợi)
Cần nhiều tiến trình sẵn sàng trong bộ nhớ tại một thời điểm
Khi một tiến trình phải chờ, hệ điều hành lấy lại processor để
phân cho tiến trình khác
Điều phối processor quan trong với hệ điều hành đa nhiệm
Luân chuyển CPU giữa các tiến trình → khai thác hệ thống
hiệu quả hơn
Điều phối processor là nền tảng trong thiết kế hệ điều hành
80 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Giới thiệu
Hệ thống có một processor → Chỉ có một tiến trình được
thực hiện tại một thời điểm
Tiến trình được thực hiện (chiếm dụng VXL) cho tới khi phải
chờ đợi một thao tác vào ra
Hệ đơn chương trình: CPU không được sử dụng ⇒Lãng phí
Hệ đa chương trình: cố gắng sử dụng CPU (đang rảnh rỗi)
cho các tiến trình khác (đang chờ đợi)
Cần nhiều tiến trình sẵn sàng trong bộ nhớ tại một thời điểm
Khi một tiến trình phải chờ, hệ điều hành lấy lại processor để
phân cho tiến trình khác
Điều phối processor quan trong với hệ điều hành đa nhiệm
Luân chuyển CPU giữa các tiến trình → khai thác hệ thống
hiệu quả hơn
Điều phối processor là nền tảng trong thiết kế hệ điều hành
80 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Chu kỳ thực hiện CPU - I/O
Tiến trình là chuỗi luân phiên giữa chukỳ tính toán và chờ đợi vào/ra
Bắt đầu bởi chu kỳ tính toánTiếp theo chu kỳ đợi vào/raTính toán→ đợi vào/ra → tính toán→ đợi vào/ra → . . .Kết thúc: Tính toán (yêu cầu hệthống kết thúc thực hiện)
Phân biệt các kiểu tiến trìnhDựa trên sự phân bổ thời gian chocác chu kỳ CPU & vào/ra
Tiến trình tính toán (CPU-boundprocess) có vài chu kỳ CPU dàiTiến trình vào ra (I/0-boundprocess) có nhiều chu kỳ CPU ngắn
Để chọn giải thuật điều phối thích hợp
81 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Chu kỳ thực hiện CPU - I/O
Tiến trình là chuỗi luân phiên giữa chukỳ tính toán và chờ đợi vào/ra
Bắt đầu bởi chu kỳ tính toánTiếp theo chu kỳ đợi vào/raTính toán→ đợi vào/ra → tính toán→ đợi vào/ra → . . .Kết thúc: Tính toán (yêu cầu hệthống kết thúc thực hiện)
Phân biệt các kiểu tiến trìnhDựa trên sự phân bổ thời gian chocác chu kỳ CPU & vào/ra
Tiến trình tính toán (CPU-boundprocess) có vài chu kỳ CPU dàiTiến trình vào ra (I/0-boundprocess) có nhiều chu kỳ CPU ngắn
Để chọn giải thuật điều phối thích hợp
81 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Bộ điều phối CPU
Lựa chọn một trong số các tiến trình đang sẵn sàng trong bộnhớ và cung cấp CPU cho nó
Các tiến trình phải sắp hàng trong hàng đợiHàng đợi FIFO, Hàng đợi ưu tiên, DSLK đơn giản . . .
Quyết định điều phối CPU xảy ra khi tiến trình1 Chuyển từ trạng thái thực hiện sang trạng thái chờ đợi (y/c
vào/ra)2 Chuyển từ trạng thái thực hiện sang trạng thái sẵn sàng (hết
thời gian sử dụng CPU → ngắt thời gian)3 Chuyển từ trạng thái chờ đợi sang trạng thái sẵn sàng (hoàn
thành vào/ra)4 Tiến trình kết thúc
Ghi chúTrường hợp 1&4⇒Điều phối không trưng dụng (non-preemptive)
Trường hợp khác⇒Điều phối trưng dụng (preemptive)
82 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Bộ điều phối CPU
Lựa chọn một trong số các tiến trình đang sẵn sàng trong bộnhớ và cung cấp CPU cho nó
Các tiến trình phải sắp hàng trong hàng đợiHàng đợi FIFO, Hàng đợi ưu tiên, DSLK đơn giản . . .
Quyết định điều phối CPU xảy ra khi tiến trình1 Chuyển từ trạng thái thực hiện sang trạng thái chờ đợi (y/c
vào/ra)2 Chuyển từ trạng thái thực hiện sang trạng thái sẵn sàng (hết
thời gian sử dụng CPU → ngắt thời gian)3 Chuyển từ trạng thái chờ đợi sang trạng thái sẵn sàng (hoàn
thành vào/ra)4 Tiến trình kết thúc
Ghi chúTrường hợp 1&4⇒Điều phối không trưng dụng (non-preemptive)
Trường hợp khác⇒Điều phối trưng dụng (preemptive)
82 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Bộ điều phối CPU
Lựa chọn một trong số các tiến trình đang sẵn sàng trong bộnhớ và cung cấp CPU cho nó
Các tiến trình phải sắp hàng trong hàng đợiHàng đợi FIFO, Hàng đợi ưu tiên, DSLK đơn giản . . .
Quyết định điều phối CPU xảy ra khi tiến trình1 Chuyển từ trạng thái thực hiện sang trạng thái chờ đợi (y/c
vào/ra)2 Chuyển từ trạng thái thực hiện sang trạng thái sẵn sàng (hết
thời gian sử dụng CPU → ngắt thời gian)3 Chuyển từ trạng thái chờ đợi sang trạng thái sẵn sàng (hoàn
thành vào/ra)4 Tiến trình kết thúc
Ghi chúTrường hợp 1&4⇒Điều phối không trưng dụng (non-preemptive)
Trường hợp khác⇒Điều phối trưng dụng (preemptive)
82 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Điều phối trưng dụng và không trưng dụng
Điều phối không trưng dụng
Tiến trình chiếm CPU cho tới khi giải phóng bởi
Kết thúc nhiệm vụChuyển sang trạng thái chờ đợi
Không đòi hỏi phần cứng đặc biệt (đồng hồ )Ví dụ: DOS, Win 3.1, Macintosh
Điều phối trưng dụng
Tiến trình chỉ được phép thực hiện trong khoảng thời gianKết thúc khoảng thời gian được định nghĩa trước, ngắt thờigian xuất hiện, bộ điều vận (dispatcher) được kích hoạt đểquyết định hồi phục lại tiến trình hay lựa chọn tiến trình khácBảo vệ CPU khỏi các tiến trình "đói-CPU"Vấn đề dữ liệu dùng chung
Tiến trình 1 đang cập nhật DL thì bị mất CPUTiến trình 2, được giao CPU và đọc DL đang cập nhật
Ví dụ: Hệ điều hành đa nhiệm WinNT, UNIX
83 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.1 Các khái niệm cơ bản
Điều phối trưng dụng và không trưng dụng
Điều phối không trưng dụng
Tiến trình chiếm CPU cho tới khi giải phóng bởi
Kết thúc nhiệm vụChuyển sang trạng thái chờ đợi
Không đòi hỏi phần cứng đặc biệt (đồng hồ )Ví dụ: DOS, Win 3.1, Macintosh
Điều phối trưng dụng
Tiến trình chỉ được phép thực hiện trong khoảng thời gianKết thúc khoảng thời gian được định nghĩa trước, ngắt thờigian xuất hiện, bộ điều vận (dispatcher) được kích hoạt đểquyết định hồi phục lại tiến trình hay lựa chọn tiến trình khácBảo vệ CPU khỏi các tiến trình "đói-CPU"Vấn đề dữ liệu dùng chung
Tiến trình 1 đang cập nhật DL thì bị mất CPUTiến trình 2, được giao CPU và đọc DL đang cập nhật
Ví dụ: Hệ điều hành đa nhiệm WinNT, UNIX
83 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.2 Tiêu chuẩn điều phối
3 Điều phối CPU
Các khái niệm cơ bản
Tiêu chuẩn điều phối
Các thuật toán điều phối CPU
Điều phối đa xử lý
84 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.2 Tiêu chuẩn điều phối
Tiêu chuẩn điều phối I
Sử dụng CPU (Lớn nhất)
Mục đích của điều độ là làm CPU hoạt động nhiều nhất có thểĐộ sử dụng CPU thay đổi từ 40% (hệ thống tải nhẹ) đến 90%(hệ thống tải nặng).
Thông lượng (throughput) (Lớn nhất)
Số lượng tiến trình hoàn thành trong một đơn vị thời gian
Các tiến trình dài: 1 tiến trình/giờCác tiến trình ngắn: 10 tiến trình/giây
Thời gian hoàn thành (Nhỏ nhất)
Khoảng thời gian từ thời điểm gửi đến hệ thống tới khi quátrình hoàn thành
Thời gian chờ đợi để đưa tiến trình vào bộ nhớThời gian chờ đợi trong hàng đợi sẵn sàngThời gian chờ đợi trong hàng đợi thiết bịThời gian thực hiện thực tế
85 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.2 Tiêu chuẩn điều phối
Tiêu chuẩn điều phối II
Thời gian chờ đợi (Nhỏ nhất)
Tổng thời gian chờ trong hàng đợi sẳn sàng (Giải thuật điềuđộ CPU không ảnh hưởng tới các tiến trình đang thực hiện hayđang đợi thiết bị vào ra)
Thời gian đáp ứng (Nhỏ nhất)
Từ lúc gửi câu hỏi cho tới khi câu trả lời đầu tiên được tạo ra
Tiến trình có thể tạo kết quả ra từng phầnTiến trình vẫn tiếp tục tính toán kết quả mới trong khi kếtquả cũ được gửi tới người dùng
Giả thiết: Các tiến trình chỉ có một chu kỳ tính toán (ms)
Đo đạc: Thời gian chờ đợi trung bình
86 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
3 Điều phối CPU
Các khái niệm cơ bản
Tiêu chuẩn điều phối
Các thuật toán điều phối CPU
Điều phối đa xử lý
87 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Đến trước phục vụ trước (FCFS: First Come, First Served)
Nguyên tắc:Tiến trình được quyền sử dụng CPU theo trình tự xuất hiệnTiến trình sở hữu CPU tới khi kết thúc hoặc chờ đợi vào ra
Ví dụ
Tiến trình Thời gianP1 24P2 3P3 3
Đặc điểmĐơn giản, dễ thực hiệnTiến trình ngắn phải chờ đợi như tiến trình dài
Nếu P1 thực hiện sau cùng ?
88 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Công việc ngắn trước (SJF: Shortest Job First)
Nguyên tắcMỗi tiến trình lưu trữ thời gian của chu kỳ sử dụng CPU tiếptheoTiến trình có thời gian sử dụng CPU ngắn nhất sẽ sở hữu CPUHai phương pháp
Không trưng dụng CPUCó trưng dụng CPU (SRTF: Shortest Remaining Time First)
Ví dụ
Tiến trình Thời gian Thời điểm đếnP1 8 0.0P2 4 1.0P3 9 2.0P4 5 3.0
Đặc điểmSJF (SRTF) là tối ưu: Thời gian chờ đợi trung bình nhỏ nhất
Không thể biết chính xác thời gian của chu kỳ sử dụng CPUDự báo dựa trên những giá trị trước đó
89 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Điều phối có ưu tiên (Priority Scheduling)
Nguyên tắcMỗi tiến trình gắn với một sô hiệu ưu tiên (số nguyên)CPU sẽ được phân phối cho tiến trình có độ ưu tiên cao nhấtSJF: độ ưu tiên gắn liền với thời gian thực hiệnHai phương pháp
Không trưng dụng CPUCó trưng dụng CPU
Ví dụ
Tiến trình Thời gian Độ ưu tiênP1 10 3P2 1 1P3 2 4P4 1 5P5 5 2
Vấn đề "Nạn đói": Tiến trình có độ ưu tiên thấp phải chờ đợilâu (thậm chí không được thực hiện)Giải pháp tăng dần độ ưu tiên tt theo t/gian trong hệ thống
90 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Vòng tròn (RR: Round Robin Scheduling)
Nguyên tắcMỗi tiến trình được cấp một lượng tử thời gian τ để thực hiệnKhi hết thời gian, tiến trình bị trưng dụng processor và đượcđưa vào cuối hàng đợi sẵn sàngNếu có n tiến trình, thời gian chờ đợi nhiều nhất (n − 1)τ
Ví dụ
Tiến trình Thời gianP1 24P2 3P3 3
Lượng tử thời gian τ = 4⇒ twait = 5.66
Vấn đề: Lựa chọn lượng tử thời gian ττ lớn: FCFSτ nhỏ: Hãy phải luân chuyển CPUThông thường τ = 10-100ms
91 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Điều phối hàng đợi đa mức (Multilevel Queue Scheduling)
Hàng đợi sẵn sàng được phân chia thành nhiều hàng đợi nhỏ
Tiến trình được ấn định cố định cho một hàng đợiDựa vào tính chất như độ ưu tiên, kiểu tiến trình..
Mỗi hàng đợi sử dụng thuật toán điều độ riêng
Cần điều phối giữa các hàng đợi
Điều phối có trưng dụng, độ ưu tiên cố định
Tiến trình hàng đợi độ ưu tiên thấp chỉ được thực hiện khi cáchàng đợi có độ ưu tiên cao rỗngTiến trình độ ưu tiên mức cao, trưng dụng tiến trình độ ưutiên mức thấpCó thể gặp tình trạng starvation
Phân chia thời gian giữa các hàng đợi
Hàng đợi cho foreground process, chiếm 80% thời gian CPUcho RRHàng đợi cho background process, chiếm 20% thời gian CPUcho FCFS
92 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Điều phối hàng đợi đa mức → Ví dụ
93 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Hàng đợi hồi tiếp đa mức (Multilevel Feeedback Queue)
Cho phép các tiến trình được dịch chuyển giữa các hàng đợi
Phân chia tiến trình theo đặc điểm sử dụng VXL
Nếu dùng quá nhiều thời gian của VXL → Chuyển xuống hàngđợi có độ ưu tiên thấpTiến trình vào ra nhiều → hàng đợi có độ ưu tiên caoTiến trình đợi quá lâu tại hàng đợi có độ ưu tiên thấp →Chuyển lên hàng đợi độ ưu tiên cao
Ngăn ngừa tình trạng "đói CPU"
Được định nghĩa bởi các tham số
Số hàng đợiThuật toán điều độ cho mỗi hàng đợiĐiều kiện để tiến trình được chuyển lên/xuống hàng đợi có độưu tiên cao/thấp hơnPhương pháp xác định một hàng đợi khi tiến trình cần phục vụ
94 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.3 Các thuật toán điều phối CPU
Hàng đợi hồi tiếp đa mức → Ví dụ
95 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.4 Điều phối đa xử lý
3 Điều phối CPU
Các khái niệm cơ bản
Tiêu chuẩn điều phối
Các thuật toán điều phối CPU
Điều phối đa xử lý
96 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
3.4 Điều phối đa xử lý
Vấn đề
Điều phối phức tạp hơn so với trường hợp có một VXL
Vấn đề chia sẻ tải
Mỗi VXL có một hàng đợi sẵn sàng riêng
Tồn tại VXL rảnh rỗi với hàng đợi rỗng trong khi VXL khác
phải tính toán nhiều
Hàng đợi sẵn sàng dùng chung
Vấn đề dùng chung cấu trúc dữ liêu (hàng đợi) :
→Một tiến trình được lựa chọn bởi 2 processors hoặc
→Một tiến trình bị thất lạc trên hàng đợi
Đa xử lý không đối xứng
Chỉ có một processor truy nhập hàng đợi hủy bỏ vấn đề dùng
chung cơ sở dữ liêu
Có thể tắc nghẽn tại một processor
97 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
Bài tập
Viết chương trình mô phỏng hàng đợi hồitiếp đa mức
98 / 217
Chương 2: Quản lý tiến trình
3. Điều phối CPU
Kết luận
99 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
1 Tiến trình
2 Luồng (Thread)
3 Điều phối CPU
4 Tài nguyên găng và điều độ tiến trình
5 Bế tắc và xử lý bế tắc
100 / 217
(Nguồn: http://sedition.com/a/393)
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
4 Tài nguyên găng và điều độ tiến trình
Khái niệm tài nguyên găng
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Ví dụ về đồng bộ tiến trình
Công cụ điều độ cấp cao
103 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Ví dụ: Luồng song song
#include <windows.h>#include <stdio.h>int x = 0, y = 1;void T1(){
while(1){ x = y + 1; printf("%4d", x); }}void T2(){
while(1){ y = 2; y = y * 2; }}int main(){HANDLE h1, h2; DWORD ThreadId;h1 = CreateThread(NULL,0,T1, NULL,0,&ThreadId);h2 = CreateThread(NULL,0,T2, NULL,0,&ThreadId);WaitForSingleObject(h1,INFINITE);WaitForSingleObject(h2,INFINITE);return 0;
}
104 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Kết quả thực hiện
105 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Luồng song song
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
106 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Luồng song song
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
106 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Luồng song song
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
106 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Luồng song song
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
106 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Luồng song song
Shared int y = 1
Thread T1 Thread T2
x ←y+ 1y ←2y ← y * 2
x = ?
Kết quả thực hiện cácluồng song song phụthuộc trật tự truy nhậpbiến dùng chung giữachúng
t
Thread A Thread B
y ←2
y ←y*2
t1
t2
x ←y+ 1ta
x=2
x ←y+ 1ta
x=3
x ←y+ 1ta
x=5
106 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Producer
while(1){/*produce an item */while(Counter==BUFFER_SIZE);Buffer[IN] = nextProduced;IN = (IN+1)%BUFFER_SIZE;Counter++;
}
Consumer
while(1){while(Counter == 0);nextConsumed = Buffer[OUT];OUT=(OUT+1)%BUFFER_SIZE;Counter--;/*consume the item*/
}
Nhận xét
Producer sản xuất một sản phẩm
Consumer tiêu thụ một sản phẩm
⇒Số sản phẩm còn trong Buffer không thay đổi
107 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =?
R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Producer-Consumer
Counter++
Load R1, CounterInc R1Store Counter, R1
Counter−−Load R2, CounterDec R2Store Counter, R2
t
Counter++ Counter−−
R1 =? R2 =?
Counter=5
Load R1,Counter
R1 = 5
Load R2,Counter
R2 = 5
Inc R1
R1 = 6
Dec R2
R2 = 4
Store Counter, R1
Counter=6
Store Counter, R2
Counter=4
108 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Định nghĩa
Tài nguyên
Tất cả những gì cần thiết cho thực hiện tiến trình
Tài nguyên găng
Tài nguyên hạn chế về khả năng sử dụng chung
Cần đồng thời cho nhiều tiến trình
Tài nguyên găng có thể là thiết bị vật lý hay dữ liệu dùng chung
Vấn đề
Dùng chung tài nguyên găng có thể dẫn đến không đảm bảo tínhtoàn vẹn dữ liệu⇒ Đòi hỏi cơ chế đồng bộ hóa các tiến trình
109 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Định nghĩa
Tài nguyên
Tất cả những gì cần thiết cho thực hiện tiến trình
Tài nguyên găng
Tài nguyên hạn chế về khả năng sử dụng chung
Cần đồng thời cho nhiều tiến trình
Tài nguyên găng có thể là thiết bị vật lý hay dữ liệu dùng chung
Vấn đề
Dùng chung tài nguyên găng có thể dẫn đến không đảm bảo tínhtoàn vẹn dữ liệu⇒ Đòi hỏi cơ chế đồng bộ hóa các tiến trình
109 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Định nghĩa
Tài nguyên
Tất cả những gì cần thiết cho thực hiện tiến trình
Tài nguyên găng
Tài nguyên hạn chế về khả năng sử dụng chung
Cần đồng thời cho nhiều tiến trình
Tài nguyên găng có thể là thiết bị vật lý hay dữ liệu dùng chung
Vấn đề
Dùng chung tài nguyên găng có thể dẫn đến không đảm bảo tínhtoàn vẹn dữ liệu⇒ Đòi hỏi cơ chế đồng bộ hóa các tiến trình
109 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Điều kiện cạnh tranh (Race condition)
Tình trạng trong đó kết quả của việc nhiều tiến trìnhcùng truy nhập tới dữ liệu phân chia phụ thuộc vào trậttự của các truy nhập
Làm cho chương trình không xác định
Ngăn ngừa điều kiện cạnh tranh được thực hiện bởi đồngbộ hóa (synchronize) các tiến trình thực hiện đồng thời
Chỉ một tiến trình truy nhập tới dữ liệu phân chia tạimột thời điểm
Biến counter trong v/đề Producer-Consumer
Đoạn lệnh truy nhập tới dữ liệu phân chia trong cáctiến trình phải thực hiện theo thứ tự xác định
VD Lệnh x←y+1 trong Thread T1 chỉ thực hiện khicả 2 lệnh của Thread T2 đã thực hiện xong
110 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Đoạn găng (Critical section)
Đoạn găng (chỗ hẹp) là đoạn chương trình sửdụng tài nguyên găng
Doạn chương trình thực hiện truy nhập và thao tác
trên dữ liệu dùng chung
Khi có nhiều tiến trình sử dụng tài nguyên găngthì phải điều độ
Mục đích: đảm bảo không có quá một tiến trình nằm
trong đoạn găng
111 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Yêu cầu của chương trình điều độ
Loại trừ lẫn nhau (Mutual Exclusion) Mỗi thời điểm, tàinguyên găng không phải phục vụ một số lượng tiến trìnhvượt quá khả năng của nó
Một tiến trình đang thực hiện trong đoạn găng (sử dụng
tài nguyên găng) ⇒ Không một tiến trình nào khác được
quyền vào đoạn găng
Tiến triển (Progress) Tài nguyên găng còn khả năng
phục vụ và tồn tại tiến trình muốn vào đoạn găng, thì
tiến trình đó phải được sử dụng tài nguyên găng
Chờ đợi hữu hạn (Bounded Waiting) Nếu tài nguyên
găng hết khả năng phục vụ và vẫn tồn tại tiến trình muốn
vào đoạn găng, thì tiến trình đó phải được xếp hàng chờ
đợi và sự chờ đợi là hữu hạn112 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Quy ước
Có 2 tiến trình P1&P2 thực hiện đồng thời
Các tiến trình dùng chung một tài nguyên găng
Mỗi tiến trình đặt đoạn găng ở đầu, tiếp theo là phần còn lại
Tiến trình phải xin phép trước khi vào đoạn găng {phần vào}Tiến trình khi thoát khỏi đoạn găng thực hiện {phần ra}
Cấu trúc tổng quát của một tiến trình
do{
Phần vào
{Đoạn găng của tiến trình}
Phần ra
{Phần còn lại của tiến trình}}while(1);
113 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.1 Khái niệm tài nguyên găng
Phân loại các phương pháp
Các công cụ cấp thấp
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Các công cụ cấp cao
Monitor
114 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
4 Tài nguyên găng và điều độ tiến trình
Khái niệm tài nguyên găng
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Ví dụ về đồng bộ tiến trình
Công cụ điều độ cấp cao
115 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Nguyên tắc
Mỗi t/trình dùng một byte trong vùng nhớ chung làm khóa
Tiến trình vào đoạn găng, đóng khoá (byte khóa: true)Tiến trình thoát khỏi đoạn găng, mở khóa (byte khóa: false)
Tiến trình muốn vào đoạn găng: kiểm tra khóa của tiến trìnhcòn lại
Đang khóa ⇒ ĐợiĐang mở ⇒ Được quyền vào đoạn găng
116 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Thuật toán điều độ
Share var C1,C2 Boolean // Các biến dùng chung làm khóa
Khởi tạo C1 = C2 = false //Tài nguyên găng đang tự do
Process P1
do{
while(C2 == true);C1 ← true;
{Đoạn găng của tiến trình P1}
C1 ← false;
{Phần còn lại của tiến trình P1}}while(1);
Process P2
do{
while(C1 == true);C2 ← true;
{Đoạn găng của tiến trình P2}
C2 ← false;
{Phần còn lại của tiến trình P2}}while(1);
117 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Thuật toán điều độ
Share var C1,C2 Boolean // Các biến dùng chung làm khóa
Khởi tạo C1 = C2 = false //Tài nguyên găng đang tự do
Process P1
do{
C1 ← true;while(C2 == true);
{Đoạn găng của tiến trình P1}
C1 ← false;
{Phần còn lại của tiến trình P1}}while(1);
Process P2
do{
C2 ← true;while(C1 == true);
{Đoạn găng của tiến trình P2}
C2 ← false;
{Phần còn lại của tiến trình P2}}while(1);
117 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Nhận xét
Điều độ chưa hợp lýHai t/trình yêu cầu tài nguyên tại một thời điểm
Vấn đề loại trừ lẫn nhau (trường hợp 1)
Vấn đề tiến triển (trường hợp 2)
Nguyên nhân: Do tách rời giữa
Kiểm tra quyền vào đoạn găng
Xác lập quyền sử dụng tài nguyên găng
118 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Nhận xét
Điều độ chưa hợp lýHai t/trình yêu cầu tài nguyên tại một thời điểm
Vấn đề loại trừ lẫn nhau (trường hợp 1)
Vấn đề tiến triển (trường hợp 2)
Nguyên nhân: Do tách rời giữa
Kiểm tra quyền vào đoạn găng
Xác lập quyền sử dụng tài nguyên găng
118 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Thuật toán Dekker
Sử dụng biến turn để chỉ ra tiến trình được quyền ưu tiên
Process P1
do{
C1 ← true;while(C2==true){if(turn == 2){C1 ← false;while(turn ==2);C1 ← true;
}}
{Đoạn găng của tiến trình P1}
turn = 2;C1 ← false;
{Phần còn lại của tiến trình P1}}while(1);
Process P2
do{
C2 ← true;while(C1==true){if(turn == 1){C2 ← false;while(turn ==1);C2 ← true;
}}
{Đoạn găng của tiến trình P2}
turn = 1;C2 ← false;
{Phần còn lại của tiến trình P2}}while(1);
119 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.2 Phương pháp khóa trong
Nhận xét
Điều độ hợp lý cho mọi trường hợp
Không đòi hỏi sự hỗ trợ đặc biệt của phần cứng nên có thể
thực hiện bằng ngôn ngữ bất kỳ
Quá phức tạp khi số tiến trình và số tài nguyên tăng lên
Phải chờ đợi tích cực (busy waiting) trước khi vào đoạn găng
Khi chờ đợi vẫn phải thực hiện kiểm tra quyền vào đoạn găng
Lãng phí thời gian của processor
120 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.3 Phương pháp kiểm tra và xác lập (Test anh Set)
4 Tài nguyên găng và điều độ tiến trình
Khái niệm tài nguyên găng
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Ví dụ về đồng bộ tiến trình
Công cụ điều độ cấp cao
121 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.3 Phương pháp kiểm tra và xác lập (Test anh Set)
Nguyên tắc
Sử dụng sự hỗ trợ từ phần cứngPhần cứng cung cấp các câu lệnh xử lý không tách rời
Kiểm tra và thay đổi nội dung của một word
boolean TestAndSet(VAR boolean target) {boolean rv = target;target = true;return rv;
}
Hoán đổi nội dung của 2 word khác nhau
void Swap(VAR boolean , VAR boolean b) {boolean temp = a;a = b;b = temp;
}
Xử lý không tách rời (atomically)Khối lệnh không thể bị ngắt trong khi đang thực hiệnĐược gọi đồng thời, sẽ được thực hiện theo thứ tự bất kỳ122 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.3 Phương pháp kiểm tra và xác lập (Test anh Set)
Thuật toán với lệnh TestAndSet
Biến phân chia Boolean: Lock: trạng thái của tài nguyên:
Bị khóa (Lock=true)Tự do (Lock=false)
Khởi tạo: Lock = false ⇒ Tài nguyên tự do
Thuật toán cho tiến trình Pi
do{
while(TestAndSet(Lock));
{Đoạn găng của tiến trình}
Lock = false;
{Phần còn lại của tiến trình}}while(1);
123 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.3 Phương pháp kiểm tra và xác lập (Test anh Set)
Thuật toán với lệnh Swap
Biến phân chia Lock cho biết trạng thái tài nguyên
Biến địa phương cho mỗi tiến trình: Key: Boolean
Khởi tạo: Lock = false ⇒ Tài nguyên tự do
Thuật toán cho tiến trình Pi
do{
key = true;while(key == true)
swap(Lock, Key);
{Đoạn găng của tiến trình}
Lock = false;
{Phần còn lại của tiến trình}}while(1);
124 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.3 Phương pháp kiểm tra và xác lập (Test anh Set)
Nhận xét
Đơn giản, không phức tạp khi số tiến trình và số đoạn găng
tăng lên
Các tiến trình phải chờ đợi tích cực trước khi vào đoạn găng
Luôn kiểm tra xem tài nguyên găng đã được giải phóng chưa
⇒ Sử dụng Processor không hiệu quả
Không đảm bảo yêu cầu chờ đợi hữu hạn
Tiến trình được vào đoạn găng tiếp theo, sẽ phụ thuộc thời
điểm giải phóng tài nguyên của tiến trình đang chiếm giữ
⇒ Cần khắc phục
125 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.3 Phương pháp kiểm tra và xác lập (Test anh Set)
Thuật toán cho nhiều tiến trình
Nguyên tắc: Tiến trình khi ra khỏi đoạn găng sẽ tìm tiếntrình đang đợi để trao tài nguyên cho nóDùng biến toàn cục Waiting[n] lưu trạng thái mỗi tiến trìnhSơ đồ cho tiến trình Pi
do{
Waiting[i] = true;While(Waiting[i] && TestAndSet(Lock)) ;Waiting[i] = False;
{Đoạn găng của tiến trình}
j = (i+1) % N;while ( (j !=i) && (! Waiting[j])) j = (j+1) % N;if (j == i) Lock = false;else Waiting[j] = false;
{Phần còn lại của tiến trình}}while(1);
126 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
4 Tài nguyên găng và điều độ tiến trình
Khái niệm tài nguyên găng
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Ví dụ về đồng bộ tiến trình
Công cụ điều độ cấp cao
127 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Đèn báo (Semaphore)
Là một biến nguyên S, khởi tạo bằng khả năng phục vụ củatài nguyên nó điều độ
Số tài nguyên có thể phục vụ tại một thời điểm (VD 3 máy in)Số đơn vị tài nguyên có sẵn (VD 10 chỗ trống trong buffer)
Chỉ có thể thay đổi giá trị bởi 2 thao tác cơ bản P và VThao tác P(S) (wait(S))
wait(S) {while(S ≤ 0) no-op;S −−;
}
Thao tác V(S) (signal(S))
signal(S) {S ++;
}
Các thao tác P(S) và V(S) xử lý không tách rời
Đèn báo là công cụ điều độ tổng quát128 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Sử dụng đèn báo I
Điều độ nhiều tiến trình qua đoạn găng
Sử dụng biến phân chia mutex kiểu SemaphoreKhởi tạo mutex bằng 1Thuật toán cho tiến trình Pi
do{
wait(mutex);
{Đoạn găng của tiến trình}
signal(mutex)
{Phần còn lại của tiến trình}}while(1);
129 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Sử dụng đèn báo II
Điều độ thứ tự thực hiện bên trong các tiến trình
Hai tiến trình P1 và P2 thực hiện đồng thời
P1 chứa lệnh S1, P2 chứa lệnh S2 .Yêu cầu S2 được thực hiện chỉ khi S1 thực hiện xong
Sử dụng đèn báo synch được khởi tạo giá trị 0Đoạn mã cho P1 và P2
P1 P2
Phần đầu Phần đầuS1 wait(synch)
Signal(synch) S2Phần cuối Phần cuối
130 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Hủy bỏ chờ đợi tích cực
Sử dụng 2 thao tác đơn giản
block() Ngừng tạm thời tiến trình đang thực hiệnwakeup(P) Thực hiện tiếp t/trình P dừng bởi lệnh block()
Khi tiến trình gọi P(S) và đèn báo S không dươngTiến trình phải dừng bởi gọi tới câu lệnh block()Lệnh block() đặt tiến trình vào hàng đợi gắn với đèn báo SHệ thống lấy lại CPU giao cho tiến trình khác (điều phối CPU)Tiến trình chuyển sang trạng thái chờ đợi (waiting)Tiến trình nằm trong hàng đợi đến khi tiến trình khác thựchiện thao tác V(S) trên cùng đèn báo S
Tiến trình đưa ra lời gọi V(S)Lấy một tiến trình trong hàng đợi ra (nếu có)Chuyển tiến trình lấy ra từ trạng thái chờ đợi sang trạng tháisẵn sàng và đặt lên hàng đợi sẵn sàng bởi gọi tới wakeup(P)Tiến trình mới sẵn sàng có thể trưng dụng CPU từ tiến trìnhđang thực hiên nếu thuật toán điều phối CPU cho phép
131 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Hủy bỏ chờ đợi tích cực
Sử dụng 2 thao tác đơn giản
block() Ngừng tạm thời tiến trình đang thực hiệnwakeup(P) Thực hiện tiếp t/trình P dừng bởi lệnh block()
Khi tiến trình gọi P(S) và đèn báo S không dươngTiến trình phải dừng bởi gọi tới câu lệnh block()Lệnh block() đặt tiến trình vào hàng đợi gắn với đèn báo SHệ thống lấy lại CPU giao cho tiến trình khác (điều phối CPU)Tiến trình chuyển sang trạng thái chờ đợi (waiting)Tiến trình nằm trong hàng đợi đến khi tiến trình khác thựchiện thao tác V(S) trên cùng đèn báo S
Tiến trình đưa ra lời gọi V(S)Lấy một tiến trình trong hàng đợi ra (nếu có)Chuyển tiến trình lấy ra từ trạng thái chờ đợi sang trạng tháisẵn sàng và đặt lên hàng đợi sẵn sàng bởi gọi tới wakeup(P)Tiến trình mới sẵn sàng có thể trưng dụng CPU từ tiến trìnhđang thực hiên nếu thuật toán điều phối CPU cho phép
131 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Hủy bỏ chờ đợi tích cực
Sử dụng 2 thao tác đơn giản
block() Ngừng tạm thời tiến trình đang thực hiệnwakeup(P) Thực hiện tiếp t/trình P dừng bởi lệnh block()
Khi tiến trình gọi P(S) và đèn báo S không dươngTiến trình phải dừng bởi gọi tới câu lệnh block()Lệnh block() đặt tiến trình vào hàng đợi gắn với đèn báo SHệ thống lấy lại CPU giao cho tiến trình khác (điều phối CPU)Tiến trình chuyển sang trạng thái chờ đợi (waiting)Tiến trình nằm trong hàng đợi đến khi tiến trình khác thựchiện thao tác V(S) trên cùng đèn báo S
Tiến trình đưa ra lời gọi V(S)Lấy một tiến trình trong hàng đợi ra (nếu có)Chuyển tiến trình lấy ra từ trạng thái chờ đợi sang trạng tháisẵn sàng và đặt lên hàng đợi sẵn sàng bởi gọi tới wakeup(P)Tiến trình mới sẵn sàng có thể trưng dụng CPU từ tiến trìnhđang thực hiên nếu thuật toán điều phối CPU cho phép
131 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Cài đặt đèn báo
Semaphore Stypedef struct{int value;struct process * Ptr;
}Semaphore;
wait(S)/P(S)
void wait(Semaphore S) {S.value−−;if(S.value < 0) {
Thêm tiên trình vào S.Ptrblock();
}}
signal(S)/V(S)
void signal(Semaphore S) {S.value++;if(S.value ≤ 0) {Lấy ra tiến trình P từ S.Ptrwakeup(P);
}}
132 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1
S.value = 0S.value = -1S.value = -2
S.Ptr NULL
S.Ptr PCB2 PCB3S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1
S.value = 0
S.value = -1S.value = -2
S.Ptr NULL
S.Ptr PCB2 PCB3S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1S.value = 0
S.value = -1
S.value = -2
S.Ptr NULL
S.Ptr PCB2
PCB3S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1S.value = 0S.value = -1
S.value = -2
S.Ptr NULL
S.Ptr PCB2 PCB3
S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1S.value = 0
S.value = -1
S.value = -2
S.Ptr NULLS.Ptr PCB2 PCB3
S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1
S.value = 0
S.value = -1S.value = -2
S.Ptr NULL
S.Ptr PCB2 PCB3S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ điều độ
P1
P2
P3
tSemaphore S
running
running
block
running
block
S.value = 1
S.value = 0S.value = -1S.value = -2
S.Ptr NULL
S.Ptr PCB2 PCB3S.Ptr PCB3
P1 →P(S)
P2 →P(S)
P3 →P(S)
P1 →V(S)
P2 →V(S)
P3 →V(S)
133 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnh
Các phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnh
Các phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnhCác phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnhCác phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnhCác phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnh
Các phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Nhận xét
Dễ dàng áp dụng cho các hệ thống phức tạp
Không tồn tại hiện tượng chờ đợi tích cực
Hiệu quả sử dụng phụ thuộc vào người dùng
P(S){Đoạn găng}V(S)
Điều độ đúng
V(S){Đoạn găng}P(S)
Nhầm vị trí
P(S){Đoạn găng}P(S)
Nhầm lệnhCác phép xử lý P(S) và V(S) là không phân chia được⇒bản thân P(S) và V(S) cũng là 2 tài nguyên găng
⇒Cũng cần điều độ.Hệ thống một VXL: Cấm ngắt khi thực hiện wait(), signal()
Hệ thống nhiều vi xử lýKhông thể cấm ngắt trên VXL khácCó thể dùng phương pháp khoa trong ⇒ Hiện tượng chờ đợitích cực, nhưng thời gian chờ đợi ngắn (10 lệnh)
134 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Đối tượng Semaphore trong WIN32 API
CreateSemaphore(. . .) : Tạo một SemaphoreLPSECURITY_ATTRIBUTES lpSemaphoreAttributes
⇒ Trỏ tới cấu trúc an ninh, thẻ trả về được kế thừa?LONG InitialCount,⇒ Giá trị khởi tạo cho đối tượng SemaphoreLONG MaximumCount,⇒ Giá trị lớn nhất của đối tượng SemaphoreLPCTSTR lpName⇒ Tên của đối tượng Semaphore
Ví dụ CreateSemaphore(NULL,0,1,NULL);Trả về thẻ (HANDLE ) của đối tượng Semaphore hoặc NULLWaitForSingleObject(HANDLE h, DWORD time)ReleaseSemaphore (. . .)
HANDLE hSemaphore, ⇐Thẻ của đối tượng SemaphoreLONG lReleaseCount, ⇐Giá trị được tăng lên,LPLONG lpPreviousCount ⇐Giá trị trước đó
Ví dụ: ReleaseSemaphore(S, 1, NULL);135 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ 1
#include <windows.h>#include <stdio.h>int x = 0, y = 1;HANDLE S1, S2;void T1();void T2();int main(){
HANDLE h1, h2;DWORD ThreadId;S1 = CreateSemaphore( NULL,0, 1,NULL);S2 = CreateSemaphore( NULL,0, 1,NULL);h1 = CreateThread(NULL,0,T1, NULL,0,&ThreadId);h2 = CreateThread(NULL,0,T2, NULL,0,&ThreadId);getch();return 0;
}136 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ 1 (tiếp tục)
void T1(){while(1){
WaitForSingleObject(S1,INFINITE);x = y + 1;ReleaseSemaphore(S2,1,NULL);printf("%4d",x);
}}void T2(){
while(1){y = 2;ReleaseSemaphore(S1,1,NULL);WaitForSingleObject(S2,INFINITE);y = 2 * y;
}}
137 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ 2
#include <windows.h>#include <stdio.h>
#define Max 5000000#define numThreads 10int Counter;HANDLE S;
void counterThread(){int i, temp;for(i=0; i < Max; i++) {
WaitForSingleObject(S,INFINITE); //P(S)temp = Counter;temp = temp + 1 ;Counter = temp;ReleaseSemaphore(S,1,NULL); //V(S)
}}
138 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.4 Kỹ thuật đèn báo
Ví dụ 2 (tiếp tục)
int main(){HANDLE hThreads[numThreads];DWORD Id;int i;
S = CreateSemaphore(NULL,1,1,NULL);for(i=0; i < numThreads;i++)hThreads[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)counterThread,NULL,0,&Id);
WaitForMultipleObjects(numThreads, hThreads,TRUE, INFINITE);
printf("\nKet qua : %d\n", Counter);return 0;
}
139 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
4 Tài nguyên găng và điều độ tiến trình
Khái niệm tài nguyên găng
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Ví dụ về đồng bộ tiến trình
Công cụ điều độ cấp cao
140 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Một số bài toán kinh điển
Người sản xuất-người tiêu thụ (Producer-Consumer)
Triết gia ăn tối (Dining Philosophers)
Người đọc và biên tập viên (Readers-Writers)
Người thợ cắt tóc ngủ gật (Sleeping Barber)
Bathroom Problem
Đồng bộ theo Barriers
. . .
141 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 1
do{{Tạo phần tử mới}while(Counter==SIZE);{Đặt phần tử mới vào BufferIN = (IN+1)%SIZE;}
Counter++;} while (1);
Producer
do{while(Counter == 0);{Lấy 1 phần tử trong BufferOUT=(OUT+1)%SIZE;}
Counter−−;{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
142 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 1
do{{Tạo phần tử mới}if(Counter==SIZE) block();{Đặt phần tử mới vào BufferIN = (IN+1)%SIZE;}
Counter++;if(Counter==1)
wakeup(Consumer);} while (1);
Producer
do{if(Counter == 0); block(){Lấy 1 phần tử trong BufferOUT=(OUT+1)%SIZE;}
Counter−−;if(Counter==SIZE-1)
wakeup(Producer);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer142 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 2
Giải pháp: Dùng một đèn báo Mutex để điều độ biến CounterKhởi tạo: Mutex←1
do{{Tạo phần tử mới}if(Counter==SIZE) block();{Đặt phần tử mới vào Buffer}wait(Mutex);Counter++;signal(Mutex);if(Counter==1)
wakeup(Consumer);} while (1);
Producer
do{if(Counter == 0); block(){Lấy 1 phần tử trong Buffer}wait(Mutex);Counter−−;signal(Mutex);if(Counter==SIZE - 1)
wakeup(Producer);{Xử lý phần tử vừa lấy ra}} while (1);
ConsumerVấn đề: Giả thiết Counter=0
Consumer kiểm tra counter ⇒ gọi thực hiện lệnh block()Producer Tăng counter lên 1 và gọi wakeup(Consumer)Consumer chưa bị block ⇒Câu lệnh wakeup() bị bỏ qua
143 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running5
4
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
5
4IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
54
IN
1
3
IN2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5
Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running
54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5
Blocked
-1
5
IN
OUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
IN
OUT
IN
0
4Running
OUT
IN
0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 3
Giải pháp: Sử dụng 2 đèn báo full, empty được khởi tạofull ← 0 : Số phần tử trong hòm thưempty ← BUFFER_SIZE: Số chỗ trống trong hòm thư
do{{Tạo phần tử mới}wait(empty);{Đặt phần tử mới vào Buffer}signal(full);} while (1);
Producer
do{wait(full);{Lấy 1 phần tử trong Buffer}signal(empty);{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
Consumer
Producer full =
empty =
Running
IN
5
OUTRunning
Running0
Blocked-1
4
IN
4
IN
0
OUT
Running54
IN
1
3
IN
2
2
IN
3
1
IN
4
0
IN
5Blocked
-1
5
INOUT
IN
0
4Running
OUT
IN0
5Running
144 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 4
Vấn đề: Khi có nhiều Producers và Consumers, các biến IN,OUT trở thành tài nguyên găng giữa chúng
Giải quyết: Dùng đèn báo thứ 3 (mutex ← 1) để đồng bộgiữa các tiến trình cùng loại
do{{Tạo phần tử mới}
wait(empty);wait(mutex);
{Đặt phần tử mới vào Buffer}
signal(mutex);signal(full);
} while (1);
Producer
do{
{Lấy 1 phần tử trong Buffer}
signal(mutex);signal(empty);
{Xử lý phần tử vừa lấy ra}} while (1);
Consumer
145 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 4
Vấn đề: Khi có nhiều Producers và Consumers, các biến IN,OUT trở thành tài nguyên găng giữa chúng
Giải quyết: Dùng đèn báo thứ 3 (mutex ← 1) để đồng bộgiữa các tiến trình cùng loại
do{{Tạo phần tử mới}
wait(empty);wait(mutex);
{Đặt phần tử mới vào Buffer}
signal(mutex);signal(full);
} while (1);
Producer
do{
wait(full);wait(mutex);
{Lấy 1 phần tử trong Buffer}
signal(mutex);signal(empty);
{Xử lý phần tử vừa lấy ra}} while (1);
Consumer145 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề sản xuất-tiêu thụ 4
Vấn đề: Khi có nhiều Producers và Consumers, các biến IN,OUT trở thành tài nguyên găng giữa chúng
Giải quyết: Dùng đèn báo thứ 3 (mutex ← 1) để đồng bộgiữa các tiến trình cùng loại
do{{Tạo phần tử mới}
wait(empty);wait(mutex);
{Đặt phần tử mới vào Buffer}
signal(mutex);signal(full);
} while (1);
Producer
do{
wait(mutex);wait(full);
{Lấy 1 phần tử trong Buffer}
signal(mutex);signal(empty);
{Xử lý phần tử vừa lấy ra}} while (1);
Consumer145 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Người đọc và biên tập viên
Nhiều tiến trình (Readers) cùng truy nhập một cơ sở dữliệu (CSDL)
Một số tiến trình (Writers) cập nhật cơ sở dữ liệu
Cho phép số lượng tùy ý các tiến trình Readers cùng truynhập CSDL
Đang tồn tại một tiến trình Reader truy cập CSDL, mọitiến trình Readers khác mới xuất hiện đều được truy cậpCSDL (Tiến trình Writers phải xếp hàng chờ đợi)
Chỉ cho phép một tiến trình Writers cập nhật CSDL tạimột thời điểm.Vấn đề không trưng dụng. Các tiến trình ở trong đoạngăng mà không bị ngắt
CÀI ĐẶT BÀI TOÁN !!
146 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Người thợ cắt tóc ngủ gật
N ghế đợi dành cho khách hàng
Một người thợ chỉ có thể cắt tóccho một khách hàng tại một thờiđiểm
Không có khách hàng đợi, thợcắt tóc ngủ
Khi một khách hàng tới
Nếu thợ cắt tóc đang ngủ⇒Đánhthức anh ta dậy làm việcNếu thợ cắt tóc đang làm việc
Không còn ghế đợi trống ⇒bỏ điCòn ghế đợi trống⇒ Ngồi đợi
TÌM HIỂU VÀ CÀI ĐẶT
147 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bathroom Problem
Thường dùng cho mục đích minh họa vấn đề phân phối tàinguyên trong nghiên cứu hệ điều hành và tính toán song songBài toán
A bathroom is to be used by both men and women, butnot at the same time
If the bathroom is empty, then anyone can enter
If the bathroom is occupied, then only a person of thesame sex as the occupant(s) may enter
The number of people that may be in the bathroom atthe same time is limited
Yêu cầu cài đặt bài toán thỏa mãn các ràng buộcCó 2 kiểu tiến trình male() và female()Mỗi t/trình ở trong Bathroom một khoảng t/gian ngẫu nhiên
CÀI ĐẶT BÀI TOÁN !!148 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Đồng bộ barriers
Barrier
P1
P2
P3
P4
P1
P2
P3
P4
P1
P2
P3
P4
Các tiến trình hướng tới một Ba-ri-e chung
Khi đạt tới Ba-ri-e, tất cả các tiến trình đều bị block ngoạitrừ tiến trình đến cuối cùng
Khi tiến trình cuối tới, đánh thức tất cả các tiến trình đang bịblock và cùng vượt qua Ba-ri-e
149 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Đồng bộ barriers
Barrier
P1
P2
P3
P4
P1
P2
P3
P4
P1
P2
P3
P4
Các tiến trình hướng tới một Ba-ri-e chung
Khi đạt tới Ba-ri-e, tất cả các tiến trình đều bị block ngoạitrừ tiến trình đến cuối cùng
Khi tiến trình cuối tới, đánh thức tất cả các tiến trình đang bịblock và cùng vượt qua Ba-ri-e
149 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Đồng bộ barriers
Barrier
P1
P2
P3
P4
P1
P2
P3
P4
P1
P2
P3
P4
Các tiến trình hướng tới một Ba-ri-e chung
Khi đạt tới Ba-ri-e, tất cả các tiến trình đều bị block ngoạitrừ tiến trình đến cuối cùng
Khi tiến trình cuối tới, đánh thức tất cả các tiến trình đang bịblock và cùng vượt qua Ba-ri-e
149 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Đồng bộ barriers
Barrier
P1
P2
P3
P4
P1
P2
P3
P4
P1
P2
P3
P4
Các tiến trình hướng tới một Ba-ri-e chung
Khi đạt tới Ba-ri-e, tất cả các tiến trình đều bị block ngoạitrừ tiến trình đến cuối cùng
Khi tiến trình cuối tới, đánh thức tất cả các tiến trình đang bịblock và cùng vượt qua Ba-ri-e
149 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1 H1H1H2H3H4
O1 O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1
H1H1H2H3H4
O1 O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1
H1
H1H2H3H4
O1 O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1
H1H1H2H3H4
O1 O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1
H1H1H2H3H4
O1
O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1 H1
H1H2H3H4
O1
O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1 H1H1H2
H3H4
O1 O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Bài toán tạo phân tử H2O
Có 2 kiểu tiến trình (luồng): oxygen and hydrogen
Để kết hợp các tiến trình thành một phân tử nước, cần mộtBa-ri-e để các tiến trình phải đợi cho tới khi một phân tửnước sẵn sàng được tạo ra.
Khi mỗi tiến trình vượt qua Ba-ri-e, nó phải kích hoạt liên kết.
Tất cả các tiến trình trong cùng một phân tử nước phải tạoliên kết, trước khi một tiến trình của phân tử nước khác gọitới thủ tục tạo liên kết
Barrier
H1 H1H1H2H3H4
O1 O1
H1H2
O1O2
H3H4 H1H2
O2 O1
150 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối
Bài toán đồng bộ hóa tiến trình nổi tiếng, thể hiện tình trạngnhiều tiến trình phân chia nhiều tài nguyên
5 triết gia ăn tối quanh một bàn tròn
Trước mỗi triết gia là một đĩa mìGiữa 2 đĩa kề nhau là một cái dĩa(fork)
Các triết gia thực hiện luân phiên, liên
tục 2 việc :Ăn và Nghĩ
Mỗi triết gia cần 2 cái dĩa để ăn
Chỉ lấy một dĩa tại một thời điểm
Cái bên trái rồi tới cái bên phải
Ăn xong, triết gia để dĩa vào vị trí cũ
Yêu cầu: viết chương trình đồng bộ bữa tối của 5 triết gia
151 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối
Bài toán đồng bộ hóa tiến trình nổi tiếng, thể hiện tình trạngnhiều tiến trình phân chia nhiều tài nguyên
5 triết gia ăn tối quanh một bàn tròn
Trước mỗi triết gia là một đĩa mìGiữa 2 đĩa kề nhau là một cái dĩa(fork)
Các triết gia thực hiện luân phiên, liên
tục 2 việc :Ăn và Nghĩ
Mỗi triết gia cần 2 cái dĩa để ăn
Chỉ lấy một dĩa tại một thời điểm
Cái bên trái rồi tới cái bên phải
Ăn xong, triết gia để dĩa vào vị trí cũ
Yêu cầu: viết chương trình đồng bộ bữa tối của 5 triết gia151 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Phương pháp đơn giản
Mỗi chiếc dĩa là một tài nguyên găng, được điều độ bởi mộtđèn báo fork[i]Semaphore fork[5] = {1, 1, 1, 1, 1};Thuật toán cho Triết gia Pi
do{wait(fork[i])
wait(fork[(i+1)% 5]);
{ Ăn}signal(fork[(i+1)% 5]);
signal(fork[i]);{Nghĩ}
} while (1);
Nếu tất cả các triết gia cùng muốn ănCùng lấy chiếc dĩa bên trái (gọi tới: wait(fork[i]))Cùng đợi lấy chiếc dĩa bên phải (gọi tới: wait(fork[(i+1)%5]))
⇒ Bế tắc (deadlock)
152 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Phương pháp đơn giản
Mỗi chiếc dĩa là một tài nguyên găng, được điều độ bởi mộtđèn báo fork[i]Semaphore fork[5] = {1, 1, 1, 1, 1};Thuật toán cho Triết gia Pi
do{wait(fork[i])
wait(fork[(i+1)% 5]);
{ Ăn}signal(fork[(i+1)% 5]);
signal(fork[i]);{Nghĩ}
} while (1);
Nếu tất cả các triết gia cùng muốn ănCùng lấy chiếc dĩa bên trái (gọi tới: wait(fork[i]))Cùng đợi lấy chiếc dĩa bên phải (gọi tới: wait(fork[(i+1)%5]))
⇒ Bế tắc (deadlock)
152 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Phương pháp đơn giản
Mỗi chiếc dĩa là một tài nguyên găng, được điều độ bởi mộtđèn báo fork[i]Semaphore fork[5] = {1, 1, 1, 1, 1};Thuật toán cho Triết gia Pi
do{wait(fork[i])
wait(fork[(i+1)% 5]);
{ Ăn}signal(fork[(i+1)% 5]);
signal(fork[i]);{Nghĩ}
} while (1);
Nếu tất cả các triết gia cùng muốn ănCùng lấy chiếc dĩa bên trái (gọi tới: wait(fork[i]))Cùng đợi lấy chiếc dĩa bên phải (gọi tới: wait(fork[(i+1)%5]))
⇒ Bế tắc (deadlock)152 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Giải pháp 1
Chỉ cho phép một nhà triết học lấy dĩa tại một thời điểmSemaphore mutex ← 1;Thuật toán cho Triết gia Pi
do{wait(mutex)
wait(fork[i])wait(fork[(i+1)% 5]);
signal(mutex)
{ Ăn}signal(fork[(i+1)% 5]);signal(i);
{Nghĩ}} while (1);
Có thể làm cho 2 triết gia không kề nhau cùng được ăntại một thời điểm (P1: ăn, P2: chiếm mutex⇒ P3 đợi)
153 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Giải pháp 1
Chỉ cho phép một nhà triết học lấy dĩa tại một thời điểmSemaphore mutex ← 1;Thuật toán cho Triết gia Pi
do{wait(mutex)
wait(fork[i])wait(fork[(i+1)% 5]);
signal(mutex)
{ Ăn}signal(fork[(i+1)% 5]);signal(i);
{Nghĩ}} while (1);
Có thể làm cho 2 triết gia không kề nhau cùng được ăntại một thời điểm (P1: ăn, P2: chiếm mutex⇒ P3 đợi)
153 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Giải pháp 2
Thứ tự lấy dĩa của các triết gia khác nhau
Triết gia số hiệu chẵn lấy dĩa trái trướcTriết gia số hiệu lẻ lấy dĩa phải trước
Thuật toán cho Triết gia Pi
do{j = i%2wait(fork[(i + j)%5])
wait(fork[(i+1 - j)% 5]);
{ Ăn}signal(fork[(i+1 - j)% 5]);
signal((i + j)%5);{Nghĩ}
} while (1);
Giải quyết được vấn đề bế tắc
154 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Giải pháp 2
Thứ tự lấy dĩa của các triết gia khác nhau
Triết gia số hiệu chẵn lấy dĩa trái trướcTriết gia số hiệu lẻ lấy dĩa phải trước
Thuật toán cho Triết gia Pi
do{j = i%2wait(fork[(i + j)%5])
wait(fork[(i+1 - j)% 5]);
{ Ăn}signal(fork[(i+1 - j)% 5]);
signal((i + j)%5);{Nghĩ}
} while (1);
Giải quyết được vấn đề bế tắc
154 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Giải pháp 2
Thứ tự lấy dĩa của các triết gia khác nhau
Triết gia số hiệu chẵn lấy dĩa trái trướcTriết gia số hiệu lẻ lấy dĩa phải trước
Thuật toán cho Triết gia Pi
do{j = i%2wait(fork[(i + j)%5])
wait(fork[(i+1 - j)% 5]);
{ Ăn}signal(fork[(i+1 - j)% 5]);
signal((i + j)%5);{Nghĩ}
} while (1);
Giải quyết được vấn đề bế tắc
154 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Một số giải pháp khác
Trả lại dĩa bên trái nếu không lấy được cái bên phảiKiểm tra dĩa phải sẵn sàng trước khi gọi wait(fork[(i+1)%5])Nếu không sẵn có: trả lại dĩa trái, đợi một thời gian rồi thử lạiKhông bị bế tắc, nhưng không tiến triển:nạn đói (starvation)Thực hiện trong thực tế, nhưng không đảm bảo về lý thuyết
Sử dụng đèn báo đồng thời PSim(S1,S2, . . . ,Sn)Thu được tất cả đèn báo cùng một thời điểm hoặc không cóbất kỳ đèn báo nàoThao tác PSim(S1, S2, . . . ,Sn) sẽ block() tiến trình/luồng gọikhi có bất kỳ một đèn báo nào không thể thu được
Thuật toán
PSim(fork[i], fork[(i+1)% 5]);
{ Ăn}VSim(fork[i], fork[(i+1)% 5]);
Khó cài đặt đèn báo đồng thời
Giải pháp đề xuất bởi Tanenbaum (Tanenbaum 2001)Các công cụ điều độ cấp cao
155 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Một số giải pháp khác
Trả lại dĩa bên trái nếu không lấy được cái bên phảiKiểm tra dĩa phải sẵn sàng trước khi gọi wait(fork[(i+1)%5])Nếu không sẵn có: trả lại dĩa trái, đợi một thời gian rồi thử lạiKhông bị bế tắc, nhưng không tiến triển:nạn đói (starvation)Thực hiện trong thực tế, nhưng không đảm bảo về lý thuyết
Sử dụng đèn báo đồng thời PSim(S1,S2, . . . ,Sn)Thu được tất cả đèn báo cùng một thời điểm hoặc không cóbất kỳ đèn báo nàoThao tác PSim(S1, S2, . . . ,Sn) sẽ block() tiến trình/luồng gọikhi có bất kỳ một đèn báo nào không thể thu được
Thuật toán
PSim(fork[i], fork[(i+1)% 5]);
{ Ăn}VSim(fork[i], fork[(i+1)% 5]);
Khó cài đặt đèn báo đồng thời
Giải pháp đề xuất bởi Tanenbaum (Tanenbaum 2001)Các công cụ điều độ cấp cao
155 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Một số giải pháp khác
Trả lại dĩa bên trái nếu không lấy được cái bên phảiKiểm tra dĩa phải sẵn sàng trước khi gọi wait(fork[(i+1)%5])Nếu không sẵn có: trả lại dĩa trái, đợi một thời gian rồi thử lạiKhông bị bế tắc, nhưng không tiến triển:nạn đói (starvation)Thực hiện trong thực tế, nhưng không đảm bảo về lý thuyết
Sử dụng đèn báo đồng thời PSim(S1,S2, . . . ,Sn)Thu được tất cả đèn báo cùng một thời điểm hoặc không cóbất kỳ đèn báo nàoThao tác PSim(S1, S2, . . . ,Sn) sẽ block() tiến trình/luồng gọikhi có bất kỳ một đèn báo nào không thể thu được
Thuật toán
PSim(fork[i], fork[(i+1)% 5]);
{ Ăn}VSim(fork[i], fork[(i+1)% 5]);
Khó cài đặt đèn báo đồng thời
Giải pháp đề xuất bởi Tanenbaum (Tanenbaum 2001)
Các công cụ điều độ cấp cao
155 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.5. Ví dụ về đồng bộ tiến trình
Vấn đề triết gia ăn tối: Một số giải pháp khác
Trả lại dĩa bên trái nếu không lấy được cái bên phảiKiểm tra dĩa phải sẵn sàng trước khi gọi wait(fork[(i+1)%5])Nếu không sẵn có: trả lại dĩa trái, đợi một thời gian rồi thử lạiKhông bị bế tắc, nhưng không tiến triển:nạn đói (starvation)Thực hiện trong thực tế, nhưng không đảm bảo về lý thuyết
Sử dụng đèn báo đồng thời PSim(S1,S2, . . . ,Sn)Thu được tất cả đèn báo cùng một thời điểm hoặc không cóbất kỳ đèn báo nàoThao tác PSim(S1, S2, . . . ,Sn) sẽ block() tiến trình/luồng gọikhi có bất kỳ một đèn báo nào không thể thu được
Thuật toán
PSim(fork[i], fork[(i+1)% 5]);
{ Ăn}VSim(fork[i], fork[(i+1)% 5]);
Khó cài đặt đèn báo đồng thời
Giải pháp đề xuất bởi Tanenbaum (Tanenbaum 2001)Các công cụ điều độ cấp cao
155 / 217
(http://www.codinghorror.com/blog/2008/08/deadlocked.html)
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
4 Tài nguyên găng và điều độ tiến trình
Khái niệm tài nguyên găng
Phương pháp khóa trong
Phương pháp kiểm tra và xác lập
Kỹ thuật đèn báo
Ví dụ về đồng bộ tiến trình
Công cụ điều độ cấp cao
157 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Giới thiệu
Kỹ thuật đèn báo là cơ chế hiệu quả trong điều độ tiến trình
Sử dụng đèn báo (công cụ cấp thấp)
Người dùng phải biết về tài nguyên để điều độ
Có phải tài nguyên găng không?
Đặt các câu lệnh điều độ trong chương trình⇒Nếu sử dụng nhầm có thể dẫn tới kết quả sai, khó gỡ rối
Nhận biết và điều độ tài nguyên găng: trách nhiệm của hệthống
Công cụ thường dùng
Vùng găngMonitor
158 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Monitor
monitor monitorName{Khai báo các biến dùng chungprocedure P1(. . .){
. . .}. . .procedure Pn(. . .){
. . .}
{Mã khởi tạo
}} ;
Cú pháp của Monitor
Là một kiểu dữ liệu đặc biệt, đượcđề nghị bởi HOARE 1974
Bao gồm các thủ tục, dữ liệu cụcbộ, đoạn mã khởi tạo
Các tiến trình chỉ có thể truy nhậptới các biến bởi gọi tới các thủ tụctrong Monitor
Tại một thời điểm chỉ có một tiếntrình được quyền sử dụng Monitor
Tiến trình khác muốn sử dụng,phải chờ đợi
Cho phép các tiến trình đợi trongMonitor
Sử dụng các biến điều kiện(condition variable)
159 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Mô hình
160 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Biến điều kiện
Thực chất là tên của một hàng đợi
Khai báo: condition x, y;
Các biến điều khiển chỉ có thể được sử dụng với 2 thao tác
wait() Được gọi bởi các thủ tục của Monitor (Cúpháp:x.wait() hoặc wait(x)) cho phép tiến trìnhđưa ra lời gọi bị tạm dừng (block) cho tới khiđược một tiến trình khác kích hoạt bởi gọi tớisignal()
signal() Được gọi bởi các thủ tục của Monitor (Cúpháp: x.signal() hoặc signal(x)) kích hoạt chínhxác một tiến trình đang đợi tại biến điều kiện x(nằm trong hàng đợi x) ra tiếp tục hoạt động.Nếu không có tiến trình nào đang đợi, thao táckhông có hiệu lực (bị bỏ qua)
161 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Mô hình
162 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Sử dụng Monitor: một tài nguyên chung
Monitor Resource{Condition Nonbusy;Boolean Busy
//-- Phần dành người dùng --void Acquire(){if(busy) Nonbusy.wait();busy=true;
}void Release(){busy=falsesignal(Nonbusy)
}//---- Phần khởi tạo ----busy= false;Nonbusy = Empty;
}
Cấu trúc tiến trình
while(1){. . .Resource.Acquire()
{Sử dụng tài nguyên}
Resource.Release(). . .
}
163 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
4.6 Công cụ điều độ cấp cao
Sử dụng Monitor: Bài toán Producer - Consumer
Monitor ProducerConsumer{Condition Full, Empty;int Counter ;void Put(Item){if(Counter=N) Full.wait();{Đặt Item vào Buffer};Counter++;if(Counter=1)Empty.signal()
}void Get(Item){if(Counter=0) Empty.wait()
{Lấy Item từ Buffer};Counter--;if(Counter=N-1)Full.signal()
}Counter=0;Full, Empty = Empty;
}
ProducerConsumer M;
Producer
while(1){Item =Sản phẩm mớiM.Put(Item). . .
}
Consumer
while(1){M.Get(&Item){Sử dụng Msg}. . .
}164 / 217
Chương 2: Quản lý tiến trình
4. Tài nguyên găng và điều độ tiến trình
Kết luận
165 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
1 Tiến trình
2 Luồng (Thread)
3 Điều phối CPU
4 Tài nguyên găng và điều độ tiến trình
5 Bế tắc và xử lý bế tắc
166 / 217
(Nguồn: internet)
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
168 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Giới thiệu
Hệ thống gồm nhiều tiến trình hoạt động đồng thời cùng sửdụng tài nguyên
Tài nguyên có nhiều loại (VD: CPU, bộ nhớ,..).Mỗi loại tài nguyên có nhiều đơn vị (VD: 2 CPU, 5 máy in..)
Mỗi tiến trình thường gồm dãy liên tục các thao tácĐòi hỏi tài nguyên: Nếu tài nguyên không có sẵn (đang đượcs/dụng bởi tiến trình khác) ⇒ tiến trình yêu cầu phải đợiSử dụng tài nguyên theo yêu cầu (in ấn, đọc dữ liệu...)Giải phóng tài nguyên được cấp
Khi các tiến trình dùng chung ít nhất 2 tài nguyên, hệ thốngcó thể gặp "nguy hiểm"Xét ví dụ:
Hệ thống có hai tiến trình P1 & P2
Hai tiến trình P1 & P2 dùng chung hai tài nguyên R1 & R2R1 được điều độ bởi đèn báo S1 (S1 ← 1)R2 được điều độ bởi đèn báo S2 (S2 ← 1)
169 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0S1 = −1
S2 = 1
S2 = 0S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1
S2 = 1
S2 = 0S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1S1 = 0
S1 = −1 S2 = 1
S2 = 0S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1S1 = 0
S1 = −1
S2 = 1
S2 = 0
S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1S1 = 0
S1 = −1
S2 = 1
S2 = 0
S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1 S2 = 1
S2 = 0
S2 = −1
P(S1)
P(S1)
block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2)
P(S2)block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1 S2 = 1S2 = 0
S2 = −1
P(S1)
P(S1)
block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1 S2 = 1
S2 = 0
S2 = −1
P(S1)
P(S1)
block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2)
Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1 S2 = 1
S2 = 0
S2 = −1
P(S1)
P(S1)
block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S2)P(S1){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0S1 = −1
S2 = 1
S2 = 0S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S2)P(S1){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1
S2 = 1
S2 = 0S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S2)P(S1){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1 S2 = 1
S2 = 0
S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S2)P(S1){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1
S1 = 0
S1 = −1 S2 = 1S2 = 0
S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S2)P(S1){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1S1 = 0
S1 = −1
S2 = 1S2 = 0
S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Ví dụ
P(S1)P(S2){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P1
P(S2)P(S1){Sử dụng R1&R2}V (S1)V (S2)
Tiến trình P2
t
Tiến trình P1 Tiến trình P2
S1 = 1S1 = 0
S1 = −1
S2 = 1S2 = 0
S2 = −1
P(S1)
P(S1)block()P2đợi R1
P(S2)
Sử dụng R1&R2
V(S1)wakeup(P2) P(S2)
block()P2đợi R2
V(S2)wakeup(P2) Sử dụng R1&R2
P(S2)
block()P1đợi R2
P(S1)block()P2đợi R1
Deadlock
170 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.1 Khái niệm bế tắc
Định nghĩa
Bế tắc là tình trạngHai hay nhiều tiến trình cùng chờ đợi mộtsự kiện nào đó xảy raNếu không có sự tác động gì từ bênngoài, thì sự chờ đợi đó là vô hạn
171 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
172 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Điều kiện cần
Cần có 4 điều kiện sau, không được thiếu điều kiện nàoCó tài nguyên găng
Tài nguyên được sử dụng theo mô hình không phân chia đượcChỉ có một tiến trình dung tài nguyên tại một thời điểmTiến trình khác cũng yêu cầu tài nguyên ⇒ yêu cầu phải đượchoãn lại tới khi tài nguyên được giải phóng
Chờ đợi trước khi vào đoạn găngTiến trình không được vào đoạn găng phải xếp hàng chờ đợi.Trong khi chờ đợi vẫn chiếm giữ các tài nguyên được cung cấp
Không có hệ thống phân phối lại tài nguyên găngTài nguyên không thể được trưng dụngTài nguyên được giải phỏng chỉ bởi tiến trình đang chiếm giữkhi đã hoàn thành nhiệm vụ
Chờ đợi vòng trònTồn tại tập các tiến trình {P0,P2, . . . ,Pn} đang đợi nhau theokiểu: P0 → R1 → P1;P1 → R2 → P2; . . .Pn−1 → Rn →Pn;Pn → R0 → P0
Chờ đợi vòng tròn tạo ra chu trình không kết thúc173 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Ví dụ: Bài toán triết gia ăn tối
Tài nguyên găng
Chờ đợi trước khi vào đoạn găng
Trưng dụng tài nguyên găng
Chờ đợi vòng tròn
174 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên (Resource Allocation Graph)
Dùng để mô hình hóa tình trạng bế tắc trong hệ thốngLà độ thị định hướng gồm tập đỉnh V và tập cung ETập đỉnh V được chia thành 2 kiểu đỉnh
P = {P1,P2, . . .Pn} Tập chứa tất cả các tiến trình trong hệthốngR = {R1,R2, . . .Rm} Tập chứa tất cả các kiểu tài nguyêntrong hệ thống
Tập các cung E gồm 2 loạiCung yêu cầu: đi từ tiến trình Pi tới tài nguyên Rj : Pi → Rj
Cung sử dụng: Đi từ tài nguyên Rj tới tiến trình Pi : Rj → Pi
Khi một tiến trình Pi yêu cầu tài nguyên Rj
1 Cung yêu cầu Pi → Rj được chèn vào đồ thị2 Nếu yêu cầu được thỏa mãn, cung yêu cầu chuyển thành cung
sử dung Rj → Pi
3 Khi tiến trình Pi giải phóng tài nguyên Rj , cung sử dụng
Rj → Pi bị xóa khỏi đồ thị
175 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Biểu diễn đồ trong đồ thị
Đỉnh kiểu tiến trình được thể hiệnbằng hình tròn
Đỉnh kiểu tài nguyên được thể hiệnbằng hình chữ nhậtMỗi đơn vị của kiểu tài nguyên đượcbiểu thị bằng một dấu chấm tronghình chữ nhật
Cung yêu cầu đi từ đỉnh tiến trình tớiđỉnh tài nguyên
Cung sử dụng xuất phát từ dấu chấmbên trong đỉnh tài nguyên tới đỉnh tiếntrình
P
R
P R
P R
176 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?
177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Ví dụ
P1 P2 P3
R1
R2 R3
R4
Trạng thái hệ thống
3 tiến trình P1,P2,P3
4 tài nguyên R1,R2,R3,R4
P3 yêu cầu tài nguyên R4
Xuất hiện cung yêu cầu P3 → R4
Cung yêu cầu P3 → R4 chuyểnthành cung sử dụng R4 → P3
P3 Giải phóng tài nguyên R4
Cung sử dụng R4 → P3 bị xóakhỏi đồ thị
P3 yêu cầu tài nguyên R1
Xuất hiện cung yêu cầu P3 → R1
Trên đồ thị xuất hiện chu trìnhHệ thống bế tắc
Chu trình trên đồ thị và tình trạng bế tắc có liên quan?177 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.2 Điều kiện xảy ra bế tắc
Đồ thị cung cấp tài nguyên : Lập luận cơ bản
P1 P2
P3
R1
R2
Đồ thị có chu trình nhưng hệ thống không bế tắc
Đồ thị không chứa chu trình, không bế tắc
Nếu đồ thị chứa đựng chu trìnhNếu tài nguyên chỉ có 1 đơn vị ⇒ Bế tắcNếu tài nguyên có nhiều hơn 1 đơn vị: có khả năng bế tắc
178 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.3 Các phương pháp xử lý bế tắc
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
179 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.3 Các phương pháp xử lý bế tắc
Phương pháp
1 Phòng ngừa
Áp dụng các biện pháp để đảm bảo hệ thống không bao giờrơi vào tình trạng bế tắcTốn kémÁp dụng cho hệ thống hay xảy ra bế tắc và tổn thất do bế tắcgây ra lớn
2 Phòng tránhKiểm tra từng yêu cầu tài nguyên của tiến trình và không chấpnhận yêu cầu nếu việc cung cấp tài nguyên có khả năng dẫnđến tình trạng bế tắcThường yêu cầu các thông tin phụ trợ
Áp dụng cho hệ thống ít xảy ra bế tắc nhưng tổn hại lớn3 Nhận biết và khắc phục
Cho phép hệ thống hoạt động bình thường ⇒có thể rơi vàotình trạng bế tắcĐịnh kỳ kiểm tra xem bế tắc có đang xảy ra khôngNếu đang bế tắc, áp dụng các biện pháp loại bỏ bế tắc
Áp dụng cho hệ thống ít xảy ra bế tắc và thiệt hại không lớn180 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
181 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Nguyên tắc
Tác động vào 1 trong 4 điều kiện cần của bế tắc đểnó không xảy ra
Tài nguyên găng
Chờ đợi trước khi vào đoạn găng
Trưng dụng tài nguyên găng
Chờ đợi vòng tròn
182 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện tài nguyên găng
Giảm bớt mức độ găng của hệ thốngTài nguyên phân chia được (file chỉ đọc): Sử dụng đồng thờiTài nguyên không phân chia được: Sử dụng không đồng thời
Kỹ thuật SPOOL(Simultaneous peripheral operation on-line)Không phân phối tài nguyên khi không thực sự cần thiếtChỉ một số ít tiến trình có khả năng yêu cầu tài nguyên
P1 P2
Virtual printer
Printer daemon
Chỉ printer daemon mới làm việcvới máy in ⇒ Bế tắc cho tàinguyên máy in bị hủy bỏ
Không phải tài nguyên nào cũngdùng kỹ thuật SPOOL được
183 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng
Nguyên tắc: Đảm bảo môt tiến trình xin tài nguyên chỉ khi khôngsở hữu bất kỳ tài nguyên nào khác
Cung cấp trước
Tiến trình xin toàn bộ tài nguyên ngay từ đầu và chỉ thực hiệnkhi đã có đầy đủ tài nguyênHiệu quả sử dụng tài nguyên thấp
Tiến trình chỉ sử dụng tài nguyên ở giai đoạn cuối?Tổng số tài nguyên đòi hỏi vượt quá khả năng của hệ thống?
Giải phóng tài nguyên
Tiến trình giải phóng tất cả tài nguyên trước khi xin (xin lại)tài nguyên mớiNhận xét
Tốc độ thực hiện tiến trình chậmPhải đảm bảo dữ liệu được giữ trong tài nguyên tạm giảiphóng không bị mất
184 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng: minh họa
Băng từGiai đoạn 2Giai đoạn 1
Tiến trình gồm 2 giai đoạnSao chép dữ liệu từ băng từ sang một file trên đĩa từSắp xếp dữ liệu trong file và đưa ra máy in
Phương pháp cung cấp trướcXin cả băng từ, file trên đĩa và máy inLãng phí máy in giai đoạn đầu, băng từ giai đoạn cuối
Phương pháp giải phóng tài nguyên
Xin băng từ và file trên đĩa cho giai đoạn 1Giải phóng băng từ và file trên đĩaXin file trên đĩa và máy in cho giai đoạn 2(Nếu không được?)
185 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng: minh họa
Băng từGiai đoạn 2Giai đoạn 1
Tiến trình gồm 2 giai đoạnSao chép dữ liệu từ băng từ sang một file trên đĩa từSắp xếp dữ liệu trong file và đưa ra máy in
Phương pháp cung cấp trướcXin cả băng từ, file trên đĩa và máy inLãng phí máy in giai đoạn đầu, băng từ giai đoạn cuối
Phương pháp giải phóng tài nguyên
Xin băng từ và file trên đĩa cho giai đoạn 1Giải phóng băng từ và file trên đĩaXin file trên đĩa và máy in cho giai đoạn 2(Nếu không được?)
185 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng: minh họa
Băng từGiai đoạn 2Giai đoạn 1
Tiến trình gồm 2 giai đoạnSao chép dữ liệu từ băng từ sang một file trên đĩa từSắp xếp dữ liệu trong file và đưa ra máy in
Phương pháp cung cấp trướcXin cả băng từ, file trên đĩa và máy inLãng phí máy in giai đoạn đầu, băng từ giai đoạn cuối
Phương pháp giải phóng tài nguyên
Xin băng từ và file trên đĩa cho giai đoạn 1Giải phóng băng từ và file trên đĩaXin file trên đĩa và máy in cho giai đoạn 2(Nếu không được?)
185 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng: minh họa
Băng từGiai đoạn 2Giai đoạn 1
Tiến trình gồm 2 giai đoạnSao chép dữ liệu từ băng từ sang một file trên đĩa từSắp xếp dữ liệu trong file và đưa ra máy in
Phương pháp cung cấp trướcXin cả băng từ, file trên đĩa và máy inLãng phí máy in giai đoạn đầu, băng từ giai đoạn cuối
Phương pháp giải phóng tài nguyênXin băng từ và file trên đĩa cho giai đoạn 1
Giải phóng băng từ và file trên đĩaXin file trên đĩa và máy in cho giai đoạn 2(Nếu không được?)
185 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng: minh họa
Băng từGiai đoạn 2Giai đoạn 1
Tiến trình gồm 2 giai đoạnSao chép dữ liệu từ băng từ sang một file trên đĩa từSắp xếp dữ liệu trong file và đưa ra máy in
Phương pháp cung cấp trướcXin cả băng từ, file trên đĩa và máy inLãng phí máy in giai đoạn đầu, băng từ giai đoạn cuối
Phương pháp giải phóng tài nguyênXin băng từ và file trên đĩa cho giai đoạn 1Giải phóng băng từ và file trên đĩa
Xin file trên đĩa và máy in cho giai đoạn 2(Nếu không được?)
185 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi trước khi vào đoạn găng: minh họa
Băng từGiai đoạn 2Giai đoạn 1
Tiến trình gồm 2 giai đoạnSao chép dữ liệu từ băng từ sang một file trên đĩa từSắp xếp dữ liệu trong file và đưa ra máy in
Phương pháp cung cấp trướcXin cả băng từ, file trên đĩa và máy inLãng phí máy in giai đoạn đầu, băng từ giai đoạn cuối
Phương pháp giải phóng tài nguyênXin băng từ và file trên đĩa cho giai đoạn 1Giải phóng băng từ và file trên đĩaXin file trên đĩa và máy in cho giai đoạn 2(Nếu không được?)
185 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện trưng dụng tài nguyên găng
Nguyên tắc: cho phép trưng dụng tài nguyên khi cần thiếtTiến trình Pi xin tài nguyên Rj
F Rj sẵn có: Cung cấp Rj cho Pi
F Rj không sẵn: (Rj bị chiếm bởi tiến trình Pk)Pk đang đợi tài nguyên
Trưng dụng Rj từ Pk và cung cấp cho Pi theo yêu cầuThêm Rj vào danh sách các tài nguyên đang thiếu của Pk
Pk được thực hiện trở lại khi♣ Có được tài nguyên đang thiếu♣ Đòi lại được Rj
Pk đang thực hiệnPi phải đợi (không giải phóng tài nguyên)Cho phép trưng dụng tài nguyên nhưng chỉ khi cần thiết
Chỉ áp dụng cho các tài nguyên có thể lưu trữ và khôi phụctrạng thái dễ dàng (CPU, không gian nhớ ). Khó có thể ápdụng cho các tài nguyên như máy inMột tiến trình bị trưng dụng nhiều lần ?
186 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.4 Phòng ngừa bế tắc
Điều kiện chờ đợi vòng tròn
Đặt ra một thứ tự toàn cục của tất cả các kiểu tài nguyênR = {R1,R2, . . .Rn} Tập tất cả các kiểu tài nguyênXây dựng hàm trật tự f : R → N
Hàm f được xây dựng dựa trên trật tự sử dụng các tài nguyên? f(Băng từ) = 1? f( Đĩa từ) = 5? f(Máy in) = 12
Tiến trình chỉ được yêu cầu tài nguyên theo trật tự tăngTiến trình chiếm giữ tài nguyên kiểu Rk chỉ được xin tàinguyên kiểu Rj thỏa mãn f (Rj) > f (Rk)
Tiến trình yêu cầu tới tài nguyên Rk sẽ phải giải phóng tất cảtài nguyên Ri thỏa mãn điều kiện f (Ri ) ≥ f (Rk)
Chứng minhGiả thiết bế tắc xảy ra giữa các tiến trình {P1,P2, . . .Pm}
R1 → P1 → R2 → P2 ⇒ f (R1) < f (R2)R2 → P2 → R3 → P3 ⇒ f (R2) < f (R3) . . .Rm → Pm → R1 → P1 ⇒ f (Rm) < f (R1)
f (R1) < f (R2) < . . . < f (Rm) < f (R1)⇒Vô lý187 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
188 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2
yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1S1 = 0
S2 = 1S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2
sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2
sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
t
P1 P(S1) P(S2)
sử dụng R1
P2 P(S2) P(S1)
S1 = 1
S1 = 0
S2 = 1
S2 = 0
yêu cầuR2
sử dụngR2 yêu cầuR1
S1 = −1
yêu cầuR2
S2 = −1
Deadlock
Block(P
2)
yêu cầuR2sử dụng R2
Nhận xét:
Biết được chuỗi yêu cầu/giải phóng tài nguyên của các tiếntrình, hệ thống có thể đưa ra được chiến lược phân phối tàinguyên (chấp thuận hay phải đợi) cho mọi yêu cầu để bế tắckhông xảy ra.
189 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Nguyên tắc
Phải biết trước các thông tin về tiến trình và tài nguyênTiến trình phải khai báo lượng tài nguyên lớn nhất mỗi loại sẽyêu cầu khi thực hiện
Quyết định dựa trên kết quả kiểm tra trạng thái cung cấp tàinguyên (Resource-Allocation State) -Trạng thái hệ thống
Trạng thái cung cấp tài nguyên xác định bởi các thông sốSố đơn vị tài nguyên có sẵn trong hệ thốngSố đơn vị tài nguyên đã được cấp cho mỗi tiến trìnhSố đơn vị tài nguyên lớn nhất mỗi tiến trình có thể yêu cầu
Nếu hệ thống an toàn, sẽ đáp ứng cho yêu cầu
Thực hiện kiểm tra mỗi khi nhận được yêu cầu tài nguyênMục đích: Đảm bảo trạng thái hệ thống luôn an toàn
Thời điểm ban đầu (chưa c/cấp tài nguyên), hệ thống an toànHệ thống chỉ cung cấp tài nguyên khi vẫn đảm bảo an toàn
⇒Hệ thống chuyển từ trạng thái an toàn này sang trạng tháian toàn khác
Trạng thái an toàn của hệ thống là gì?
190 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Nguyên tắc
Phải biết trước các thông tin về tiến trình và tài nguyênTiến trình phải khai báo lượng tài nguyên lớn nhất mỗi loại sẽyêu cầu khi thực hiện
Quyết định dựa trên kết quả kiểm tra trạng thái cung cấp tàinguyên (Resource-Allocation State) -Trạng thái hệ thống
Trạng thái cung cấp tài nguyên xác định bởi các thông sốSố đơn vị tài nguyên có sẵn trong hệ thốngSố đơn vị tài nguyên đã được cấp cho mỗi tiến trìnhSố đơn vị tài nguyên lớn nhất mỗi tiến trình có thể yêu cầu
Nếu hệ thống an toàn, sẽ đáp ứng cho yêu cầu
Thực hiện kiểm tra mỗi khi nhận được yêu cầu tài nguyênMục đích: Đảm bảo trạng thái hệ thống luôn an toàn
Thời điểm ban đầu (chưa c/cấp tài nguyên), hệ thống an toànHệ thống chỉ cung cấp tài nguyên khi vẫn đảm bảo an toàn
⇒Hệ thống chuyển từ trạng thái an toàn này sang trạng tháian toàn khác
Trạng thái an toàn của hệ thống là gì?
190 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Nguyên tắc
Phải biết trước các thông tin về tiến trình và tài nguyênTiến trình phải khai báo lượng tài nguyên lớn nhất mỗi loại sẽyêu cầu khi thực hiện
Quyết định dựa trên kết quả kiểm tra trạng thái cung cấp tàinguyên (Resource-Allocation State) -Trạng thái hệ thống
Trạng thái cung cấp tài nguyên xác định bởi các thông sốSố đơn vị tài nguyên có sẵn trong hệ thốngSố đơn vị tài nguyên đã được cấp cho mỗi tiến trìnhSố đơn vị tài nguyên lớn nhất mỗi tiến trình có thể yêu cầu
Nếu hệ thống an toàn, sẽ đáp ứng cho yêu cầu
Thực hiện kiểm tra mỗi khi nhận được yêu cầu tài nguyênMục đích: Đảm bảo trạng thái hệ thống luôn an toàn
Thời điểm ban đầu (chưa c/cấp tài nguyên), hệ thống an toànHệ thống chỉ cung cấp tài nguyên khi vẫn đảm bảo an toàn
⇒Hệ thống chuyển từ trạng thái an toàn này sang trạng tháian toàn khác
Trạng thái an toàn của hệ thống là gì?
190 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Nguyên tắc
Phải biết trước các thông tin về tiến trình và tài nguyênTiến trình phải khai báo lượng tài nguyên lớn nhất mỗi loại sẽyêu cầu khi thực hiện
Quyết định dựa trên kết quả kiểm tra trạng thái cung cấp tàinguyên (Resource-Allocation State) -Trạng thái hệ thống
Trạng thái cung cấp tài nguyên xác định bởi các thông sốSố đơn vị tài nguyên có sẵn trong hệ thốngSố đơn vị tài nguyên đã được cấp cho mỗi tiến trìnhSố đơn vị tài nguyên lớn nhất mỗi tiến trình có thể yêu cầu
Nếu hệ thống an toàn, sẽ đáp ứng cho yêu cầu
Thực hiện kiểm tra mỗi khi nhận được yêu cầu tài nguyênMục đích: Đảm bảo trạng thái hệ thống luôn an toàn
Thời điểm ban đầu (chưa c/cấp tài nguyên), hệ thống an toànHệ thống chỉ cung cấp tài nguyên khi vẫn đảm bảo an toàn
⇒Hệ thống chuyển từ trạng thái an toàn này sang trạng tháian toàn khác
Trạng thái an toàn của hệ thống là gì?190 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Trạng thái an toàn
Trạng thái của hệ thống là an toàn khi
Có thể cung cấp tài nguyên cho từng tiếntrình (đến yêu cầu lớn nhất) theo mộttrật tự nào đấy mà không xảy ra bế tắc
Tồn tại chuỗi an toàn của tất cả cáctiến trình
191 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Chuỗi an toàn
Chuỗi tiến trình P={P1,P2, . . . ,Pn} là an toàn nếuVới mỗi tiến trình Pi , mọi yêu cầu tài nguyên trong tương lai đềucó thể đáp ứng nhờ vào
Lượng tài nguyên hiện có trong hệ thốngTài nguyên đang chiếm giữ bởi tất cả các tiến trình Pj(j < i)
Trong chuỗi an toàn, khi Pi yêu cầu tài nguyên
Nếu không thể đáp ứng ngay lập tức, Pi đợi cho tới khi Pj kếtthúc (j < i)Khi Pj kết thúc và giải phóng tài nguyên, Pi sẽ nhận được tài
nguyên cần thiết, thực hiện, giải phóng các tài nguyên đãđược cung cấp và kết thúc
Trong chuỗi an toàn
Khi Pi kết thúc và giải phóng tài nguyên ⇒ Pi+1 sẽ nhậnđược tài nguyên cần thiêt và kết thúc được . . .Tất cả các tiến trình trong chuỗi an toàn đều kết thúc được
Lưu ý: P1 chỉ có thể kết thúc bởi tài nguyên hệ thống đangcó
192 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Chuỗi an toàn
Chuỗi tiến trình P={P1,P2, . . . ,Pn} là an toàn nếuVới mỗi tiến trình Pi , mọi yêu cầu tài nguyên trong tương lai đềucó thể đáp ứng nhờ vào
Lượng tài nguyên hiện có trong hệ thốngTài nguyên đang chiếm giữ bởi tất cả các tiến trình Pj(j < i)
Trong chuỗi an toàn, khi Pi yêu cầu tài nguyên
Nếu không thể đáp ứng ngay lập tức, Pi đợi cho tới khi Pj kếtthúc (j < i)Khi Pj kết thúc và giải phóng tài nguyên, Pi sẽ nhận được tài
nguyên cần thiết, thực hiện, giải phóng các tài nguyên đãđược cung cấp và kết thúc
Trong chuỗi an toàn
Khi Pi kết thúc và giải phóng tài nguyên ⇒ Pi+1 sẽ nhậnđược tài nguyên cần thiêt và kết thúc được . . .Tất cả các tiến trình trong chuỗi an toàn đều kết thúc được
Lưu ý: P1 chỉ có thể kết thúc bởi tài nguyên hệ thống đangcó
192 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Chuỗi an toàn
Chuỗi tiến trình P={P1,P2, . . . ,Pn} là an toàn nếuVới mỗi tiến trình Pi , mọi yêu cầu tài nguyên trong tương lai đềucó thể đáp ứng nhờ vào
Lượng tài nguyên hiện có trong hệ thốngTài nguyên đang chiếm giữ bởi tất cả các tiến trình Pj(j < i)
Trong chuỗi an toàn, khi Pi yêu cầu tài nguyên
Nếu không thể đáp ứng ngay lập tức, Pi đợi cho tới khi Pj kếtthúc (j < i)Khi Pj kết thúc và giải phóng tài nguyên, Pi sẽ nhận được tài
nguyên cần thiết, thực hiện, giải phóng các tài nguyên đãđược cung cấp và kết thúc
Trong chuỗi an toàn
Khi Pi kết thúc và giải phóng tài nguyên ⇒ Pi+1 sẽ nhậnđược tài nguyên cần thiêt và kết thúc được . . .Tất cả các tiến trình trong chuỗi an toàn đều kết thúc được
Lưu ý: P1 chỉ có thể kết thúc bởi tài nguyên hệ thống đangcó
192 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Chuỗi an toàn
Chuỗi tiến trình P={P1,P2, . . . ,Pn} là an toàn nếuVới mỗi tiến trình Pi , mọi yêu cầu tài nguyên trong tương lai đềucó thể đáp ứng nhờ vào
Lượng tài nguyên hiện có trong hệ thốngTài nguyên đang chiếm giữ bởi tất cả các tiến trình Pj(j < i)
Trong chuỗi an toàn, khi Pi yêu cầu tài nguyên
Nếu không thể đáp ứng ngay lập tức, Pi đợi cho tới khi Pj kếtthúc (j < i)Khi Pj kết thúc và giải phóng tài nguyên, Pi sẽ nhận được tài
nguyên cần thiết, thực hiện, giải phóng các tài nguyên đãđược cung cấp và kết thúc
Trong chuỗi an toàn
Khi Pi kết thúc và giải phóng tài nguyên ⇒ Pi+1 sẽ nhậnđược tài nguyên cần thiêt và kết thúc được . . .Tất cả các tiến trình trong chuỗi an toàn đều kết thúc đượcLưu ý: P1 chỉ có thể kết thúc bởi tài nguyên hệ thống đangcó
192 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xem xét hệ thống gồm3 tiến trình P1,P2,P3 và 1 tài nguyên R có 12 đơn vịCác tiến trình (P1,P2,P3) có thể yêu cầu tối đa tới (10, 4, 9)đơn vị tài nguyên RTại thời điểm t0, các tiến trình (P1,P2,P3) đã được cấp(5, 2, 2) đơn vị tài nguyên R
193 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xem xét hệ thống gồm3 tiến trình P1,P2,P3 và 1 tài nguyên R có 12 đơn vịCác tiến trình (P1,P2,P3) có thể yêu cầu tối đa tới (10, 4, 9)đơn vị tài nguyên RTại thời điểm t0, các tiến trình (P1,P2,P3) đã được cấp(5, 2, 2) đơn vị tài nguyên R
Tại thời điểm hiện tại (t0) hệ thống có an toàn?
Hệ thống đã cấp (5+ 2+ 2) đơn vị, vậy còn lại 3 đơn vịCác tiến trình (P1,P2,P3) còn có thể yêu cầu (5, 2, 7) đơn vịVới 3 đơn vị hiện có, mọi yêu cầu của P2 đều đáp ứng được⇒ P2 chắc chắn kết thúc được và sẽ giải phóng 2 đơn vị RVới 3+ 2 đơn vị, P1 chắc chắn kết thúc,sẽ giải phóng 5 đơn vịVới 3+ 2+ 5 đơn vị P3 chắc chắn kết thúc được
Ở thời điểm t0 các tiến trình P1,P2,P3 đều chắc chắn kết thúc⇒ hệ thống an toàn với dãy an toàn (P2,P1,P3)
193 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xem xét hệ thống gồm3 tiến trình P1,P2,P3 và 1 tài nguyên R có 12 đơn vịCác tiến trình (P1,P2,P3) có thể yêu cầu tối đa tới (10, 4, 9)đơn vị tài nguyên RTại thời điểm t0, các tiến trình (P1,P2,P3) đã được cấp(5, 2, 2) đơn vị tài nguyên R
Tại thời điểm hiện tại (t0) hệ thống có an toàn?
Hệ thống đã cấp (5+ 2+ 2) đơn vị, vậy còn lại 3 đơn vịCác tiến trình (P1,P2,P3) còn có thể yêu cầu (5, 2, 7) đơn vịVới 3 đơn vị hiện có, mọi yêu cầu của P2 đều đáp ứng được⇒ P2 chắc chắn kết thúc được và sẽ giải phóng 2 đơn vị RVới 3+ 2 đơn vị, P1 chắc chắn kết thúc,sẽ giải phóng 5 đơn vịVới 3+ 2+ 5 đơn vị P3 chắc chắn kết thúc được
Ở thời điểm t0 các tiến trình P1,P2,P3 đều chắc chắn kết thúc⇒ hệ thống an toàn với dãy an toàn (P2,P1,P3)
193 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xem xét hệ thống gồm3 tiến trình P1,P2,P3 và 1 tài nguyên R có 12 đơn vịCác tiến trình (P1,P2,P3) có thể yêu cầu tối đa tới (10, 4, 9)đơn vị tài nguyên RTại thời điểm t0, các tiến trình (P1,P2,P3) đã được cấp(5, 2, 2) đơn vị tài nguyên R
Tại thời điểm t1, tiến trình P3 yêu cầu và được cấp 1 đơn vị tàinguyên R . Hệ thống có an toàn?
Với 2 đơn vị hiện có, mọi yêu cầu của P2 đều đáp ứng được⇒ P2 chắc chắn kết thúc, giải phóng 2 đơn vị RKhi P2 kết thúc số tài nguyên sẵn có trong hệ thống là 4Với 4 đơn vị tài nguyên, P1 và P3 đều có thể phải đợi khi xinthêm 5 đơn vị tài nguyênVậy hệ thống không an toàn với dãy (P1,P3)
Nhận xét: Tại thời điểm t1 nếu tiến trình P3 phải đợi khi yêucầu thêm 1 đơn vị tài nguyên, bế tắc sẽ được loại trừ
193 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xem xét hệ thống gồm3 tiến trình P1,P2,P3 và 1 tài nguyên R có 12 đơn vịCác tiến trình (P1,P2,P3) có thể yêu cầu tối đa tới (10, 4, 9)đơn vị tài nguyên RTại thời điểm t0, các tiến trình (P1,P2,P3) đã được cấp(5, 2, 2) đơn vị tài nguyên R
Tại thời điểm t1, tiến trình P3 yêu cầu và được cấp 1 đơn vị tàinguyên R . Hệ thống có an toàn?
Với 2 đơn vị hiện có, mọi yêu cầu của P2 đều đáp ứng được⇒ P2 chắc chắn kết thúc, giải phóng 2 đơn vị RKhi P2 kết thúc số tài nguyên sẵn có trong hệ thống là 4Với 4 đơn vị tài nguyên, P1 và P3 đều có thể phải đợi khi xinthêm 5 đơn vị tài nguyênVậy hệ thống không an toàn với dãy (P1,P3)
Nhận xét: Tại thời điểm t1 nếu tiến trình P3 phải đợi khi yêucầu thêm 1 đơn vị tài nguyên, bế tắc sẽ được loại trừ
193 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xem xét hệ thống gồm3 tiến trình P1,P2,P3 và 1 tài nguyên R có 12 đơn vịCác tiến trình (P1,P2,P3) có thể yêu cầu tối đa tới (10, 4, 9)đơn vị tài nguyên RTại thời điểm t0, các tiến trình (P1,P2,P3) đã được cấp(5, 2, 2) đơn vị tài nguyên R
Tại thời điểm t1, tiến trình P3 yêu cầu và được cấp 1 đơn vị tàinguyên R . Hệ thống có an toàn?
Với 2 đơn vị hiện có, mọi yêu cầu của P2 đều đáp ứng được⇒ P2 chắc chắn kết thúc, giải phóng 2 đơn vị RKhi P2 kết thúc số tài nguyên sẵn có trong hệ thống là 4Với 4 đơn vị tài nguyên, P1 và P3 đều có thể phải đợi khi xinthêm 5 đơn vị tài nguyênVậy hệ thống không an toàn với dãy (P1,P3)
Nhận xét: Tại thời điểm t1 nếu tiến trình P3 phải đợi khi yêucầu thêm 1 đơn vị tài nguyên, bế tắc sẽ được loại trừ
193 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Phòng tránh bế tắc
Nhận xét
Hệ thống an toàn ⇒ Các tiến trình đều có thể kết thúc được
⇒ không xảy ra bế tắc
Hệ thống không an toàn ⇒ Có khả năng xảy ra bế tắc
Phương pháp
Không để hệ thống rơi vào tình trạng không an toàn
Kiểm tra mọi yêu cầu tài nguyên
Nếu hệ thống vẫn an toàn khi cung cấp ⇒ Cung cấp
Nếu hệ thống không an toàn khi cung cấp ⇒ Phải đợi
Thuật toán
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Thuật toán người quản lý nhà băng
194 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Phòng tránh bế tắc
Nhận xét
Hệ thống an toàn ⇒ Các tiến trình đều có thể kết thúc được
⇒ không xảy ra bế tắc
Hệ thống không an toàn ⇒ Có khả năng xảy ra bế tắc
Phương pháp
Không để hệ thống rơi vào tình trạng không an toàn
Kiểm tra mọi yêu cầu tài nguyên
Nếu hệ thống vẫn an toàn khi cung cấp ⇒ Cung cấp
Nếu hệ thống không an toàn khi cung cấp ⇒ Phải đợi
Thuật toán
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Thuật toán người quản lý nhà băng
194 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Phòng tránh bế tắc
Nhận xét
Hệ thống an toàn ⇒ Các tiến trình đều có thể kết thúc được
⇒ không xảy ra bế tắc
Hệ thống không an toàn ⇒ Có khả năng xảy ra bế tắc
Phương pháp
Không để hệ thống rơi vào tình trạng không an toàn
Kiểm tra mọi yêu cầu tài nguyên
Nếu hệ thống vẫn an toàn khi cung cấp ⇒ Cung cấp
Nếu hệ thống không an toàn khi cung cấp ⇒ Phải đợi
Thuật toán
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Thuật toán người quản lý nhà băng
194 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Sử dụng khi mỗi kiểu tài nguyên chỉ có 1 đơn vịCó chu trình, sẽ có bế tắc
Thêm vào đồ thị loại cung mới: cung đòi hỏi Pi → Rj
Cùng hướng với cung yêu cầu, thể hiện trong đồ thị −− >Cho biết Pi có thể yêu cầu Rj trong tương lai
Tiến trình khi tham gia hệ thống, phải thêm tất cả các cungđòi hỏi tương ứng vào đồ thị
Khi Pi yêu cầu Rj , cung đòi hỏi Pi → Rj chuyển thành cung
yêu cầu Pi → Rj
Khi Pi giải phóng Rj , cung sử dụng Rj → Pi chuyển thànhcung đòi hỏi Pi → Rj
Thuật toán: Yêu cầu tài nguyên Rj của tiến trình Pi được
thỏa mãn chỉ khi việc chuyển cung yêu cầu Pi → Rj thành
cung sử dụng Rj → Pi không tạo chu trình trên đồ thịKhông chu trình: Hệ thống an toànCó chu trình: Việc cung cấp tài nguyên đẩy hệ thống vào tìnhtrạng không an toàn
195 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Sử dụng khi mỗi kiểu tài nguyên chỉ có 1 đơn vịCó chu trình, sẽ có bế tắc
Thêm vào đồ thị loại cung mới: cung đòi hỏi Pi → Rj
Cùng hướng với cung yêu cầu, thể hiện trong đồ thị −− >Cho biết Pi có thể yêu cầu Rj trong tương lai
Tiến trình khi tham gia hệ thống, phải thêm tất cả các cungđòi hỏi tương ứng vào đồ thị
Khi Pi yêu cầu Rj , cung đòi hỏi Pi → Rj chuyển thành cung
yêu cầu Pi → Rj
Khi Pi giải phóng Rj , cung sử dụng Rj → Pi chuyển thànhcung đòi hỏi Pi → Rj
Thuật toán: Yêu cầu tài nguyên Rj của tiến trình Pi được
thỏa mãn chỉ khi việc chuyển cung yêu cầu Pi → Rj thành
cung sử dụng Rj → Pi không tạo chu trình trên đồ thịKhông chu trình: Hệ thống an toànCó chu trình: Việc cung cấp tài nguyên đẩy hệ thống vào tìnhtrạng không an toàn
195 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Sử dụng khi mỗi kiểu tài nguyên chỉ có 1 đơn vịCó chu trình, sẽ có bế tắc
Thêm vào đồ thị loại cung mới: cung đòi hỏi Pi → Rj
Cùng hướng với cung yêu cầu, thể hiện trong đồ thị −− >Cho biết Pi có thể yêu cầu Rj trong tương lai
Tiến trình khi tham gia hệ thống, phải thêm tất cả các cungđòi hỏi tương ứng vào đồ thị
Khi Pi yêu cầu Rj , cung đòi hỏi Pi → Rj chuyển thành cung
yêu cầu Pi → Rj
Khi Pi giải phóng Rj , cung sử dụng Rj → Pi chuyển thànhcung đòi hỏi Pi → Rj
Thuật toán: Yêu cầu tài nguyên Rj của tiến trình Pi được
thỏa mãn chỉ khi việc chuyển cung yêu cầu Pi → Rj thành
cung sử dụng Rj → Pi không tạo chu trình trên đồ thịKhông chu trình: Hệ thống an toànCó chu trình: Việc cung cấp tài nguyên đẩy hệ thống vào tìnhtrạng không an toàn
195 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán dựa vào đồ thị cung cấp tài nguyên
Sử dụng khi mỗi kiểu tài nguyên chỉ có 1 đơn vịCó chu trình, sẽ có bế tắc
Thêm vào đồ thị loại cung mới: cung đòi hỏi Pi → Rj
Cùng hướng với cung yêu cầu, thể hiện trong đồ thị −− >Cho biết Pi có thể yêu cầu Rj trong tương lai
Tiến trình khi tham gia hệ thống, phải thêm tất cả các cungđòi hỏi tương ứng vào đồ thị
Khi Pi yêu cầu Rj , cung đòi hỏi Pi → Rj chuyển thành cung
yêu cầu Pi → Rj
Khi Pi giải phóng Rj , cung sử dụng Rj → Pi chuyển thànhcung đòi hỏi Pi → Rj
Thuật toán: Yêu cầu tài nguyên Rj của tiến trình Pi được
thỏa mãn chỉ khi việc chuyển cung yêu cầu Pi → Rj thành
cung sử dụng Rj → Pi không tạo chu trình trên đồ thịKhông chu trình: Hệ thống an toànCó chu trình: Việc cung cấp tài nguyên đẩy hệ thống vào tìnhtrạng không an toàn195 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng
⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắc
Yêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng
⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắc
Yêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng
⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắc
Yêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng
⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắc
Yêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng
⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắcYêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi
⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắcYêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợi
Hệ thống bế tắcYêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắc
Yêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắc
Yêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ
P1 P2
R1
R2
Hệ thống: 2 tiến trình P1,P2 và 2 tàinguyên R1,R2, mỗi loại 1 đơn vị
P1 có thể xin R1,R2 trong tương laiP1 có thể xin R1,R2 trong tương lai
P1 yêu cầu tài nguyên R1
Cung đòi hỏi trở thành cung yêu cầu
Yêu cầu của P1 được đáp ứng
Cung yêu cầu thành cung sử dụng
P2 yêu cầu tài nguyên R2 ⇒ cung đòihỏi trở thành cung yêu cầu P2 → R2
Nếu đáp ứng⇒Cung yêu cầu thành cung sử dụng⇒ Khi P1 yêu cầu R2 ⇒ P1 phải đợi⇒ Khi P2 yêu cầu R1 ⇒ P2 phải đợiHệ thống bế tắcYêu cầu của P2 không được đáp ứng
196 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán người quản lý nhà băng: Giới thiệu
Thích hợp cho các hệ thống gồm các kiểu tài nguyên có nhiềuđơn vị
Một tiến trình mới xuất hiện trong hệ thống cần khai báo sốđơn vị lớn nhất của mỗi kiểu tài nguyên sẽ sử dụng
Không được vượt quá tổng số tài nguyên của hệ thống
Khi một tiến trình yêu cầu tài nguyên, hệ thống kiểm tra liệuđáp ứng cho yêu cầu hệ thống có còn an toàn không
Nếu hệ thống vẫn an toàn ⇒ Cung cấp tài nguyên cho yêu cầuNếu hệ thống không an toàn ⇒ Tiến trình phải đợi
Thuật toán cần
Các cấu trúc dữ liệu biểu diễn trạng thái phân phối tài nguyênThuật toán kiểm tra tình trạng an toàn của hệ thôngThuật toán yêu cầu tài nguyên
197 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Các cấu trúc dữ liệu I
Hệ thống
n số tiến trình trong hệ thống
m số kiểu tài nguyên trong hệ thống
Các cấu trúc dữ liệu
Available Vector chiều dài m cho biết số đơn vị tài nguyên sẵncó trong hệ thống. (Available[3] = 8 ⇒?)
Max Ma trận n ∗m cho biết số lượng lớn nhất mỗi kiểu tàinguyên của từng tiến trình. (Max[2,3] = 5 ⇒?)
Allocation Ma trận n ∗m cho biết số lượng mỗi kiểu tài nguyênđã cấp cho tiến trình. (Allocation[2,3] = 2 ⇒?)
Need Ma trận n ∗m chỉ ra số lượng mỗi kiểu tài nguyêncòn cần đến của từng tiến trình. Need[2,3] = 3 ⇒?)
Need[i][j] = Max[i][j] - Allocation[i][j]
198 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Các cấu trúc dữ liệu II
Quy ước
X, Y là các vector độ dài n
X ≤ Y ⇔ X [i ] ≤ Y [i ] ∀i = 1, 2, . . . , n
Các dòng của ma trận Max,Yêu cầu, Cung cấp được xử lýnhư các vector
Thuật toán tính toán trên các vector
Các cấu trúc cục bộ
Work vector độ dài m cho biết mỗi tài nguyên còn baonhiêu
Finish vector độ dài n, kiểu logic cho biết tiến trình có chắcchắn kết thúc không
199 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán kiểm tra An toàn
BOOL Safe(Current Resource-Allocation State){Work←Availablefor (i : 1→ n) Finish[i]←falseflag← trueWhile(flag){
flag←falsefor (i : 1→ n) do
if(Finish[i]=false AND Need[i] ≤Work){Finish[i]← trueWork ← Work+Allocation[i]flag← true
}//endif}//endwhilefor (i : 1→ n) if (Finish[i]=false)return falsereturn true;
}//End function200 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa
Xét hệ thống gồm 5 tiến trình P0,P1,P2,P3,P4 và 3 tàinguyên R0,R1,R2
Tài nguyên R0 có 10 đơn vị, R1 có 5 đơn vị, R2 có 7 đơn vị
Yêu cầu tài nguyên lớn nhất và lượng tài nguyên đã cấp củamỗi tiến trình
R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
Hệ thống có an toàn?Tiến trình P1 yêu cầu thêm 1 đơn vị R0 và 2 đơn vị R2?Tiến trình P4 yêu cầu thêm 3 đơn vị R0 và 3 đơn vị R1?Tiến trình P0 yêu cầu thêm 2 đơn vị R1. Cung cấp?
201 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T
Work
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T
Work
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (3, 3, 2)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (3, 3, 2)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (3, 3, 2)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F F F
Work (5, 3, 2)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F F F
Work (5, 3, 2)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F T F
Work (7, 4, 3)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F T T
Work (7, 4, 5)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F T T
Work (7, 4, 5)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T F T T
Work (7, 5, 5)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T T T T
Work (10, 5, 7)
Hệ thống an toàn (P1,P3,P4,P0,P2)
202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : Kiểm tra tính an toàn
Số tài nguyên còn sẵn trong hệ thống (R0,R1,R2) =(3, 3, 2)
Yêu cầu còn lại của mỗi tiến trình (Need = Max - Allocation)R0 R1 R2
P0 7 5 3P1 3 2 2P2 9 0 2P3 2 2 2P4 4 3 3
Max
R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 1 2 2P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T T T T
Work (10, 5, 7)
Hệ thống an toàn (P1,P3,P4,P0,P2)202 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Thuật toán yêu cầu tài nguyên
Request[i] Vector yêu cầu tài nguyên của tiến trình Pi
Request[3,2] = 2: Tiến trình P3 yêu cầu 2 đơn vị tài nguyên R2
Khi Pi yêu cầu tài nguyên, hệ thống thực hiện1 if(Request[i]>Need[i])
Error(Yêu cầu vượt quá khai báo tài nguyên)2 if(Request[i]>Available)
Block(Không đủ tài nguyên, tiến trình phải đợi)3 Thiết lập trạng thái phân phối tài nguyên mới cho hệ thống
Available = Available - Request[i]Allocation[i] = Allocation[i] + Request[i]Need[i] = Need[i] - Request[i]
4 Phân phối tài nguyên dựa trên kết quả kiểm tra tính an toàncủa trạng thái phân phối tài nguyên mới
if(Safe(New Resource Allocation State))Phân phối cho Pi theo yêu cầu
elseTiến trình Pi phải đợiKhôi phục lại trạng thái cũ (Available, Allocation,Need)
203 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T
Work
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T
Work
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (2, 3, 0)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (2, 3, 0)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (2, 3, 0)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F F F
Work (5, 3, 2)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F F F
Work (5, 3, 2)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F T F
Work (7, 4, 3)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F T T
Work (7, 4, 5)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish F T F T T
Work (7, 4, 5)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T F T T
Work (7, 5, 5)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T T T T
Work (10, 5, 7)
Yêu cầu được chấp nhận
204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa : P1 yêu cầu (1, 0, 2)
Request[1]≤Available ((1, 0, 2) ≤ (3, 3, 2)) ⇒ Có thể cung cấp
Nếu cung cấp : Available = ( 2 , 3, 0)R0 R1 R2
P0 0 1 0P1 3 0 2P2 3 0 2P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 7 4 3P1 0 2 0P2 6 0 0P3 0 1 1P4 4 3 1
Need
Thực hiện thuật toán an toànTiến trình P0 P1 P2 P3 P4
Finish T T T T T
Work (10, 5, 7)
Yêu cầu được chấp nhận204 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa (tiếp tục)
Tiến trình P4 yêu cầu thêm 3 đơn vị R0 và 3 đơn vị R2
Request[4] = (3, 0, 3)Available = (2, 3, 0)
⇒ Không đủ tài nguyên, P4 phải đợi
Tiến trình P0 yêu cầu thêm 2 đơn vị R1
Request[0]≤Available ((0, 2, 0) ≤ (2, 3, 0)) ⇒ Có thể cung cấpNếu cung cấp : Available = (2 , 1, 0)Thực hiện thuật toán an toàn⇒ Tất cả các tiến trình đều có thể không kết thúc⇒ Nếu chấp nhận, hệ thống rơi vào trạng thái không an toàn
⇒ Đủ tài nguyên nhưng không cung cấp. P0 phải đợi
205 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.5 Phòng tránh bế tắc
Ví dụ minh họa (tiếp tục)
Tiến trình P4 yêu cầu thêm 3 đơn vị R0 và 3 đơn vị R2
Request[4] = (3, 0, 3)Available = (2, 3, 0)
⇒ Không đủ tài nguyên, P4 phải đợi
Tiến trình P0 yêu cầu thêm 2 đơn vị R1
Request[0]≤Available ((0, 2, 0) ≤ (2, 3, 0)) ⇒ Có thể cung cấpNếu cung cấp : Available = (2 , 1, 0)Thực hiện thuật toán an toàn⇒ Tất cả các tiến trình đều có thể không kết thúc⇒ Nếu chấp nhận, hệ thống rơi vào trạng thái không an toàn
⇒ Đủ tài nguyên nhưng không cung cấp. P0 phải đợi
205 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
206 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Giới thiệu
Nguyên tắc
Không áp dụng các biện pháp phòng ngừa hoặc phòng tránh,để cho bế tắc xảy raĐịnh kỳ kiểm tra xem bế tắc có đang xảy ra không. Nếu cótìm cách khắc phụcĐể thực hiện, hệ thống phải cung cấp
Thuật toán xác định hệ thống đang bế tắc khôngThuật toán chữa bế tắc
Nhận biết bế tắc
Thuật toán dựa trên đồ thị cung cấp tài nguyênThuật toán chỉ ra bế tắc tổng quát
Khắc phục bế tắc
Kết thúc tiến trìnhTrưng dụng tài nguyên
207 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Giới thiệu
Nguyên tắc
Không áp dụng các biện pháp phòng ngừa hoặc phòng tránh,để cho bế tắc xảy raĐịnh kỳ kiểm tra xem bế tắc có đang xảy ra không. Nếu cótìm cách khắc phụcĐể thực hiện, hệ thống phải cung cấp
Thuật toán xác định hệ thống đang bế tắc khôngThuật toán chữa bế tắc
Nhận biết bế tắc
Thuật toán dựa trên đồ thị cung cấp tài nguyênThuật toán chỉ ra bế tắc tổng quát
Khắc phục bế tắc
Kết thúc tiến trìnhTrưng dụng tài nguyên
207 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Giới thiệu
Nguyên tắc
Không áp dụng các biện pháp phòng ngừa hoặc phòng tránh,để cho bế tắc xảy raĐịnh kỳ kiểm tra xem bế tắc có đang xảy ra không. Nếu cótìm cách khắc phụcĐể thực hiện, hệ thống phải cung cấp
Thuật toán xác định hệ thống đang bế tắc khôngThuật toán chữa bế tắc
Nhận biết bế tắc
Thuật toán dựa trên đồ thị cung cấp tài nguyênThuật toán chỉ ra bế tắc tổng quát
Khắc phục bế tắc
Kết thúc tiến trìnhTrưng dụng tài nguyên
207 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuận toán dựa trên đồ thị cung cấp tài nguyên
Áp dụng khi mỗi tài nguyên trong hệ thống có một đơn vị
Kiểm tra hệ thống có bế tắc bằng cách kiểm tra chu trìnhtrên đồ thị
Nếu trên đồ thị có chu trình, hệ thống đang bế tắc
Định kỳ gọi tới các thuật toán kiểm tra chu trình trên đồ thị
Thuật toán đòi hỏi n2 thao tác (n: số đỉnh của đồ thị)
Sử dụng đồ thị chờ đợi - phiên bản thu gọn của đồ thị cungcấp tài nguyên
Chỉ có các đỉnh dạng tiến trìnhCung chờ đợi Pi → Pj : Tiến trình Pi đang đợi tiến trình Pj
giải phóng tài nguyên Pi cầnCung chờ đợi Pi → Pj tồn tại trên đồ thị đợi khi và chỉ khi
trên đồ thị phân phối tài nguyên tương ứng tồn tại đồng thờicung yêu cầu Pi → R và cung sử dụngR → Pj
208 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuận toán dựa trên đồ thị cung cấp tài nguyên
Áp dụng khi mỗi tài nguyên trong hệ thống có một đơn vị
Kiểm tra hệ thống có bế tắc bằng cách kiểm tra chu trìnhtrên đồ thị
Nếu trên đồ thị có chu trình, hệ thống đang bế tắc
Định kỳ gọi tới các thuật toán kiểm tra chu trình trên đồ thị
Thuật toán đòi hỏi n2 thao tác (n: số đỉnh của đồ thị)
Sử dụng đồ thị chờ đợi - phiên bản thu gọn của đồ thị cungcấp tài nguyên
Chỉ có các đỉnh dạng tiến trìnhCung chờ đợi Pi → Pj : Tiến trình Pi đang đợi tiến trình Pj
giải phóng tài nguyên Pi cầnCung chờ đợi Pi → Pj tồn tại trên đồ thị đợi khi và chỉ khi
trên đồ thị phân phối tài nguyên tương ứng tồn tại đồng thờicung yêu cầu Pi → R và cung sử dụngR → Pj
208 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuận toán dựa trên đồ thị cung cấp tài nguyên
Áp dụng khi mỗi tài nguyên trong hệ thống có một đơn vị
Kiểm tra hệ thống có bế tắc bằng cách kiểm tra chu trìnhtrên đồ thị
Nếu trên đồ thị có chu trình, hệ thống đang bế tắc
Định kỳ gọi tới các thuật toán kiểm tra chu trình trên đồ thị
Thuật toán đòi hỏi n2 thao tác (n: số đỉnh của đồ thị)
Sử dụng đồ thị chờ đợi - phiên bản thu gọn của đồ thị cungcấp tài nguyên
Chỉ có các đỉnh dạng tiến trìnhCung chờ đợi Pi → Pj : Tiến trình Pi đang đợi tiến trình Pj
giải phóng tài nguyên Pi cầnCung chờ đợi Pi → Pj tồn tại trên đồ thị đợi khi và chỉ khi
trên đồ thị phân phối tài nguyên tương ứng tồn tại đồng thờicung yêu cầu Pi → R và cung sử dụngR → Pj
208 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuận toán dựa trên đồ thị cung cấp tài nguyên
Áp dụng khi mỗi tài nguyên trong hệ thống có một đơn vị
Kiểm tra hệ thống có bế tắc bằng cách kiểm tra chu trìnhtrên đồ thị
Nếu trên đồ thị có chu trình, hệ thống đang bế tắc
Định kỳ gọi tới các thuật toán kiểm tra chu trình trên đồ thị
Thuật toán đòi hỏi n2 thao tác (n: số đỉnh của đồ thị)
Sử dụng đồ thị chờ đợi - phiên bản thu gọn của đồ thị cungcấp tài nguyên
Chỉ có các đỉnh dạng tiến trìnhCung chờ đợi Pi → Pj : Tiến trình Pi đang đợi tiến trình Pj
giải phóng tài nguyên Pi cầnCung chờ đợi Pi → Pj tồn tại trên đồ thị đợi khi và chỉ khi
trên đồ thị phân phối tài nguyên tương ứng tồn tại đồng thờicung yêu cầu Pi → R và cung sử dụngR → Pj
208 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Đồ thị chờ đợi: Ví dụ
P1 P2 P3
P4
P5R1 R2
R3 R4 R5
P1 P2 P3
P4
P5
Đồ thị chờ đợi
209 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Đồ thị chờ đợi: Ví dụ
P1 P2 P3
P4
P5R1 R2
R3 R4 R5
P1 P2 P3
P4
P5
Đồ thị chờ đợi
209 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Đồ thị chờ đợi: Ví dụ
P1 P2 P3
P4
P5R1 R2
R3 R4 R5
P1 P2 P3
P4
P5
Đồ thị chờ đợi
209 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuật toán chỉ ra bế tắc tổng quát : Giới thiệu
Sử dụng cho các hệ thống có các kiểu tài nguyên gồm nhiềuđơn vịThuật toán tương tự thuật toán người quản lý nhà băngCác cấu trúc dữ liệu
Available Vector độ dài m: Tài nguyên sẵn có trong hệthống
Allocation Ma trận n ∗m: Tài nguyên đã cấp cho tiến trìnhRequest Ma trận n ∗m Tài nguyên tiến trình yêu cầu
Các cấu trúc cục bộWork Vector độ dài m cho biết tài nguyên hiện đang
cóFinish Vector độ dài n cho biết tiến trình có thể kết
thúc khôngCác qui ước
Quan hệ ≤ giữa các VectorXử lý các dòng ma trận n ∗m như các vector
210 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuật toán chỉ ra bế tắc tổng quát
BOOL Deadlock(Current Resource-Allocation State){Work←AvailableFor (i : 1→ n)
if(Allocation[i]6= 0) Finish[i]←falseelse Finish[i]=true;
//Allocation= 0 không nằm trong chu trình đợi
flag← trueWhile(flag){
flag←falsefor (i : 1→ n) do
//Giả thiết tối ưu, đây là yêu cầu cuối
if(Finish[i]=false AND Request[i] ≤Work){Finish[i]← trueWork ← Work+Allocation[i]flag← true
}//endif}//endwhilefor (i : 1→ n) if (Finish[i]=false) return true;return false;
//Finish[i] = false, tiến trình Pi đang bị bế tắc
}//End function211 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuật toán chỉ ra bế tắc tổng quát
BOOL Deadlock(Current Resource-Allocation State){Work←AvailableFor (i : 1→ n)
if(Allocation[i]6= 0) Finish[i]←falseelse Finish[i]=true;//Allocation= 0 không nằm trong chu trình đợi
flag← trueWhile(flag){
flag←falsefor (i : 1→ n) do
//Giả thiết tối ưu, đây là yêu cầu cuối
if(Finish[i]=false AND Request[i] ≤Work){Finish[i]← trueWork ← Work+Allocation[i]flag← true
}//endif}//endwhilefor (i : 1→ n) if (Finish[i]=false) return true;return false;
//Finish[i] = false, tiến trình Pi đang bị bế tắc
}//End function211 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuật toán chỉ ra bế tắc tổng quát
BOOL Deadlock(Current Resource-Allocation State){Work←AvailableFor (i : 1→ n)
if(Allocation[i]6= 0) Finish[i]←falseelse Finish[i]=true;//Allocation= 0 không nằm trong chu trình đợi
flag← trueWhile(flag){
flag←falsefor (i : 1→ n) do//Giả thiết tối ưu, đây là yêu cầu cuối
if(Finish[i]=false AND Request[i] ≤Work){Finish[i]← trueWork ← Work+Allocation[i]flag← true
}//endif}//endwhilefor (i : 1→ n) if (Finish[i]=false) return true;return false;
//Finish[i] = false, tiến trình Pi đang bị bế tắc
}//End function211 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Thuật toán chỉ ra bế tắc tổng quát
BOOL Deadlock(Current Resource-Allocation State){Work←AvailableFor (i : 1→ n)
if(Allocation[i]6= 0) Finish[i]←falseelse Finish[i]=true;//Allocation= 0 không nằm trong chu trình đợi
flag← trueWhile(flag){
flag←falsefor (i : 1→ n) do//Giả thiết tối ưu, đây là yêu cầu cuối
if(Finish[i]=false AND Request[i] ≤Work){Finish[i]← trueWork ← Work+Allocation[i]flag← true
}//endif}//endwhilefor (i : 1→ n) if (Finish[i]=false) return true;return false;//Finish[i] = false, tiến trình Pi đang bị bế tắc
}//End function211 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish
Work
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish
Work
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (0, 0, 0)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (0, 0, 0)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F T F F
Work (3, 1, 3)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F T T F
Work (5, 2, 4)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F T T F
Work (5, 2, 4)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F T T F
Work (5, 2, 4)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T T T T F
Work (7, 2, 4)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T T T T T
Work (7, 2, 6)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)
212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa
5 tiến trình P0,P1,P2,P3,P4; 3 tài nguyên R0,R1,R2
Tài nguyên R0 có 7 đơn vị, R1 có 2 đơn vị, R2 có 6 đơn vị
Trạng thái cung cấp tài nguyên tại thời điểm t0R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2P2 0 0 0P3 1 0 0P4 6 0 2
Request
Tài nguyên hiện có (R0,R1,R2) =(0, 0, 0)
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T T T T T
Work (7, 2, 6)
Hệ thống không bế tắc (P0,P2,P3,P1,P4)212 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish
Work
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (0, 0, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish F F F F F
Work (0, 0, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)
213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Ví dụ minh họa (tiếp)
P2 yêu cầu thêm 1 đơn vị tài nguyên R2
Trạng thái cung cấp tài nguyên tại thời điểm t1R0 R1 R2
P0 0 1 0P1 2 0 0P2 3 0 3P3 2 1 1P4 0 0 2
Allocation
R0 R1 R2
P0 0 0 0P1 2 0 2
P2 0 0 1P3 1 0 0P4 6 0 2
Request
Thực hiện thuật toán chỉ ra bế tắcTiến trình P0 P1 P2 P3 P4
Finish T F F F F
Work (0, 1, 0)
P0 có thể kết thúc nhưng hệ thống đang bế tắc.Các tiến trình đang chờ đợi lẫn nhau (P1,P2,P3,P4)213 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp kết thúc tiến trình
Nguyên tắc: Hủy bỏ các tiến trình đang trong tình trạng bế tắc vàlấy lại tài nguyên đã cấp cho tiến trình bị hủy bỏ
Hủy bỏ tất cả các tiến trìnhNhanh chóng hủy bỏ bế tắcQuá tốn kém
Các tiến trình bị hủy bỏ có thể gần kết thúc
Hủy bỏ lần lượt tiến trình cho tới khi bế tắc không xảy raSau khi hủy bỏ, phải kiểm tra xem bế tắc còn tồn tại không
Thuật toán kiểm tra bế tắc có độ phức tạp m ∗ n2
Cần chỉ ra thứ tự tiến trình bị hủy bỏ để phá vỡ bế tắcĐộ ưu tiên của tiến trình.Tiến trình đã tồn tại bao lâu, còn bao lâu nữa thì kết thúcTài nguyên tiến trình đang chiếm giữ, còn cần để kết thúc. . .
Vấn đề hủy bỏ tiến trìnhTiến trình đang cập nhật file ⇒ File không hoàn chỉnhTiến trình sử dụng máy in ⇒ Reset trạng thái máy in
214 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp kết thúc tiến trình
Nguyên tắc: Hủy bỏ các tiến trình đang trong tình trạng bế tắc vàlấy lại tài nguyên đã cấp cho tiến trình bị hủy bỏ
Hủy bỏ tất cả các tiến trìnhNhanh chóng hủy bỏ bế tắcQuá tốn kém
Các tiến trình bị hủy bỏ có thể gần kết thúc
Hủy bỏ lần lượt tiến trình cho tới khi bế tắc không xảy raSau khi hủy bỏ, phải kiểm tra xem bế tắc còn tồn tại không
Thuật toán kiểm tra bế tắc có độ phức tạp m ∗ n2
Cần chỉ ra thứ tự tiến trình bị hủy bỏ để phá vỡ bế tắcĐộ ưu tiên của tiến trình.Tiến trình đã tồn tại bao lâu, còn bao lâu nữa thì kết thúcTài nguyên tiến trình đang chiếm giữ, còn cần để kết thúc. . .
Vấn đề hủy bỏ tiến trìnhTiến trình đang cập nhật file ⇒ File không hoàn chỉnhTiến trình sử dụng máy in ⇒ Reset trạng thái máy in
214 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp kết thúc tiến trình
Nguyên tắc: Hủy bỏ các tiến trình đang trong tình trạng bế tắc vàlấy lại tài nguyên đã cấp cho tiến trình bị hủy bỏ
Hủy bỏ tất cả các tiến trìnhNhanh chóng hủy bỏ bế tắcQuá tốn kém
Các tiến trình bị hủy bỏ có thể gần kết thúc
Hủy bỏ lần lượt tiến trình cho tới khi bế tắc không xảy raSau khi hủy bỏ, phải kiểm tra xem bế tắc còn tồn tại không
Thuật toán kiểm tra bế tắc có độ phức tạp m ∗ n2
Cần chỉ ra thứ tự tiến trình bị hủy bỏ để phá vỡ bế tắcĐộ ưu tiên của tiến trình.Tiến trình đã tồn tại bao lâu, còn bao lâu nữa thì kết thúcTài nguyên tiến trình đang chiếm giữ, còn cần để kết thúc. . .
Vấn đề hủy bỏ tiến trìnhTiến trình đang cập nhật file ⇒ File không hoàn chỉnhTiến trình sử dụng máy in ⇒ Reset trạng thái máy in
214 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp kết thúc tiến trình
Nguyên tắc: Hủy bỏ các tiến trình đang trong tình trạng bế tắc vàlấy lại tài nguyên đã cấp cho tiến trình bị hủy bỏ
Hủy bỏ tất cả các tiến trìnhNhanh chóng hủy bỏ bế tắcQuá tốn kém
Các tiến trình bị hủy bỏ có thể gần kết thúc
Hủy bỏ lần lượt tiến trình cho tới khi bế tắc không xảy raSau khi hủy bỏ, phải kiểm tra xem bế tắc còn tồn tại không
Thuật toán kiểm tra bế tắc có độ phức tạp m ∗ n2
Cần chỉ ra thứ tự tiến trình bị hủy bỏ để phá vỡ bế tắcĐộ ưu tiên của tiến trình.Tiến trình đã tồn tại bao lâu, còn bao lâu nữa thì kết thúcTài nguyên tiến trình đang chiếm giữ, còn cần để kết thúc. . .
Vấn đề hủy bỏ tiến trìnhTiến trình đang cập nhật file ⇒ File không hoàn chỉnhTiến trình sử dụng máy in ⇒ Reset trạng thái máy in
214 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp trưng dụng tài nguyên
Nguyên tắc:Trưng dụng liên tục một vài tài nguyên từ một số tiến trình đangbế tắc cho các tiến trình khác đến khi bế tắc được hủy bỏ
Các vấn đề cần quan tâm
1 Lựa chọn nạn nhân (victim)
Tài nguyên nào và tiến trình nào được chọn?Trật tự trưng dụng để chi phí nhỏ nhất?Lượng tài nguyên nắm giữ, thời gian sử dụng. . .
2 Quay lui (Rollback)
Quay lui tới một trạng thái an toàn trước đó và bắt đầu lạiYêu cầu lưu giữ thông tin trạng thái của t/trình đang thực hiện
3 Đói tài nguyên (Starvation)
Một tiến trình bị trưng dụng quá nhiều lần ⇒chờ đợi vô hạnGiải pháp: ghi lại số lần bị trưng dụng
215 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp trưng dụng tài nguyên
Nguyên tắc:Trưng dụng liên tục một vài tài nguyên từ một số tiến trình đangbế tắc cho các tiến trình khác đến khi bế tắc được hủy bỏ
Các vấn đề cần quan tâm1 Lựa chọn nạn nhân (victim)
Tài nguyên nào và tiến trình nào được chọn?Trật tự trưng dụng để chi phí nhỏ nhất?Lượng tài nguyên nắm giữ, thời gian sử dụng. . .
2 Quay lui (Rollback)
Quay lui tới một trạng thái an toàn trước đó và bắt đầu lạiYêu cầu lưu giữ thông tin trạng thái của t/trình đang thực hiện
3 Đói tài nguyên (Starvation)
Một tiến trình bị trưng dụng quá nhiều lần ⇒chờ đợi vô hạnGiải pháp: ghi lại số lần bị trưng dụng
215 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp trưng dụng tài nguyên
Nguyên tắc:Trưng dụng liên tục một vài tài nguyên từ một số tiến trình đangbế tắc cho các tiến trình khác đến khi bế tắc được hủy bỏ
Các vấn đề cần quan tâm1 Lựa chọn nạn nhân (victim)
Tài nguyên nào và tiến trình nào được chọn?Trật tự trưng dụng để chi phí nhỏ nhất?Lượng tài nguyên nắm giữ, thời gian sử dụng. . .
2 Quay lui (Rollback)
Quay lui tới một trạng thái an toàn trước đó và bắt đầu lạiYêu cầu lưu giữ thông tin trạng thái của t/trình đang thực hiện
3 Đói tài nguyên (Starvation)
Một tiến trình bị trưng dụng quá nhiều lần ⇒chờ đợi vô hạnGiải pháp: ghi lại số lần bị trưng dụng
215 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
5.6 Nhận biết và khắc phục
Khắc phục bế tắc: Phương pháp trưng dụng tài nguyên
Nguyên tắc:Trưng dụng liên tục một vài tài nguyên từ một số tiến trình đangbế tắc cho các tiến trình khác đến khi bế tắc được hủy bỏ
Các vấn đề cần quan tâm1 Lựa chọn nạn nhân (victim)
Tài nguyên nào và tiến trình nào được chọn?Trật tự trưng dụng để chi phí nhỏ nhất?Lượng tài nguyên nắm giữ, thời gian sử dụng. . .
2 Quay lui (Rollback)
Quay lui tới một trạng thái an toàn trước đó và bắt đầu lạiYêu cầu lưu giữ thông tin trạng thái của t/trình đang thực hiện
3 Đói tài nguyên (Starvation)
Một tiến trình bị trưng dụng quá nhiều lần ⇒chờ đợi vô hạnGiải pháp: ghi lại số lần bị trưng dụng
215 / 217
Chương 2: Quản lý tiến trình
5. Bế tắc và xử lý bế tắc
Tổng kết
Bế tắc là tình trạng 2 hay nhiều tiến trình cùng chờ đợi độclập một sự kiện chỉ có thể xảy ra bởi sự hoạt động của cáctiến trình đang đợi
Bế tắc xảy ra khi hội đủ 4 điều kiệnTồn tại tài nguyên găngPhải chờ đợi trước khi vào đoạn găngKhông tồn tại hệ thống phân phối lại tài nguyênTồn tại hiện tượng chờ đợi vòng tròn
Để xử lý bế tắc có 3 lớp thuật toán
Phòng ngừa bế tắc
Tác động vào các điều kiện xảy ra bế tắc
Dự báo và phòng tránh
Ngăn ngừa hệ thống rơi vào tình trạng có thể dẫn đến bế tắc
Nhận biết và khắc phục
Cho phép bế tắc xảy ra, chỉ ra bế tắc và khắc phục sau
216 / 217
Chương 2: Quản lý tiến trình
Kết luận
1 Tiến trìnhKhái niệm tiến trìnhĐiều phối tiến trình (ProcessScheduling)Thao tác trên tiến trìnhHợp tác tiến trìnhTruyền thông liên tiến trình
2 Luồng (Thread)Giới thiệuMô hình đa luồngCài đặt luồng với WindowsVấn đề đa luồng
3 Điều phối CPUCác khái niệm cơ bảnTiêu chuẩn điều phốiCác thuật toán điều phối CPUĐiều phối đa xử lý
4 Tài nguyên găng và điều độtiến trìnhKhái niệm tài nguyên găngPhương pháp khóa trongPhương pháp kiểm tra và xáclậpKỹ thuật đèn báoVí dụ về đồng bộ tiến trìnhCông cụ điều độ cấp cao
5 Bế tắc và xử lý bế tắcKhái niệm bế tắcĐiều kiện xảy ra bế tắcCác phương pháp xử lý bế tắcPhòng ngừa bế tắcPhòng tránh bế tắcNhận biết và khắc phục
217 / 217