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

Cách truy cập bộ nhớ trực tiếp doc

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 (178.88 KB, 7 trang )

Cách 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 hoà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ộ.



×