Bài giảng Hệ điều hành - Chương 5: Quản lý vào ra

Khả năng hiệu suất của một hệ thống máy tính không chỉ phụ thuộc vào kiểu

bộ vi xử lý và bề rộng từ (16, 32 hay 64 Bit), đặt biệt còn phụ thuộc một cách thực

chất vào tốc độ, mà với nó, các dữ liệu có thể được dịch chuyển giữa các thiết bị

vào - ra (kiểu bộ nhớ quảng đại, kiểu kết nối mạng.) và hệ thống bộ nhớ chính -bộ vi xử lý. Ở các ứng dụng khoa học thuần tuý, khả năng tính toán có thể đạt tới

hàng triệu phép tính dấu phẩy động. Trong sự khác biệt với điều đó, các yêu cầu

của các thiết bị tính toán thông thường thì bao gồm một sự pha trộn muôn màu

muôn vẻ các kiểu chương trình khác nhau: các thành phần tính toán, các ứng dụng

về ngân hàng dữ liệu, các nhiệm vụ quản lý. Cho nên, tỷ suất các chương trình

(benchmark programms) áp dụng những nhiệm vụ mà việc sửa chữa lỗi của chúng

được xác định một cách mạnh mẽ bởi một hệ thống gồm bộ vi xử lý, bộ nhớ chính,

bộ nhớ quảng đại và cấu trúc vận chuyển dữ liệu.

pdf27 trang | Chuyên mục: Hệ Điều Hành | Chia sẻ: dkS00TYs | Lượt xem: 2525 | Lượt tải: 3download
Tóm tắt nội dung Bài giảng Hệ điều hành - Chương 5: Quản lý vào ra, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
indows NT: 
Để quản lý bộ đệm Cache cho việc xuất-nhập có một trình điều hành Cache 
đặc biệt. Trình điều hành này cấp phát các trang một cách năng động ở trong bộ 
nhớ chính và tạo ra một sự ảnh xạ bộ nhớ giữa các trang bộ nhớ chính và một tệp 
tin. Số lượng các đối tượng đoạn (section object) là năng động: nó phụ thuộc vào 
bộ nhớ chính đựơc sử dụng cũng phụ thuộc vào sự thường xuyên truy cập trên các 
phần tệp tin. Điều đó sẽ xảy ra: các trang của trình điều hành bộ đệm Cache giống 
như các trang của một tiến trình xẽ được trình điều hành bộ nhớ ảo quản lý. Số 
lượng các trang tồn tại trong bộ nhớ chính sẽ được điều chỉnh qua cơ chế tập công 
tác (working set) hay cơ chế ảnh xạ (mapping mechanismus), xem mục 3.3 ở trên. 
Đối với việc đệm thêm khi xuất-nhập nối tiếp, các cơ chế đặc biệt phải được 
phát triển để nhằm nhận đựơc các kết quả của các chương trình từ đa tác vụ không 
có chặn trước của Windows 3.1 (16 Bit) đến đa tác vụ có chặn trước của Windows 
NT. Đối với mỗi thiết bị, ở trong Windows 3.1, có một hàng đợi I/O duy nhất và 
đối với các thiết bị nối tiếp cũng vậy. Nếu trong cửa sổ khác nhau, các việc nhập 
cào (nhập ký tự, kích chuột...) được dẫn ra, do đó, chúng sẽ đặt một đơn vị nhập 
vào bộ đệm nhập. Một cách tiện lợi, một tiến trình đọc/viết đưới Windows 3.1 kép 
dài bất kỳ (không có chặn trước), cho đến khi nó hoàn thành công việc nhập vào 
và bị hãm lại khi đọc trên bộ đệm nhập, nếu công việc tiếp theo không còn nữa đối 
với chúng. Tiến trình thuộc cửa sổ này được hoạt động bởi bộ điều hành cửa sổ và 
đọc vào phần bộ đệm của nó. 
Bây giờ, nếu chúng ta đi qua một giứoi hạn chặn trước, ở đó, một tiến trình có 
thể cùng được hoạt động ngay, nếu khoảng thời gian (time slice) của nó đã trôi 
qua, do đó, điều đó sẽ dẫn tới những vấn đề tại bộ nhớ đệm nhập: tiến trình (mới 
được tăng cường) này sẽ đọc các dữ liệu đã được xác định. Đó là trường hợp, khi 
tiến trình được dựng lại và được kết nối đầu cuối mà trước đó còn chứa đựng lỗi. 
Từ lý do này, ở Windows NT, mỗi tiến trình thread có một hàng đợi nhập riêng lẻ; 
việc nhập vào chưa được đọc này đối với một tiến trình thread được giữ lại tiến 
trình này và không được đọc thực thụ bới tiến trình thread kế cạnh; đó là hệ thống 
mạnh mẽ đối diện với các tiến trình chứa đựng lỗi. 
Chúng ta có thể tích hợp 2 hệ thống khác nhau như Windows 3.1 và Windows 
NT như thế nào? Tính logic của các tiến trình không chặn trước ở Windows 3.1 
cũng được dự đoán như tính logic của tiến trình trọng lượng nhẹ (thread), Bây 
giừo, ý tưởng này chỉ ra, cần phải sử dụng cơ chế của tiến trình thread ở trong 
Windows NT. Do đó, những nhà thiết kế hệ điều hành Windớ NT đã lý giải 
Windows 3.1 như một hệ thống con 16 Bit. Hệ thống này đã cho xuất phát các tác 
vụ 16 Bit như các tiến trình threads riêng lẻ. Tuy nhiên, một cách đúng mức, một 
bộ vi xử lý đã cứu thoát tiến trình này (cùng như tiến trình NT khác); khi trả lại bộ 
vi xử lý, tiến trình thread (xuất hiện sau cùng) nhận lại việc điều khiển một cách tự 
động; khi đó, coi như không xảy ra việc thay đổi tiến trình. Do đó, ở trong hệ 
thống Windows/DOS cũ, một số đặc điểm đạt được một cách tiện dụng. 
Tuy nhiên, nó còn có thể hơn thế: ở trong không gian địa chỉ bị tách chía, các 
ứng dụng 16 Bit được diễn biến như những tiến trình độc đáo. Trong trường hợp 
này chúng tỏ ra không còn ép buộc như trước đây dưới Windows 3.1; cho nên, 
điều này không còn có ý nghĩa ở tất cả các áp dụng cũ. 
5.4.4. Đồng bộ và không đồng bộ việc vào-ra. 
Việc vào-ra trong một chương trình thì cần thiết phải chờ đợi cho tới khi một 
gọi hệ thống được kết thúc một cách mỹ mãn. Khi đó, người ta gọii quá trình này 
là làm đồng bộ việc vào-ra (I/O synchrone). Bấy giườ, nó cần một khoảng thời 
gian cố định nào đó, cho tới khi việc vao-ra được thực hiện. thời gian này có thể 
được chương trình sử dụng một cách tốt hơn cho các công việc khác nhau. Ngay 
trong các chương trình đang tồn tại tiến trình thread, thì đều không thể nhận ra: tại 
sao tất cả các tiến trình thread chờ đợi việc vào-ra(!). 
Một khả năng để loại bỏ việc hãm chặn vừa nói là việc thừa nhận các tiến trình 
threads như là những tiến trình trọng lượng nhẹ nhờ hệ điều hành Windows NT. 
Khi đó, một cách phổ biến, chỉ có một thread bị hãm, còn các threads khác của 
tiến trình thì không. Tuy nhiên, điều này không phải bao giờ cũng xảy ra trong hệ 
điều hành. 
Một khả năng khác cho vấn đề này là vấn đề không đồng bộ tiến trình vào-ra 
(I/O asynchrone). Khi đó, gọi hệ thống sẽ dẫn tới chỉ một tác vụ xuất-nhập; kết 
quả sẽ được một tiến trình thread đón nhận một cách muộn hơn nhờ một lệnh đặc 
biệt. Kiểu gọi hệ thống này đặt ra cho hệ điều hành những yêu cầu đặc biệt; bởi vì 
ở đây, nhiệm vụ cũng như kết quả phải được quản lý và phải được lưu trữ trung 
gian thì phụ thuộc vào tiến trình uỷ nhiệm. 
Không đồng bộ I/O ở Unix: 
Ở các ấn bản thông thường của Unix, các gọi hệ thống cho phép chuyển đổi 
khi đọc/viết không bị ngăn hãm. Khi nhảy lui khỏi các thủ tục đọc/viết, số lượng 
các Bytes đọc/viết được hoàn trở lại. Nếu nó bằng 0 thì quá trình đọc/viết không 
xảy ra. 
Việc dẫn tới một quá trình không đồng bộ I/O đối với một tiến trình thì bình 
thường là không thể được. Tuy nhiên với một sự khéo léo, chúng ta có thể đạt 
được điều này. Cho cái đó, chúng ta sử dụng cơ chế fork() theo mục 2.1.1 (với 
hình minh hoạ 2.4) để nhận được bản copy của tiến trình. Tại quá trình I/O, bản 
copy bị hãm lại một cách đại diện. Sau đó, nếu tại bản copy chúng ta dự định một 
cơ chế exit(), do đó tiến trình chính có thể tiếp tục làm việc, cho tới khi, với một 
cơ chế wait(), nó có thể đón nhận kết quả của tác vụ I/O. 
Tuy nhiên, khả năng này là không thể thực tiến: để tạo lập được một tiến trình 
như vậy, phải tốn quá nhiều thời gian; vì rằng, kiểu vào-ra không đồng bộ này thì 
hầu như không mang lại lợi thế nào. Một quyết định cho cái đó là một sự kết nối 
nhanh chóng việc trao đổi thông tin với một tiến trình con (thí dụ qua bộ nhớ chia 
sẽ). Tiến trình con nay được tạo ra một lần và được sử dụng một bộ móc nối I/O 
và đới với tiến trình con này được tạo ra một lần và được sử dụng như một bộ móc 
nối I/O và đối với tiến trình chính, nó chờ đợi một cách đại diện. 
Cả hai cơ chế vừa nêu là một bộ phận thay thế không thể thiếu được với các 
khả năng không đồng bộ I/O ở trong Unix. 
Không đồng bộ I/O ở Windows NT: 
Trong hệ điều hành Windows NT, nếu việc vao-ra được thực hiện thì nó phụ 
thuộc vào một tham số, mà tham số này được dẫn ra bới các cơ chế WriteFile(), 
ReadFile(), CreateFile()... 
Trong trường hợp bình thường, gọi hệ thống được dẫn qua tất cả các lớp (dịch 
vụ hệ thống, trình điều hành I/O, bộ kích tạo thiết bị, ngắt chuyển đổi, nhảy lui) và 
dừng tiến trình tại một gọi hệ thống ReadFile(), cho tới khi các dữ liệu mong 
muốn trải ra. Ngược lại, nếu một thông số được chỉ ra overlapped (bị chồng lên 
nhau), do đó, dòng điều khiển sẽ đi tới việc hoãn lại và dẫn ra bộ chuyển đổi dữ 
liệu ngay lập tức trở lại gọi hệ thống. Tiến trình có thể tiếp tục làm việc, nhưng 
làm công việc khác. Để nhận được các số liệu mong muốn, một gọi hệ thống Wait 
(fileHandle) được thay thế, nó sẽ hãm chặn tiến trình thread, cho tới khi số liệu 
mong muốn được đưa ra. Đối tượng fileHandle được thuyên chuyển thành trạng 
thái báo trước và do đó, tiến trình được đánh thức. Bây giờ, nó có thể thực hiện 
gọi hệ thống ReadFile() và cuối cùng nó đọc các dữ liệu. 
Tuy nhiên, người ta phải lưu ý, không sử dụng một tiến trình thread thứ hai 
(chẳng hạn fileHandle) để dẫn tới hay chờ đợi mộttiến trình I/O không đồng bộ; 
tức là, với đối tượng fileHandle, một tín hiệu đánh thức cả hai tiến trình threads, 
mà chỉ một trong hai của nó khi đón nhận sai, do đó, khi xuất nhập các dữ liệu đã 
cho thấy rằng tiến trình đã được chuyển đổi. Một lối thoát khỏi tình trạng này là sử 
dụng các đối tượng biến cố riêng lẻ hay sử dụng các gọi thủ tục không đồng bộ 
(asynchronous procedủe calls:APCs) cho mỗi tiến trình thread. 
Một cách độc lấp với cái đó, tiến trình thread (vừa gọi) lập tức nhận được sự 
điều khiển trở lại và có thể tiếp tục làm việc. Sau đó, tiến trình thread này phải tự 
dẫn vào trạng thái chờ đợi, thí dụ nhờ các gọi hệ thống SleepEx(), 
WaitForSingleObjectEx() hay WaitForMultipleObjectEx(). Nếu việc đọc/viết 
được kết thúc một cách không đồng bộ, do đó, tiến trình thread lại được đánh thức 
và cũng khi đó, thủ tục kết thúc được gọi, thủ tục này có thể tạo thời có cho bước 
tiếp theo. 
5.5. Các bài tập của chương 5 
Bài tập 5.1. Về định thời truy cập ổ đĩa 
Trong chương này, bạn đã nghiên cứu các chiến lược định thời đối với việc 
truy cập ổ đĩa như FCFS, SSTF, LOOK, và SCAN. 
a). Việc dò tìm khi truy cập ổ đĩa có thể bị làm đói như thế nào? 
b). Các chiến lựơc riêng lẻ được biến hoá như thế nào, mà với điều này, khả 
năng làm đói không còn nữa? 
Bài tập 5.2. Về phân bố đan chen nhau trên ổ đĩa từ 
a). Sự phân bố đan chen trên ổ đĩa từ dùng để làm gì? 
b). Một ổ đĩa từ có một hệ số đan chen nhau bằng 2. Ổ đĩa chứa trên mỗi vòng 
xuyến khoảng 80 sector, mỗi sector có 256 Byte và quay với tốc độ 3600 
vòng/phút. Để đọc thông tin trên tất cả các sector của một vòng xuyến một cách 
tuần tự thì cần bao nhiêu thời gian? Giả thiết rằng, đầu từ đọc/viết luôn luôn định 
vị đúng và một nữa vòng quay được sử dụng cho tới kho sectors số 0 nằm dưới 
đầu từ. 
c). bạn hãy nhắc lại vấn đề đối với một ổ đĩa tương tự, nhưng không có hệ số 
đan chen, và một ổ đĩa với hệ số đanchen bằng 3. Hỏi tỷ phần dữ liệu tăng gat 
giảm như thế nào 
Bài tập 5.3 Lưu trữ trên bộ nhớ đệm 
Bạn hãy quan sát mô hình các lớp sau đây: 
Hệ thống tệp tin 
Bộ kích tạo đao thiết bị 
Bộ kích tạo đơn thiết bị 
Bộ điều khiển 
Thiết bị 
Những ưu điểm và khuyết điểm nào đã được dẫn ra, khi lưu trữ đệm vào một 
trong các lớp được thực hiện? cho cái đó, bạn hãy phân biệt thành 4 trường hợhp. 
Bạn hãy lưu ý một cách đặc biệt khi dữ liệu linh động. 

File đính kèm:

  • pdfHDH_chuong 5.pdf