[He Dieu Hanh] Chương 12 Giới thiệu mốt số hệ thống IO
Chương 12: GIỚI
THIỆU MỘT SỐ HỆ THỐNG I/O
12.1 HỆ
THỐNG I/O ĐĨA
Hầu như tất cả các
máy tính đều có đĩa để lưu trữ thông tin. Đĩa có ba ưu điểm chính hơn sử dụng
bộ nhớ chính để lưu trữ:
- Dung lượng lưu trữ lớn hơn rất nhiều.
- Giá trên một bit rẻ hơn.
- Thông tin không bị mất đi khi không còn cung cấp điện.
12.1.1 Phần cứng đĩa
Một đĩa bao gồm
nhiều cylinder, mỗi cylinder chứa nhiều track trên các head. Mỗi track được
chia làm nhiều sector (từ 8 đến 32). Mỗi sector có số byte là như nhau dù vị
trí của nó ở gần tâm hay ở ngoài rìa đĩa, những khoảng trống thừa không dùng
đến.
Một đặc điểm thiết
bị cài đặt quan trọng cho driver của đĩa là khả năng của bộ điều khiển thực
hiện tìm kiếm trên hai hay nhiều driver cùng lúc gọi là tìm kiếm chồng. Trong
khi bộ điều khiển và phần mềm đợi việc tìm kiếm hoàn tất trên một đĩa, bộ điều
khiển có thể khởi động việc tìm kiếm trên đĩa khác. Các bộ điều khiển không thể
cùng lúc đọc hoặc ghi trên hai driver vì khả năng này có thể làm giảm thời gian
truy xuất trung bình.
12.1.2 Các thuật toán đọc đĩa
Tất cả mọi công
việc đều phụ thuộc vào việc nạp chương trình và nhập xuất tập tin, do đó điều
quan trọng là dịch vụ đĩa phải càng nhanh càng tốt. Hệ điều hành có thể tổ chức
dịch vụ truy xuất đĩa tốt hơn bằng cách lập lịch yêu cầu truy xuất đĩa.
Tốc độ đĩa bao gồm
ba phần. Để truy xuất các khối trên đĩa, trước tiên phải di chuyển đầu đọc đến
track hay cylinder thích hợp, thao tác này gọi là seek và thời gian để hoàn tất
gọi là seek time. Một khi đã đến đúng track, còn phải chờ cho đến khi
khối cần thiết đến dưới đầu đọc. Thời gian chờ này gọi là latency time.
Cuối cùng là vận chuyển dữ liệu giữa đĩa và bộ nhớ chính gọi là transfer
time. Tổng thời gian cho dịch vụ đĩa chính là tổng của ba khoảng thời gian
trên. Trong đó seek time và latency time là mất nhiều thời gian
nhất, do đó để giảm thiểu thời gian truy xuất hệ điều hành đưa ra các thuật
toán lập lịch truy xuất.
a) Lập lịch
FCFS:
Phương pháp lập
lịch đơn giản nhất là FCFS (first-come, first-served). Thuật toán này rất dễ
lập trình nhưng không cung cấp được một dịch vụ tốt. Ví dụ: cần phải đọc các
khối theo thứ tự như sau:
98, 183, 37, 122,
14, 124, 65, và 67
Giả sử hiện tại
đầu đọc đang ở vị trí 53. Như vậy đầu đọc lần lượt đi qua các khối 53, 98, 183,
37, 122, 14, 124, 65, và 67 như hình sau:
b) Lập lịch
SSTF (shortest-seek-time-first)
Thuật toán này sẽ
di chuyển đầu đọc đến các khối cần thiết theo vị trí lần lượt gần với vị trí
hiện hành của đầu đọc nhất. Ví dụ: cần đọc các khối như sau:
98, 183, 37, 122,
14, 124, 65, và 67
Giả sử hiện tại
đầu đọc đang ở vị trí 53. Như vậy đầu đọc lần lượt đi qua các khối 53, 65, 67,
37, 14, 98, 122, 124 và 183 như hình sau:
Với ví dụ này,
thuật toán SSTF làm giảm số khối mà đầu đọc phải di chuyển là 208 khối.
c) Lập lịch SCAN
Theo thuật toán
này, đầu đọc sẽ di chuyển về một phía của đĩa và từ đó di chuyển qua phía kia.
Ví dụ: cần đọc các khối như sau:
98, 183, 37, 122,
14, 124, 65, và 67
Giả sử hiện tại
đầu đọc đang ở vị trí 53. Như vậy đầu đọc lần lượt đi qua các khối 53, 37, 14,
0, 65, 67, 98, 122, 124 và 183 như hình sau:
Thuật toán này còn
được gọi là thuật toán thang máy. Hình ảnh thuật toán giống như hình ảnh của
một người quét tuyết, hay quét lá.
d) Lập lịch
C-SCAN
Thuật toán này
tương tự như thuật toán SCAN, chỉ khác là khi nó di chuyển đến một đầu nào đó
của đĩa, nó sẽ lập tức trở về đầu bắt đầu của đĩa. Lấy lại ví dụ trên, khi đó
thứ tự truy xuất các khối sẽ là: 53, 65, 67, 98, 122, 124, 183, 199, 0, 14, 37
như hình sau:
e) Lập lịch
LOOK:
Nhận xét rằng cả
hai thuật toán lập lịch SCAN và C-SCAN luôn luôn chuyển đầu đọc của đĩa từ đầu
này sang đầu kia. Nhưng thông thường thì đầu đọc chỉ chuyển đến khối xa nhất ở
mỗi hướng chứ không đến cuối. Do đó SCAN và C-SCAN được chỉnh theo thực tế và
gọi là lập lịch LOOK. Như hình sau:
f) Lựa chọn
thuật toán lập lịch:
Với những thuật
toán lập lịch, vấn đề là phải lựa chọn thuật toán nào cho hệ thống. Thuật toán
SSTF thì rất thông thường. Thuật toán SCAN và C-SCAN thích hợp cho những hệ
thống phải truy xuất dữ liệu khối lượng lớn. Với bất kỳ thuật toán lập lịch
nào, điều quan trọng là khối lượng về số và kiểu khối cần truy xuất. Ví dụ, nếu
số khối cần truy xuất là liên tục thì FCFS là thuật toán tốt.
Đĩa là đối tượng
mà khi truy xuất có thể gây nhiều lỗi. Một trong số các lỗi thường gặp là:
- Lỗi lập trình:
yêu cầu đọc các sector không tồn tại.
Lỗi
lập trình xảy ra khi yêu cầu bộ điều khiển tìm kiếm cylinder không tồn tại, đọc
sector không tồn tại, dùng đầu đọc không tồn tại, hoặc vận chuyển vào và ra bộ
nhớ không tồn tại. Hầu hết các bộ điều khiển kiểm tra các tham số và sẽ báo lỗi
nếu không thích hợp.
- Lỗi checksum tạm thời: gây ra bởi bụi trên đầu đọc.
Bụi
tồn tại giữa đầu đọc và bề mặt đĩa sẽ gây ra lỗi đọc. Nếu lỗi tồn tại, khối có
thể bị đánh dấu hỏng bởi phần mềm.
- Lỗi checksum thường trực: đĩa bị hư vật lý trên các khối.
- Lỗi tìm kiếm:
ví dụ đầu đọc đến cylinder 7 trong khi đó phải đọc 6.
- Lỗi điều khiển: bộ điều khiển từ chối thi hành lệnh.
Ý tưởng RAM disk
khá đơn giản. Thiết bị khối là phần lưu trữ trung gian với hai lệnh: đọc một
khối và ghi một khối. Thông thường những khối này được lưu trữ trên đĩa mềm
hoặc đĩa cứng. RAM disk dùng một phần đã định vị trước của bộ nhớ chính để lưu
trữ các khối. RAM disk có ưu điểm là cho phép truy xuất nhanh chóng (không phải
chờ quay hay tìm kiếm). Như vậy nó thích hợp cho việc lưu trữ những chương
trình hay dữ liệu được truy xuất thường xuyên.
Hình trên mô tả ý
tưởng của RAM disk. Một RAM disk được chia làm nhiều khối, số lượng tùy thuộc
vào dung lượng của vùng nhớ. Mỗi khối có cùng kích thước và vừa đúng bằng kích
thước của khối thực sự trên đĩa. Khi driver nhận được chỉ thị là đọc hoặc ghi
một khối, nó sẽ tìm trong bộ nhớ RAM disk vị trí của khối, và thực hiện việc
đọc hay ghi trong đó thay vì từ đĩa mềm hay đĩa cứng.
Bộ điều khiển đọc
ghi đĩa phải thực hiện hai chức năng là đọc/ghi dữ liệu và chuyển dữ liệu vào
hệ thống. Để thực hiện được đồng bộ hai chức năng này, bộ điều khiển đọc đĩa
cung cấp chức năng interleave. Trên đĩa các sector số hiệu liên tiếp nhau không
nằm kế bên nhau mà có một khoảng cách nhất định, khoảng cách này được xác định
bởi quá trình format đĩa. Ví dụ: giả sử hệ thống chỉ có 17 sector, và
interleave được chọn là 4 thì các sector được bố trí theo thứ tự như sau:
1, 14, 10, 6, 2,
15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9, 5
Cách đọc lần lượt
như sau:
Lần 1:
1, 14, 10, 6, 2, 15, 11, 7, 3,
16, 12, 8, 4, 17, 13, 9, 5
Lần 2:
1, 14, 10, 6,
2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13, 9,
5
Lần 3:
1, 14, 10,
6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17, 13,
9, 5
Lần 4:
1, 14,
10, 6, 2, 15, 11, 7, 3, 16, 12, 8, 4, 17,
13, 9, 5
Như vậy sau bốn
lần thứ tự các sector đọc được vẫn là từ 1 đến 17
Mọi máy tính đều
liên lạc với một hay nhiều terminals. Terminals có rất nhiều dạng khác nhau. Bộ
điều khiển terminals ẩn dấu mọi sự khác biệt, vì vậy phần độc lập thiết bị của
hệ điều hành và chương trình người sử dụng không cần thiết phải viết lại cho
mỗi loại terminal.
Dưới quan điểm của
hệ điều hành, terminal được chia làm hai loại lớn dựa vào cách liên lạc với hệ
điều hành. Loại thứ nhất bao gồm những loại terminal giao tiếp theo chuẩn
RS-232. Loại thứ hai là những terminal dùng ánh xạ bộ nhớ. Mỗi loại được chia
làm nhiều loại nhỏ như hình sau:
Terminal RS-232 là
những thiết bị bao gồm như bàn phím và màn hình. Đây là thiết bị giao tiếp tuần
tự, mỗi lần một bit. Những terminals này dùng connector 25-pin, một pin dùng để
chuyển dữ liệu, một pin dùng để nhận dữ liệu, một pin là nền, 22 pin còn lại có
những chức năng khác nhau, hầu hết thường thường không dùng đến. Để gởi một ký
tự cho terminal RS-232, máy tính mỗi lần chuyển một bit, ngoài ra có một bit
bắt đầu, và sau đó có 1 hoặc 2 bit kết thúc để giới hạn một ký tự. Thường
thường tốc độ vận chuyển là 1200, 2400, 4800, 9600…bps. Vì cả máy tính và
terminal đều làm việc với ký tự mà phải liên lạc với nhau bằng bit nên hệ thống
phải thiết kế bộ chuyển đổi gọi là UART. Bộ phận này được gắn vào các card giao
tiếp của RS-232.
Để in một ký tự,
bộ điều khiển terminal ghi một ký tự lên card giao tiếp, sau đó sẽ chuyển cho
UART.
Terminal RS-232
được chia làm nhiều loại. Dạng đơn giản nhất là terminal hardcopy (printing).
Ví dụ các ký tự được nhập vào từ bàn phím và chuyển cho máy tính. Các ký tự từ
máy tính xuất ra máy in. Dạng tương tự như vậy nhưng ký tự được xuất trên màn
hình gọi là "glass ttys" do đó nó cũng có chức năng tương tự như
trên. Terminals intelligent dùng trong máy tính nhỏ. Điểm khác biệt với loại
trên dưới quan điểm hệ điều hành là nó sẽ gửi ký tự ASCII ESC sau những ký tự
khác nhau dùng để chuyển cursor đến vị trí bất kỳ trên màn hình, chèn một dòng
vào giữa màn hình. Blit là một terminal có bộ xử lý mạnh và một màn hình có
1024x800 điểm giao tiếp với máy tính bằng RS-232.
Dạng thứ hai của
terminal là terminal ánh xạ bộ nhớ. Loại này không giao tiếp với máy tính qua
đường serial. Nó là một phần của của hệ thống máy tính. Terminal ánh xạ bộ nhớ giao tiếp
bằng một bộ nhớ đặc biệt gọi là video RAM, là một phần của bộ nhớ chính được
định vị bởi CPU.
Trên card video
RAM có một chip gọi là bộ điều khiển video. Chip này sẽ lấy thông tin từ video
RAM và tạo ra tín hiệu video để điều khiển màn hình. Màn hình tạo những tia
điện tử quét từ trên xuống dưới. Thường thường có khoảng từ 200 đến 1200 dòng,
trên mỗi dòng có từ 200 đến 1200 điểm. Mỗi điểm được gọi là pixel. Bộ điều
khiển tín hiệu sẽ xác định mỗi điểm là sáng hay tối. Màn hình màu sẽ có ba tia
là đỏ, lục và xanh.
Thông thường màn
hình mono xây dựng một ký tự trong một box có chiều rộng là 9 pixel và chiều
cao là 14 pixel (bao gồm khoảng trống giữa những ký tự) như vậy sẽ có 25 dòng
và mỗi dòng có 80 ký tự. Mỗi khung được vẽ lại từ 45 đến 70 lần trong một giây.
Bộ điều khiển video đặt các dòng 80 ký tự vào trong video RAM.
Một ví dụ về màn
hình ánh xạ ký tự trên máy IBM PC. Một phần bộ nhớ chính bắt đầu từ địa chỉ
0xB000 cho màn hình đơn sắc và 0xB800 cho màn hình màu. Mỗi ký tự trên màn hình
chiếm hai bytes trong bộ nhớ. Byte thấp chứa giá trị ASCII của ký tự, byte cao
chứa thuộc tính như màu sắc, nhấp nháy v.v... Màn hình 80x25 sẽ chiếm 4000
bytes bộ nhớ video RAM
Khi CPU ghi một ký
tự vào video RAM, nó xuất hiện trên màn hình theo mỗi lần hiển thị (1/50 giây
cho mono, 1/60 cho màu). CPU có thể nạp 4K ảnh màn hình đã được tính trước vào
video RAM trong vài phần triệu giây. Với tốc độ 9600 bps, ghi 2000 ký tự vào
terminal RS-232 mất khoảng 2083 phần triệu giây. Terminal ánh xạ bộ nhớ cho
phép truy xuất rất nhanh.
Terminal bit-map
tương tự như vậy, ngoại trừ là mọi bit trong video RAM kiểm soát mỗi điểm trên
màn hình. Màn hình có 1024x800 pixel cần dùng 100 K bộ nhớ nhưng khó thiết kế
font và kích thước cho ký tự. Bàn phím giao tiếp thông qua cổng song song và
giao tiếp RS-232. Mỗi khi gõ phím vào, CPU bị ngắt, bộ điều khiển bàn phím xác
định kiểu ký tự được đọc từ cổng I/O. Đôi khi bàn phím chỉ cung cấp số hiệu
phím, không phải mã ASCII. Trên IBM PC khi gõ phím A mã ký tự 30 được đưa vào
thanh ghi I/O. Bộ điều khiển xác định ký tự là chữ hoa hay chữ thường hay là tổ
hợp phím.
Bàn phím và màn
hình hầu như độc lập với thiết bị. Công việc cơ bản của bộ điều khiển bàn phím
là tập hợp các dữ liệu nhập từ bàn phím và chuyển cho chương trình của người sử
dụng. Khi có một phím được gõ, nó sẽ gây một ngắt, và bộ điều khiển yêu cầu ký
tự trong suốt quá trình ngắt này. Nếu ngắt được gây ra bởi một lời gọi ngắt của
một ngôn ngữ lập trình cấp thấp nó sẽ chuyển ký tự này cho chương trình đó. Nó
sử dụng một buffer trong bộ nhớ chính và một thông điệp để báo cho bộ điều
khiển biết đã có ký tự nhập. Một khi bộ điều khiển nhận một ký tự, nó sẽ bắt
đầu xử lý. Nếu dưới dạng mã bàn phím, nó sẽ ánh xạ lại mã ASCII thật. Nếu
terminal ở dạng cook, ký tự phải được lưu trữ cho tới khi nhận được hết dòng vì
người sử dụng có thể xóa một phần nội dung của nó.
Có hai loại buffer
thông thường. Dạng thứ nhất, bộ điều khiển chứa pool chính của buffer, mỗi
buffer chứa 16 ký tự. Có một cấu trúc dữ liệu liên kết với nó, trong đó có chứa
một con trỏ trỏ tới chuỗi trong buffer. Khi ký tự chuyển cho chương trình, nó
sẽ được loại khỏi buffer. Dạng thứ hai là buffer trực tiếp có cấu trúc dữ liệu
vì nếu tổ chức theo dạng thứ nhất sẽ không đủ bộ nhớ. Hình sau cho biết sự khác
biệt giữa hai cách như hình sau:
Mặt dù màn hình và
bàn phím là hai thiết bị logic riêng biệt, nhưng mọi người đều quen với việc gõ
ký tự và xem nó xuất hiện trên màn hình. Một số terminal cho phép tự động hiển
thị lên màn hình những gì vừa gõ hoặc chỉ là những dấu * khi gõ password. Một
số terminal không hiển thị ký tự được gõ do đó phải dựa vào phần mềm để hiển
thị input, xử lý này gọi là echoing.
Echoing phức tạp
vì chương trình phải xuất lên màn hình khi người dùng gõ vào. Bộ điều khiển bàn
phím phải kiểm soát không cho ghi chồng lên output của chương trình. Echoing
cũng gặp khó khăn khi người nhập gõ nhiều hơn 80 ký tự trên màn hình 80 ký tự
một dòng. Một vấn đề khác là xử lý tab. Bộ điều khiển phải tính toán vị trí
hiện thời cursor sau đó tính toán để chuyển cho chương trình và cho echoing và
tính toán bao nhiêu khoảng trống phải hiển thị. Vấn đề tiếp theo là phải xử lý
carriage return và line feed để chuyển cursor qua đầu dòng mới. Việc xử lý này
tùy thuộc vào các hệ điều hành khác nhau. Ngoài ra phải kiểm soát tổ hợp ký tự
và những ký tự xóa, lùi, hay các phím chức năng.
Phần mềm xuất thì
đơn giản hơn nhập nhưng ở hai dạng thiết bị terminal RS-232 và ánh xạ bộ nhớ là
khác nhau. Phương pháp thông thường của terminal RS-232 là có một buffer xuất
cho mỗi loại terminal. Dạng buffer có thể là pool như buffer nhập hay là dạng
tận hiến như input. Khi chương trình ghi lên terminal, trước tiên nó xuất lên
buffer. Sau khi đã xuất lên buffer, ký tự đầu tiên được xuất, sau đó bộ điều
khiển tạm dừng, khi có một ngắt phát sinh, ký tự tiếp theo sẽ được xuất, và cứ
tiếp tục như vậy.
Với terminal ánh
xạ bộ nhớ, vấn đề đơn giản hơn. Những ký tự được in được xuất một lần từ chương
trình người dùng được xuất lên video RAM. Với một số ký tự sẽ được xử lý đặc
biệt. Ví dụ: backspace, carriage return, line feed, và bell (CTRL-G). Bộ điều
khiển ánh xạ bộ nhớ, lưu giữ trong phần mềm vị trí của video RAM, vì vậy những
ký tự in được được xuất trên đó theo thứ tự, các ký tự đặc biệt cũng được cập
nhật thích hợp.
Khi một line feed
được xuất tại cuối dòng của màn hình, màn hình sẽ cuộn. Thường thường phần cứng
cung cấp một số giúp đỡ ở đây. Hầu hết những bộ điều khiển màn hình chứa một
thanh ghi xác định vị trí của video RAM để bắt đầu đặt các byte vào dòng đầu
tiên của màn hình. Phần mềm soạn thảo màn hình phải có nhiều xử lý phức tạp hơn
là chỉ xuống dòng. Để tương thích, một số bộ điều khiển terminal hỗ trợ một số
xử lý, thông thường là:
- Di chuyển cursor lên, xuống, trái, phải của một vị
trí.
- Di chuyển cursor đến vị
trí x,y.
- Chèn một ký tự hay chèn
một dòng.
- Xóa một ký tự hay một
dòng.
- Cuộn màn hình lên hoặc
xuống n dòng.
- Xóa màn hinh từ vị trí
cursor đến cuối dòng hoặc màn hình.
- Tạo tương phản, gạch
dưới, nhấp nháy, hay mode thường.
- Tạo, hủy, di chuyển quản
trị các cửa sổ.
Đồng hồ còn được
gọi là timer, là bộ phận rất cần thiết cho các thao tác của những hệ thống chia
sẻ vì nhiều nguyên nhân khác nhau. Nó kiểm soát thời gian trong ngày và không
cho phép một tiến trình nào đó độc chiếm CPU trong khi tồn tại những tiến trình
khác. Phần mềm đồng hồ có thể xem như là device driver mặc dù đồng hồ không
phải là thiết bị khối như đĩa hay thiết bị tuần tự như bàn phím, màn hình.
Trong máy tính
thường sử dụng hai loại đồng hồ nhưng cả hai đều khác với đồng hồ người sử dụng
thông thường. Dạng đơn giản sử dụng đồng hồ với điện thế 110v hay 220v, và tạo
ra ngắt theo mỗi chu kỳ của hiệu điện thế, từ 50 đến 60 MHz.
Một dạng khác của
đồng hồ được xây dựng dựa trên ba thành phần: bộ dao động bằng thạch anh, bột
đếm và bộ thanh ghi lưu trữ như hình vẽ. Dưới tác dụng của dòng điện, tinh thể
thạch anh tạo ra dao động. Nhịp dao động rất chính xác theo thời gian, thường
thường vào khoảng từ 5 đến 100 MHz tùy theo mỗi loại thạch anh. Tín hiệu này sẽ
chuyển cho bộ đếm và bộ đếm sẽ thực hiện việc đếm lùi về 0. Khi bộ đếm có giá
trị là 0, nó sẽ gây ra một ngắt CPU. Điều gì xảy ra tiếp theo là do hệ điều
hành.
Dạng đồng hồ có
thể lập trình có vài dạng thao tác. Thứ nhất là one-shot, khi đồng hồ khởi
động, nó sẽ copy giá trị trong thanh ghi lưu trữ vào bộ đếm và sau đó giảm bộ
đếm sau mỗi nhịp của thạch anh. Khi bộ đếm đến giá trị 0, nó sẽ gây ra một ngắt
và dừng lại cho đến khi phần mềm khởi động lại nó. Thứ hai là square-wave, khi
đến giá trị 0, nó sẽ gây ra một ngắt, bộ thanh ghi lưu trữ tự động nạp lại giá
trị vào bộ đếm, và tiến trình sẽ được lập lại. Những ngắt phát sinh định kỳ này
gọi là clock tick.
Ưu điểm của đồng
hồ có thể lập trình là ngắt định kỳ được điều khiển bởi phần mềm. Nếu sử dụng
tin thể thạch anh có tần số 1 MHz, bộ đếm sẽ có nhịp là mỗi micro giây. Với
thanh ghi 16 bit, ngắt có thể được lập trình để xảy ra trong khoảng từ 1 đến 65535
msec.
Tất cả mọi việc mà
phần cứng đồng hồ thực hiện tạo ra các ngắt theo từng khoảng thời gian đều đặn.
Mọi điều khác đều được thực hiện bởi phần mềm đồng hồ, là driver đồng hồ. Công
việc của driver đồng hồ trên mỗi hệ điều hành là khác nhau, nhưng thường bao
gồm những chức năng chính như sau:
- Quản lý thời gian trong ngày.
- Không cho phép tiến trình chạy lâu hơn thời gian mà nó
được phép.
- Kế toán việc sử dụng CPU.
- Cung cấp watchdog timer cho một phần của chính hệ
thống đó.
1) Chức năng đầu
tiên của đồng hồ, quản lý thời gian trong ngày thì không khó. Chỉ cần tăng một
bộ đếm sau mỗi nhịp của đồng hồ như đề cập ở trên. Vấn đề lưu ý ở đây là số
lượng bit cho bộ counter. Với đồng hồ ở tần số 60 MHz, một bộ đếm 32 bit sẽ bị
tràn sau hai năm. Do đó hệ thống không thể lưu trữ thời gian thực sự dưới dạng
số nhịp từ 01/01/1970. Có ba cách giải quyết. Thứ nhất, dùng bộ đếm 64 bit,
giải pháp này tốn kém. Thứ hai, lưu trữ dưới dạng giây thay vì nhịp vì 232
giây sẽ là 136 năm. Thứ ba, đếm theo nhịp, nhưng liên hệ với thời gian của hệ
thống khi khởi động.
2) Chức năng thứ
hai là không cho phép một tiến trình thực hiện quá lâu. Khi nào một tiến trình
bắt đầu, bộ lập lịch sẽ khởi gán giá trị cho bộ đếm, mỗi ngắt đồng hồ sẽ giảm
giá trị của bộ đếm, khi nào giá trị bằng 0, bộ điều khiển đồng hồ sẽ yêu cầu bộ
lập lịch thiết lập giá trị cho một tiến trình khác.
3) Chức năng thứ
ba là kế toán việc sử dụng CPU. Cách thức chính xác nhất là sử dụng một bộ
timer thứ hai, khác với timer hệ thống. Bộ timer thứ hai khởi động khi tiến
trình bắt đầu và khi tiến trình kết thúc, timer này sẽ cho biết thời gian tiến
trình đã thực hiện.
4) Phần lớn hệ
thống cần thiết thiết lập timer. Gọi là watchdog timer. Ví dụ, để sử dụng đĩa
mềm, hệ thống phải khởi động motor và chờ khoảng 500msec đạt được tốc độ. Vì
vậy, ý tưởng tốt là phải sử dụng watchdog timer để chờ cho thao tác I/O tiếp
theo, vào khoảng 3 giây, không tắt motor.
12.4 Câu hỏi
kiểm tra kiến thức
1. So sánh các
thuật toán đọc đĩa.
2. Lựa chọn các
thuật toán đọc đĩa như thế nào?
3. Nguyên nhân các
lỗi khi truy xuất đĩa và cách khắc phục?
4. RAM disks là gì?
5. Vì sao có cơ
chế Interleave?
6. Đặc điểm của
phần cứng terminal.
7. Terminal ánh xạ
bộ nhớ dùng để làm gì?
8. Vai trò của
đồng hồ.
12.5 Bài tập
Giả sử đĩa
có 2 side, mỗi side có 1024 track, mỗi track có 32 sector. Tốc độ xoay của đĩa
là 6000 vòng/phút. Thời gian di chuyển giữa các track là 100ms. Giả sử thời
gian đọc và chuyển dữ liệu là không đáng kể. Cho biết để truy xuất tất cả
sector logic sau phải tốn bao lâu:
34, 16, 120, 14,
86, 200, 79, 300, 8, 500, 170, 450, 1000, 380, 800
Biết:
Sector = Seclog/SecTrk
+ 1
Side =
(Seclog/SecTrk)/SideNo
Track =
(Seclog/(Sectrk *SideNo))
Với Seclog là
sector logic, SideNo là số side, Sectrk là số sector trên 1 track
[He Dieu Hanh] Chương 12 Giới thiệu mốt số hệ thống IO
Reviewed by Nguyen Nam
on
4/18/2014
Rating:
Không có nhận xét nào: