Tải bản đầy đủ (.pdf) (6 trang)

Truy cập bộ nhớ trực tiếp Trong bài này chúng tôi sẽ giới thiệu cho các bạn pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (138.47 KB, 6 trang )

Truy cập bộ nhớ trực tiếp
Trong bài này chúng tôi sẽ giới thiệu cho các bạn một số kiến trúc điển h
ình
được sử dụng để thực thi truy cập bộ nhớ trực tiếp.
Truy cập bộ nhớ trực tiếp (Direct Memory Access hay được viết tắt l
à DMA)
là một thành phần quan trọng trong bất cứ kiến trúc máy tính hiện đại n
ào.
DMA cho phép CPU chia tải (offload) các ngăn xếp bộ nhớ ngày càng ch
ật trội
sang các thành phần khác. Cách thức này giúp 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 (cycle) hơn để gi
ải quyết các nhiệm vụ
phức tạp hơn.
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ải chọ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ủa bạ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ưng cá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ình dung, 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 hoặc yêu c
ầu cần có một
DMA controller. DMA controller thực chất là m
ột thiết bị giúp điều khiển tất
cả các hoạt động DMA.
Đ
ể điều khiển các hoạt động DMA, DMA controller cần phải có các thông tin
liên quan với hoạt động sắp tới. Các thông tin này g
ồm có những thứ giống
như các địa chỉ nguồn và đích, chế độ, kích thước dữ liệu đư
ợc truyền tải.
DMA controller cũng cần được trang bị kiến thức về những gì nó s
ẽ truyền tải,
nơi truyền tải đến và cách truyền tải như thế nào, bao lâu đ
ể thực hiện công
việc đó. Với kiến thức này, DMA controller có thể yêu c
ầu sự điều khiển bus
nhớ từ CPU. Khi CPU sẵn sàng như
ờng sự điều khiển của bus nhớ, nó sẽ gửi đi
một tín hiệu phúc đáp ACK để đáp trả lại tín hiệu yêu cầu của DMA controller.


Hình 1: Sự tương tác Direct Memory Access
Burst hay Single-cycle
Điều gì sẽ xảy ra sau khi DMA controller tăng điều khiển của bus nhớ ho
àn
toàn phụ thuộc vào chế độ DMA controller đã được chỉ thị từ trư
ớc. Có hai chế
độ hoạt động nói chung của DMA controller. Đầu ti

ên là burst. Khi DMA
controller hoạt động trong chế độ burst, nó sẽ duy trì s
ự điều khiển của bus nhớ
trong khoảng thời gian truyền tải bộ nhớ. Nhược điểm trong chế độ burst l
à
CPU không thể truy cập vào bus nhớ cho tới khi DMA controller hoàn t
ất việc
truyền tải bộ nhớ. Lúc này CPU vẫn có thể truy cập vào cache L1 và L2 c
ủa nó
nhưng không thể truy cập vào bộ nhớ khác; điều này đã h
ạn chế CPU trong
việc thực hiện nhiệm vụ và có th
ể khiến nó phải đợi cho tới khi DMA
controller hoàn t
ất việc truyền tải bộ nhớ sau đó trả sự điều khiển bus nhớ về
lại cho mình.
Để tránh tình huống CPU buộc phải đợi cho việc truyên tải bộ nhớ hoàn t
ất,
DMA controller có thể hoạt động trong chế độ khác mang tên single-
cycle.
Cách thức hoạt động trong chế độ single-cycle như sau, DMA controller s
ẽ trả
sự điều khiển bus nhớ sau khi truyền tải xong mỗi block nhớ. Kích thư
ớc của
mỗi block nhớ này thường rơi vào cỡ 256 hoặc 512 byte. Điều n
ày cho phép
CPU có nhiều cơ hội sử dụng bus nhớ hơn cho các mục đích ri
êng mà không
cần phải đợi một số lượng thời gian khá lớn hoàn thành vi
ệc truyền tải bộ nhớ

như ở chế độ burst. Tuy nhiên vẫn có một như
ợc điểm đối với hoạt động của
DMA trong chế độ single-cycle này. Khi DMA controller tr
ả quyền điều khiển
bus nhớ nó phải gửi một yêu cầu đến CPU đ
ể tăng quyền điều khiển bus, sau
đó phải đợi tính hiệu phúc đáp ACK từ CPU trư
ớc khi có thể tăng điều khiển
lại bus nhằm thực hiện truyền tải các block nhớ khác. Như v
ậy việc lặp đi lặp
lại nhiều lần chuỗi yêu cầu/ phúc đáp sẽ làm tiêu tốn thời gian h
oàn thành quá
trình truyền tải của bộ nhớ.
Chế độ hoạt động single-cycle thường được sử dụng nhất mặc dù h
ầu hết các
DMA controller đều có thể đáp ứng cho cả hai chế độ. Chiều dài tối ưu c
ủa
mỗi khối mà DMA sẽ truyền tải trước khi trả lại sự điều khiển cho
bus và yêu
cầu lại quyền điều khiển là m
ột vấn đề khá phức tạp. Một hệ số chính trong
việc xác định kích thước tối ưu của block là tốc độ lỗi quan sát đư
ợc. Khi có
tốc độ lỗi cao thì chiều dài của khối càng nhỏ sẽ càng tốt. Tuy nhiên c
ũng cần
biết rằng, khi có ít lỗi do giảm chiều dài block thì chúng ta s
ẽ chịu tổn thất ở
chỗ tăng các quá trình yêu cầu/ phúc đáp giữa DMA controller và CPU. Quy
ết
định thực thi như thế nào là phụ thuộc vào mỗi nhà s

ản xuất DMA controller
(đặc biệt là các kỹ sư thiết kế ra nó!). Nếu muốn biến cách xác định n
ày như
thế nào cho một DMA controller cụ thể, bạn có thể tìm ki
ếm nó ở đâu đó trong
tài liệu, bằng không có thể yêu cầu từ công ty.
Khi DMA controller đã hoàn tất quá trình truyền tải một block và tr
ả lại sự
điều khiển của bus nhớ cho CPU, CPU lúc này sẽ có thể truy cập cập v
ào bus
để thực hiện các mục đích riêng. Trong ví dụ chúng tôi sử dụng ở tr
ên và trong
nhiều ví dụ khác đã cung cấp cho CPU một cơ h
ội cập nhật các chỉ thị tiến
trình và cập nhật các thông tin mới có liên quan v
ới hoạt động DMA đang
được thực hiện cho hệ thống file.
Cache Coherency
Một vấn đề khác phát sinh trong quá trình hoạt động DMA đó l
à cache
coherency. Khi CPU truy cập một vị trí nhớ, giá trị của vị trí đó sẽ được l
ưu
trong cache 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ín hiệu đến cache controller khi nó mong muốn truy
cập vào vị trí nhớ. Nếu DMA muốn ghi vào vị trí đó, cache controller sẽ l
àm
mất hiệu lực giá trị cache nhớ của CPU. Nếu DMA 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ủa CPU.
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 nào vì cả hai phương pháp đều thỏa đáng. Tuy nhi
ên
cách chúng tôi chọn cũng như khuyên bạn là th
ực thi phần cứng trong các hệ
thống cố kết cache toàn bộ.

Văn Linh (Theo Windowsnetworking)

×