Khi bộ xử lý muốn đọc hoặc ghi một khối block dữ liệu, nó sẽ đưa ra một lệnh cho module DMA bằng cách gửi tới module DMA các Yêu cầu Đọc hoặc Ghi bằng cách sử dụng các đường điều khiển
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYỀN THÔNG VIỆT HÀN
Khoa Khoa Học Máy Tính
BÀI TẬP LỚN KIẾN TRÚC MÁY TÍNH
Kỹ thuật truy cập bộ nhớ trực tiếp (Direct Memory Access)
Sinh viên thực hiện: Hoàng Phố Mã: 21IT368
Huỳnh Phú Nhuận Mã: 21IT365Nguyễn Quang Huy Mã: 21IT353
Nguyễn Ngọc Ninh Mã: 21IT367
Giảng viên hướng dẫn: TS Phan Thị Lan Anh
Đà Nẵng, tháng 12 năm 2022
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &
TRUYỀN THÔNG VIỆT HÀN
Khoa Khoa Học Máy Tính
BÀI TẬP LỚN KIẾN TRÚC MÁY TÍNH
Kỹ thuật truy cập bộ nhớ trực tiếp (Direct Memory Access)
Huỳnh Phú Nhuận Mã: 21IT365Nguyễn Quang Huy Mã: 21IT353
Nguyễn Ngọc Ninh Mã: 21IT367
Giảng viên hướng dẫn: TS Phan Thị Lan Anh
Đà Nẵng, tháng 12 năm 2022
Trang 3NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Trang 4
LỜI CẢM ƠN
Để hoàn thành bài báo cáo học phần Kiến trúc máy tính này trước tiên nhóm emxin gửi lời cảm ơn chân thành đến các thầy cô giảng viên trong khoa Khoa học Máytính Trường Công Nghệ Thông Tin và Truyền thông Việt - Hàn
Đặc biệt, nhóm em xin gửi đến cô Phan Thị Lan Anh, người đã tận tình hướngdẫn, giúp đỡ trong việc nâng cao kiến thức chuyên môn, phát huy cho chúng em tính
tự học, tự tìm hiểu, từ đó hình thành cho chúng em phương phápnghiên cứu, tìm tòi,tiếp cận với khoa học công nghệ Đồng thời trau dồi cho chúng em kỹ năng học tậpnăng động và sáng tạo
Vì kiến thức còn hạn chế, trong quá trình tìm hiểu về đề tài này chúng em khôngthể tránh những sai sót Chúng em rất mong nhận được những nhận xét, đánh giá,đóng góp ý kiến từ thầy cô để rút ra kinh nghiệm từ bài báo cáo học phần này và chuẩn
bị tốt cho những bài báo cáo học phần sau
Chúng em xin chân thành cảm ơn!
Sinh viên
HOÀNG PHỐHUỲNH PHÚ NHUẬNNGUYỄN QUANG HUYTRẦN QUÝ PHÁTNGUYỄN NGỌC NINH
Trang 5MỤC LỤC
DANH MỤC CÁC TỪ VIẾT TẮT vii
DANH MỤC HÌNH VẼ viii
BẢNG PHÂN CÔNG NHIỆM VỤ ix
MỞ ĐẦU 1
1 Giới thiệu 1
2 Mục tiêu của đề tài 1
3 Nội dung và kế hoạch thực hiện 1
4 Bố cục báo cáo 1
Chương 1 TỔNG QUAN VỀ DIRECT MEMORY ACCESS (DMA) .2
1 Khái niệm 2
1.1 Direct Memory Access – DMA là gì? Định nghĩa DMA 2
1.2 Chức năng DMA 3
1.3.Bộ điều khiển Intel 8237A DMA 6
2 Kết chương 1 9
Chương 2 NGUYÊN LÝ HOẠT ĐỘNG VÀ ỨNG DỤNG CỦA DMA 10
1 Vấn đề khi không có DMA 10
2 Quy trình hoạt động của DMA 11
3 Vấn đề cần giải quyết 12
4 Kết chương 2 13
Chương 3 HỢP NGỮ ASSEMBLY 14
1 Assembly là gì? Khái niệm 14
2 Tập lệnh 15
3 Cách thức hoạt động của Assembly 17
4 Phần mềm Emu8086 19
5 Ví dụ 20
5.1 Bài toán 20
5.2 Lưu đồ thuật toán 20
Trang 65.3 Code 20
5.4 Mô phỏng kết quả 23
6 Ứng dụng của Assembly 23
7 Kết chương 3 23
KẾT LUẬN 24
1 Kết quả đạt được 24
TÀI LIỆU THAM KHẢO i
Trang 7DANH MỤC CÁC TỪ VIẾT TẮT
CPU Central Processing Unit
Trang 8DANH MỤC HÌNH VẼ
Hình 1: Ảnh DMA 2
Hình 2: Sơ đồ khối DMA 3
Hình 3: Điểm ngắt của DMA và của ngắt trong chu kỳ lệnh 5
Hình 4: Các cấu hình DMA 5
Hình 5: DMA 8237 7
Hình 6: Sự tương tác Direct Memory Access 11
Hình 7: Cấu trúc chương trình Assembly 18
Hình 8: Lưu đồ thuật toán 20
Hình 9: Kết quả bài toán 23
Trang 9BẢNG PHÂN CÔNG NHIỆM VỤ
Trang 10MỞ ĐẦU
1 Giới thiệu
Quay trở lại những dấu mốc lịch sử của công nghệ tưởng chừng đơn giản nhưng
lại là khởi thủy của những bước tiến vĩ đại của nền công nghệ thông tin sau này
2 Mục tiêu của đề tài
- Mục tiêu của đề tài nhằm hiểu được DMA là gì, chức năng của DMA
- Các vấn đề khi không có DMA, quy trình hoạt động của DMA và ứng dụngcủa DMA
- Nghiên cứu về hợp ngữ Assembly, cho một bài toán, vẽ lưu đồ cho bài toán,tiến hành code và mô phỏng kết quả đạt được Trình bày về phần mềm Emu8086
3 Nội dung và kế hoạch thực hiện
4 Bố cục báo cáo
Sau phần Mở đầu, báo cáo được trình bày trong ba chương, cụ thể như sau:Chương 1 Tổng quan về DMA Trong chương này, báo cáo trình bày các kháiniệm, chức năng và bộ điều khiển Intel 8237A DMA
Chương 2 Nguyên lý hoạt động và ứng dụng của DMA Nội dung chương baogồm vấn đề khi không có DMA, quy trình hoạt động và hướng giải quyết của DMA.Chương 3 Hợp ngữ Assembly Chương này sẽ nghiên cứu về cấu trúcAssembly, cho một bài toán, vẽ lưu đồ, tiến hành Code và mô phỏng kết quả Trìnhbày về phẩn mềm Emu8086
Cuối cùng là Kết luận, Tài liệu tham khảo liên quan đến đề tài
Trang 11Chương 1 TỔNG QUAN VỀ DIRECT MEMORY ACCESS
(DMA).
1 Khái niệm
1.1 Direct Memory Access – DMA là gì? Định nghĩa DMA
Direct memory access viết tắt là DMA Đây là một ơ hế truуền dữ liệu vớiᴄ ᴄ
tố độ ao từ ngoại i tới bộ nhớ và từ bộ nhớ tới bộ nhớ Hay Direct memory accessᴄ ᴄ ᴠ
là một phương pháp cho phép các thiết bị gửi hoặc nhận (Input/Output) dữ liệu mộtcách trực tiếp tới bộ nhớ và từ bộ nhớ mà không cần thông qua CPU
Hình 1: Ảnh DMA
Trang 121.2 Chức năng DMA
DMA thường là một module bổ sung trên hệ thống bus Module DMA (Hình 2)
có khả năng bắt chước bộ xử lý, tức là tiếp nhận việc điều khiển hệ thống từ bộ xử lý
Nó cần phải thực hiện điều này để trao đổi dữ liệu với bộ nhớ qua bus hệ thống Vớimục đích này, module DMA chỉ sử dụng bus khi bộ xử lý không cần đến nó hoặcDMA phải buộc bộ xử lý phải tạm ngừng hoạt động (gọi là trộm chu kỳ) Kỹ thuậttrộm chu kỳ thường phổ biến hơn Khi bộ xử lý muốn đọc hoặc ghi một khối (block)
dữ liệu, nó sẽ đưa ra một lệnh cho module DMA bằng cách gửi tới module DMA các
Yêu cầu Đọc hoặc Ghi bằng cách sử dụng các đường điều khiển READ hoặcWRITE bộ xử lý và module DMA
Địa chỉ của thiết bị I/O liên quan, gửi qua các đường dữ liệu Địa chỉ vị trí đầu tiên trong bộ nhớ để đọc hoặc ghi lên, truyền qua các đường dữliệu và được lưu trữ lại bởi module DMA trong Thanh ghi địa chỉ (xem hình)
Số lượng từ cần đọc hoặc ghi, truyền qua các đường dữ liệu và được lưu trữ trongthanh ghi Đếm dữ liệu Sau đó, bộ xử lý tiếp tục thực hiện các công việc khác Hoạtđộng vào/ra được ủy quyền hoàn toàn cho module DMA Module DMA chuyển toàn
bộ khối dữ liệu giữa bộ nhớ và thiết bị ngoại vi mà không cần sự tham gia của bộ xử
lý Khi quá trình trao đổi hoàn tất, module DMA gửi một tín hiệu ngắt tới bộ xử lý Do
đó, bộ xử lý chỉ tham gia vào thời điểm bắt đầu và kết thúc quá trình trao đổi
Trang 13Hình 2: Sơ đồ khối DMA
Như đã nói ở trên, khi DMA cần chiếm bus để truyền, nó sẽ trộm chu kỳ bus, Hình
3 chỉ ra các thời điểm trong chu kỳ lệnh mà bộ xử lý bị treo (trong lúc DMA sử dụngbus) Trong mỗi trường hợp, bộ xử lý bị treo ngay trước khi nó cần sử dụng bus.Module
DMA chuyển một từ sau đó trả lại điều khiển cho bộ xử lý Lưu ý rằng đây không phải
là ngắt; bộ xử lý không cần lưu trữ ngữ cảnh hoặc bất cứ thông tin gì Đơn giản là bộ
xử lý chỉ dừng lại một chu kỳ bus Về mặt hiệu năng của bộ xử lý thì nó sẽ hoạt độngchậm hơn Tuy nhiên, với việc trao đổi vào/ra nhiều từ, cơ chế DMA hiệu quả hơn rấtnhiều so với I/O điều khiển ngắt hoặc I/O chương trình Cơ chế DMA có thể được cấuhình theo nhiều cách khác nhau Hình 4 là sơ đồ một số cấu hình DMA Hình 4.a, tất
cả các module chia sẻ chung hệ thống bus Module DMA đại diện cho bộ xử lý sửdụng I/O chương trình để trao đổi dữ liệu giữa bộ nhớ và module I/O Cấu hình nàymặc dù không tốn kém nhưng rõ ràng là không hiệu quả Giống như I/O chương trình
do bộ xử lý điều khiển, mỗi lần truyền một từ sẽ tiêu tốn hai chu kỳ bus Số lượng chu
kỳ bus có thể được giảm bớt bằng cách tích hợp DMA và các module I/O Như trongHình 4.b, module DMA kết nối trực tiếp với một hoặc nhiều module I/O mà không điqua bus hệ thống Logic DMA có thể là một phần của module I/O hoặc có thể là mộtmodule riêng biệt điều khiển một hoặc nhiều module I/O Phương thức này có thểđược cải tiến thêm một bước nữa bằng cách kết nối các module I/O với module DMAqua một bus I/O Cấu hình này giảm số giao diện ngoại vi của module DMA thành một
và cho phép khả năng mở rộng (tăng thêm số lượng module I/O thì chỉ cần kết nối với
Trang 14bus I/O) Trong cả hai trường hợp, module DMA chỉ chiếm bus hệ thống khi cần traođổi dữ liệu với bộ nhớ, như vậy chỉ mất một chu kỳ bus cho mỗi từ được truyền.
Hình 3: Điểm ngắt của DMA và của ngắt trong chu kỳ lệnh
Trang 15Hình 4: Các cấu hình DMA
1.3 Bộ điều khiển Intel 8237A DMA
Bộ điều khiển Intel 8237A DMA giao tiếp với họ vi xử lý 80x86 và bộ nhớ DRAM,cung cấp cơ chế DMA (Hình 4) Khi module DMA cần sử dụng bus hệ thống (bus dữliệu, địa chỉ và điều khiển) để truyền dữ liệu, nó sẽ gửi một tín hiệu HOLD cho bộ xử
lý Bộ xử lý trả lời bằng tín hiệu HLDA (chấp nhận Hold) để cho module DMA biếtrằng nó có thể sử dụng bus Xét ví dụ: nếu module DMA là truyền một khối dữ liệu từ
bộ nhớ sang đĩa từ, nó sẽ làm như sau:
1 Thiết bị ngoại vi (bộ điều khiển đĩa từ) sẽ yêu cầu dịch vụ của DMA bằng cáchthiết lập đường DREQ (Yêu cầu DMA) ở mức cao
2 DMA sẽ đặt tín hiệu HOLD qua đường HRQ vào bộ xử lý để báo cho CPU biếtrằng nó cần sử dụng bus
Trang 163 CPU sẽ kết thúc chu kỳ bus hiện tại (không nhất thiết là phải kết thúc chu kỳ lệnhhiện tại) và đáp ứng yêu cầu của DMA bằng cách thiết lập đường HDLA lên mứccao, khi đó DMA 8237 biết rằng nó có thể sử dụng bus để thực hiện nhiệm vụ Tínhiệu HOLD sẽ luôn giữ ở mức cao trong cả quá trình DMA trao đổi dữ liệu.
4 DMA thiết lập tín hiệu DACK (Chấp nhận DMA) để báo cho thiết bị ngoại vi rằng
nó sẽ bắt đầu truyền dữ liệu
5 DMA bắt đầu điều khiển việc truyền dữ liệu từ bộ nhớ sang thiết bị ngoại vi bằngcách đặt địa chỉ byte đầu tiên của khối dữ liệu lên bus địa chỉ và kích hoạt tín hiệuMEMR (tín hiệu điều khiển Đọc bộ nhớ), để một byte từ bộ nhớ vào bus dữ liệu;sau đó nó kích hoạt IOW (Ghi I/O) để ghi vào thiết bị ngoại vi Tiếp đó, DMAgiảm thanh ghi đếm dữ liệu và tăng thanh ghi địa chỉ để tiếp tục thao tác truyền các
từ tiếp theo Quá trình này lặp lại cho đến khi Thanh ghi đếm dữ liệu về không
6 Sau khi DMA kết thúc công việc, nó sẽ huỷ bỏ HRQ để báo cho CPU biết rằng nó
có thể lấy lại quyền điều khiển bus
Trong khi DMA sử dụng bus để truyền dữ liệu, bộ xử lý không hoạt động (bị treo tạmthời) Tương tự như vậy, khi bộ xử lý đang sử dụng bus, DMA không hoạt động 8237DMA được biết đến như là một bộ điều khiển fly-by DMA, có nghĩa là dữ liệu được dichuyển từ vị trí này đến vị trí khác không đi qua chip DMA và không được lưu trữtrong
chip DMA Do đó, DMA chỉ có thể điều khiển việc truyền dữ liệu giữa cổng I/O và bộnhớ, chứ không phải giữa hai cổng I/O hoặc hai vị trí bộ nhớ Tuy nhiên, như được giảithích sau đây, chip DMA có thể thực hiện truyền dữ liệu từ bộ nhớ đến bộ nhớ thôngqua
thanh ghi 8237 có bốn kênh DMA có thể được lập trình độc lập và một kênh có thểhoạt động bất kỳ lúc nào Các kênh này được đánh số 0, 1, 2 và 3 8237 có 5 thanh ghiđiều khiển/lệnh để lập trình và điều khiển hoạt động DMA qua một trong các kênh của
nó như sau:
Trang 17Lệnh: Bộ xử lý nạp thanh ghi này để điều khiển hoạt động của DMA D0 cho phéphoặc không cho phép việc chuyển dữ liệu giữa hai vị trí bộ nhớ, trong đó kênh 0được sử dụng để truyền một byte vào thanh ghi dữ liệu tạm thời của 8237, kênh 1được sử dụng để truyền byte từ thanh ghi vào vị trí bộ nhớ (bên nhận) Khi bộ nhớđược kích hoạt, D1 có thể được thiết lập để vô hiệu hóa việc tăng/giảm trên kênh 0
để ghi một giá trị cố định vào một khối bộ nhớ D2 có tác dụng bật hoặc tắt DMA
Hình 5: DMA 8237
Trạng thái: Bộ xử lý đọc thanh ghi này để xác định trạng thái DMA Các bit D0-D3được sử dụng để cho biết liệu các kênh 0-3 đã đạt được TC (số cuối cùng) Các bitD4-D7 được bộ xử lý sử dụng để xác định xem liệu có kênh nào có yêu cầu DMAđang chờ được xử lý
Chế độ: Bộ xử lý thiết lập thanh ghi này để xác định chế độ hoạt động của DMA.Các bit D0 và D1 được sử dụng để chọn một kênh Các bit khác chọn các chế độhoạt động khác nhau cho kênh đó Các bit D2 và D3 quy định việc truyền dữ liệu từthiết bị ngoài sang bộ nhớ (Ghi) hoặc từ bộ nhớ sang I/O (Đọc) hoặc hoạt độngkiểm tra Nếu D4 được thiết lập, thanh ghi địa chỉ bộ nhớ và thanh ghi đếm đượcnạp lại với giá trị ban đầu của chúng sau khi kết thúc một hoạt động DMA Các bitD6 và D7 quy định các chế độ (mode) của 8237 Trong chế độ đơn mode, duy nhấtmột byte dữ liệu được truyền Chế độ truyền nhóm được sử dụng cho hoạt động
Trang 18truyền một khối dữ liệu, chế độ yêu cầu cho phép kết thúc sớm một hoạt độngtruyền Chế độ nối tầng cho phép nhiều 8237 được nối tầng với nhau để mở rộng sốkênh
Single Mask: Bộ vi xử lý thiết lập thanh ghi này Các bit D0 và D1 để chọn kênh.Bit D2 quy định việc thiết lập hoặc không thiết lập bit mặt nạ cho kênh đó Thanhghi Lệnh có thể được sử dụng để vô hiệu hóa toàn bộ chip DMA, còn thanh ghiSingle Mask có thể được lập trình để cho phép hoặc cho không phép một kênh cụthể
All Mask: thanh ghi này tương tự như thanh ghi Single Mask như nó thực hiện việcthiết lập hoặc không thiết lập mặt nạ với tất cả bốn kênh trong những hoạt độngGhi Ngoài ra, 8237A có tám thanh ghi dữ liệu: một thanh ghi địa chỉ bộ nhớ và mộtthanh ghi đếm dữ liệu cho mỗi kênh Bộ vi xử lý thiết lập những thanh ghi này để chỉđịnh đến một vị trí của bộ nhớ chính bị ảnh hưởng khi thực hiện truyền dữ liệu
Trang 192 Kết chương 1
Thông qua tìm hiểu Tổng quan về DMA Từ đó, làm cơ sở đề xuất Vấn đề khi không có DMA sẽ được trình bày trong chương tiếp theo
Trang 20Chương 2 NGUYÊN LÝ HOẠT ĐỘNG VÀ ỨNG DỤNG CỦA
DMA
1 Vấn đề khi không có DMA
Mỗi khi chuyển đổi phần tử dữ liệu đều cần 2 chu kỳ nhớ (từ CPU sang IO và
IO nhận và trả ngược lại)
Trong quá trình chuyển đổi thì CPU chỉ làm được 1 công việc duy nhất, khôngthể làm nhiều tác vụ trong lúc chuyển đổi
Cho ví dụ, có lẽ trong số các bạn sẽ có người thích lưu bài viết này vào ổ cứng
để có thể đọc tham khảo sau này Khi chọn thực hiện công việc này, bạn sẽ cần phảichọn một địa điểm (location) nào đó để lưu trữ bài viết Lúc này dữ liệu được thu vềbởi card mạng và sau đó được định tuyến đến địa điểm mong muốn trên ổ cứng củabạn Một nhiệm vụ rất đơn giản và khả năng của CPU thừa cho các kiểu hoạt động nhưvậy Mặc dù ý tưởng chính của kỹ thuật truy cập bộ nhớ trực tiếp khá đơn giản nhưngcác hoạt động truy cập bộ nhớ một cách trực tiếp lại rất phức tạp Bạn có thể hìnhdung, khi có nhiều thiết bị (hoặc ngoại vi) đều muốn truy cập đến các vị trí của bộ nhớthì vấn đề sẽ xảy ra Đây là lý do cần có một DMA controller để giải quyết vấn đề
Trang 212 Quy trình hoạt động của DMA
Để điều khiển các hoạt động DMA, DMA controller cần phải có các thông tinliên quan với hoạt động sắp tới Các thông tin này gồm có:
+ Đọc hoạt các phép tính
+ Xác định được địa chỉ của I/O
+ Xác định được địa chỉ của bộ nhớ
+ Kích thước của khối dữ liệu cần truyền tải
4 yếu tố này không quá phức tạp để xử lý, nhưng vấn đề đặt ra là DMA sẽđộc chiếm BUS hệ thống (CPU cần đọc từ bộ nhớ để yêu cầu thực thi đoạn
mã trong lúc DMA đang thực hiện chuyển đổi các vị trí và dòng dữ liệu.Điều này dẫn đến xung đột BUS hệ thống)
Hình 6: Sự tương tác Direct Memory Access
Trang 223 Vấn đề cần giải quyết
Vi xử lý cần phải cho phép bộ nhớ truy cập trực tiếp quay lại và được chấp nhậntruy cập vào BUS hệ thống Vậy để DMA có được sự cho phép của vi xử lý để sử dụngBUS hệ thống để không xảy ra xung đột trong BUS hệ thống thì gọi là đánh cắp chukỳ
- Quy trình xử lý đánh cắp chu kỳ:
+ DMA yêu cầu BUS hệ thống từ CPU
+ CPU phải nhận được yêu cầu từ DMA
+ DMA kiểm soát BUS hệ thống để di chuyển dữ liệu (về CPU)
Hành động này được gọi là BUS 3 trạng thái
- Có 2 cách giải quyết vấn đề 2 chu kỳ nhớ
+ Cách 1: mua các phần cứng có tích hợp sẵn DMA Khi DMA di chuyển tớicác phần cứng khác thì DMA được tích hợp sẵn sẽ trả kết quả về cho CPU
+ Cách 2: thực hiện kết nối các thiết nội vi với một BUS duy nhất và sau đó tíchhợp tất cả I/O vào DMA và DMA sẽ đọc các dữ liệu của mảng trong bộ nhớ đã đượctích hợp
Một vấn đề khác phát sinh trong quá trình hoạt động DMA đó là cachecoherency Khi CPU truy cập một vị trí nhớ, giá trị của vị trí đó sẽ được lưu trongcache nhớ của CPU Nếu hoạt động DMA có liên quan đến vị trí nhớ này thì giá trịtrong cache nhớ của CPU có thể không tương khớp với giá trị tại vị trí nhớ thực Đểkhắc phục vấn đề này, có hai giải pháp được đưa ra Các hệ thống cố kết cache toàn bộcần phải thi hành một giải pháp phần cứng mà ở đó DMA controller sẽ gửi đi một tínhiệu đến cache controller khi nó mong muốn truy cập vào vị trí nhớ Nếu DMA muốnghi vào vị trí đó, cache controller sẽ làm mất hiệu lực giá trị cache nhớ của CPU NếuDMA muốn đọc vị trí nhớ thì cache controller sẽ xóa cache của CPU để bảo đảm rằng
vị trí nhớ gồm có giá trị mới nhất (giá trị trong cache của CPU) Phương pháp hoạtđộng này yêu cầu thêm một số overhead nhưng bảo đảm sự chặt chẽ cho cache củaCPU Trong các hệ thống cố kết cache không toàn bộ, công việc duy trì sự chặt chẽcủa cache nhớ được để lại cho hệ điều hành Hệ điều hành sẽ nhận được yêu cầu đểquyết định xem cache sẽ được xóa trước cho hoạt động DMA hay làm mất hiệu lực sau
đó Phương pháp nào tốt hơn? Chúng tôi không giám chắc có một câu trả lời chính xác