Direct memory access

Direct memory access (DMA) (tạm dịch, truy cập bộ nhớ trực tiếp) là cơ chế của hệ thống máy tính cho phép một thành phần phần cứng truy cập đến bộ nhớ dữ liệu chính (như RAM) một cách độc lập với CPU.

DMA thường thì hoạt động chuyển thông tin giữa thiết bị I/O với bộ nhớ máy tính được thực hiện thông qua CPU theo cơ chế tuần tự: CPU ra lệnh "import" để nhập 1 đơn vị thông tin (byte/word) từ thiết bị I/O vào thanh ghi CPU rồi ra lệnh ghi thông tin từ thanh ghi CPU vào ô nhớ RAM nào đó. Quy trình này rất chậm vì CPU phải tốn nhiều chu kỳ máy để thực hiện các lệnh di chuyển thông tin, hơn nữa thông tin còn phải đi vòng qua CPU trước khi đến được vị trí cuối cùng. Để tăng tốc độ chuyển dữ liệu giữa I/O và RAM, người ta đã thiết kế mạch cứng DMA (Direct Memory Access) cho phép chuyển dữ liệu trực tiếp giữa I/O và RAM mà không cần đi ngang qua CPU nữa. Như vậy, nếu driver thiết bị I/O hỗ trợ tốt chế độ hoạt động DMA thì bạn nên cho phép chế độ này hoạt động.

Khi sử dụng, CPU gửi cho bộ điều khiển một số các thông số như địa chỉ trên đĩa của khối, địa chỉ trong bộ nhớ nơi định vị khối, số lượng byte dữ liệu để chuyển.

Sau khi bộ điều khiển đã đọc toàn bộ dữ liệu từ thiết bị vào buffer của nó và kiểm tra checksum, bộ điều khiển chuyển byte đầu tiên vào bộ nhớ chính tại địa chỉ được mô tả bởi địa chỉ bộ nhớ DMA. Sau đó nó tăng địa chỉ DMA và giảm số bytes phải chuyển. Quá trình này lập cho tới khi số bytes phải chuyển bằng 0, và bộ điều khiển tạo một ngắt. Như vậy không cần phải copy khối vào trong bộ nhớ, nó đã hiện hữu trong bộ nhớ.

Điểm lợi của DMA: Với những chức năng giao tiếp ngoài có tính liên tục như xử lý âm thanh, kết nối mạng với bên ngoài thì rất cần thiết. CPU không thể xử lý đa nhiệm cùng lúc nhiều chức năng nên buộc phải sử dụng DMA. Nếu gói dữ liệu chưa thể ghi hết vào DMA thì CPU có thể đợi (do CPU có tốc độ lớn hơn nhiều với giao tiếp ngoài) cho đến khi nào cờ ngắt báo đã ghi xong.

 Lịch sử 

Tham khảo

Thể loại:Bộ nhớ máy tính
Thể loại:Input/Output
Thể loại:Bo mạch chủ