2010-10-03 73 views
20

Sự khác biệt giữa DMA và IO ánh xạ bộ nhớ là gì? Cả hai đều trông giống tôi.Sự khác biệt giữa DMA và IO ánh xạ bộ nhớ là gì?

+0

Cũng liên quan: [Trình điều khiển thiết bị Linux, Phiên bản 2: Chương 13: mmap và DMA] (http://www.xml.com/ldd/chapter/book/ch13.html); đầu tiên đọc câu trả lời ở đây đã giúp tôi rất nhiều, mặc dù. – sdaau

Trả lời

31

I/O được ánh xạ bộ nhớ cho phép CPU điều khiển phần cứng bằng cách đọc và ghi các địa chỉ bộ nhớ cụ thể. Thông thường, điều này sẽ được sử dụng cho các hoạt động băng thông thấp như thay đổi bit điều khiển.

DMA cho phép phần cứng đọc trực tiếp và ghi bộ nhớ mà không cần liên quan đến CPU. Thông thường, điều này sẽ được sử dụng cho các hoạt động băng thông cao như đầu vào đĩa I/O hoặc đầu vào video camera.

+0

Vì vậy, về cơ bản chúng giống nhau nhưng theo hướng ngược lại? – f126ck

+0

Không chính xác. DMA là khi hai thiết bị không phải là CPU sử dụng bus bộ nhớ để giao tiếp (với một thiết bị thường là bộ nhớ chính, và quá trình được dàn dựng bởi CPU). IO ánh xạ bộ nhớ là CPU nói chuyện với thiết bị trên bus bộ nhớ không phải là bộ nhớ chính. – jdizzle

+0

tại sao cần phải ánh xạ bộ đệm dma ngay cả khi động cơ dma có trong thiết bị? – ransh

10

IO ánh xạ bộ nhớ nghĩa là thanh ghi thiết bị được ánh xạ vào không gian bộ nhớ của máy - khi các vùng nhớ đó được đọc hoặc ghi bởi CPU, nó đọc hoặc ghi vào thiết bị chứ không phải bộ nhớ thực. Để chuyển dữ liệu từ thiết bị sang bộ nhớ đệm thực tế, CPU phải đọc dữ liệu từ thanh ghi thiết bị được ánh xạ bộ nhớ và ghi nó vào bộ đệm (và chuyển đổi dữ liệu cho thiết bị).

Với truyền DMA, thiết bị có thể trực tiếp truyền dữ liệu đến hoặc từ bộ đệm bộ nhớ thực. CPU cho thiết bị biết vị trí của bộ đệm, và sau đó có thể thực hiện công việc khác trong khi thiết bị đang truy cập trực tiếp vào bộ nhớ.

17

Vì những người khác đã trả lời câu hỏi, tôi sẽ chỉ thêm một chút lịch sử.

Quay lại những ngày cũ, trên phần cứng x86 (PC), chỉ có không gian I/O và không gian bộ nhớ. Đây là hai không gian địa chỉ khác nhau, được truy cập với giao thức bus khác nhau và các hướng dẫn CPU khác nhau, nhưng có thể nói chuyện trên cùng một khe cắm thẻ plug-in.

Hầu hết các thiết bị sử dụng không gian I/O cho cả giao diện điều khiển lẫn giao diện truyền dữ liệu hàng loạt. Cách đơn giản để truy cập dữ liệu là thực thi nhiều lệnh CPU để truyền dữ liệu một từ tại một thời điểm từ địa chỉ I/O đến địa chỉ bộ nhớ (đôi khi được gọi là "bit-banging.")

Để di chuyển dữ liệu từ thiết bị đến bộ nhớ máy chủ tự động, không có hỗ trợ trong giao thức bus ISA cho các thiết bị để bắt đầu truyền. Giải pháp thỏa hiệp được phát minh: bộ điều khiển DMA. Đây là một phần của phần cứng mà CPU ngồi lên và bắt đầu chuyển để di chuyển dữ liệu từ địa chỉ I/O của thiết bị sang bộ nhớ, hoặc ngược lại. Bởi vì địa chỉ I/O giống nhau, bộ điều khiển DMA đang thực hiện các hoạt động giống như một CPU, nhưng hiệu quả hơn một chút và cho phép một số tự do tiếp tục chạy trong nền (mặc dù có thể không miễn là nó không thể nói chuyện với bộ nhớ).

Tua nhanh tới thời điểm PCI và các giao thức bus trở nên thông minh hơn nhiều: bất kỳ thiết bị nào cũng có thể bắt đầu chuyển. Vì vậy, nó có thể cho, nói, một thẻ điều khiển RAID để di chuyển bất kỳ dữ liệu nó thích hoặc từ máy chủ bất cứ lúc nào nó thích. Chế độ này được gọi là chế độ "bus master", nhưng không có lý do cụ thể nào khiến mọi người tiếp tục tham khảo chế độ này là "DMA" mặc dù bộ điều khiển DMA cũ đã biến mất lâu rồi. Không giống như các chuyển DMA cũ, thường không có địa chỉ I/O tương ứng, và chế độ tổng thể bus thường là giao diện duy nhất có trên thiết bị, không có chế độ "bit-đập" CPU nào cả.

+3

Trong hạt nhân Linux 'DMA' được đề cập trong hơn 5000 tệp C, đó có thể là lý do tại sao mọi người vẫn nói về DMA. – JohnnyFromBF

0

Truy cập bộ nhớ trực tiếp (DMA) là một kỹ thuật chuyển dữ liệu từ I/O sang bộ nhớ và từ bộ nhớ sang I/O mà không cần sự can thiệp của CPU. Với mục đích này, một chip đặc biệt, được đặt tên là bộ điều khiển DMA, được sử dụng để kiểm soát tất cả các hoạt động và đồng bộ hóa dữ liệu. Kết quả là, so sánh với các kỹ thuật truyền dữ liệu khác, DMA nhanh hơn nhiều.

Mặt khác, bộ nhớ ảo hoạt động như bộ đệm giữa bộ nhớ chính và bộ nhớ phụ.Dữ liệu được tìm nạp trước từ bộ nhớ thứ cấp (đĩa cứng) vào bộ nhớ chính để dữ liệu đã có sẵn trong bộ nhớ chính khi cần. Nó cho phép chúng tôi chạy nhiều ứng dụng trên hệ thống hơn là chúng tôi có đủ bộ nhớ vật lý để hỗ trợ.

Các vấn đề liên quan