Quản lý vào/ra mức trên

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 179)

Trong phần trên, ta đã xem xét tổ chức chung phân hệ vào/ra và vai trò của driver. Trong phần này, ta sẽ xem xét một số chức năng khác của phân hệ vào/ra, thường do lớp trên của mô đun vào/ra đảm nhiệm. Các chức năng này hướng vào việc nâng cao tốc độ và độ ổn định vào/ra thông tin, bao gồm các công việc sau: điều độ vào/ra, đệm vào/ra với buffer và cache, xử lý lỗi.

Điều độ vào/ra là xác định thứ tự xử lý các yêu cầu vào/ra sao cho đạt được các tiêu chí về tốc độ, tính công bằng .v.v. Ví dụ về điều độ vào/ra đã được trình bầy trong phần điều độ đĩa. Trong phần này ta sẽ xem xét đệm vào/ra và xử lý lỗi.

Đệm nhớ buffer

Đệm nhớ buffer là kỹ thuật trong đó dữ liệu truyền giữa hai thiết bị hoặc giữa một thiết bị với một ứng dụng được ghi tạm thời vào một vùng bộ nhớ gọi là bộ đệm buffer. Thường dữ liệu được lưu vào buffer khi mới đọc vào từ thiết bị (ví dụ từ bàn phím), hoặc được giữ trong buffer trước khi ghi ra thiết bị (ví dụ trước khi ghi ra đĩa). Buffer cũng được sử dụng khi truyền dữ liệu giữa hai tiến trình.

Đệm nhớ buffer được sử dụng để giải quyết một số vấn đề sau:

- Sự khác nhau về tốc độ giữa thiết bị truyền và nhận dữ liệu. Ví dụ, khi cần lưu dữ liệu truyền qua modem vào đĩa cứng. Do modem chậm hơn đĩa nên dữ liệu từ modem được lưu tạm vào đệm nhớ cho tới khi đủ nhiều mới được ghi cùng nhau ra đĩa. Thông thường sẽ có hai đệm nhớ buffer được sử dụng trong trường hợp này. Khi đệm nhớ thứ nhất đầy, dữ liệu được ghi ra đĩa, trong khi đó dữ liệu nhận được từ modem tiếp tục được lưu vào đệm nhớ thứ hai. Khi đệm nhớ thứ hai đầy, vai trò hai đệm nhớ lại thay đổi. Cơ chế đệm kép như vậy được minh họa trên hình 4.26.

Hình 4.26. Vẽ hình tương tự thế này

- Vấn đề khác nhau về kích thước dữ liệu truyền và nhận. Khi truyền dữ liệu qua mạng, dữ liệu được chia thành gói. Sau đó các gói sẽ được tập hợp và sắp xếp lại theo đúng thứ tự. Trong lúc chờ đợi để nhận đủ các gói cần cho việc sắp xếp lại, dữ liệu được lưu trong bộ đệm buffer.

Đệm nhớ cache

Đệm nhớ cache là phần bộ nhớ tốc độ cao dùng làm bộ nhớ trung gian khi truyền dữ liệu giữa thiết bị nhớ tốc độ thấp với thiết bị nhớ tốc độ cao. Trước tiên, dữ liệu được truyền từ bộ nhớ tốc độ thấp (ví dụ đĩa cứng) vào bộ nhớ cache, sau đó được chuyển từ cache vào bộ nhớ tốc độ cao (ví dụ bộ nhớ trong). Khi thực hiện thao tác đọc tiếp theo, nếu phần dữ liệu cần đọc nằm trong cache thì dữ liệu đó được đọc từ cache, thay vì đọc từ đĩa, và do vậy sẽ nhanh hơn nhiều. Do nguyên lý cục bộ về thời gian, tức là thường một dữ liệu được truy cập lại trong tương lai gần, hoặc dữ liệu nằm gần nhau thường được truy cập trong những khoảng thời gian liền nhau, sử dụng cache cho phép tăng tốc độ truy cập dữ liệu.

Như vậy, điểm khác biệt chính giữa bộ đệm cache với bộ đệm buffer là cùng một dữ liệu trong cache hoặc láng giềng của dữ liệu đó được truy cập nhiều lần trong khoảng thời

Đĩa cứng

Modem

Đĩa cứng

Modem

Buffer 1 Buffer 2 Buffer 1 Buffer 2

Đổi buffer

gian ngắn, trong khi dữ liệu trong buffer không như vậy. Tuy nhiên, trên thực tế, bộ đệm buffer cũng có thể dùng luôn làm bộ đệm cache.

Spooling

Spooling là kỹ thuật cho phép nhiều tiến trình cùng ghi thông tin ra những thiết bị chỉ có khả năng phục vụ một tiến trình tại một thời điểm như máy in. Khi tiến trình gửi dữ liệu ra máy in, hệ điều hành sẽ nhận dữ liệu này thay vì gửi trực tiếp ra máy in. Dữ liệu từ mỗi tiến trình được ghi vào một đệm nhớ buffer riêng, thường là một file. Khi tiến trình đã hoàn thành việc ghi dữ liệu ra file, file sẽ được xếp vào hàng đợi để chuyển ra máy in khi đến lượt. Như vậy, nhiều tiến trình có thể đồng thời thực hiện thao tác in, trong khi trên thực tế, tại mỗi thời điểm chỉ một file đệm được ghi ra máy in.

Xử lý lỗi

Thiết bị vào/ra, cũng như bản thân thao tác vào/ra dữ liệu có thể gặp nhiều dạng lỗi khác nhau. Có những lỗi không nghiêm trọng, có thể dễ dàng khắc phục, ví dụ lỗi không đọc được dữ liệu do đĩa cứng chưa quay đủ tốc độ cần thiết, hay lỗi do mạng bị quá tải nên tạm thời không truyền được dữ liệu. Có những lỗi nghiêm trọng hơn, ví dụ lỗi hỏng bộ điều khiển đĩa.

Hệ điều hành thường được thiết kế để tự xử lý một số lỗi đơn giản. Ví dụ, khi thao tác đọc đĩa bị lỗi, hệ điều hành sẽ lặp lại thao tác đọc một số lần nhất định để chờ đĩa được chuyển sang trạng thái sẵn sàng.

Với những lỗi nghiêm trọng hơn, hệ điều hành thường không thể tự xử lý. Cách giải quyết thông thường là với mỗi thao tác vào/ra, hệ điều hành trả về thông tin trạng thái. Thông tin này cho biết thao tác vào/ra có được thực hiện thành công hay không và một số thông tin cụ thể về dạng lỗi xẩy ra (nếu có). Các ứng dụng sẽ tự quyết định phải làm gì, dựa trên những thông tin về lỗi do lời gọi hệ thống trả lại.

4.13. CÂU HỎI VÀ BÀI TẬP CHƯƠNG

1. Hệ điều hành có nên nhận biết và hỗ trợ các kiểu file khác nhau không, ví dụ file văn bản, file chương trình, file cơ sở dữ liệu .v.v.? Trong câu trả lời hãy phân tích ưu nhược điểm của việc hỗ trợ và không hỗ trợ kiểu file. Lấy ví dụ việc hỗ trợ/không hỗ trợ kiểu file trên một hệ điều hành thông dụng.

2. Giải thích ý nghĩa thao tác mở file và đóng file.

3. Hãy lấy ví dụ một vài ứng dụng đòi hỏi truy cập file theo phương pháp truy cập: 1) tuần tự; 2) trực tiếp.

4. Giả sử hợp hệ thống chỉ hỗ trợ thư mục một mức nhưng cho phép sử dụng tên file dài tùy ý. Có thể mô phỏng thư mục nhiều mức trong trường hợp này không? Hãy giải thích cách làm nếu câu trả lời là “có” hoặc giải thích nguyên nhân không mô phỏng được nếu câu trả lời là “không”.

5. Thay vì sử dụng ACL (Access Control List – danh sách quản lý truy cập) gắn với mỗi file có thể sử dụng UCL (User Control List – danh sách quản lý người dùng) gắn với mỗi người dùng và quy định người đó được truy cập file nào. Hãy cho biết trong trường nào dùng UCL ưu điểm hơn so với dùng ACL ?

6. Giả sử hệ thống file hỗ trợ cả ba phương pháp cấp phát không gian: cấp phát khối liên tiếp, sử dụng danh sách kết nối, và sử dụng khối chỉ số. Cần xem xét các tiêu chí nào khi lựa chọn phương pháp cấp phát cho một file cụ thể.

7. Viết chương trình đọc và in các tham số chính trong BOOT từ đĩa logic trên thẻ nhớ USB với FAT16 sử dụng hàm đọc sector mức thấp absread. Lưu ý: để chạy được absread, cần sử dụng các hệ điều hành không phân biệt chế độ đặc quyền và chế độ người dùng như Windows 98; có thể cài Windows 98 trên máy ảo để thực hiện bài tập này.

8. Giải thích các bước và viết chương trình đọc và in nội dung 100 ô đầu tiên của bảng FAT trên USB, biết rằng FAT là FAT16. Chương trình cần sử dụng hàm đọc ghi sector mức thấp absread như ở câu trên.

9. Giải thích các bước và viết chương trình in ra tên, phần mở rộng, ngày tháng tạo file, kích thước file, số thứ tự cluster đầu tiên của các file nằm trong thư mục gốc trên USB. Giả sử tất cả tên file là tên file ngắn (không quá 8 ký tự), FAT là FAT 16. Chương trình cần sử dụng hàm đọc ghi sector mức thấp absread như ở câu trên.

TÀI LIỆU THAM KHẢO

1. A. Silbeschatz, P.B. Galvin, G. Gagne. Operating system concepts. 9th edition. John Wiley & Sons. 2013.

2. W. Stallings. Operating Systems: Internals and Design Principles. 7th edition. Prentice Hall 2012.

3. A.S. Tanenbaum. Modern operating systems. 3rd edition. Prentice Hall 2008. 4. Nguyễn Thanh Tùng. Giáo trình Hệ điều hành. ĐHBK Hà nội 1999.

5. Hà Quang Thụy. Giáo trình Nguyên lý các hệ điều hành. In lần thứ ba. NXB KHKT 2009. 6. C. Crowley. Operating systems: A design-oriented approach. Irwin Professional Publishing

1996.

7. Từ Minh Phương. Bài giảng hệ điều hành. Học viện Công nghệ bưu chính viễn thông 2009.

Một phần của tài liệu Giáo trình môn Hệ Điều Hành PTIT (Trang 179)

Tải bản đầy đủ (PDF)

(183 trang)