I/O là gì? Đầu vào I/O trong điện toán
I/O là gì?
Trong điện toán, đầu vào/đầu ra (I/O, i/o, hoặc io hoặc IO) là giao tiếp giữa một hệ thống xử lý thông tin, chẳng hạn như máy tính, với thế giới bên ngoài, chẳng hạn như một hệ thống máy tính khác, các thiết bị ngoại vi hoặc người vận hành. Đầu vào là các tín hiệu hoặc dữ liệu được hệ thống nhận và đầu ra là các tín hiệu hoặc dữ liệu được gửi đi từ hệ thống. Thuật ngữ này cũng có thể được sử dụng như một phần của hành động; “thực hiện I/O” nghĩa là thực hiện một thao tác đầu vào hoặc đầu ra.
Thiết bị I/O là các phần cứng được con người (hoặc hệ thống khác) sử dụng để giao tiếp với máy tính. Ví dụ, bàn phím hoặc chuột máy tính là thiết bị đầu vào của máy tính, trong khi màn hình và máy in là thiết bị đầu ra. Các thiết bị giao tiếp giữa các máy tính, chẳng hạn như modem và card mạng, thường thực hiện cả thao tác đầu vào và đầu ra. Bất kỳ tương tác nào với hệ thống bởi một bộ tương tác đều là đầu vào và phản ứng mà hệ thống phản hồi được gọi là đầu ra.
Giao diện I/O
Một giao diện vào/ra là cần thiết bất cứ khi nào thiết bị I/O được điều khiển bởi một bộ xử lý. Thông thường, CPU giao tiếp với các thiết bị thông qua bus. Giao diện này phải có logic cần thiết để giải mã địa chỉ thiết bị được tạo ra bởi bộ xử lý.
Cơ chế bắt tay (handshaking) cần được giao diện thực hiện bằng cách sử dụng các lệnh thích hợp (như BUSY, READY và WAIT), để bộ xử lý có thể giao tiếp với thiết bị I/O thông qua giao diện này. Nếu các định dạng dữ liệu khác nhau được trao đổi, giao diện phải có khả năng chuyển đổi dữ liệu nối tiếp sang song song và ngược lại.
Một máy tính sử dụng I/O ánh xạ bộ nhớ sẽ truy cập phần cứng bằng cách đọc và ghi vào các vị trí bộ nhớ cụ thể, sử dụng cùng các lệnh hợp ngữ mà máy tính thường dùng để truy cập bộ nhớ.
Một phương pháp thay thế là I/O dựa trên lệnh , trong đó CPU cần có các lệnh chuyên biệt cho I/O.
Cả thiết bị vào và thiết bị ra đều có tốc độ xử lý dữ liệu rất khác nhau. Với một số thiết bị có khả năng trao đổi dữ liệu ở tốc độ rất cao, việc truy cập trực tiếp bộ nhớ (DMA) là cần thiết để truyền dữ liệu mà không cần sự can thiệp liên tục của CPU.
Triển khai ở cấp độ cao hơn
Các hệ điều hành và công cụ lập trình ở cấp độ cao hơn sử dụng những khái niệm và nguyên thủy về I/O tách biệt và trừu tượng hơn.
Một cách thay thế cho các hàm nguyên thủy đặc biệt là I/O monad, cho phép chương trình chỉ mô tả các thao tác I/O, còn việc thực thi các hành động đó được tiến hành bên ngoài chương trình. Điều này đáng chú ý vì các hàm I/O thường sẽ tạo ra tác dụng phụ trong bất kỳ ngôn ngữ lập trình nào, nhưng với cách này, lập trình hàm thuần túy (purely functional programming) vẫn có thể được ứng dụng một cách thực tế.
Các tiện ích I/O do hệ điều hành cung cấp có thể được thiết kế dựa trên bản ghi, trong đó tệp chứa các bản ghi, hoặc dựa trên luồng, trong đó tệp chứa một luồng các byte.
Kênh I/O
Kênh I/O yêu cầu sử dụng các chỉ thị được thiết kế đặc biệt để thực hiện các thao tác I/O. Các chỉ thị I/O này sẽ định địa chỉ đến kênh hoặc đến cả kênh và thiết bị; sau đó, kênh sẽ tự động truy cập tất cả thông tin điều khiển và địa chỉ cần thiết khác.
Cơ chế này tương tự như DMA, nhưng linh hoạt hơn.
Truy cập bộ nhớ trực tiếp
DMA là một cơ chế cho phép các thiết bị ngoại vi truyền các khối dữ liệu lớn đến và từ bộ nhớ mà không cần sự can thiệp trực tiếp của CPU.
 
				 English
English Tiếng Việt
Tiếng Việt 
             
                                     
                                     
                                     
                                     
                                     
                                             
                                             
                                             
                 
                         
                     
                     
                     
                    