DMA
Hãy giải thích vì sao DMA thường được “ưu ái” sử dụng như là phương thức thực thi trao đổi với ngoại vi? DMA có lợi điểm gì không đối với input thông qua bàn phím? Giải thích tại sao hoặc tại sao không?
- DMA là bộ nhớ truy xuất trực tiếp không thông qua bộ vi xử lý (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), được sử dụng để truyền tải dữ liệu giữa bộ nhớ và các thiết bị ngoại vi như ổ đĩa cứng, CD ROM,DVD… được nhanh hơn. Điều này sẽ thấy rõ ràng khi ghi đĩa, tốc độ đọc và ghi đĩa sẽ tăng lên rất nhiều. Với DMA thì CPU không phải truyền thông tin từ ngoại vi sang controller nữa, cho phép CPU chia tải (offload) các ngăn xếp bộ nhớ ngày càng chật chội sang các thành phần khác, cách thức này giải phóng CPU khỏi các công việc lặt vặt và cung cấp nhiều chu trình hơn để giải quyết các công việc phức tạp hơn, thường dùng truyền tải dữ liệu với dung lượng lớn.
- DMA sẽ không có lợi gì đối với input thông qua bàn phím bởi vì input bởi bàn phím thì rất chậm, bàn phím chỉ chuyển được 1 kí tự/1 lần, còn DMA thì chuyển theo block cho nên nếu làm như vậy thì sẽ rất mất thời gian, gây lãng phí.
DMA là gì ?
DMA là một kỹ thuật chuyển dữ liệu nhanh từ một card thiết bị tới bộ nhớ, từ bộ nhớ ra card thiết bị, hoặc trong một vài trường hợp từ một vị trí trong bộ nhớ tới một vị trí khác. Việc chuyển theo DMA rất quan trọng vì nó không yêu cầu đến sự thực thi của CPU. Chuyển theo DMA được thực hiện bằng cách lập trình một chip có tên là bộ điều khiển DMA (gọi ngắn gọn là DMAC), chip đó nằm trên bo mạch hệ thống của mọi máy PC. Việc lập trình thường được hoàn thành bởi một chương trình chạy trên máy tính của bạn (ví dụ một chương trình sao lưu đĩa cứng) hoặc bởi một thủ tục lưu trong ROM, hoặc trên một card thiết bị tiếp hợp (ví dụ trong ROM của card điều khiển đĩa mềm). Mỗi lần bộ điều khiển được khởi động và quá trình chuyển dữ liệu bắt đầu, CPU được tự do và làm việc khác trong khi DMAC tiếp tục thực hiện chuyển dữ liệu, có hai bộ vi xử lý đồng thời làm việc phục vụ bạn: một thực hiện mã (code), còn một chuyển dữ liệu.
Việc chuyển theo DMAC quan trọng còn vì một lý do khác, nó chuyển dữ liệu trực tiếp từ nguồn dữ liệu đến nơi nhận mà không cần thông qua bất kỳ bộ phận lưu trữ trung gian nào. Quá trình đưa một byte dữ liệu từ một thiết bị tới một vị trí trong bộ nhớ thông qua CPU là một quá trình hai bước. Ðầu tiên CPU đọc byte đó từ thiết bị và lưu trong một trong số các thanh ghi của nó. Tiếp theo đó nó đọc byte từ thanh ghi tới địa chỉ cần chuyển đến trong bộ nhớ. DMAC giảm quá trình trên xuống còn một bước, nó vận dụng các tín hiệu điều khiển trên đường truyền, vì thế byte đó được đọc và ghi chỉ trong một hành động.
Một cách tốt để hiểu sự khác nhau trên là minh họa các quá trình trên như là một cuộc chơi bóng ném. CPU là người chơi ném bóng với hai người khác được gọi là A và B. Ðể chuyển bóng từ A tới B, CPU phải bắt quả bóng do A ném và tung nó cho B. DMA, theo một cách khác, sẽ nói A tung trực tiếp quả bóng cho B. Trong lúc ấy, CPU có thể làm các công việc khác như khởi động cầu thủ tiếp theo.
Chuyển dữ liệu từ bộ nhớ đến bộ nhớ theo DMA hiện nay không được sử dụng nữa vì tốc độ CPU vượt trên DMAC rất nhiều, nhưng chuyển dữ liệu từ bộ nhớ đến thiết bị và từ thiết bị đến bộ nhớ là những kỳ tích đáng kể. Ðể đưa dữ liệu từ thiết bị vào bộ nhớ, DMAC kích hoạt đường truyền gây nên lệnh đọc từ thiết bị (một hoạt động đọc cổng I/O) và đồng thời tạo ra lệnh ghi vào bộ nhớ. Việc kích hoạt đọc từ cổng I/O sẽ làm cho thiết bị đặt một đơn vị - thông thường là một byte hoặc một Word - lên đường truyền dữ liệu của máy PC. Và vì tuyến đọc bộ nhớ được hoạt động đồng thời cho nên dữ liệu trên đường truyền được sao ngay vào bộ nhớ. Với mỗi lần ghi, DMAC dùng đường địa chỉ để chỉ định địa chỉ trong bộ nhớ nơi dữ liệu sẽ tới.
Tương tự đối với quá trình chuyển theo DMA từ bộ nhớ đến thiết bị. Với mỗi đơn vị dữ liệu được chuyển, DMAC ra lệnh đọc đối với bộ nhớ và ghi đối với cổng I/O. Ðịa chỉ của bộ nhớ được đặt trên đường địa chỉ. Giống như quá trình trên, dữ liệu được chuyển trực tiếp từ nơi phát đến nơi nhận bằng cách sử dụng đường dữ liệu.
DMAC được sử dụng trong phần lớn các máy PC là chip có ký hiệu 8237A hoặc tương đương. Các dòng máy Micro Channel và EISA đã sửa đổi kỹ thuật DMA tạo ra một chip riêng có các chức năng hơn hẳn 8237A, nhưng có rất ít chương trình điều khiển thiết bị tận dụng được những ưu điểm mở rộng đó. Dòng máy IBM-XT chỉ sử dụng một chip 8237A lập trình được cung cấp 4 kênh DMA riêng rẽ, đánh số từ 0 đến 3. Dòng máy IBM-AT (chiếm phần lớn thị trường máy PC hiện nay) sử dụng 2 chip 8237A cung cấp 8 kênh DMA độc lập đánh số từ 0 đến 7. Chỉ có 7 trong số 8 kênh DMA sử dụng được vì một kênh (kênh 4) được sử dụng để liên kết hai bộ điều khiển với nhau sao cho chúng có thể làm việc như một đơn vị thống nhất. Kênh 0 đến 3 chuyển 8 bit dữ liệu cùng một lúc và có thể lưu 64KB chỉ trong một lần hoạt động, trong khi kênh 5 đến 7 chuyển 16 bit và có thể chuyển được 128KB trong một lần hoạt động.
Giống như bộ điều khiển ngắt, nơi nhận yêu cầu ngắt từ các thiết bị thông qua đường IRQ, một DMAC nhận yêu cầu DMA thông qua đường DMA request (DREQ). Chip 8237A cung cấp một vài phương thức và phương pháp hành động khác nhau, tuy nhiên một quá trình chuyển điển hình từ thiết bị tới bộ nhớ diễn ra như sau:
DMAC được lập trình đầu tiên với địa chỉ của bộ nhớ sẽ ghi dữ liệu và số byte được chuyển. Khi thiết bị đã sẵn sàng bắt đầu quá trình chuyển, nó kích hoạt đường DREQ để kết nối với DMA. Sau khi được CPU cho phép điều khiển đường truyền, DMAC đưa ra địa chỉ bộ nhớ và tạo ra tín hiệu để một byte (hoặc một từ) dữ liệu được đọc từ thiết bị và ghi vào vùng được chỉ định trong bộ nhớ. Sau đó nó cập nhật địa chỉ bộ nhớ cho byte tiếp theo và lặp lại quá trình trên cho tới khi toàn bộ dữ liệu được chuyển hoàn tất. Dựa trên cách bộ điều khiển được lập trình, mỗi byte được chuyển có thể yêu cầu một tín hiệu DREQ riêng rẽ (phương thức chuyển đơn) hoặc chỉ một tín hiệu có thể khởi động tất cả quá trình truyền (phương thức chuyển khối hoặc theo yêu cầu).
Có một thiết bị DMA có trên tất cả các máy PC là bộ điều khiển đĩa mềm. Dữ liệu trên đĩa mềm được đọc theo từng đơn vị 512 byte (1 sector) và được chuyển bằng DMA sử dụng kênh DMA số 2. Ðể đọc một sector dữ liệu, ngắt BIOS 13H lập trình DMA theo phương thức chuyển đơn và cung cấp một lệnh đọc cho điều khiển đĩa mềm. Khi thực hiện, điều khiển đĩa đọc byte dữ liệu từ đĩa và khởi động quá trình truyền bằng cách kích hoạt DREQ 2. Sau đó nó đọc lần lượt các byte khác theo cách như trên để chuyển byte vào địa chỉ vật lý trong bộ nhớ. Tới khi DMAC đã chuyển xong 512 byte, điều khiển đĩa tạo ra một ngắt cứng để báo cho CPU biết đã có thể sử dụng được sector đó.
Cơ chế DMA
Chế độ 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 đó. Qui 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
Bạn đang đọc truyện trên: AzTruyen.Top