QUẢN LÝ NHẬP XUẤT
II. KỸ THUẬT NHẬP XUẤT
1) Kỹ thuật Busy-Waitting: (chờ trong trạng thái bận rộn)
Đây là phương pháp nhập xuất đơn giản nhất. Khi một chương trình muốn nhập xuất dữ liệu thì nó phát lời gọi hệ thống (system call) đến hệ điều hành.
Hệ điều hành sẽ chuyển lời gọi đó đến thiết bị mà chương trình cần. Driver của thiết bị sẽ khởi động việc nhập xuất và chờ cho đến khi việc nhập xuất hoàn thành tại thiết bị đó. Sau đó, driver sẽ chuyển dữ liệu đến nơi cần thiết rồi kết thúc. Lúc này, hệ điều hành trả điều khiển trở lại chương trình vừa gọi nhập xuất. Phương pháp này được gọi là Busy-Waitting vì trong khi việc nhập xuất đang thực hiện thì CPU nhàn rỗi nhưng không thể gán CPU cho process nào cả.
2) Ngắt quãng (interrupt):
Ngắt quãng là một sự kiện phát sinh từ phần cứng hay yêu cầu từ chương trình. Ngắt làm tạm ngưng chương trình đang thực hiện để chuyển sang thực hiện một công việc khác. Sau khi thực hiện xong thì chương trình bị ngắt sẽ tiếp tục thực hiện trở lại.
Máy tính có tất cả 256 ngắt, đánh số từ 00 hexa đến FF hexa. Mỗi ngắt có một chương trình xử lý đi kèm theo. Các chương trình này được gọi là các chương trình xử lý ngắt. Các chương trình xử lý ngắt nằm trong bộ nhớ. Muốn gọi chương trình xử lý ngắt thì ta phải biết địa chỉ của nó trong bộ nhớ. Bảng vector ngắt là một vùng nhớ có kích thước 1KB dùng để lưu địa chỉ của tất cả các chương trình xử lý ngắt.
CPU memory bộ điều
khiển đĩa bộ điều khiển
máy in bộ điều khiển các thiết bị khác máy in
giao tieáp thieát bò
Địa chỉ của 1 ngắt là 4 bytes. 4 bytes x 256 =1024 = 1KB. Bảng vector ngắt nằm ở đầu bộ nhớ, từ địa chỉ 0000:0000 đến 0000:03FF hexa.
Ngắt được chia làm hai loại:
− Ngắt mềm: phát sinh do yêu cầu của chương trình.
− Ngắt cứng: được phát sinh từ các thiết bị phần cứng.
Một ví dụ về một quá trình nhập xuất có dùng interrupt:
Hãy quan sát hình vẽ sau:
Bước 1: Driver ra phát lệnh cho controller bằng cách ghi yêu cầu vào các thanh ghi của controller. Controller liền khởi động thiết bị để đọc hoặc ghi.
Bước 2: Khi controller hoàn thành việc đọc hoặc ghi số lượng byte theo yêu cầu của lệnh thì nó sẽ phát tín hiệu đến bộ điều khiển ngắt quãng (interrupt controller).
Bước 3: Bộ điều khiển ngắt quãng sẽ kết nối đến CPU, gởi số hiệu của thiết bị vừa mới hoàn thành nhập xuất đến CPU. CPU nhận biết và phân biệt đó là thiết bị nào (vì có nhiều thiết bị chạy cùng một lúc).
CPU liền lưu thông tin của chương trình mà nó đang chạy vào stack rồi chuyển đến thực hiện chương trình ngắt tương ứng với thiết bị. Khi hoàn thành chương trình ngắt, CPU thực hiện tiếp tục chương trình trước đó theo các thông tin từ stack.
chương trình đang thực hiện
chửụng trình ngaét
CPU
Interrupt Controller
Disk Controller Disk Driver (1)
(1)
(1) (3) (2)
3) Kỹ thuật DMA: (Direct Memory Access)
Phương pháp nhập xuất này dùng một mạch đặc biệt là DMA chip. Nó có thể điều khiển luồng bit dữ liệu giữa bộ nhớ và contronller mà không cần sự can thiệp thường xuyên của CPU. Khi nhận được một yêu cầu nhập xuất nào đó, CPU sẽ khởi động DMA chip, thông báo với DMA chip các thông tin như: cần phải chuyển bao nhiêu bit, thiết bị và vùng nhớ nào tham gia nhập xuất, hướng truyền dữ liệu từ bộ nhớ ra thiết bị hay ngược lại. Thông báo xong thì DMA chip thực hiện việc trao đổi dữ liệu, còn CPU có thể đi thực hiện một công việc khác.
Khi DMA chip hoàn thành việc nhập xuất, nó sẽ phát sinh một ngắt đến CPU để báo hoàn thành.
4) I/O port:
Mỗi một controller của các thiết bị nhập xuất đều có một vài thanh ghi của nó. Các thanh ghi này được dùng giao tiếp với CPU. CPU ra lệnh cho thiết bị bằng việc ghi thông tin vào các thanh ghi này. Ngược lại, thông qua các thanh ghi này mà CPU biết được trạng thái của thiết bị. Ngoài ra, một số thiết bị còn được hệ điều hành cấp cho một vùng nhớ cho phép hệ điều hành và chương trình trao đổi thông tin với thiết bị thông qua vùng nhớ đó. Người ta gọi đó là cơ chế nhập xuất ánh xạ bộ nhớ (Memory-Mapped I/O). Vùng nhớ đó được xem như là một cổng nhập xuất (I/O port).
Vùng địa chỉ của một số cổng:
vuứng ủũa chổ thieỏt bũ
000-00F DMA controller
020-021 interrupt controller
040-043 timer
200-20F game cotroller
2F8-2FF serial port (secondry) 320-32F harddisk-controller
378-37F parallel port
3D0-3DF graphics controller 3F0-3F7 diskett-drive controller 3F8-3FF serial port (primary) 5) I/O buffering:
Buffer dùng để lưu giữ tạm thời dữ liệu. Kỹ thuật buffering là kỹ thuật dùng một hay nhiều buffer để lưu giữ tạm thời dữ liệu cho quá trình chuyển giao (transfer) dữ liệu giữa chương trình người dùng và thiết bị nhập xuất.
Các dạng tổ chức buffer:
Không có buffer: dữ liệu được chuyển trực tiếp giữa thiết bị I/O và chửụng trỡnh.
Single-buffer (buffer đơn): Dữ liệu được đọc, ghi tuần tự vào buffer.
Dữ liệu vào buffer, sau đó được chuyển đến process đang cần. Khi đọc dữ liệu ra thì không được ghi dữ liệu vào (và ngược lại).
Double buffer (buffer đôi): Dùng 2 buffer. Khi dữ liệu đang được ghi vào ở buffer này thì việc đọc dữ liệu ra được thực hiện ở buffer kia (và ngược lại).
Circular buffer: gồm nhiều buffer. Là sự cải tiến của Double buffer.