Cờ hiệu ở trong Windows NT

Một phần của tài liệu CHƯƠNG 2: TIẾN TRÌNH potx (Trang 43 - 44)

P N( ∆t) = 1 j= 1 λ∆t (2.13)

2.3.4 Cờ hiệu ở trong Windows NT

Có nhiều kiểu kết cấu đồng bộ trong hệ điều hành Windows NT. Đối với sự đồng bộ cổ điển, các tiến trình và các xâu (threads) có các lệnh gọi hệ thống CreatSemaphore() và OpenSemaphore() mà nó sinh ra các cờ hiệu ở trong không gain biến toàn cục (giống như một file) cũng như bắt đầu việc truy cập về cái đó. Các tác vụ P() và V() thì phù hợp với các thủ tục WaitForSingleObject(Sema, TimeOutValue) và ReleaseSemaphore().

Về cái đó, người ta chọn các cờ hiệu với tư cách là những bộ đếm với một giá trị kết thúc lớn nhất hay với tư cách là những biến nhị phân cục bộ. Qua việc truy cập hệ thống ở trong các biến toàn cục thì cấu trúc cờ hiệu này với một tiêu phí gia tăng là có thể đáp ứng được. Do đó, đối với toạ độ của các vòng quay kín (spin locks) ở trong khoảng một tiến trình thì cờ hiệu trọng lượng nhẹ phụ sẽ được tạo lập, mà những cờ hiệu này chỉ quen thuộc ở trong khoảng một tiến trình hay trong khoảng một chương trình. Cờ hiệu này được gọi là khoảng tới hạn và được bắt đầu với lệnh InitialezeCriticalSection(s). Ở đây, các tác vụ P() và V() cũng có ý nghĩa là EnterCriticalSection(s) và LeaveCriticalSection(s).

Vì hệ điều hành Windows NT thì rất lý tưởng đối với các hệ đa vi xử lý kết nối chặt chẽ với bộ nhớ quảng đại, cho nên, nhân của hệ điều hành Windows NT được sử dụng thuận tiện cho việc đồng bộ đa vi xử lý. Ở đây, vòng quay kín (spin lock) được sử dụng như là cờ hiệu, do đó, một xâu (thread) với một vòng quay kín sẽ hãm giữ bộ vi xử lý thật lâu, cho tới khi nó lại rời bỏ vòng quay kín nàỵ Các tác vụ vòng quay kín này chỉ được sử dụng để dịch vụ hệ điều hành Windows NT Executivẹ Tuy nhiên, chúng vẫn có một vài hạn chế: thí dụ ở khoảng tới hạn thì không có tham chiếu nào tới khoảng nhớ được thực hiện, mà chúng đã được nạp trên bộ nhớ quảng đại, người ta có thể không cần gọi các thủ tục bên ngoài hay có thể không cần loại bỏ ngắt hoặc một ngoại tệ nàọ

Đối với các dịch vụ cao hơn thì cần tới các đối tượng nhân có những tính chất đồng bộ khác nhau và các đối tượng nhân này được quy tụ trong hệ thống định thời bình thường. Ví dụ về các đối tượng đó là các cờ hiệu, các biến cố (event), các cặp biến cố, các bộ hẹn thời, các quay vòng kín, các đối tượng loại trừ lẫn nhau…

Các đối tượng có thể tồn tại ở hai trạng thái: báo trước và không báo trước. Thí dụ, một đối tượng cờ hiệu đi qua trạng thái báo trước, nếu như bộ đếm chỉ số không (0) và rồi tất cả trở thành vòng chờ trống. Ở trong hệ điều hành Windows NT, một vòng chờ có thể chờ đợi trên những vòng chờ trống khác, chờ đợi các biến cố hay chờ đợi cờ hiệu và nhờ thế, nó có thể được làm đồng bộ. Win32 API thì sử dụng các thủ tục WaitForSingleObject() và WaitForMultipleObject(). Thí dụ, một vòng chờ ở trong một chương trình tờ trãi (hay còn gọi là chương trình bảng tính) có thể gọi một vòng chờ khác. Nếu người sử dụng kết thúc chương trình, do đó, tiến trình chính với lệnh WaitForSingleObject() chờ đợi sự kết thúc của tiến trình cưỡng bức, trước khi chương trình được kết thúc hoàn toàn và tất cả các dữ liệu bên trong bị loại bỏ.

Một phần của tài liệu CHƯƠNG 2: TIẾN TRÌNH potx (Trang 43 - 44)