Từ Phần 5.1.4 Truy cập bộ nhớ trực tiếp trong các hệ điều hành hiện đại của Andrew S. Tanenbaum, Herbert Bos, 2014 ,
Để đơn giản hóa lời giải thích, chúng tôi giả định rằng CPU truy cập tất cả các thiết bị và bộ nhớ thông qua một bus hệ thống duy nhất kết nối CPU, bộ nhớ và các thiết bị I / O, như trong Hình 5-4.
Để giải thích cách DMA hoạt động, trước tiên chúng ta hãy xem cách đọc đĩa xảy ra khi DMA không được sử dụng.
- Đầu tiên, bộ điều khiển đĩa đọc khối (một hoặc nhiều cung) từ ổ đĩa, từng bit một, cho đến khi toàn bộ khối nằm trong bộ đệm bên trong của bộ điều khiển.
- Tiếp theo, nó tính toán tổng kiểm tra để xác minh rằng không có lỗi đọc đã xảy ra. Sau đó bộ điều khiển gây ra một ngắt. Khi hệ điều hành bắt đầu chạy, nó có thể đọc khối đĩa từ bộ đệm của bộ điều khiển một byte hoặc một từ tại một thời điểm bằng cách thực hiện một vòng lặp, với mỗi lần lặp đọc một byte hoặc từ từ một thanh ghi thiết bị điều khiển và lưu trữ nó trong bộ nhớ chính.
Q: trong bước thứ hai,
không phải dữ liệu được chuyển " từ bộ đệm của bộ điều khiển " sang bộ nhớ chính sao? Tại sao nó nói cả " từ bộ đệm của bộ điều khiển " và " từ thanh ghi thiết bị điều khiển "?
trong bước thứ hai, bộ điều khiển có thể chuyển dữ liệu từ bộ đệm của nó sang bộ nhớ chính mà không làm gián đoạn đến cpu và không liên quan đến hệ điều hành nữa không?
Khi DMA được sử dụng, quy trình sẽ khác.
- Đầu tiên CPU lập trình bộ điều khiển DMA bằng cách đặt các thanh ghi của nó để nó biết phải chuyển gì ở đâu (bước 1 trong Hình 5-4).
Nó cũng đưa ra một lệnh cho bộ điều khiển đĩa bảo nó đọc dữ liệu từ đĩa vào bộ đệm bên trong của nó và xác minh tổng kiểm tra. - Khi dữ liệu hợp lệ nằm trong bộ đệm của bộ điều khiển đĩa, DMA có thể bắt đầu. Bộ điều khiển DMA bắt đầu chuyển bằng cách đưa ra yêu cầu đọc qua bus đến bộ điều khiển đĩa (bước 2). Yêu cầu đọc này trông giống như bất kỳ yêu cầu đọc nào khác và bộ điều khiển đĩa không biết (hoặc quan tâm) liệu nó đến từ CPU hay từ bộ điều khiển DMA. Thông thường, địa chỉ bộ nhớ để ghi là trên các dòng địa chỉ của bus, vì vậy khi bộ điều khiển đĩa lấy từ tiếp theo từ bộ đệm bên trong của nó, nó sẽ biết ghi nó ở đâu. Ghi vào bộ nhớ là một chu kỳ bus tiêu chuẩn khác (bước 3).
- Khi ghi xong, bộ điều khiển đĩa sẽ gửi tín hiệu xác nhận đến bộ điều khiển DMA, cũng trên bus (bước 4). Bộ điều khiển DMA sau đó tăng địa chỉ bộ nhớ để sử dụng và giảm số byte. Nếu số byte vẫn lớn hơn 0, các bước 2 đến 4 được lặp lại cho đến khi số đếm đạt 0.
- Vào thời điểm đó, bộ điều khiển DMA làm gián đoạn CPU để cho nó biết rằng quá trình truyền đã hoàn tất. Khi hệ điều hành khởi động, nó không phải sao chép khối đĩa vào bộ nhớ; nó đã ở đó
Q: trong bước thứ hai, bộ điều khiển DMA yêu cầu bộ điều khiển đĩa chuyển dữ liệu từ bộ đệm của bộ điều khiển đĩa sang bộ nhớ chính. Trong bước đầu tiên, CPU đưa ra lệnh cho bộ điều khiển đĩa yêu cầu nó đọc dữ liệu từ đĩa vào bộ đệm bên trong của nó. Đồng thời, CPU cũng có thể yêu cầu bộ điều khiển đĩa chuyển dữ liệu từ bộ đệm của bộ điều khiển đĩa sang bộ nhớ chính, khi bộ điều khiển đĩa kết thúc việc truyền dữ liệu từ đĩa sang bộ đệm của bộ điều khiển đĩa, do đó không cần Bộ điều khiển DMA để báo cho bộ điều khiển đĩa chuyển dữ liệu từ bộ đệm của bộ điều khiển đĩa sang bộ nhớ chính? (Tôi không thể hiểu tại sao chúng ta cần bộ điều khiển DMA để truyền dữ liệu giữa đĩa và bộ nhớ chính, vì vậy hãy đoán rằng tôi bỏ lỡ điều gì đó quan trọng để hiểu trích dẫn).
- Đầu tiên CPU lập trình bộ điều khiển DMA bằng cách đặt các thanh ghi của nó để nó biết phải chuyển gì ở đâu (bước 1 trong Hình 5-4).
Bộ điều khiển thiết bị của thiết bị điều khiển thiết bị và thực hiện các thao tác trên thiết bị. Bộ điều khiển DMA điều khiển và thực hiện các hoạt động trên thiết bị nào?
Cảm ơn!