intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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 p5

Chia sẻ: Hdfj Kuyloy | Ngày: | Loại File: PDF | Số trang:5

61
lượt xem
5
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Sơ đồ này đơn giản, dễ cài đặt nhưng cần phải có sự hỗ trợ của vi xử lý. Ngoài ra nó còn một hạn chế lớn là gây lãng phí thời gian xử lý của processor do tồn tại hiện tượng chờ đợi tích cực trong sơ đồ (While (TestAndSetlock(lock)) DO;). Hiện tượng chờ đợi tích cực là hiện tượng processor chỉ chờ một sự kiện nào đó xảy ra mà không làm gì cả. 

Chủ đề:
Lưu

Nội dung Text: 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 p5

  1. h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to k k lic lic C C w w m m w w w w o o .c .c .d o .d o c u -tr a c k c u -tr a c k Sơ đồ này đơn giản, dễ cài đặt nhưng cần phải có sự hỗ trợ của vi xử lý. Ngoài ra nó còn một hạn chế lớn là gây lãng phí thời gian xử lý của processor do tồn tại hiện tượng chờ đợi tích cực trong sơ đồ (While (TestAndSetlock(lock)) DO;). Hiện tượng chờ đợi tích cực là hiện tượng processor chỉ chờ một sự kiện nào đó xảy ra mà không làm gì cả.  Tóm lại: Việc sử dụng các chỉ thị phần cứng đặc biệt để tổ chức điều độ tiến trình qua đoạn găng, hay còn gọi là tổ chức truy xuất độc quyền trên tài nguyên găng, có những thuận lợi và bất lợi sau đây: Thuận lợi:  Nó thích hợp với một số lượng bất kỳ các tiến trình cả trên hệ hệ thống Uniprocessor và hệ thống Multiprocessor.  Nó khá đơn giản cho nên dễ xác định độ chính xác.  Nó có thể được sử dụng để hỗ trợ cho nhiều đoạn găng; mỗi đoạn găng có thể định nghĩa cho nó một biến riêng. Bất lợi:  Trong khi một tiến trình đang chờ đợi được vào đoạn găng thì nó tiếp tục làm tốn thời gian xử lý của processor, mà ta gọi là chờ đợi tích cực.  Sự đói tài nguyên có thể xảy ra. Khi một tiến trình rời khỏi một đoạn găng, bộ phận điều độ tiến trình phải chọn một tiến trình trong số nhiều tiến trình ngoài đoạn găng để cho nó vào đoạn găng. Việc chọn này có thể dẫn đến hiện tượng có một tiến trình đợi mãi mà không thể vào đoạn găng được.  Sự tắc nghẽn có thể xảy ra. Hãy xét một tình huống trên một hệ thống uniprocessor. Tiến trình P1 thực thi chỉ thị đặc biệt (TesAndSetLock, Exchange) và vào đoạn găng của nó. P1 sau đó bị ngắt để nhường processor cho P2, P2 là tiến trình có độ ưu tiên cao hơn. Nếu như P2 cũng định sử dụng tài nguyên như P1, P2 sẽ bị từ chối truy xuất bởi vì cơ chế độc quyền. Do đó P2 sẽ đi vào vòng lặp busy- waitting. Tuy nhiên, P1 sẽ không bao giờ được cấp processor để tiếp tục vì nó có độ ưu tiên thấp hơn so với P2. II.3.6. Các giải pháp dùng biến khoá II.3.3.a. Dùng biến khoá chung Xuất phát từ nguyên tắc cơ bản của tổ chức độc quyền là, tại mỗi thời điểm chỉ có duy nhất một tiến trình có thể truy xuất đến một vùng nhớ chia sẻ, các hệ điều hành sử dụng biến khoá chung để tổ chức truy xuất độc quyền trên tài nguyên găng. Phương pháp này còn gọi là phương pháp Busy and Waitting (bận và đợi), nó được nhà toán học người Hà Lan tên là Dekker đề xuất. Với mỗi tài nguyên găng, hệ điều hành dùng một biến chung để điều khiển việc sử dụng tài nguyên này của các tiến trình đồng thời. Tạm gọi là biến chung này là Lock, Lock được chia sẻ cho nhiều tiến trình và được khởi gán = 0.
  2. h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to k k lic lic C C w w m m w w w w o o .c .c .d o .d o c u -tr a c k c u -tr a c k Theo đó, mỗi tiến trình trước khi vào đoạn găng phải kiểm tra giá trị của Lock:  Nếu Lock = 1, tức là đã có tiến trình nào đó trong đoạn găng, thì tiến trình phải chờ cho đến khi Lock = 0 (có thể chuyển sang trạng thái blocked để chờ).  Nếu Lock = 0, tức là không có tiến trình nào trong đoạn găng, thì tiến trình thiết lập quyền vào đoạn găng, đặt Lock = 1, và vào đoạn găng. Tiến trình vừa ra khỏi đoạn găng phải đặt Lock = 0, để các tiến trình khác có thể vào đoạn găng. Trong sơ đồ điều độ này tiến trình P được viết như sau: Procedure P(Lock: integer); Begin Repeat While Lock = 1 DO ; {đợi cho đến khi Lock = 0} Lock :=1; {thiết lập quyền vào đoạn găng} ; {vào đoạn găng} Lock:= 0; {thông báo là đã rời đoạn găng } ; Until .F. End; {------------------------------------------------} Sơ đồ điều độ dùng biến khoá chung này đơn giản, dễ xây dựng nhưng vẫn xuất hiện hiện tượng chờ đợi tích cực, khi chờ cho đến khi Lock = 0 (While Lock = 1 DO;). Hiện tương chờ đợi tích cực gây lãng phí thời gian của processor. Nếu một tiến trình trong đoạn găng không thể ra khỏi đoạn găng, thì các tiến trình chờ ngoài đoạn găng có thể chờ đợi vô hạn (vì Lock không được đặt lại = 0). II.3.3.b. Dùng biến khoá riêng Để khắc phục hạn chế của phương pháp dùng biến chung, các hệ điều hành có thể dùng giải pháp biến riêng để tổ chức điều độ tiến trình. Mỗi tiến trình sử dụng một biến khoá Lock riêng, tương ứng với một tài nguyên găng trong hệ thống. Biến khoá riêng của tất cả các tiến trình đều được khởi gán bằng 0, tức là chưa vào đoạn găng Theo đó, mỗi tiến trình trước khi vào đoạn găng ứng với một tài nguyên găng nào đó thì trước hết phải kiểm tra biến khoá riêng, tương ứng với tài nguyên găng mà tiến trình muốn truy xuất, của tất cả các tiến trình còn lại:  Nếu tồn tại một biến khoá riêng của một tiến trình nào đó bằng 1, Lock
  3. h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to k k lic lic C C w w m m w w w w o o .c .c .d o .d o c u -tr a c k c u -tr a c k = 1, tức là đã có một tiến trình nào đó ở trong đoạn găng, thì tiến trình phải chờ ngoài đoạn găng cho đến khi tất cả biến khoá riêng = 0.  Nếu tất cả các biến khóa riêng của các tiến trình đều = 0, Lock = 0, tức là không có tiến trình nào trong đoạn găng, thì tiến trình thiết lập quyền vào đoạn găng, đặt Lock = 1, và vào đoạn găng. Tiến trình vừa ra khỏi đoạn găng phải đặt Lock = 0, để các tiến trình khác có thể vào đoạn găng. Sau đây là sơ đồ điều độ dùng biến khoá riêng cho hai tiến trình đồng thời P1 và P2. Hai tiến trình này dùng hai biến khoá riêng là Lock1 và Lock2: Program MultualExclution; Const N:2; Var Lock1, Lock2: byte; BEGIN Lock1 = 0; Lock2 = 0; ParBegin P1: Repeat {tiến trình P1} While Lock2 = 1 Do ; {P2 đang ở trong đoạn găng } Lock1 := 1; {P1 thiết lập quyền vào đoạn găng} ; Lock1 := 0; {P1 ra khỏi đoạn găng} ; Until .F. P2: Repeat {tiến trình P2} While Lock1 = 1 Do; {P1 đang ở trong đoạn găng } Lock2 := 1; {P2 thiết lập quyền vào đoạn găng} ; Lock2 := 0; {P2 ra khỏi đoạn găng} ; Until .F. ParEnd END. {--------------------------------------------------------} Sơ đồ này đơn giản dễ cài đặt. Một tiến trình nào đó ở ngoài đoạn găng bị blocked sẽ không ngăn cản được các tiến trình khác vào đoạn găng, nhưng nếu tiến trình trong đoạn găng bị lỗi không thể ra khỏi đoạn găng , Lock luôn luôn = 0, thì
  4. h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to k k lic lic C C w w m m w w w w o o .c .c .d o .d o c u -tr a c k c u -tr a c k các tiến trình khác sẽ không được quyền vào đoạn găng. Phương pháp này vẫn còn tồn tại hiện tượng chờ đợi tích cực và sơ đồ điều độ sẽ trở nên phức tạp khi có nhiều hơn hai tiến trình muốn vào đoạn găng. Sơ đồ này có thể xảy ra một lỗi nghiêm trọng đó là: Có thể có hai tiến trình cùng nằm trong đoạn găng. Nguyên nhân của lỗi này là do việc kiểm tra quyền vào đoạn găng và và việc xác lập quyền vào đoạn găng của tiến trình bị tách rời khi thực hiện. Tức là, P1 và P2 có thể bị điều phối thực hiện theo thứ tự sau: 1. P1 được cấp processor: P1 thực thi vòng lặp While và tìm xem thử Lock2 = 1 không. Khi P1 vừa nhìn thấy Lock2 = 0, thì bị thu hồi processor. 2. P2 được cấp processor: P2 thực thi vòng lặp While và tìm xem thử Lock1 = 1 không. Khi P2 vừa nhìn thấy Lock1 = 0, thì bị thu hồi processor. 3. P1 được cấp processor trở lại: P1 không kiểm tra lại Lock2 mà chỉ đặt Lock1 = 1 và vào đoạn găng của nó. Khi vừa vào đoạn găng thì bị thu hồi processor. 4. P2 được cấp processor trở lại: P2 không kiểm tra lại Lock1 mà chỉ đặt Lock2 = 1 và vào đoạn găng của nó. Rõ ràng với thực tế này thì cả P1 và P2 đều nằm trong đoạn găng. Và chúng ta đã biết điều gì sẽ xảy ra khi hai tiến trình đồng thời truy xuất tài nguyên găng trong các ví dụ về tài nguyên găng ở trên. Nhiều nhà thiết kế hệ điều hành đã cải tiến sơ đồ điều độ ở trên để khắc phục hạn chế trên đây và một số hạn chế khác của nó. II.3.7. Các giải pháp được hỗ trợ bởi hệ điều hành và ngôn ngữ lập trình Các giải pháp trên tồn tại hiện tượng chờ đợi tích cực, gây lãng phí thời gian xử lý của processor. Điều này có thể khắc phục bằng một nguyên tắc rất cơ bản: nếu một tiến trình khi chưa đủ điều kiện vào đoạn găng thì được chuyển ngay sang trang thái blocked để nó trả lại processor cho hệ thống, để hệ thống cấp cho tiến trình khác. Để thực hiện được điều này cần phải có sự hỗ trợ của hệ điều hành và các ngôn ngữ lập trình để các tiến trình có thể chuyển trạng thái của nó. Hai thủ tục Sleep và Wakeup được hệ điều hành cung cấp để sử dụng cho mục đích này:  Khi tiến trình chưa đủ điều kiện vào đoạn găng nó sẽ thực hiện một lời gọi hệ thống để gọi Sleep để chuyển nó sang trạng thái blocked, và tiến trình được gọi này đưa vào hàng đợi để đợi cho đến khi có một tiến trình khác gọi thủ tục Wakeup để giải phóng nó ra khỏi hàng đợi và có thể đưa nó vào đoạn găng.  Một tiến trình khi ra khỏi đoạn găng phải gọi Wakeup để đánh thức một tiến trình trong hang đợi blocked ra để tạo điều khiện cho tiến trình này vào đoạn găng.
  5. h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to k k lic lic C C w w m m w w w w o o .c .c .d o .d o c u -tr a c k c u -tr a c k Như vậy giải pháp này được áp dụng trên nhóm các tiến trình hoạt động đồng thời có trao đổi thông tin với nhau, và các tiến trình phải hợp thác với nhau để hoàn thành nhiệm vụ. Các tiến trình này liên lạc với nhau bằng cách gởi tín hiệu cho nhau. Một tiến trình trong hệ thống này có thể bị buộc phải dừng (bị blocked) cho đến khi nhận được một tín hiệu nào đó từ tiến trình bên kia, đó là tiến trình hợp tác với nó. Thực tế đã chỉ ra được rằng, nếu chỉ dùng hai thủ tục trên thì sơ đồ điều độ sẽ không đáp ứng được các yêu cầu của công tác điều độ, do đó khi cài đặt các hệ điều hành chỉ sử dụng ý tưởng của Sleep và Wakeup. Sau đây là các giải pháp sử dụng ý tưởng của Sleep và Wakeup. II.3.3.a. Giải pháp dùng Semaphore (sự đánh tín hiệu bằng cờ) (đèn báo) Giải pháp này được Dijkstra đề xuất vào năm 1965. Semaphore (sự đánh tín hiệu bằng cờ) được định nghĩa để sử dụng trong các sơ đồ điều độ như sau:  Semaphore (sự đánh tín hiệu bằng cờ) S là một biến nguyên, khởi gán bằng một giá trị không âm, đó là khả năng phục vụ của tài nguyên găng tương ứng với nó.  Ứng với S có một hàng đợi F(s) để lưu các tiến trình đang bị blocked trên S.  Chỉ có hai thao tác Down và Up được tác động đến semaphore (sự đánh tín hiệu bằng cờ) S. Down giảm S xuống một đơn vị, Up tăng S lên một đơn vị.  Mỗi tiến trình trước khi vào đoạn găng thì phải gọi Down để kiểm tra và xác lập quyền vào đoạn găng. Khi tiến trình gọi Down(S) thì hệ thống sẽ thực hiện như sau: S := S -1, nếu S > = 0 thì tiến trình tiếp tục xử lý và vào đoạn găng, nếu S < 0 thì tiến trình phải vào hàng đợi để chờ cho đến khi S > = 0. Down được cài đặt như sau: Procedure Down(s); Begin S := S -1; If S < 0 Then {S >= 0 thì tiếp tục} Begin Status(p)= blocked; {chuyển tiến trình sang blocked} Enter(p, F(s)); {đưa tiến trình vào hàng đợi F(S)} end; End;  Mỗi tiến trình ngay sau khi ra khỏi đoạn găng phải gọi Up để kiểm tra
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2