(Nguyên tắc) A.Goals of I/O software: read & write (Mục tiêu) ● Device Independence - Programs can access any I/O device: Chương trình có thể truy cập mọi thiết bị vào ra và ko cần thông báo trước, các hàm đó hoạt động đều tốt với ( Floppy, Hard drive, or CD - ROM ) - Without specifying device in advance(Không chỉ định trước thiết bị) ( Floppy, Hard drive, or CD - ROM ) - Một khái niệm quan trọng trong thiết kế phần mềm I/O được gọi là độc lập của thiết bị. Điều đó có nghĩa là chúng ta sẽ có thể viết các chương trình có thể truy cập bất kỳ thiết bị I/O nào mà không phải chỉ định thiết bị trước. Ví dụ: một chương trình đọc tệp dưới dạng đầu vào sẽ có thể đọc một tệp trên đĩa cứng, DVD hoặc trên thẻ USB mà không cần phải sửa đổi cho từng thiết bị khác nhau. Và nó hoạt động với đầu vào đến từ bất kỳ loại đĩa hoặc bàn phím và đầu ra sẽ đi đến bất kỳ loại đĩa hoặc màn hình nào. Tùy thuộc vào hệ điều hành để chăm sóc các vấn đề gây ra bởi thực tế là các thiết bị này thực sự khác nhau và yêu cầu các chuỗi lệnh rất khác nhau để đọc hoặc viết. ● Uniform Naming - Name of a file or device is a string or an integer - Not depending(phụ thuộc) on which machine Liên quan chặt chẽ đến tính độc lập của thiết bị là mục tiêu đặt tên thống nhất. Tên của một tệp hoặc một thiết bị chỉ đơn giản là một chuỗi hoặc một số nguyên và không phụ thuộc vào thiết bị theo bất kỳ cách nào. Trong Unix, tất cả các đĩa có thể được tích hợp trong hệ thống phân cấp hệ thống tệp theo những cách tùy ý để người dùng không cần phải biết tên nào tương ứng với thiết bị nào. Ví dụ: một thanh USB có thể được gắn trên đầu thư mục/usr/ast/sao lưu để sao chép tệp vào/usr/ast/backup/thứ hai sao chép tệp lên thẻ USB. Theo cách này, tất cả các tệp và thiết bị đều được giải quyết theo cùng một cách: bằng tên đường dẫn. ● Error Handling (Xử lí lỗi) - Handle as close to the hardware as possible (- Xử lý càng gần phần cứng càng tốt) - Một vấn đề quan trọng khác đối với phần mềm I / O là xử lý lỗi. Nói chung, các lỗi cần được xử lý càng gần với phần cứng càng tốt. Nếu bộ điều khiển phát hiện ra lỗi đọc, nó sẽ cố gắng tự sửa lỗi nếu có thể. Nếu nó không thể, thì trình điều khiển thiết bị nên xử lý nó, có lẽ bằng cách cố gắng đọc lại khối. Nhiều lỗi chỉ là thoáng qua, chẳng hạn như lỗi đọc gây ra bởi các đốm bụi trên đầu đọc và thường sẽ biến mất nếu thao tác lặp lại. Chỉ khi các lớp dưới không thể giải quyết được vấn đề thì các lớp trên mới được thông báo về vấn đề đó. Trong nhiều trường hợp, việc khôi phục lỗi có thể được thực hiện một cách minh bạch ở mức thấp mà không cần cấp trên biết về lỗi. ● Synchronous versus asynchronous (Đồng bộ so với không đồng bộ) - Blocked transfers vs. interrupt – driven(Chuyển giao bị chặn so với gián đoạn - điều khiển) - Vẫn còn một vấn đề quan trọng khác là việc chuyển giao đồng bộ (chặn) so với không đồng bộ (điều khiển ngắt). Hầu hết các I/O vật lý là không đồng bộ, CPU bắt đầu chuyển và tắt để làm một cái gì đó khác cho đến khi ngắt đến. Các chương trình người dùng sẽ dễ dàng hơn nhiều để viết nếu các hoạt động I/O đang chặn, sau khi một hệ thống đọc gọi chương trình sẽ tự động bị đình chỉ cho đến khi dữ liệu có sẵn trong bộ đệm. Tùy thuộc vào hệ điều hành để thực hiện các hoạt động thực sự bị gián đoạn theo hướng điều khiển cho các chương trình người dùng. Tuy nhiên, một số ứng dụng hiệu suất rất cao cần kiểm soát tất cả các chi tiết của I/O, do đó, một số hệ điều hành tạo ra I/O không đồng bộ có sẵn cho chúng. ● Bufferring ( Lưu vào bộ đệm) - Data coming off a device cannot be stored in final destination (Dữ liệu từ thiết bị không thể được lưu trữ ở điểm đến cuối cùng) - Một vấn đề khác cho phần mềm I/O là đệm. Thông thường dữ liệu đi ra khỏi một thiết bị không thể được lưu trữ trực tiếp trong đích đến cuối cùng của họ. Ví dụ, khi một gói đến ngoài mạng, hệ điều hành không biết nơi đặt nó cho đến khi nó lưu trữ gói ở đâu đó và kiểm tra nó. Ngoài ra, một số thiết bị có các ràng buộc thời gian thực nghiêm trọng (ví dụ: các thiết bị âm thanh kỹ thuật số), do đó dữ liệu phải được đặt vào bộ đệm đầu ra trước để tách rời tốc độ mà bộ đệm được lấp đầy từ tốc độ mà nó được làm trống, Để tránh các bộ đệm. Bộ đệm liên quan đến việc sao chép đáng kể và thường có tác động lớn đến hiệu suất I/O. ● Sharable vs. dedicated devices(Thiết bị có thể chia sẻ so với thiết bị chuyên dụng) - Disks are sharable - Tape drives would not be - Khái niệm cuối cùng mà chúng tôi sẽ đề cập ở đây là các thiết bị chia sẻ so với các thiết bị chuyên dụng. Một số thiết bị I/O, chẳng hạn như đĩa, có thể được sử dụng bởi nhiều người dùng cùng một lúc. Không có vấn đề gì được gây ra bởi nhiều người dùng có các tệp mở trên cùng một đĩa cùng một lúc. Các thiết bị khác, chẳng hạn như máy in, phải được dành riêng cho một người dùng cho đến khi người dùng đó kết thúc. Sau đó, người dùng khác có thể có máy in. Có hai hoặc nhiều người dùng viết các ký tự xen kẽ ngẫu nhiên vào cùng một trang chắc chắn sẽ không hoạt động. Giới thiệu các thiết bị chuyên dụng (không chia sẻ) cũng giới thiệu một loạt các vấn đề, chẳng hạn như bế tắc. Một lần nữa, hệ điều hành phải có khả năng Hanfle cả hai thiết bị được chia sẻ và chuyên dụng theo cách tránh các vấn đề. B.Programed I/O
Figure 5-7. Steps in printing a string.
Figure 5-8. Writing a string to the printer using programmed I/O. C.Interrupt - Driven I/O
Figure 5-9. Writing a string to the printer using interrupt-driven
I/O. (a) Code executed at the time the print system call is made. (b) Interrupt service procedure for the printer. D.I/O Using DMA
Figure 5-10. Printing a string using DMA. (a) Code executed
when the print system call is made. (b) Interrupt service procedure.