I/O là gì? Tại sao I/O lại quan trọng?
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.
Tại sao I/O lại quan trọng?
Trong kiến trúc máy tính, I/O (Input/Output) đóng vai trò thiết yếu vì nó cho phép máy tính giao tiếp, trao đổi và xử lý dữ liệu giữa các thành phần bên trong hệ thống cũng như với môi trường bên ngoài. Toàn bộ quá trình di chuyển dữ liệu từ âm thanh, văn bản, hình ảnh, video cho đến các tập lệnh phần mềm đều dựa vào hoạt động I/O.
Cầu nối giữa người dùng và máy tính: I/O là phương tiện giúp người dùng nhập dữ liệu và nhận phản hồi từ máy tính.
Ví dụ:
-
Bàn phím và chuột giúp nhập dữ liệu đầu vào.
-
Màn hình và loa giúp hiển thị kết quả đầu ra.
Đảm bảo luồng dữ liệu trong hệ thống: Mọi di chuyển dữ liệu nội bộ trong máy tính, như giữa CPU, bộ nhớ, ổ đĩa hay các thiết bị ngoại vi, đều được điều khiển qua cơ chế I/O.
-
Tín hiệu đầu vào (Input signals): vận chuyển dữ liệu từ CPU, bộ điều khiển lưu trữ hoặc bộ nhớ đến thiết bị lưu trữ.
-
Tín hiệu đầu ra (Output signals): truyền dữ liệu từ máy tính đến thiết bị đầu ra như màn hình, máy in hay loa.
Hỗ trợ đa dạng thiết bị và chức năng
-
Một số thiết bị chỉ gửi dữ liệu, ví dụ: bàn phím, chuột.
-
Một số thiết bị chỉ nhận dữ liệu, ví dụ: máy in, màn hình.
-
Một số thiết bị vừa nhập vừa xuất dữ liệu, ví dụ: màn hình cảm ứng, ổ đĩa, hay modem.
Nền tảng cho hoạt động xử lý và truyền thông: Các tín hiệu I/O mang theo lệnh mà CPU phải thực thi để bắt đầu hoặc điều phối quá trình truyền dữ liệu. Nhờ đó, hệ thống có thể
-
Trao đổi thông tin giữa phần cứng và phần mềm.
-
Chia sẻ dữ liệu giữa các máy tính hoặc hệ thống khác nhau.
-
Duy trì hoạt động của toàn bộ hạ tầng máy tính.
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.
Quản lý bộ nhớ I/O
Trong các hệ thống máy tính hiện đại, thường có một bộ xử lý vào/ra (I/O processor) nằm giữa bus hệ thống và các thiết bị ngoại vi. Bộ xử lý này được thiết kế đặc biệt để xử lý các hoạt động truyền dữ liệu, giúp CPU giảm tải trong việc quản lý I/O.
Để đảm bảo việc giao tiếp giữa thiết bị I/O và bộ xử lý trung tâm (CPU) diễn ra hiệu quả, giao diện I/O sẽ xác định tất cả các địa chỉ do CPU tạo ra. Các bộ điều khiển (controllers) chịu trách nhiệm đảm bảo dữ liệu được truyền đúng đến các thành phần khác nhau của máy tính.
Có nhiều phương pháp điều khiển I/O được sử dụng, bao gồm:
Programmed I/O (PIO):
- CPU trực tiếp điều khiển toàn bộ quá trình truyền dữ liệu.
- Mỗi lần truyền, CPU phải thực hiện các lệnh điều khiển thiết bị I/O.
- Nhược điểm: tốc độ chậm vì CPU bị chiếm dụng liên tục.
- Ưu điểm: dễ lập trình và thực hiện đơn giản.
Interrupt-driven I/O:
- Thiết bị I/O gửi tín hiệu ngắt (interrupt) khi sẵn sàng truyền hoặc nhận dữ liệu.
- CPU tạm dừng công việc hiện tại, xử lý yêu cầu I/O, rồi quay lại nhiệm vụ cũ.
- Giúp CPU không cần kiểm tra liên tục trạng thái thiết bị I/O, tiết kiệm tài nguyên.
Advanced Programmable Interrupt Controller (APIC):
- APIC nhận và quản lý các tín hiệu ngắt từ thiết bị.
- Khi thiết bị sẵn sàng truyền dữ liệu, APIC gửi tín hiệu thông báo đến CPU.
- Cải thiện khả năng xử lý nhiều ngắt cùng lúc, đặc biệt trong hệ thống đa lõi.
Direct Memory Access (DMA):
- Cho phép thiết bị ngoại vi gửi dữ liệu trực tiếp đến bộ nhớ chính, bỏ qua CPU.
- CPU chỉ khởi tạo quá trình, sau đó DMA tự xử lý việc truyền dữ liệu.
- Tăng tốc độ truyền và giảm tải cho CPU.
- Là phương pháp thay thế cho Programmed I/O (PIO).
Input-Output Memory Management Unit (IOMMU):
- Được thiết kế cho máy ảo (virtual machines).
- Cho phép hệ điều hành ánh xạ giữa thiết bị vật lý và thiết bị ảo, giúp phân bổ bộ nhớ hiệu quả và an toàn hơn.
- Giúp cách ly thiết bị, tăng độ ổn định và bảo mật trong môi trường ảo hóa.
Sự khác biệt giữa I/O Input và I/O Output
Các thiết bị I/O (Input/Output) được chia thành nhiều loại như: thiết bị lưu trữ, thiết bị mạng, thiết bị giao diện người dùng hoặc các phần cứng hỗ trợ khác giúp kết nối các hệ thống hoặc máy tính riêng biệt.
Việc quản lý thiết bị I/O được thực hiện bởi hệ điều hành thông qua hệ thống con chuyên trách, có nhiệm vụ điều khiển trình điều khiển thiết bị và phần cứng liên quan. Trong các máy tính hiện đại, hệ điều hành có thể quản lý nhiều loại thiết bị khác nhau như ổ đĩa âm thanh hình ảnh, bộ điều hợp Bluetooth, ổ cứng, card đồ họa, USB, máy in tốc độ cao, modem, thiết bị phát Wi-Fi di động (hotspot), v.v.
Dưới đây là sự khác biệt giữa I/O Input và I/O Output:
I/O Input (Thiết bị đầu vào):
- Là thiết bị tạo giao diện giữa người dùng và máy tính hoặc hệ thống thông tin.
- Dữ liệu chảy từ thiết bị vào máy tính.
- Các thiết bị này gửi lệnh hoặc dữ liệu đến máy tính thông qua phần cứng, phần mềm hoặc thao tác của con người.
Ví dụ: bàn phím, chuột, máy quét (scanner), micro, camera, cảm biến.
I/O Output (Thiết bị đầu ra):
-
Là thiết bị nhận dữ liệu do máy tính gửi đi sau khi đã được xử lý.
-
Dữ liệu chảy từ máy tính ra thiết bị.
-
Thiết bị đầu ra hiển thị, in ấn hoặc phát lại thông tin theo cách mà người dùng có thể hiểu được.
-
Ví dụ: màn hình, máy in, loa, máy chiếu, tai nghe.
Thiết bị đầu vào trong hệ thống I/O
Thiết bị I/O Input là những thiết bị có nhiệm vụ truyền dữ liệu hoặc tín hiệu từ người dùng hay môi trường bên ngoài vào máy tính hoặc hệ thống xử lý thông tin. Chúng là “cửa ngõ” giúp máy tính tiếp nhận thông tin để xử lý, lưu trữ hoặc phản hồi thông qua các thiết bị đầu ra.
- Bộ chuyển đổi tương tự – số: Chuyển tín hiệu analog (ví dụ như âm thanh hoặc nhiệt độ) thành tín hiệu số để máy tính có thể xử lý.
- Máy quét mã vạch: Đọc và chuyển đổi các mã vạch thành dữ liệu kỹ thuật số.
- Thiết bị sinh trắc học: Nhận dạng dấu vân tay, khuôn mặt, mống mắt hoặc giọng nói của người dùng.
- Chuột và bi xoay: Cho phép điều khiển con trỏ và thực hiện thao tác chọn trên màn hình.
- Máy ảnh kỹ thuật số: Ghi lại hình ảnh hoặc video và chuyển chúng thành dữ liệu số.
- Bộ trống điện tử: Biến các tín hiệu gõ trống thành dữ liệu âm thanh số để xử lý trong phần mềm âm nhạc.
- Cần điều khiển:Dùng trong trò chơi hoặc mô phỏng để điều khiển chuyển động.
- Keyboards (Bàn phím): Thiết bị phổ biến để nhập ký tự, số, lệnh và dữ liệu vào máy tính.
- Bút quang: Dụng cụ cảm ứng ánh sáng, cho phép chọn hoặc vẽ trực tiếp trên màn hình.
- Đầu đọc thẻ từ: Đọc thông tin được mã hóa trên dải từ của thẻ ngân hàng hoặc thẻ ID.
- Ổ băng từ: Dùng để nhập hoặc đọc dữ liệu từ băng từ — phổ biến trong hệ thống lưu trữ cũ.
- Microphones (Micro): Chuyển âm thanh thành tín hiệu điện để máy tính xử lý.
- Máy đọc ký tự quang học – OCR: Nhận dạng và chuyển đổi văn bản in hoặc viết tay thành dữ liệu kỹ thuật số.
- Scanners (Máy quét): Quét hình ảnh, tài liệu hoặc mã vạch và chuyển chúng thành dạng số.
- Sensors (Cảm biến): Phát hiện và đo lường các yếu tố vật lý như ánh sáng, nhiệt độ, chuyển động hoặc áp suất.
- Bút cảm ứng: Dùng để viết hoặc vẽ trên màn hình cảm ứng.
- Màn hình cảm ứng: Vừa là thiết bị đầu vào vừa đầu ra; cho phép người dùng tương tác trực tiếp bằng chạm.
- Webcams (Camera máy tính): Ghi lại hình ảnh hoặc video và truyền trực tiếp đến hệ thống máy tính.


