Giáo trình hướng dẫn phân tích tập hợp các tiến trình hoạt động của hệ thống singleprocessor p4

5 20 0
Giáo trình hướng dẫn phân tích tập hợp các tiến trình hoạt động của hệ thống singleprocessor p4

Đang tải... (xem toàn văn)

Thông tin tài liệu

rường hợp lỗi trong ví dụ 3 ở trên minh chứng cho điều này. II.2.5. Đoạn găng (Critical Section) Đoạn code trong các tiến trình đồng thời, có tác động đến các tài nguyên có thể trở thành tài nguyên găng được gọi là đoạn găng hay miền găng. Tức là, các đoạn code trong các chương trinh dùng để truy cập đến các vùng nhớ chia sẻ, các tập tin chia sẻ được gọi là các đoạn găng.

y o c u -tr a c k c trình hoạt động đồng thời sử dụng tài nguyên găng là: tiến trình hoạt động đồng thời với cách hồn tồn độc lập khơng trao đổi thông tin với thực thi tiến trình lại ảnh hưởng đến Trường hợp lỗi ví dụ minh chứng cho điều II.2.5 Đoạn găng (Critical Section) Đoạn code tiến trình đồng thời, có tác động đến tài nguyên trở thành tài nguyên găng gọi đoạn găng hay miền găng Tức là, đoạn code chương trinh dùng để truy cập đến vùng nhớ chia sẻ, tập tin chia sẻ gọi đoạn găng Trong ví dụ trên, đoạn code sau đoạn găng: { IF (Tài khoản - Tiền rút >= 0) Tài khoản := Tài khoản - Tiền rút } Trong ví dụ có hai đoạn găng là: { L1 := Count Count := L1 } Để hạn chế lỗi xảy sử dụng tài nguyên găng, hệ điều hành phải điều khiển tiến trình cho, thời điểm có tiến trình nằm đoạn găng, có nhiều tiến trình muốn vào (thực hiện) đoạn găng có tiến trình vào, tiến trình khác phải chờ, tiến trình khỏi (kết thúc) đoạn găng phải báo cho hệ điều hành và/hoặc tiến trình khác biết để tiến trình vào đoạn găng, vv Các công tác điều khiển tiến trình thực đoạn găng hệ điều hành gọi điều độ tiến trình qua đoạn găng Để cơng tác điều độ tiến trình qua đoạn găng thành cơng, cần phải có phối hợp vi xử lý, hệ điều hành người lập trình Vi xử lý đưa thị, hệ điều hành cung cấp công cụ để người lập trình xây dựng sơ đồ điều độ hợp lý, để đảm bảo độc quyền việc sử dụng tài nguyên găng tiến trình Trong phần sau tìm hiểu phương pháp sơ đồ điều độ tiến trình qua đoạn găng Nhưng trước hết chấp nhận mẫu chương trình sử dụng sơ đồ điều độ tiến trình Mẫu chương trình mang tính chất trừu tượng, dùng để minh hoạ cho ý tưởng điều độ Rất ngơn ngữ lập trình hỗ trợ cú phát viết chương trình điều độ Mặc dầu cung cấp đầy đủ công cụ điều độ tiến trình cho người lập trình, hệ điều hành tổ chức điều độ tiến trình lõi (kernel) nên người lập trình quan tâm đến tổ chức điều độ tiến trình lập trình Sau sơ đồ điều độ minh hoạ: Program MultualExclution; Const N = … /*số lượng tiến trình */ { } d o m o w w w d o C lic k to bu y bu to k lic C w w w N O W ! h a n g e Vi e N PD ! XC er O W F- w m h a n g e Vi e w PD XC er F- c u -tr a c k c y o c u -tr a c k c Procedure P(i: integer); Begin Repeat EnterCritical(R); {kiểm tra xác lập quyền vào đoạn găng} ; ExitCritical(R); {xác lập rời đoạn găng} ; Until F End; { -} BEGIN {*chương trình chứa tiến trình đồng thời*} PerBegin P(1); P(2); … P(n); ParEnd; END { -} Sơ đồ tổ chức điều độ cho n tiến trình P, n tiến trình hoạt đồng đông thời với chia sẻ tài nguyên dùng chung R Mỗi tiến trình trường hợp có đoạn găng với tài nguyên R Để tổ chức truy xuất độc quyền tài nguyên găng, tiến trình trước vào đoạn găng tiến trình phải gọi thủ tục EnterCritical để thiết lập quyền vào đoạn găng, để báo cho tiến trình biết tiến trình đoạn găng Để khỏi đoạn găng tiến trình phải gọi thủ tục ExitCritical, để báo cho tiến trình khác biết tiến trình khỏi đoạn găng II.2.6 Yêu cầu công tác điều độ qua đoạn găng Trước hết lưu ý lại rằng, nhiệm vụ điều độ tiến trình phải phối hợp giữ phần cứng vi xử lý, hệ điều hành, ngơn ngữ lập trình người lập trình, nhiệm vụ hệ điều hành người lập trình Vi xử lý, hệ điều hành ngơn ngữ lập trình cung cấp cơng cụ để hệ điều hành và/hoặc người lập trình tổ chức sơ đồ điều độ Hệ điều hành giám sát tổ chức thực sơ đồ điều độ Cho dù nhiệm vụ điều độ thành phần nào, tất phải đạt yêu cầu sau: Tại thời điểm khơng thể có hai tiến trình nằm đoạn găng .d o m o w w w d o C lic k to bu y bu to k lic C w w w N O W ! h a n g e Vi e N PD ! XC er O W F- w m h a n g e Vi e w PD XC er F- c u -tr a c k c y o c u -tr a c k c Nếu có nhiều tiến trình đồng thời xin vào đoạn găng có tiến trình phép vào đoạn găng, tiến trình khác phải xếp hàng chờ hàng đợi Tiến trình chờ ngồi đoạn găng khơng ngăn cản tiến trình khác vào đoạn găng Khơng có tiến trình phép lâu vơ hạn đoạn găng khơng có tiến trình phải chờ lâu vào đoạn găng (chờ hàng đợi) Nếu tài nguyên găng giải phóng hệ điều hành có nhiệm vụ đánh thức tiến trình hàng đợi để tạo điều kiện cho vào đoạn găng Trước tìm hiểu giải pháp điều độ tiến trình qua đoạn găng cần lưu ý lần rằng: nguyên lý điều độ tổ chức truy xuất độc quyền tài nguyên găng, bắt buộc độc quyền tồn hai hạn chế lớn: Có thể dẫn đến tắc nghẽn (Deadlock) hệ thống Chúng ta tìm hiểu tắc nghẽn sau, bây gời xem ví dụ tắc nghẽn: Giả có hai tiến trình P1 P2, hai tài nguyên găng R1 R2, tiến trình cần truy xuất đến để mã thực hàm Và trường hợp sau hồn tồn xảy ra: R1 giao cho P2, R2 giao cho P1 Mỗi tiến trình chờ đợi sử dụng tài nguyên thứ hai Khơng tiến trình giải phóng tài nguyên mà sở hữu có nhận tài nguyên lại thực đoạn găng Cả hai tiến trình bị tắc nghẽn Các tiến trình bị đói (Stravation) tài nguyên: Ví dụ sau cho thấy đói tài ngun tiến trình hệ thống: Giả sử có tiến trình P1, P2, P3, tiến trình cần truy xuất định kỳ đến tài nguyên R Xét trường hợp P1 sở hữu tài ngun cịn hai tiến trình P2, P3 phải chờ đợi tài ngun Khi mà P1 khỏi đoạn găng nó, P2 lẫn P3 chấp nhận truy xuất đến R Giả sử P3 truy xuất R, sau trước P3 kết thúc đoạn găng P1 lại lần cần truy xuất, P1 truy xuất sau P3 kết thúc đoạn găng, P1, P3 thay nhận quyền truy xuất P2 khơng thể truy cập đến tài ngun, cho dù khơng có tắc nghẽn xảy I.17 Điều độ tiến trình qua đoạn găng II.3.5 Các giải pháp phần cứng II.3.2.a Dùng cặp thị STI & CLI Một số vi xử lý cung cấp cặp thị CLI STI để người lập trình thực d o m o w w w d o C lic k to bu y bu to k lic C w w w N O W ! h a n g e Vi e N PD ! XC er O W F- w m h a n g e Vi e w PD XC er F- c u -tr a c k c y o c u -tr a c k c thao tác mở ngắt (STI: Setting Interrupt) cấm ngắt (CLI: Clean Interrupt) hệ thống lập trình Người lập trình dùng cặp thị để tổ chức điều độ cho tiến trình sau: Trước vào đoạn găng tiến trình thực thị CLI, để yêu cầu cấm ngắt hệ thống, ngắt đồng hồ khơng thể phát sinh, nghĩa khơng có tiến trình khác phát sinh, nhờ mà tiến trình đoạn găng tồn quyền sử dụng tài nguyên găng hết thời gian xử lý Khi kết thúc truy xuất tài nguyên găng, tiến trình khỏi đoạn găng, tiến trình thực thị STI phép ngắt trở lại Khi tiến trình khác tiếp tục hoạt động vào đoạn găng Trong sơ đồ điều độ tiến trình Pi viết sau: Procedure P(i: integer); Begin Repeat CLI; {cấm ngắt trước vào đoạn găng} ; STI; {mở ngắt khỏi đoạn găng } ; Until F End; { -} Sơ đồ cho thấy, tiến trình đoạn găng khơng bị ngắt, cấm ngắt phát sinh, nên độc quyền sử dụng tài nguyên găng khỏi đoạn găng Sơ đồ điều độ đơn giản, dễ cài đặt Tuy nhiên, cần phải có hỗ trợ vi xử lý dễ gây tượng treo toàn hệ thống, tiến trình đoạn găng khơng có khả khỏi đoạn găng Tiến trình khơng khỏi đoạn găng nên khơng thể thực thị STI để mở ngắt cho hệ thống, nên hệ thống bị treo hồn tồn Giải pháp khơng thể sử dụng hệ thống multiprocessor, CLI cấm ngắt vi xử lý cấm ngắt vi xử lý khác Tức là, sau cấm ngắt, tiến trình đoạn găng bị tranh chấp tài nguyên găng tiến trình vi xử lý khác hệ thống II.3.2.b Dùng thị TSL (Test and set) Trong ví dụ ta thấy, nguyên nhân lỗi hai thao tác kiểm tra tài khoản rút tiền, bị tách rời Để tổ chức điều độ cho trường hợp vậy, số vi xử lý cung cấp thị đặc biệt cho phép kiểm tra cập nhật nội dung vùng nhớ thao tác phân chia đươc, gọi Test and d o m o w w w d o C lic k to bu y bu to k lic C w w w N O W ! h a n g e Vi e N PD ! XC er O W F- w m h a n g e Vi e w PD XC er F- c u -tr a c k c y o c u -tr a c k c Set lock (TSL) TSL định nghĩa sau : Function TestAndSetLock(Var I:Integer):Boolean; Begin IF I = Then Begin I := 1; {hai lệnh không} TestAndSetLock:=True; {thể tách rời} End Else TestAndSetLock := False End; { -} Để tổ chức điều độ tiến trình với TSL chương trình phải sử dụng biến chia sẻ Lock, khời gán Theo đó, tiến trình trước vào đoạn găng phải kiểm tra giá trị Lock Nếu Lock = vào đoạn găng Nếu Lock = phải đợi Lock = Như vậy, trước vào đoạn găng tiến trình phải gọi hàm TestAndSetLock, để kiểm tra giá trị trả hàm này:  Nếu False, có tiến trình đoạn găng, phải chờ hàm trả True, có tiến trình vừa khỏi đoạn găng  Nếu True, tiến trình sẻ vào đoạn găng để sử dụng tài nguyên găng Khi kết thúc sử dụng tài nguyên găng khỏi đoạn găng tiến trình phải đặt lại gía trị Lock, Lock = 0, để tiến trình khác vào đoạn găng Nên nhớ TestAndSetLock thị processor, nên hệ thống tổ chức thực độc quyền cho Tức là, thao tác mà hệ thống phải thực thị tách rời Trong sơ đồ điều độ tiến trình P viết sau: Procedure P(Lock: integer); Begin Repeat While (TestAndSetlock(lock)) DO; ; Lock:= 0; ; Until F End; { -} d o m o w w w d o C lic k to bu y bu to k lic C w w w N O W ! h a n g e Vi e N PD ! XC er O W F- w m h a n g e Vi e w PD XC er F- c u -tr a c k c ... cho thấy đói tài nguyên tiến trình hệ thống: Giả sử có tiến trình P1, P2, P3, tiến trình cần truy xuất định kỳ đến tài nguyên R Xét trường hợp P1 sở hữu tài nguyên hai tiến trình P2, P3 phải chờ... Nếu có nhiều tiến trình đồng thời xin vào đoạn găng có tiến trình phép vào đoạn găng, tiến trình khác phải xếp hàng chờ hàng đợi Tiến trình chờ ngồi đoạn găng khơng ngăn cản tiến trình khác vào... (CLI: Clean Interrupt) hệ thống lập trình Người lập trình dùng cặp thị để tổ chức điều độ cho tiến trình sau: Trước vào đoạn găng tiến trình thực thị CLI, để yêu cầu cấm ngắt hệ thống, ngắt đồng hồ

Ngày đăng: 08/05/2021, 13:53

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan