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

Truy cập bộ nhớ trực tiếp 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 (141.67 KB, 7 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 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ộ.

×