Truy cập bộ nhớ trực tiếp (tiếng Anh . Direct Memory Access - DMA) là việc truy cập bộ nhớ chính của một bộ điều khiển được bộ xử lý trung tâm - CPU (Central Processing Unit) giao thực hiện thay cho nó, thường được sử dụng trong việc truyền khối dữ liệu giữa bộ nhớ chính và một thiết bị ngoại vi, thí dụ ổ đĩa (xt. Bộ xử lý trung tâm, Thiết bị ngoại vi máy tính).
Đơn vị điều khiển truy cập bộ nhớ thay cho CPU được gọi tắt là DMAC (DMA Controler), nó có thể đọc/ghi một khối dữ liệu từ/vào bộ nhớ mà không cần sự can thiệp của CPU. Khi cần trao đổi dữ liệu với thiết bị ngoại vi, CPU gửi cho DMAC địa chỉ bộ nhớ chính chứa dữ liệu, số byte cần đọc/ghi, số hiệu thiết bị ngoại vi và hướng truyền dữ liệu. Sau đó DMAC sẽ thực hiện công việc dựa trên các tham số mà CPU đã truyền cho nó, khi công việc hoàn thành, DMAC sẽ báo lại cho CPU bằng cách sinh ra một tín hiệu gọi là ngắt (interrupt) (xt. Ngắt). Khi nhận được tín hiệu ngắt CPU sẽ tạm thời dừng công việc đang thực hiện để gọi thực hiện một chương trình đặc biệt gọi là chương trình xử lý ngắt (interrupt handler), chương trình này sẽ kiểm tra công việc mà CPU đã giao cho DMAC thực hiện xem có lỗi hay không và báo cho hệ điều hànhbiết rằng việc trao đổi dữ liệu với thiết bị ngoại vi đã kết thúc. Khi chương trình xử lý ngắt kết thúc, CPU sẽ quay trở lại với công việc mà nó đã tạm dừng trước đó.
Tuy nhiên, bộ nhớ chính chỉ chứa các chương trình và dữ liệu mà chương trình xử lý khi chúng được thi hành, khi tắt máy thì nội dung trong bộ nhớ chính sẽ bị mất. Vì vậy các máy tính nói chung đều được trang bị một số thiết bị nhớ phụ, cg. là bộ nhớ ngoài, có khả năng lưu trữ thông tin khi tắt máy (xt. Bộ xử lý trung tâm). Một số loại bộ nhớ phụ đã và đang được sử dụng rộng rãi là băng từ, đĩa từ, đĩa quang, đĩa thể rắn - SSD (solid state disk). Bộ nhớ phụ thường có dung lượng lớn hơn bộ nhớ chính rất nhiều, rẻ hơn nhưng chạy chậm hơn.
Một trong các đặc điểm quan trọng của bộ nhớ phụ là việc đọc hay ghi theo khối (byte hoặc bit), khối có tên gọi là cung (sector) hay liên cung (cluster) đối với đĩa từ, khối (block) đối với đĩa quang v.v. Hệ điều hànhsẽ quản lý bộ nhớ phụ cùng với bộ nhớ chính sao cho đạt hiệu quả cao nhất, một trong các mục tiêu là làm cho tốc độ thấp của các thiết bị nhớ phụ ít ảnh hưởng xấu đến tốc độ chung của cả hệ thống máy tính.
Khi CPU đọc dữ liệu từ thiết bị nhớ phụ, nó đóng vai trò là thiết vị vào (input device), khi CPU ghi, nó đóng vài trò là thiết vị ra (output device). Có thiết bị nhớ phụ có thể đọc và ghi, nhưng cũng có loại thiết bị nhớ phụ chỉ có thể đọc, thí dụ ổ đĩa quang loại CD-ROM. Nơi tập kết dữ liệu để CPU trao đổi với thiết bị nhớ phụ hoặc các thiết bị vào/ra khác có thể là các cổng (port) hoặc một vùng nhất định trong bộ nhớ chính. Cổng là một thanh ghi đặc biệt, ngoài chức năng nhớ đệm một byte hay từ (xt. Từ máy tính) nó còn có một số bit trạng thái cần thiết để CPU và thiết bị nhớ phụ hoặc thiết bị ngoại vi khác dùng đến trong quá trình gửi/nhận dữ liệu. Một số cổng còn có chức năng nhận các bit dữ liệu vào theo kiểu song song nhưng truyền ra theo kiểu nối tiếp, hoặc ngược lại. Việc đọc/ghi cổng cũng thường được gọi là vào/ra, hay I/O; các hệ điều hànhđều có chức năng tổ chức vào/ra ở các mức thấp;nhiều ứng dụng cũng có các chức năng tổ chức vào/ra, nhưng ở mức cao hơn.
Phương pháp vào/ra sử dụng DMA cho phép giải phóng CPU khỏi gánh nặng của công việc quản lý vào/ra, vì trong thời gian DMAC làm việc CPU có thể làm các công việc khác. Tuy nhiên, do đơn vị DMAC cần có quyền ưu tiên chiếm dụng bus cao hơn CPU, nên khi DMAC làm việc thì CPU không sử dụng được bus. Nếu CPU có tốc độ hoạt động cao hơn nhiều so với tốc độ truyền của bus hệ thống hoặc máy tính có nhiều thiết bị vào/ra sử dụng phương pháp này, thì tỉ lệ thời gian CPU “đói việc” sẽ tăng lên và hiệu quả của phương pháp DMA sẽ giảm đi.
Ngoài phương pháp DMA, còn có ba phương pháp tổ chức vào/ra khác thường được sử dụng.
- Vào/ra được lập trình (Programmed I/O)
Trong quá trình hoạt động, CPU thực hiện một vòng lặp, trong mỗi lần lặp nó lần lượt “nhìn” ra tất cả các cổng để xem xem có cần nhận (input) hoặc gửi (output) dữ liệu hay không; phương pháp này còn có một tên gọi khác là hỏi vòng (polling I/O). Các lệnh vào (input) hoặc ra (output) thực hiện nhận hoặc gửi từng byte hoặc từ.
Đây là phương pháp vào/ra đơn giản nhất, thường được sử dụng trong các hệ thống vi xử lý đơn giản cần giá thành thấp. Tuy nhiên, phương pháp này đòi hỏi CPU phải sử dụng hầu hết thời gian để kiểm tra các cổng liên hệ với các thiết bị vào/ra.Chính vì vậy phương pháp vào/ra này còn có tên gọi là luôn luôn chờ đợi (busy waiting).
- Vào/ra được điều khiển bởi ngắt (interrupt-driven I/O)
Mỗi thiết bị nhớ phụ (cũng như các thiết bị vào/ra khác) được trang bị một đường dây báo ngắt, CPU sẽ chỉ xử lý yêu cầu của thiết bị vào/ra khi có tín hiệu ngắt. Ưu điểm của phương pháp này so với phương pháp vào/ra được lập trình là tránh được việc lãng phí thời gian của CPU do phải hỏi vòng; còn nhược điểm là cứ mỗi lần gửi/nhận một byte hay từ lại phải gọi ngắt một lần và chính CPU phải thực hiện chương trình con xử lý ngắt, dẫn đến việc vẫn cần nhiều thời gian của CPU. Phương pháp này được sử dụng phổ biến trong các máy tính cá nhân.
- Vào/ra sử dụng kênh dữ liệu (I/O channels)
Trong các máy tính lớn (mainframe) (xt. Thế hệ máy tính) số thiết bị nhớ phụ như ổ đĩa cứng có thể lên đến hàng trăm, hàng nghìn, hơn nữa chúng lại có khả năng hoạt động đồng thời, vì vậy các thao tác vào/ra xảy ra liên tục và là công việc chính của CPU. Nếu áp dụng phương pháp DMA cho máy tính lớn thì chắc chắn bus cũng sẽ bị quá tải. Để giải quyết vấn đề này người ta sử dụng một số đơn vị chuyên dụng, cg. bộ xử lý vào/ra, để hỗ trợ cho CPU chính, phương pháp này được gọi là kênh dữ liệu vào/ra. Phương pháp này có năng lực vận chuyển dữ liệu vào/ra cao hơn hẳn tất cả các phương pháp khác, tuy nhiên chi phí đầu tư đòi hỏi cao hơn nhiều.
Các máy tính cá nhân ngày nay thường được trang bị bộ xử lý tăng tốc đồ họa AGP, thực chất chính là kênh dữ liệu (xt. Bộ xử lý đồ họa).
Tài liệu tham khảo[sửa]
- A. S. Tannenbaum, Structured Computer Organization, 6th Edition, Pearson, 2013. ISBN 10: 0-13-291652-5, ISBN 13: 978-0-13-291652-3.
- Harry Henderson, Encyclopedia of Computer Science and Technology, Revised Edition, Publisher: Facts On File, Inc, 2009. ISBN-13: 978-0-8160-6382-6, ISBN-10: 0-8160-6382-6.
- Michael Tischer, PCINTERN-System programming: The Encyclopedia of DOS programming Know How, 5th Edition, Arbacus, 1992. ISBN-10: 1557551456, ISBN-13: 978-1557551450.
- Technical Reference, IBM Personal Computer Hardware Reference Library, First Edition, 1981.
- William Stallings, Computer Organization and Architecture: Design for Performance, 9th Edition, Pearson, 2013. ISBN 10: 0-13-293633-X, ISBN 13: 978-0-13-293633-0.