Nghiên cứu tìm hiểu về quản lí tiến trình trong Hệ điều hành Windows: Hệ điều hành phải có cơ chế quản lý các tiến trình để hạn chế tối đa xung đột và bế tắc xảy ra cũng như tận dụng tối đa khả năng của CPU. Chương 1: Nội dung của chương trình bày cơ bản về tiến trình, trạng thái của tiến trình, quan hệ giữa các tiến trình. Chương 2: Tài nguyên “găng” và các phương pháp sử dụng tài nguyên găng hợp lý. Chương 3: Hiện tượng bế tắc và giải quyết bế tắc. Chương 4: Cơ chế để hệ điều hành có thể điều phối các tiến trình giữa các hàng đợi để phân bổ tài nguyên CPU cho hợp lý. Chương 5: Quản lý tiến trình trên Windows NT và công cụ quản lý tiến trình Task Manager trên Windows 10.
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 1
CHƯƠNG 1: TỔNG QUAN VỀ TIẾN TRÌNH 2
1.1 Tiến trình? 2
1.2 Các trạng thái của một tiến trình 3
1.3 Quan hệ giữa các tiến trình 10
1.4 Ví dụ về tiến trình song hành và Bài toán sản xuất người tiêu dùng (Producer/ Consumer Problem) 10
CHƯƠNG 2: TÀI NGUYÊN GĂNG VÀ ĐOẠN TỚI HẠN 13
2.1 Tài nguyên “găng” và đoạn tới hạn 13
2.2 Các phương pháp giải quyết bài toán đoạn tới hạn 17
CHƯƠNG 3: HIỆN TƯỢNG BẾ TẮC 24
3.1 KHÁI NIỆM 24
3.2 ĐIỀU KIỆN XẢY RA BẾ TẮC 24
3.3 CÁC MỨC PHÒNG TRÁNH BẾ TẮC 25
3.4 CÁC BIỆN PHÁP PHÒNG TRÁNH BẾ TẮC 25
CHƯƠNG 4: ĐIỀU PHỐI TIẾN TRÌNH 30
4.1 MỤC TIÊU ĐIỀU PHỐI 30
4.2 TỔ CHỨC ĐIỀU PHỐI TIẾN TRÌNH 33
4.3 CHIẾN LƯỢC ĐIỀU PHỐI 36
CHƯƠNG 5: QUẢN LÝ TIẾN TRÌNH TRÊN WINDOWS 40
5.1 Tiến trình trong Windows NT 40
5.2 Quản lý tiến trình trên Windows 10 44
Trang 4DANH MỤC ẢNH
Ảnh 1.1: Mô tả chuyển trạng thái của tiến trình 4
Ảnh 1.2: Sơ đồ chuyển trạng thái tiến trình 5
Ảnh 1.3: Sơ đồ chuyển tiến trình vào hàng đợi 5
Ảnh 1.4: Sơ đồ chuyển trạng thái tiến trình 6
Ảnh 1.5: Sơ đồ chuyển tiến trình vào các hàng đợi 7
Ảnh 1.6: Sơ đồ chuyển trạng thái tiến trình có suspend 8
Ảnh 1.7: Sơ đồ chuyển trạng thái tiến trình với 2 suspend 9
Ảnh 4.1: Các danh sách điều phối 34
Ảnh 4.2: Sơ đồ chuyển đổi giữa các danh sách điều phối 34
Ảnh 4.3: Cấp độ điều phối trung gian 36
Ảnh 4.4: Minh họa FCFS 36
Ảnh 4.5: Minh họa SJF 37
Ảnh 4.6: Minh họa RR 38
Ảnh 5.1: Tiến trình và các tài nguyên của nó 41
Ảnh 5.2: Task Manager trên Windows 10 44
Ảnh 5.3: Chế độ đơn giản Task Manager 45
Ảnh 5.4: Tab Processes trong Task Manager 48
Ảnh 5.5: Tab Performance quản lý tài nguyên hệ thống trong Task Manager 49
Ảnh 5.6: Tab Start-up hiển thị các tiến trình sẽ được khởi động cùng Windows 50
Ảnh 5.7: Tab Users trong Task Manager 51
Ảnh 5.8: Tab Details trong Task Manager 51
Ảnh 5.9: Tab Services trong Task Manager 53
Ảnh 5.10: Khởi tạo tiến trình và chạy tiến trình mới 53
Ảnh 5.11: Analyse wait chain 54
Ảnh 5.12: Trình quản lý tác vụ Process Explorer 55
Trang 5LỜI NÓI ĐẦU
Trong những máy tính thế hệ đầu tiên, tại một thời điểm cụ thể chỉ có duy nhất
một chương trình được phép chạy và sử dụng toàn bộ tài nguyên hệ thống Các hệ thống
máy tính hiện đại đều cho phép tải nhiều chương trình vào bộ nhớ trong để thực thi đồng
thời Như vậy, cần có cơ chế đan xen hoạt động của các chương trình khác nhau Nhu
cầu này dẫn đến sự xuất hiện khái niệm “tiến trình” – là chương trình đang trong quá
trình thực thi Tiến trình là đơn vị thực thi cơ sở trong hệ thống chia sẻ thời gian thực
Trong hệ điều hành đa chương tại một thời điểm luôn tồn tại nhiều tiến trình nhưng nó
lại có những tài nguyên hữu hạn Vì vậy hệ điều hành phải có cơ chế cấp phát tài nguyên
cho tiến trình theo cơ chế định trước và cơ chế cho phép tiến trình trao đổi thông tin với
nhau Như vậy, hệ điều hành phải có cơ chế quản lý các tiến trình để hạn chế tối đa xung
đột và bế tắc xảy ra cũng như tận dụng tối đa khả năng của CPU
Để giúp hiểu rõ hơn về cơ chế quản lý tiến trình của hệ điều hành, nhất là hệ điều
hành phổ biến trên máy tính cá nhân như Windows, nhóm chúng em xin được trình bày
sơ lược về quản lý tiến trình trong hệ điều hành Windows Tài liệu gồm những nội dung
chính sau:
Chương 1: Nội dung của chương trình bày cơ bản về tiến trình, trạng thái cảu tiến
trình, quan hệ giữa các tiến trình
Chương 2: Tài nguyên “găng” và các phương pháp sử dụng tài nguyên găng hợp
lý
Chương 3: Hiện tượng bế tắc và giải quyết bế tắc
Chương 4: Cơ chế để hệ điều hành có thể điều phối các tiến trình giữa các hàng
đợi để phân bổ tài nguyên CPU cho hợp lý
Chương 5: Quản lý tiến trình trên Windows NT và công cụ quản lý tiến trình
Task Manager trên Windows 10
Bài tập lớn được hoàn thành bằng sự cộng tác của các thành viên nhóm cùng sự
hướng dẫn của thầy Nguyễn Thanh Hải Nội dung bài tập không tránh khỏi thiếu xót
mong nhận thêm phản ánh và góp ý từ phía thầy và quý bạn đọc
Thân ái!
Nhóm sinh viên thực hiện
Trang 6CHƯƠNG 1: TỔNG QUAN VỀ TIẾN TRÌNH 1.1 Tiến trình?
1.1.1 Khái niệm tiến trình
Để hỗ trợ hoạt động đa nhiệm, hệ thống máy tính cần phải có khả năng thực hiện nhiều tác vụ xử lí đồng thời nhưng việc điều khiển hoạt động song hành ở cấp dộ phần cứng là rất khó khắn Vì vậy, các nhà thiết kế hệ điều hành đề xuất một mô hình song hành giả lập bằng cách chuyển đổi bộ xử lý qua lại giữa các chương trình để duy trì hoạy động của nhiều chương trình tại cùng một thời điểm Trong mô hình này, các hệ thống
được tổ chức thành các tiến trình (process)
Tiến trình (process): Tiến trình là một bộ phận của một chương trình đang thực
hiện, đơn vị thực hiện tiến trình là processer Ở đây chúng tôi nhấn mạnh thêm rằng: Vì tiến trình là một bộ phận của chương trình nên tương tự như chương trình tiến trình cũng
sở hữu một con trỏ lệnh, một con trỏ stack, một tập các thanh ghi, một không gian địa chỉ trong bộ nhớ chính và tất cả các thông tin cần thiết khác để tiến trình có thể hoạt động được
Khái niệm trên đây mang tính trực quan, để thấy được bản chất của tiến trình các chuyên gia về hệ điều hành đã đưa ra nhiều định nghĩa khác nhau về tiến trình Định nghĩa của Saltzer: Tiến trình là một chương trình do một processor logic thực hiện Định nghĩa của Horning & Rendell: Tiến trình là một quá trình chuyển từ trạng thái này sang trạng thái khác dưới tác động của hàm hành động, xuất phát từ một trạng thái ban đầu nào đó
Cần phân biệt rõ hai khái niệm chương trình và tiến trình Chương trình là một
thực thể thụ động chứa đựng các chỉ thị điều khiển máy tính thi hành một tác vụ cụ thể nào đó Khi cho thực hiện các chỉ thị này, với con trỏ lệnh xác định chỉ thị kế tiếp sẽ thi hành kèm theo các tập tài nguyên phục vụ cho hoạt động của tiến trình
1.1.2 Phân loại tiến trình
Các loại tiến trình: Các tiến trình trong hệ thống có thể chia thành hai loại: tiến trình tuần tự và tiến trình song song Tiến trình tuần tự là các tiến trình mà điểm khởi
tạo của nó là điểm kết thúc của tiến trình trước đó Tiến trình song song là các tiến trình
mà điểm khởi tạo của tiến trình này nằm ở thân của các tiến trình khác, tức là có thể
Trang 7khởi tạo một tiến trình mới khi các tiến trình trước đó chưa kết thúc Tiến trình song song được chia thành nhiều loại:
• Tiến trình song song độc lập: là các tiến trình hoạt động song song nhưng
không có quan hệ thông tin với nhau, trong trường hợp này hệ điều hành phải thiết lập
cơ chế bảo vệ dữ liệu của các tiến trình, và cấp phát tài nguyên cho các tiến trình một cách hợp lý
• Tiến trình song song có quan hệ thông tin: trong quá trình hoạt động các tiến
trình thường trao đổi thông tin với nhau, trong một số trường hợp tiến trình gởi thông báo cần phải nhận được tín hiệu từ tiến trình nhận để tiếp tục, điều này dễ dẫn đến bế tắc khi tiến trình nhận tín hiệu không ở trong trạng thái nhận hay tiến trình gởi không
ở trong trạng thái nhận thông báo trả lời
• Tiến trình song song phân cấp: Trong qua trình hoạt động một tiến trình có
thể khởi tạo các tiến trình khác hoạt động song song với nó, tiến trình khởi tạo được gọi là tiến trình cha, tiến trình được tạo gọi là tiến trình con Trong mô hình này hệ điều hành phải giải quyết vấn đề cấp phát tài nguyên cho các tiến trình con Tiến trình con nhận tài nguyên ở đâu, từ tiến trình cha hay từ hệ thống Để giải quyết vấn đề này
hệ điều hành đưa ra 2 mô hình quản lý tài nguyên: Thứ nhất, mô hình tập trung, trong
mô hình này hệ điều hành chịu trách nhiệm phân phối tài nguyên cho tất cả các tiến trình trong hệ thống Thứ hai, mô hình phân tán, trong mô hình này hệ điều hành cho phép tiến trình con nhận tài nguyên từ tiến trình cha, tức là tiến trình khởi tạo có nhiệm
vụ nhận tài nguyên từ hệ điều hành để cấp phát cho các tiến trình mà nó tạo ra, và nó
có nhiệm vụ thu hồi lại tài nguyên đã cấp phát trả về cho hệ điều hành trước khi kết thúc
• Tiến trình song song đồng mức: là các tiến trình hoạt động song song sử dụng
chung tài nguyên theo nguyên tắc lần lượt, mỗi tiến trình sau một khoảng thời gian chiếm giữ tài nguyên phải tự động trả lại tài nguyên cho tiến trình kia
1.2 Các trạng thái của một tiến trình
Từ khi được đưa vào hệ thống cho đến khi kết thúc tiến trình tồn tại ở các trạng thái khác nhau Trạng thái của tiến trình tại một thời điểm được xác định bởi hoạt động hiện thời của tiến trình tại thời điểm đó
Trang 8Là một thưc thể động, tiến trình có thể thuộc những trạng thái khác nhau
Có nhiều cách phân biệt trạng thái tiến trình Theo cách đơn giản nhất Tiến trình thuộc một trong hai trạng thái: chạy và không chạy Chạy là khi các lệnh của tiến trình được CPU thực hiện và không chạy là trường hợp ngược lại, ví dụ khi CPU đang được phân phối cho tiến trình khác hoặc khi tiến trình phải dừng để chờ kết quả vào/ra
Cách sử dụng hai trạng thái tiến trình là quá đơn giản và không đủ để phản ánh đầy đủ thông tin về trạng thái tiến trình Trên thưc tế, hệ điều hành thường phân biệt năm trạng thái khác nhau của tiến trình Ý nghĩa cụ thể năm trạng thái như sau:
- Trạng thái khởi tạo (New): tiến trình đang được tạo lập
- Trạng thái sẵn sàng; (Ready): tiến trình chờ được cấp phát CPU để xử lý
- Trạng thái thưc hiện (Running): tiến trình được xử lý
- Trạng thái đợi (Waiting): tiến trình phải dừng vì thiếu tài nguyên hoặc chờ 1 sự
kiện nào đó
- Trạng thái kết thúc (Halt): tiến trình đã hoàn tất công việc xử lý
Ảnh 1.1: Mô tả chuyển trạng thái của tiến trình
➢ Tiến trình hai trạng thái: Một số ít hệ điều hành chỉ cho phép tiến trình tồn tại
ở một trong hai trạng thái: Not Running và Running Khi hệ điều hành tạo ra một tiến trình mới, hệ điều hành đưa tiến trình đó vào hệ thống ở trạng thái Not Running, tiến trình ở trạng thái này để chờ được chuyển sang trạng thái Running Vì một lý do nào đó,
Trang 9tiến trình đang thực hiện bị ngắt thì bộ điều phối tiến trình của hệ điều hành sẽ thu hồi lại processor của tiến trình này và chọn một tiến trình ở trạng thái Not running để cấp processor cho nó và chuyển nó sang trạng thái Running Tiến trình bị thu hồi processor
sẽ được chuyển về lại trạng thái Not running
Tại một thời điểm xác định chỉ có duy nhất một tiến trình ở trạng thái Runnig, nhưng có thể có nhiều tiến trình ở trạng thái Not running, các tiến trình ở trạng thái Not running được chứa trong một hàng đợi (Queue) Tiến trình đang ở trạng thái Running bị chuyển sang trạng thái Not running sẽ được đưa vào hàng đợi Hình vẽ sau đây mô tả việc chuyển trạng thái tiến trình trong các hệ điều hành sử dụng 2 trạng thái tiến trình
➢ Tiến trình ba trạng thái: Đa số hệ điều hành đều cho phép tiến trình tồn
tại ở một trong ba trạng thái, đó là: ready, running, blocked:
• Trạng thái Ready (sẵn sàng): Ngay sau khi khởi tạo tiến trình, đưa tiến trình vào hệ thống và cấp phát đầy đủ tài nguyên (trừ processor) cho tiến trình, hệ điều hành đưa tiến trình vào trạng thái ready Hay nói cách khác, trạng thái ready là trạng thái của một tiến trình trong hệ thống đang chờ được cấp processor để bắt đầu thực hiện
• Trạng thái Running (thực hiện): Là trạng thái mà tiến trình đang được sở hữu processor để hoạt động, hay nói cách khác là các chỉ thị của tiến trình đang được thực hiện/ xử lý bởi processor
• Trạng thái Blocked(khoá): Là trạng thái mà tiến trình đang chờ để được cấp
Not Running
Ảnh 1.2: Sơ đồ chuyển trạng thái tiến trình
Ảnh 1.3: Sơ đồ chuyển tiến trình vào hàng đợi
Trang 10phát thêm tài nguyên, để một sự kiện nào đó xảy ra, hay một quá trình vào/ra kết thúc
Quá trình chuyển trạng thái của các tiến trình trong được mô tả bởi sơ đồ sau:
Ảnh 1.4: Sơ đồ chuyển trạng thái tiến trình
Trong đó:
1 (Admit) Tiến trình được khởi tạo, được đưa vào hệ thống, được cấp phát đầy đủ tài nguyên chỉ thiếu processor
2 (Dispatch) Tiến trình được cấp processor để bắt đầu thực hiện/ xử lý
3 (Release) Tiến trình hoàn thành xử lý và kết thúc
4 (Time_out) Tiến trình bị bộ điều phối tiến trình thu hồi processor, do hết thời gian được quyền sử dụng processor, để cấp phát cho tiến trình khác
5 (Event wait) Tiến trình đang chờ một sự kiện nào đó xảy ra hay đang chờ một thao vào/ra kết thúc hay tài nguyên mà tiến trình yêu cầu chưa được hệ điều hành đáp ứng
6 (Event Occurs) Sự kiện mà tiến trình chờ đã xảy ra, thao tác vào/ra mà tiến trình đợi đã kết thúc, hay tài nguyên mà tiến trình yêu cầu đã được hệ điều hành đáp ứng,
Bộ phận điều phối tiến trình thu hồi processor từ một tiến trình đang thực hiện trong các trường hợp sau:
Tiến trình đang thực hiện hết thời gian (time-out) được quyền sử dụng processor mà bộ phận điều phối dành cho nó
Có một tiến trình mới phát sinh và tiến trình mới này có độ ưu tiên cao hơn tiến trình hiện tại
Có một tiến trình mới phát sinh và tiến trình này mới cần một khoảng thời
Trang 11gian của processor nhỏ hơn nhiều so với khoảng thời gian còn lại mà tiến trình hiện tại cần processor
Tại một thời điểm xác định trong hệ thống có thể có nhiều tiến trình đang ở trạng thái Ready hoặc Blocked nhưng chỉ có một tiến trình ở trạng thái Running Các tiến trình ở trạng thái Ready và Blocked được chứa trong các hàng đợi (Queue) riêng
Có nhiều lý do để một tiến trình đang ở trạng thái running chuyển sang trạng thái blocked, do đó đa số các hệ điều hành đều thiết kế một hệ thống hàng đợi gồm nhiều hàng đợi, mỗi hành đợi dùng để chứa những tiến trình đang đợi cùng một sự kiện nào
đó
➢ Tiến trình 4 trạng thái: Trong môi trường hệ điều hành đa nhiệm thì việc
tổ chức các Queue để lưu các tiến trình chưa thể hoạt động là cần thiết, nhưng nếu tồn tại quá nhiều tiến trình trong Queue, hay chính xác hơn trong bộ nhớ chính, sẽ dẫn đến trình trạng lãng phí bộ nhớ, không còn đủ bộ nhớ để nạp các tiến trình khác khi cần thiết Mặt khác nếu các tiến trình trong Queue đang chiếm giữ tài nguyên của hệ thống, mà những tài nguyên này lại là những tài nguyên các tiến trình khác đang cần, điều này dẫn đến tình trạng sử dụng tài nguyên không hợp lý, làm cho hệ thống thiếu tài nguyên (thực chất là thừa) trầm trọng và có thể làm cho hệ thống tắc nghẽn Với những
lý do trên các hệ điều hành đa nhiệm thiết kế thêm một trạng thái tiến trình mới, đó là trạng thái Suspend (tạm dừng) Trạng thái này rất cần thiết cho các hệ thống sử dụng kỹ thuật Swap trong việc cấp phát bộ nhớ cho các tiến trình Khái niệm Swap sẽ được đề
cập đến trong chương Quản lý bộ nhớ của tài liệu này
Release Admit
Ready Queue
Dispatch
Time-out
Event Wait Event
Trang 12Ảnh 1.6: Sơ đồ chuyển trạng thái tiến trình có suspend
Trạng thái Suspend là trạng thái của một tiến trình khi nó đang được lưu trữ trên
bộ nhớ phụ, hay chính xác hơn đây là các tiến trình đang ở trong trạng thái blocked và/hoặc ready bị hệ điều hành chuyển ra đĩa để thu hồi lại không gian nhớ đã cấp cho tiến trình hoặc thu hồi lại tài nguyên đã cấp cho tiến trình để cấp cho một tiến trình khác đang rất cần được nạp vào bộ nhớ tại thời điểm hiện tại
➢ Tiến trình 5 trạng thái: Trong thực tế hệ điều hành thiết kế 2 trạng thái suspend,
một trạng thái suspend dành cho các tiến trình từ blocked chuyển đến, trạng thái này được gọi là blocked-suspend và một trạng thái suspend dành cho các tiến trình từ ready chuyển đến, trạng thái này được gọi là ready-suspend
Tới đây ta có thể hiểu các trạng thái tiến trình như sau:
Ở trạng thái Ready tiến trình được định vị trong bộ nhớ chính và đang chờ được cấp processor để thực hiện
Ở trạng thái Blocked tiến trình được định vị trong bộ nhớ chính và đang đợi một sự kiện hay một quá trình I/O nào đó
Ở trạng thái Blocked-suspend tiến trình đang bị chứa trên bộ nhớ phụ (đĩa)
và đang đợi một sự kiện nào đó
Ở trạng thái Ready-suspend tiến trình đang bị chứa trên bộ nhớ phụ nhưng sẵn sàng thực hiện ngay sau khi được nạp vào bộ nhớ chính
Ready
Blocked
Suspend
Running Activate
Suspend
End New
Trang 13Ảnh 1.7: Sơ đồ chuyển trạng thái tiến trình với 2 suspend
Sau đây chúng ta xem xét sự chuyển trạng thái tiến trình trong sơ đồ trên:
Blocked sang Blocked-suspend: nếu không còn tiến trình ready trong bộ nhớ chính và bộ nhớ chính không còn không gian nhớ trống thì phải có ít nhất một tiến trình blocked bị chuyển ra ngoài, blocked-suspend, để dành bộ nhớ cho một tiến trình không
bị khoá (not blocked) khác
Blocked-suspend sang Ready-suspend: một tiến trình đang ở trạng thái suspend được chuyển sang trạng thái ready-suspend khi sự kiện mà nó đợi đã xảy ra
blocked-1 Ready-suspend sang Ready: có 2 lý do để hệ điều hành chọn khi chuyển một tiến trình ở trạng thái ready-suspend sang trạng thái ready:
Không còn tiến trình ready trong bộ nhớ chính, hệ điều hành phải nạp một tiến trình mới vào để nó tiếp tục thực hiện
Nếu có tiến trình ready-suspend có độ ưu tiên cao hơn so với các tiến trình ready hiện tại thì hệ điều hành có thể chuyển nó sang trạng thái ready để
nó nhiều cơ hội để được thực hiện hơn
2 Ready sang Ready suspend: Hệ điều hành thường chuyển các tiến trình blocked sang suspend hơn là các tiến trình ready, vì các tiến trình ở trạng thái blocked không thể thực hiện ngay lập tức nhưng lại chiếm nhiều không gian bộ nhớ chính hơn
so với các tiến trình ở trạng thái ready Tuy nhiên, nếu việc chọn tiến trình để chuyển sang suspend dựa vào 2 điều kiện: chiếm ít không gian bộ nhớ hơn và có độ ưu tiên thấp hơn thì hệ điều hành có thể chuyển một tiến trình ready sang trạng thái suspend
Release Suspend
Event Occurs
Trang 141.3 Quan hệ giữa các tiến trình
Các tiến trình hoạt động trong hệ thống tồn tại 2 mối quan hệ là: Độc lập và Hợp tác (song hành)
*Quan hệ độc lập
Tiến trình được gọi là độc lập nếu hoạt động của nó không gây ảnh hưởng và không bị ảnh hưởng bởi các tiến trình khác cũng đang hoạt động của hệ thống
Tiến trình độc lập có những đặc trưng sau:
- Trạng thái của nó không bị chia sẻ với bất kì tiến trình nào khác
- Việc thực hiện tiến trình là đơn định (kết quả chỉ phụ thuộc vào đầu vào)
- Tiến trình có thể tái hiện (lặp lại)
- Tiến trình có thể dừng hoặc bắt đầu lại mà không gây ảnh hưởng tới các tiến trình khác trong hệ thống
*Quan hệ hợp tác
Tiến trình được gọi là hợp tác (song hành) nếu hoạt động của nó gây ảnh hưởng hoặc bị ảnh hưởng bởi các tiến trình khác cũng đang hoạt động trong hệ thống Tiến trình hợp tác có những đặc trưng sau:
- Trạng thái của nó bị chia sẻ cho các tiến trình khác
- Việc thực hiện tiến trình là không đơn định (kết quả phụ thuộc dãy thực hiện tương ứng và không dự báo trước)
- Tiến trình không thể tái hiện
1.4 Ví dụ về tiến trình song hành và Bài toán sản xuất người tiêu dùng (Producer/ Consumer Problem)
Bài toán: Giả sử có 2 tiến trình P và C song hành Tiến trình P cung cấp thông
tin cho hoạt động của tiến trình C Thông tin do P sản xuất được đăt trong vùng đệm và
C lấy thông tin từ vùng đệm để sử dụng Trong trường hợp vùng đệm có kích thước hạn chế, hãy xây dựng thuật toán điều khiển hoạt động của hai tiến trình trên
Thuật toán: Khi kích thước vùng đệm hạn chế sẽ xảy ra hai trường hợp:
- Vùng đệm đầy, khi đó tiến trình P phải ở trạng thái phải chờ cho tới khi có vùng đệm rỗng
Trang 15- Vùng đệm rỗng, khi đó tiến trình C phải ở trạng thái phải chờ cho tới khi có thông tin trong vùng đệm
Giả sử:
- Vùng đệm chứa được n phần tử;
- Thông tin có kiểu Item nào đó;
- Biến In chỉ số phân tử được sản xuất;
- Biến Out chỉ số phân tử được tiêu thụ;
- Tiến trình P sản xuất thông tin chứa trong biến trung gian NextP;
- Tiến trình C tiêu thụ thông tin chứa trong biến trung gian NextC
Khi đó:
- Vùng đệm rỗng khi In= Out;
- Vùng đệm đầy khi ( In +1) mod n= Out
Trang 16Until false;
End;
Trang 17CHƯƠNG 2: TÀI NGUYÊN GĂNG VÀ ĐOẠN TỚI HẠN 2.1 Tài nguyên “găng” và đoạn tới hạn
2.1.1 Tài nguyên găng (Critical Resource)
Trong môi trường hệ điều hành đa nhiệm - đa chương – đa người sử dụng, việc chia sẻ tài nguyên cho các tiến trình của người sử dụng dùng chung là cần thiết, nhưng nếu hệ điều hành không tổ chức tốt việc sử dụng tài nguyên dung chung của các tiến trình hoạt động đồng thời, thì không những không mang lại hiệu quả khai thác tài nguyên của hệ thống mà còn làm hỏng dữ liệu của các ứng dụng Và nguy hiểm hơn là việc hỏng
dữ liệu này có thể hệ điều hành và ứng dụng không thể phát hiện được Việc hỏng dữ liệu của ứng dụng có thể làm sai lệch ý nghĩa thiết kế của nó Đây là điều mà cả hệ điều hành và người lập trình đều không mong muốn
Các tiến trình hoạt động đồng thời thường cạnh tranh với nhau trong việc sử dụng tài nguyên dùng chung Hai tiến trình hoạt động đồng thời cùng ghi vào một không gian nhớ chung (một biến chung) trên bộ nhớ hay hai tiến trình đồng thời cùng ghi dữ liệu vào một file chia sẻ, đó là những biểu hiện của sự cạnh tranh về việc sử dụng tìa nguyên dùng chung của các tiến trình Để các tiến trình hoạt động đồng thời không cạnh tranh hay xung đột với nhau khi sử dụng tài nguyên dùng chung hệ điều hành phải tổ chức cho các tiến trình này được độc quyền truy xuất/ sử dụng trên các tài nguyên dùng chung này
Những tài nguyên được hệ điều hành chia sẻ cho nhiều tiến trình hoạt động đồng thời dùng chung, mà có nguy cơ dẫn đến sự tranh chấp giữa các tiến trình này khi sử dụng chúng, được gọi là tài nguyên găng Tài nguyên găng có thể là tài nguyên phần cứng hoặc tài nguyên phần mền, có thể là tài nguyên phân chia được hoặc không phân chia được, nhưng đa số thường là tài nguyên phân chia được như là: các biến chung, các file chia sẻ
Các ví dụ sau đây cho thấy hậu quả của việc sử dụng tài nguyên găng trong các chương trình có các tiến trình hoạt động đồng thời:
Ví dụ 1: Giả sử có một chương trình, trong đó có hai tiến trình P1 và P2 hoạt
động đồng thời với nhau Tiến trình P1 phải tăng biến Count lên 1 đơn vị, tiến trình P2 phải tăng biến Count lên 1 đơn vị, với mục đích tăng Count lên được 2 đơn vị
Trang 18Chương trình có thể thực hiện như sau:
1 Tiến trình P1 ghi nội dung biến toàn cục Count vào biến cục bộ L1
2 Tiến trình P2 ghi nội dung biến toàn cục Count vào biến cục bộ L2
3 Tiến trình P1 thực hiện L1:= L1 + 1 và Count := L1
4 Tiến trình P2 thực hiện L2:= L2 + 1 và Count := L2
Như vậy thoạt nhìn ta thấy rằng chắc chắn Count đã tăng được 2 đơn vị, nhưng trong thực tế có thể Count chỉ tăng được 1 đơn vị Bởi vì, nếu P1 và P2 đồng thời nhận giá trị của Count (giả sử ban đầu Count = 4) vào L1 và L2, sau đó P1 tăng L1 lên 1 và P2 tăng L2 lên 1 (L1 = 5, L2 = 5), rồi sau đó cả P1 và P2 đồng thời ghi giá trị biến L của nó vào lại Count, thì Count chỉ tăng được 1 đơn vị, Count = 6 Đây là điều mà chương trình không mong muốn nhưng cả chương trình và hệ điều hành đều khó có thể phát hiện được
Nguyên nhân ở trên là do 2 tiến trình P1 và P2 đồng thời truy xuất biến Count,
cả khi nhận giá trị của count, lẫn khi ghi giá trị vào Count Trong trường hợp này nếu
hệ điều hành không cho phép hai tiến trình P1 và P2 đồng thời truy xuất Count, hoặc hệ điều hành cho phép mỗi tiến trình được độc quyền truy xuất Count trong đoạn code sau, thì lỗi trên sẽ không xảy ra
Trong trường hợp này tài nguyên găng là biến count
Ví dụ 2: Giả sử có một ứng dụng Kế toán, hoạt động trong môi trường đa nhiệm,
đa người sử dụng Mỗi người sử dụng trong môi trường này khi cần thực hiện thao tác rút tiền từ trong tài khoản chung thì phải khởi tạo một tiến trình, tạm gọi là tiến trình rút tiền, tiến trình rút tiền chỉ có thể thực hiện được thao tác rút tiền khi số tiền cần rút nhỏ hơn số tiền còn lại trong tài khoản chung Trong môi trường này có thể có nhiều người
sử dụng đồng thời thực hiện thao tác rút tiền từ tài khoản chung của hệ thống
Trang 19Như vậy các tiến trình rút tiền, giả sử có hai tiến trình rút tiền P1 và P1, có thể
hoạt động đồng thời với nhau và cùng chia sẻ không gian nhớ lưu trữ biến Tài khoản,
cho biết số tiền còn trong tài khoản dùng chung của hệ thống Và mỗi tiến trình rút tiền
khi muốn rút một khoảng tiền từ tài khoản (Tiền rút) thì phải thực hiện kiểm tra Tài
khoản sau đó mới thực hiện việc rút tiền Tức là mỗi tiến trình rút tiền, khi cần rút tiền
đều phải thực hiện đoạn code sau đây:
IF (Tài khoản - Tiền rút >= 0) {kiểm tra tài khoản}
Tài khoản := Tài khoản - Tiền rút {thực hiện rút tiền} Else
Thông báo lỗi {không thể rút tiền} EndIf;
Nếu tại một thời điểm nào đó:
• Trong tài khoản còn 800 ngàn đồng (Tài khoản = 800)
• Tiến trình rút tiền P1 cần rút 500 ngàn đồng (Tiền rút = 500)
• Tiến trình rút tiền P2 cần rút 400 ngàn đồng (Tiền rút = 400)
• Tiến trình P1 và P2 đồng thời rút tiền
Thì theo nguyên tắc điều trên không thể xảy ra, vì tổng số tiền mà hai tiến trình cần rút lớn hơn số tiền còn lại trong tài khoản (500 + 400 > 800) Nhưng trong môi trường đa nhiệm, đa người sử dụng nếu hệ điều hành không giám sát tốt việc sử dụng tài nguyên dùng chung của các tiến trình hoạt động đồng thời thì điều trên vẫn có thể xảy ra tức là, cả hai tiến trình P1 và P2 đều thành công trong thao tác rút tiền, mà ứng dụng cũng như hệ điều hành không hề phát hiện Bởi vì, quá trình rút tiền của các tiến trình P1 và P2 có thể diễn ra như sau:
1 P1 được cấp processor để thực hiện việc rút tiền: P1 thực hiện kiểm tra tài
khoản: Tài khoản - Tiền rút = 800 -500 = 300 > 0, P1 ghi nhận điều này và
chuẩn bị rút tiền
2 Nhưng khi P1 chưa kịp rút tiền thì bị hệ điều hành thu hồi lại processor, và
hệ điều hành cấp processor cho P2 P1 được chuyển sang trạng thái ready
3 P2 nhận được processor, được chuyển sang trạng thái running, nó bắt đầu
Trang 20thực hiện việc rút tiền như sau: kiểm tra tài khoản: Tài khoản - Tiền rút = 800 -
400 = 500 >= 0, P2 ghi nhận điều này và thực hiện rút tiền:
Tài khoản = Tài khoản - Tiền rút = 800 - 400 = 400
4 P2 hoàn thành nhiệm vụ rút tiền, nó kết thúc xử lý và trả lại processor cho
hệ điều hành Hệ điều hành cấp lại processor cho P1, tái kích hoạt lại P1 để nó tiếp tục thao tác rút tiền
5 Khi được hoạt động trở lại P1 thực hiện ngay việc rút tiền mà không thực hiện việc kiểm tra tài khoản (vì đã kiểm tra trước đó):
Tài khoản = Tài khoản - Tiền rút = 400 - 500 = -100
6 P1 hoàn thành nhiệm vụ rút tiền và kết thúc tiến trình
Như vậy cả 2 tiến trình P1 và P2 đều hoàn thành việc rút tiền, không thông báo lỗi, mà không gặp bất kỳ một lỗi hay một trở ngại nào Nhưng đây là một lỗi nghiêm trọng đối với ứng dụng, vì không thể rút một khoảng tiền lớn hơn số tiền còn lại trong
tài khoản, hay Tài khoản không thể nhận giá trị âm
Nguyên nhân của lỗi này không phải là do hai tiến trình P1 và P2 đồng thời truy xuất biến Tài khoản, mà do hai thao tác: kiểm tra tài khoản và thực hiện rút tiền, của các tiến trình này bị tách rời nhau Nếu hệ điều hành làm cho hai thao tác này không tách rời nhau thì lỗi này sẽ không xảy ra
Kết luận: Chúng ta cũng thấy rằng nguyên nhân tiềm ẩn của sự xung đột giữa
các tiến trình hoạt động đồng thời khi sử dụng tài nguyên găng là: các tiến trình này hoạt động đồng thời với nhau một cách hoàn toàn độc lập và không trao đổi thông tin với nhau nhưng sự thực thi của các tiến trình này lại ảnh hưởng đến nhau
2.1.2 Đoạn tới hạn (hay đoạn găng) (Critical Section):
• Bài toán đoạn tới hạn: Giả sử có n tiến trình P0,P1,…, Pn-1 song hành, mỗi tiến trình
có một đoạn tới hạn Tìm một phương thức sao cho các tiến trình vượt qua đoạn tới hạn của hình mà không ảnh hưởng tới hoạt động của hệ thống
• Nhân xét: Việc giải quyết bài toán đoạn tới hạn là phải thiết kế một nghi thức sao
cho các tiến trình có thể sử dụng để hợp tác với nhau và thỏa mãn ba điều kiện:
Trang 21o Điều kiện loại trừ lẫn nhau: Tại mỗi thời điểm, chỉ có một tiếng trình được phép thực hiện trong đoạn tới hạn của mình
o Điều kiện tiến triển: Không tiến trình nào được phép ở lâu vô hạn trong đoạn tới hạn của mình
o Điều kiện chờ đợi có giới hạn: Các tiến trình không phải chờ đợi vô hạn trước khi đi vào đoạn tới hạn của mình
• Hai xu hướng mà các hệ điều hành thường áp dụng để giải quyết bài toán đoạn tới hạn là:
o Sử dụng các thuật toán cấp thấp: Là các thuật toán nằm ngay trong tiến trình
o Sử dụng các thuật toán cấp cao: Là các thuật toán nằm ngoài tiến trình
2.2 Các phương pháp giải quyết bài toán đoạn tới hạn
2.2.1 Phương pháp khóa trong
Nguyên tắc chung:
Phương pháp này dựa trên cơ sở nếu hai hay nhiều tiến trình cùng định ghi vào một địa chỉ nào đó của bộ nhớ trong thì giải thuật chỉ cho phép một tiến trình được thực hiện còn các tiến trình khác phải chờ
Mỗi tiến trình sử dụng một byte trong bộ nhớ để làm khóa Khi tiến trình vào đoạn giới hạn, byte khóa của nó được gán giá trị = 1 để thông báo cho các tiến trình còn lại biết tài nguyên găng đã được sử dụng Khi ra khỏi đoạn tói hạn, byte khóa được gán giá trị =0 để thông báo tài nguyên găng đã được giải phóng
Trước khi vào đoạn tới hạn, các tiến trình phải kiểm tra byte khóa của các tiến trình khác Nếu có byte nào đó chứa giá trị = 1 thì tiến trình phải chờ cho tới khi byte
Trang 22Thuật toán dekker
Để giải quyết nhược điểm trên, thuật toán của dekker dùng thêm một biến khóa TT để xác định độ ưu tiên của các tiến trình khi cả hai tiến trình cùng muốn vào đoạn tới hạn (TT = 1 hoặc TT =2)
Trang 23K1 := 1;
While K2 = 1 do
If TT = 2 then begin
Thuật toán Dekker giải quyết bài toán đoạn tới hạn hợp lý trong mọi trường hợp
dù tốc độ thực hiện của các tiến trình khác nhau
Ưu điểm và nhược điểm của phương pháp khóa trong:
- Ưu điểm: Phương pháp khóa trong không đòi hỏi công cụ đặc biệt do đó có thể
tổ chức bằng một ngôn ngữ bất kì và thực hiện trên mọi hệ thống
- Nhược điểm: Độ phức tạp của thuật toán sẽ tăng khi số tiến trình nhiều hoặc số lượng đoạn tới hạn trong các tiến trinh lớn; các tiến trình phải chờ đợi ở trạng thái tích cực
Trang 242.2.2 Phương pháp kiểm tra và xác lập
Nguyên tắc chung:
Phương pháp này dựa vào sự hỗ trợ của phần cứng, có một lệnh thực hiện hai phép xử lý liên tục không bị tách rời
Giả sử ta gọi lệnh đó là TS (Test and Set), lệnh này có hai tham số: biến chung
G và biến riêng L (biến chung G thông thường là một bit trong từ trạng thái hoặc trong thanh ghi cờ) Dạng thức thực hiện của lệnh TS(L) như sau:
L := G (gán giá trị biến chung cho biến riêng)
G := 1 (gán giá trị 1 cho biến chung)
Thuật toán: (cho bài toán hai tiến trình)
Trang 25- Ưu điểm: Phương pháp này đơn giản, độ phức tạp không tăng khi số tiến trình và
số đoạn tới hạn tăng Nhiều máy tính được trang bị tới vài lệnh kiểu này để điều khiển tiến trình nhu IBM PC có tới 4 lệnh
- Nhược điểm: Tiến trình vẫn phải chờ đợi tích cực; khó xác định được tiến trình nào sẽ vào đoạn tới hạn khi có quá nhiều tiến trình cùng chờ
Nếu S>=0 thì tiếp tục thực hiện tiến trình;
Nếu S<0 thì đưa tiến trình vào hàng đợi
Định nghĩa phép SIGNAL(S):
S := S + 1;
Nếu S <= 0 thì đưa tiến trình trong hàng đợi vào đoạn tới hạn
Chú ý:
- Phép WAIT và SIGNAL không bị phân chia trong tiến trình thực hiện
- Nêu ban đầu S = 1 và cả hai tiến trình đều đưa ra phép WAIT(S) thì chỉ có một tiến trình được phép vào đoạn tới hạn, tiếng trình còn lại sẽ được đưa vào hàng đợi
Thuật toán: (cho bài toán hai tiến trình)
Var S: byte;
Begin
S := 1;
{Thuật toán 1}
Trang 26Repeat
WAIT(S);
Tiến trình 1 vào đoạn tới hạn;
SIGNAL(S) Phần còn lại của tiến trình 1;
Until false;
End;
Ưu điểm và nhược điểm của phương pháp đèn hiệu:
- Ưu điểm: Trong phương pháp này, mỗi tiến trình chỉ cần kiểm tra quyền vào đoạn tới hạn một lần, sau đó nó được vào đoạn tới hạn hoặc phải xếp hàng đợi; trong khi đợi, tiến trình không ở trạng thái tích tực vì khi một tiến trình nào đó ra khỏi hàng đợi, nó sẽ bật tín hiệu đưa tiến trình thoát khỏi trạng thái chờ để vào đoạn tới hạn
- Nhược điểm: Phép WAIT và SIGNAL phải tổ chức và xử lý hàn đợi do đố phụ thuộc vào từng hệ điều hành cụ thể và thường được thể hiện dưới dạng các thủ tục Khi các tiến trình nằm trong hàng đợi, cần phải áp dụng các thuật toán xử lý hàng đợi để đạt được kết quả tối ưu
2.2.4 Phương pháp dùng trình thư ký:
Nguyên tắc chung:
Trình thư ký(monitor) là bộ các thủ tục và cấu trúc thông tin động, hoạt động trong chế đọ phân chia thời gian, hỗ trợ việc thực hiện tiến trình Mỗi thời điểm chỉ có một tiến trình làm việc được với monitor
Cơ chế hoạt động của monitor:
Trang 27Khi tiến trình muốn sử dụng tài nguyên, hệ thống gắn monitor vào tiến trình Nếu được phép sử dụng tài nguyên thì tiến trình sẽ được tiếp tục bình thường nếu không thì tiến trình được xếp vào hàng đợi
Khi tài nguyên găng được giải phóng thì monitor nhận điều khiển và bật tín hiệu giải phóng tiến trình khỏi trạng thái chờ
Chú ý:
- Monitor không phải là một tiến trình mà chỉ là một đối tượng thụ động
- Monitor nằm ngoài tiến trình
- Monitor được kích hoạt khi tiến trình cấn sử dụng (thông thường monitor được
hệ thống kích hoạt khi phân phối lại tài nguyên)
Ưu điểm và nhược điểm của phương pháp dùng trình thư kí:
- Ưu điểm: Monitor chứa nhiều cấu trúc thông tin động nên nó có thể giải quyết tốt vấn đề đoạn tới hạn; monitor có thể ghép vào lớp công cụ hệ thống nên có tính phố dụng cao(nhiều tiến trình có thể ghép vào lớp công cụ hệ thống nên có tính phổ dụng cao (nhiều tiến trình có thể sử dụng được)
- Nhược điểm: Monitor cũng có thể trở thành tài nguyên găng
2.2.5 Phương pháp tổ chức liên lạc giữa các tiến trình:
Hệ điều hành xây dựng xây dựng một hệ thông báo giữa các tiến trình dựa trên
ba thao tác cơ bản:
- Send message: Gửi thông báo;
- Receive message: Nhận thông báo;
- Communication link: Tạo móc nối liên lạc giữa các tiến trình
Dựa vào hệ thông báo này, các tiến trình có thể phối hợp để vào đoạn tới hạn bằng cách trao đổi thông báo cho nhau Hệ thống báo sử dụng hai cách thức liên lạc:
- Trực tiếp: bằng cách sửa hai thao tác gửi và nhận;
- Gián tiếp: dùng hộp thư trung gian
Trang 28CHƯƠNG 3: HIỆN TƯỢNG BẾ TẮC 3.1 KHÁI NIỆM
Một tập các tiến trình bị bế tắc nếu mỗi tiến trình trong tập tiến trình chờ một
sự kiện mà chỉ có tiến trình khác trong tập các tiến trình đó tạo ra.Tất cả các tiến trình đều đang chờ, không một tiến trình nào trong chúng có thể tạo ra bất kỳ một sự kiện nào
để có thể đánh thức tiến trình khác trong tập tiến trình, vì vậy tất cả các tiến trình tiếp tục chờ mãi mãi
Trong hầu hết các trường hợp, sự kiện mà tiến trình đang chờ giải phóng vài tài nguyên hiện tại mà tiến trình khác trong tập tiến trình bị chặn đang chiếm giữ Hay nói cách khác, mỗi thành viên của tập các tiến trình bế tắc đang chờ tài nguyên là sở hữu của một tiến trình bị chặn khác Không một tiến trình nào có thể chạy thực hiện, không một tiến trình nào có thể giải phóng tài nguyên và cũng không một tiến trình nào có thể thức dậy
Như vậy, bế tắc là trạng thái khi hai hay nhiều tiến trình cùng chờ đợi một sự kiện nào đó cà nếu không có tác động đặc biệt từ bên ngoài thì sự chờ đợi đó là vô hạn
3.2 ĐIỀU KIỆN XẢY RA BẾ TẮC
Cofman, Elphick và Shosani vào năm 1971 đã đưa ra 4 điều kiện cần có thể làm xuất hiện bế tắc:
- Có sử dụng tài nguyên không thể chia sẻ - tài nguyên găng (Mutual exclusion) Mỗi thời điểm, một tài nguyên không thể chia sẻ được hệ thống cấp phát chỉ một tiến trình, khi tiến trình sử dụng xong tài nguyên này hệ thống mới thu hồi và cấp phát tài nguyên cho hệ thống khác
- Sự chiếm giữ và yêu cầu thêm tài nguyên (Wait for)
Tiến trình được phép giữ và yêu cầu thêm một hoặc nhiều tài nguyên và chờ cung cấp tài nguyên đang bị tiến trình khác chiếm giữ
- Không thu hồi được tài nguyên từ tiến trình đang giữ chúng (No preemption) Tài nguyên chỉ tự nguyện giải phóng khi sử dụng xong Không một tiến trình nào hay hệ điều hành có thể thu hồi tài nguyên từ tiến trình đang chiếm giữ chúng
Trang 29- Tồn tại một chu kỳ chờ trong đồ thị cấp phát tài nguyên (Circular wait)
Có ít nhất hai tiến trình chờ đợi lẫn nhau: tiến trình này chờ cấp phát tài nguyên đang bị tiến trình kia chiếm giữ và ngược lại
Tất cả 4 điều kiện này cần phải ngăn chặn để bế tắc không xảy ra Khi có đủ 4 điều kiện này thì bế tắc xảy ra Nếu thiếu 1 trong 4 điều kiện này thì không có bế tắc
3.3 CÁC MỨC PHÒNG TRÁNH BẾ TẮC
Để ngăn ngừa hiện tượng bế tắc, thông thường hệ thống áp dụng ba mức :
- Ngăn ngừa: Áp dụng các biện pháp để không rơi vào trạng thái bế tắc
- Dự báo và tránh bế tắc: Áp dụng các biện pháp để kiểm tra các tiến trình xem
có bị rơi vào trạng thái bế tắc hay không Nếu có thì thông báo trước khi có
3.4.1.1 Loại bỏ tài nguyên găng
Mô phỏng tài nguyên găng bằng các tài nguyên có thể dùng chung được như kĩ thuật SPOOL
3.4.1.2 Loại bỏ yếu tố giữ và đợi
Thực hiện phân bổ trước tài nguyên; tiến trình chỉ có thể thực hiện khi mọi tài nguyên mà nó yêu cầu đã được phân bố đủ Tiến trình chỉ được phép đòi tài nguyên khi
nó không giữ tài nguyên nào cả Nếu tiến trình phải đợi thì mọi tài nguyên nó đang giữ phải tạm thời giải phóng
3.4.1.3 Xây dựng hệ thống ngắt tài nguyên:
Hệ thống ngắt tài nguyên có thể được xây dựng theo hai phương pháp:
- Phương pháp 1: Nếu tiến trình đang giữ một số tài nguyên và yêu cầu tài nguyên
bổ sung nhưng hệ thống không thể phân bố ngay được thì mọi tài nguyên mà tiến trình
Trang 30đang giữ sẽ bị ngắt và được bổ sung và danh sách các tài nguyên tự do Tiến trình sẽ được bắt đầu lại khi nó được phân bổ đủ các tài nguyên cần thiết
- Phương pháp 2: Nếu tiến trình đang giữ một số tài nguyên và yêu cầu tài nguyên
bổ sung nhưng hệ thống không thể phân bổ ngay được, khi đó hệ thống sẽ kiểm tra xem tài liệu mà tiến trình yêu cầu có bị giữ bởi các tiến trình cũng đang đợi hay không Nếu
có thì ngắt các tiến trình này, thu hồi lại tài nguyên để phân bố cho tiến trình yêu cầu; ngược lại tiến trình yêu cầu phải đợi và trong khi đợi, tài nguyên có của nó cũng có thể
bị ngắt khi có tiến trình khác yêu cầu Tiến trình sẽ được bắt đầu lại khi nó được phân
bổ đủ tài nguyên và tái tạo lại các tài nguyên
3.4.1.4 Loại bỏ yếu tố chờ đợi vòng tròn
Yếu tố chời đợi vòng tròn có thể được lại bỏ bằng cách sắp thứ tự các tài nguyên Mỗi tài nguyên r được gán một số thứ tự f(r)
- Phương pháp 1: Tiến trình tài nguyên ri chỉ được phép đòi tài nguyên rj khi f(ri) < f(rj)
- Phương pháp 2: Tiến trình đang giữ tài nguyên ri muốn đòi tài nguyên rj thì phải giải phón các tài nguyên ri thỏa mãn điều kiện f(ri) > f(rj)
3.4.2 Dự báo và tránh bế tắc
Hệ thống ở trạng thái an toàn tại một thời điểm nếu dãy tiến trình song song hành tại thời điểm đó có thể đọc được sắp xếp thành một dãy an toàn
Thuật toán chuyển sang trạng thái an toàn:
Step 1: If Request(i) <= Need(i) then go to Step 2 else error;
(tiến trình yêu cầu tài nguyên vượt quá quy định) Step 2: If Request(i) <= Available then go to Step 3 else Pi wait;
(Không đủ tài nguyên để phân bổ cho Pi) Step 3: Hệ thống dự định phân bổ tài nguyên như sau:
Available: = Available - Request(i)
Allocation(i): = Allocation(i) + Request(i)
Need(i): = Need(i) - Request(i)
Step 4: Kiểm rea tính an toàn của hệ:
Nếu hệ ở trạng thái an toàn thì phân bổ tài nguyên theo dự định, ngược lại tiến trình Pi phải đợi cùng với yêu cầu tài nguyên Request(i)