Đồng bộ húa tiến trỡnh

Một phần của tài liệu BÀI GIẢNG NGUYÊN LÝ HỆ ĐIỀU HÀNH - TRẦN ANH TUẤN pptx (Trang 43 - 49)

d- Trao đổi thụng điệp (Message)

2.3.2.Đồng bộ húa tiến trỡnh

Trong một hệ thống cho phộp cỏc tiến trỡnh liờn lạc với nhau, bao giờ hệ điều hành cũng cần cung cấp kốm theo những cơ chế đồng bộ húa để bảo đảm hoạt động của cỏc tiến trỡnh đồng hành khụng tỏc động sai lệch đến nhau. Truy xuất đồng hành dữ liệu được chia sẻ cú thể dẫn tới việc khụng đồng nhất dữ liệu. Để đồng bộ húa tiến trỡnh, cần cú cỏc cơ chế đảm bảo việc thực thi cú thứ tự của cỏc tiến trỡnh hợp tỏc chia sẻ khụng gian địa chỉ để tớnh đỳng đắn của dữ liệu luụn được duy trỡ.

2.3.2.1. Nhu cầu đồng bộ húa tiến trỡnh

a- Yờu cầu độc quyền truy xuất (Mutual exclusion)

Cỏc tài nguyờn trong hệ thống được phõn thành hai loại: tài nguyờn cú thể chia sẻ cho phộp nhiều tiến trỡnh đồng thời truy xuất, và tài nguyờn khụng thể chia sẻ chỉ chấp nhận một (hay một số lượng hạn chế) tiến trỡnh sử dụng tại một thời điểm. Tớnh khụng thể chia sẻ của tài nguyờn thường cú nguồn gốc từ một trong hai nguyờn nhõn sau đõy:

Đặc tớnh cấu tạo phần cứng của tài nguyờn khụng cho phộp chia sẻ.

Nếu nhiều tiến trỡnh sử dụng tài nguyờn đồng thời, cú nguy cơ xảy ra cỏc kết quả khụng dự đoỏn được do hoạt động của cỏc tiến trỡnh trờn tài nguyờn ảnh hưởng lẫn nhau.

Để giải quyết vấn đề, cần bảo đảm tiến trỡnh độc quyền truy xuất tài nguyờn, nghĩa là hệ thống phải kiểm soỏt sao cho tại một thời điểm, chỉ cú một tiến trỡnh được quyền truy xuất một tài nguyờn khụng thể chia sẻ.

b- Yờu cầu phối hợp (Synchronization)

Nhỡn chung, mối tương quan về tốc độ thực hiện của hai tiến trỡnh trong hệ thống là khụng thể biết trước, vỡ điều này phụ thuộc vào nhiều yếu tố động như tần suất xảy ra cỏc ngắt của từng tiến trỡnh, thời gian tiến trỡnh được cấp phỏt bộ xử lý… Cú thể núi rằng cỏc tiến trỡnh hoạt động khụng đồng bộ với nhau. Nhưng cú những tỡnh huống cỏc tiến trỡnh cần hợp tỏc trong việc hoàn thành tỏc vụ, khi đú cần phải đồng bộ húa hoạt động của cỏc tiến trỡnh, vớ dụ một tiến trỡnh chỉ cú thể xử lý nếu một tiến trỡnh khỏc đó kết thỳc một cụng việc nào đú…

2.3.2.2. Tài nguyờn găng và miền găng a- Tài nguyờn găng (Critical Resource)

Tài nguyờn găng là tài nguyờn mà tại mỗi thời điểm, chỉ cú thể phục vụ được một tiến trỡnh; khi cú 2 hay nhiều tiến trỡnh cựng cú nhu cầu đối với tài nguyờn thỡ tài nguyờn đú trở thành tài nguyờn găng.

Những tài nguyờn găng thường phải chia sẻ cho nhiều tiến trỡnh hoạt động đồng thời dựng chung, và cú nguy cơ dễ dẫn đến sự tranh chấp giữa cỏc tiến trỡnh này khi sử

dụng chỳ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ềm, 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ẻ.

Trong mụi trường HĐH đ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ĐH khụng tổ chức 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ỡ 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. Nguy hiểm hơn, việc hỏng dữ liệu này cú thể HĐH 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ĐH 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ài 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ĐH 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.

b- Đoạn găng (Critical Section)

Đoạn chương trỡnh (code) trong cỏc tiến trỡnh đồng thời, cú chứa cỏc tài nguyờn găng, được gọi là đoạn găng hay miền găng.

Để hạn chế cỏc lỗi cú thể xảy ra do sử dụng tài nguyờn găng, HĐH phải điều khiển cỏc tiến trỡnh sao cho, tại một thời điểm chỉ cú một tiến trỡnh nằm trong đoạn găng, nếu cú nhiều tiến trỡnh cựng muốn vào (thực hiện) đoạn găng thỡ chỉ cú một tiến trỡnh được vào, cỏc tiến trỡnh khỏc phải chờ, một tiến trỡnh khi ra khỏi (kết thỳc) đoạn găng phải bỏo cho HĐH và/hoặc cỏc tiến trỡnh khỏc biết để cỏc tiến trỡnh này vào đoạn găng,… Cụng tỏc của HĐH điều khiển tiến trỡnh thực hiện đoạn găng được gọi là đồng bộ húa tiến trỡnh hay điều độ tiến trỡnh qua đoạn găng.

Việc điều độ tiến trỡnh phải đạt được cỏc yờu cầu sau:

1. Tại một thời điểm chỉ cú một tiến trỡnh được nằm trong đoạn găng.

2. Nếu cú nhiều tiến trỡnh đồng thời cựng yờu cầu vào đoạn găng thỡ chỉ cú một tiến trỡnh được phộp vào đoạn găng, cỏc tiến trỡnh khỏc phải xếp hàng chờ trong hàng đợi.

3. Khụng cho phộp một tiến trỡnh nằm vụ hạn trong đoạn găng và khụng cho phộp một tiến trỡnh chờ vụ hạn trước đoạn găng (chờ trong hàng đợi).

4. Nếu tài nguyờn găng được giải phúng thỡ HĐH cú nhiệm vụ đỏnh thức cỏc tiến trỡnh trong hàng đợi ra để tạo điều kiện cho nú vào đoạn găng.

Nguyờn lý cơ bản của điều độ là tổ chức truy xuất độc quyền trờn tài nguyờn găng, nhưng sự bắt buộc độc quyền này cũn tồn tại hai hạn chế lớn là cú thể dẫn đến bế tắc(Deadlock) trong hệ thống và cú thể cỏc tiến trỡnh bị đúi tài nguyờn (Starvation).

2.3.2.3. Cỏc giải phỏp a- Cỏc giải phỏp phần cứng

* Dựng cặp chỉ thị STI & CLI

Một số vi xử lý cung cấp cặp chỉ thị CLI và STI để người lập trỡnh thực hiện cỏc 44

thao tỏc mở ngắt (STI: Setting Interrupt) và cấm ngắt (CLI: Clean Interrupt) của hệ thống trong lập trỡnh.

Trước khi vào đoạn găng tiến trỡnh thực hiện chỉ thị CLI, để yờu cầu cấm cỏc ngắt trong hệ thống, khi đú ngắt đồng hồ khụng thể phỏt sinh, nghĩa là khụng cú một tiến trỡnh nào khỏc cú thể phỏt sinh, nhờ đú mà tiến trỡnh trong đoạn găng toàn quyền sử dụng tài nguyờn găng cho đến hết thời gian xử lý của nú.

Khi kết thỳc truy xuất tài nguyờn găng, tiến trỡnh ra khỏi đoạn găng, tiến trỡnh thực hiện chỉ thị STI để cho phộp ngắt trở lại. Khi đú cỏc tiến trỡnh khỏc cú thể tiếp tục hoạt động và cú thể vào đoạn găng.

Sơ đồ điều độ này đơn giản, dễ cài đặt. Tuy nhiờn, cần phải cú sự hỗ trợ của vi xử lý và dễ gõy ra hiện tượng treo toàn bộ hệ thống, khi tiến trỡnh trong đoạn găng khụng cú khả năng ra khỏi đoạn găng. Tiến trỡnh khụng ra khỏi đoạn găng nờn nú khụng thể thực hiện chỉ thị STI để mở ngắt cho hệ thống, nờn hệ thống bị treo hoàn toàn.

Giải phỏp này khụng thể sử dụng trờn cỏc hệ thống multiprocessor, vỡ CLI chỉ cấm ngắt trờn vi xử lý hiện tại chứ khụng thể cấm ngắt của cỏc vi xử lý khỏc. Tức là, sau khi đó cấm ngắt, tiến trỡnh trong đoạn găng vẫn cú thể bị tranh chấp tài nguyờn găng bởi cỏc tiến trỡnh trờn cỏc vi xử lý khỏc trong hệ thống.

* Dựng chỉ thị TSL (Test and Set)

Để 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 bằng 0. 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 = 0 thỡ vào đoạn găng. Nếu Lock = 1 thỡ phải đợi cho đến khi Lock = 0. Như vậy, trước khi vào đoạn găng tiến trỡnh phải gọi hàm TestAndSetLock, để kiểm tra giỏ trị trả về của hàm này:

- Nếu bằng False, là đang cú một tiến trỡnh trong đoạn găng, thỡ phải chờ cho đến khi hàm trả về True, cú một tiến trỡnh vừa ra khỏi đoạn găng.

- Nếu bằng True, thỡ 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 ra khỏi đoạn găng thỡ tiến trỡnh phải đặt lại giỏ trị của Lock, Lock = 0, để cỏc tiến trỡnh khỏc cú thể vào đoạn găng.

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 ưu và nhược điểm sau đõy:

Ưu điểm:

- Thớch hợp với một số lượng bất kỳ cỏc tiến trỡnh cả trờn hệ thống Uniprocessor và hệ thống Multiprocessor.

- Khỏ đơn giản cho nờn dễ xỏc định độ chớnh xỏc.

nghĩa cho nú một biến riờng. Nhược điểm:

- 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ự bế tắccú 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.

b- Cỏc giải phỏp dựng biến khoỏ * Dựng biến khúa 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ĐH 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ĐH 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.

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.

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).

* Dựng biến khúa riờng

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 46

đú 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 = 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.

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ỡ 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.

c- 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 trạng 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ĐH 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ĐH 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 hàng đợi blocked ra để tạo điều kiện cho tiến trỡnh này vào đoạn găng.

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 tỏ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ĐH 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.

* Giải phỏp dựng Semaphore (đốn bỏo)

Một phần của tài liệu BÀI GIẢNG NGUYÊN LÝ HỆ ĐIỀU HÀNH - TRẦN ANH TUẤN pptx (Trang 43 - 49)