15/11/2017<br />
<br />
Bài 5<br />
Tổ chức bộ nhớ<br />
Phần BỘ NHỚ ĐỆM NHANH<br />
(CACHE MEMORY)<br />
(tham khảo trang 66<br />
– KTMT Cần Thơ)<br />
<br />
Ý tưởng thiết kế cache<br />
Xác suất truy cập dữ liệu trong bộ nhớ trong<br />
Một chương trình mất 90% thời gian thi hành lệnh<br />
của nó để thi hành 10% số lệnh của chương trình.<br />
<br />
Cache thiết kế dựa trên 2 nguyên tắc:<br />
Nguyên tắc về thời gian: cho biết các ô nhớ được<br />
hệ thống xử lý thâm nhập có khả năng sẽ được<br />
thâm nhập trong tương lai gần.<br />
Nguyên tắc về không gian: cho biết, bộ xử lý<br />
thâm nhập vào một ô nhớ thì có nhiều khả năng<br />
thâm nhập vào ô nhớ có địa chỉ kế<br />
<br />
1<br />
<br />
15/11/2017<br />
<br />
Nguyên tắc chung<br />
Cache có tốc độ nhanh<br />
hơn bộ nhớ chính,<br />
chứa dữ liệu và lệnh<br />
thường dùng đến.<br />
Cache được đặt giữa<br />
CPU và bộ nhớ chính<br />
nhằm tăng tốc độ truy<br />
nhập bộ nhớ của CPU<br />
Cache có thể được đặt<br />
trên chip của CPU<br />
(vận hành bằng bộ điều<br />
khiển cache)<br />
<br />
CPU<br />
<br />
Bộ<br />
nhớ<br />
<br />
Cache<br />
<br />
Chuyển<br />
từng<br />
từ<br />
<br />
Chuyển<br />
từng<br />
khối<br />
<br />
Ví dụ về thao tác của cache<br />
CPU yêu cầu nội dung của ngăn nhớ<br />
CPU kiểm tra trên cache với dữ liệu này<br />
Nếu có, CPU nhận dữ liệu từ cache (nhanh)<br />
(cache hit)<br />
Nếu không có (cache miss),<br />
đọc block nhớ chứa dữ liệu từ bộ nhớ chính<br />
vào cache (lâu) (cache penalty).<br />
Tiếp đó chuyển dữ liệu từ cache vào CPU<br />
<br />
2<br />
<br />
15/11/2017<br />
<br />
Cấu trúc chung<br />
của cache / bộ nhớ chính<br />
Bộ nhớ chia thành các Block<br />
cache chia làm các Line<br />
có kích thước bằng nhau<br />
<br />
Vận hành<br />
Một số Block của bộ nhớ chính được nạp vào các<br />
Line của cache.<br />
Nội dung Tag (thẻ nhớ) cho biết block nào của bộ<br />
nhớ chính hiện đang được chứa ở line đó.<br />
Khi CPU truy nhập (đọc/ghi) một từ nhớ, có 2 khả<br />
năng xảy ra:<br />
Từ nhớ đó có trong cache (cache hit)<br />
Từ nhớ đó không có trong cache (cache miss)<br />
<br />
3<br />
<br />
15/11/2017<br />
<br />
Các vấn đề khi vận hành<br />
Vì số line của cache ít hơn số block của bộ nhớ chính,<br />
cần có một thuật giải ánh xạ thông tin trong bộ nhớ<br />
chính vào cache.<br />
<br />
Câu hỏi 1: Phải để một khối bộ nhớ vào chỗ<br />
nào của cache (sắp xếp khối)?<br />
Câu hỏi 2: Làm sao để tìm một khối khi nó<br />
hiện diện trong cache (nhận diện khối)?<br />
Câu hỏi 3: Khối nào phải được thay thế trong<br />
trường hợp thất bại cache (thay thế khối)?<br />
Câu hỏi 4: Việc gì xảy ra khi ghi vào bộ nhớ<br />
(chiến thuật ghi)?<br />
<br />
Các PP ánh xạ địa chỉ<br />
a) Ánh xạ trực tiếp (Direct mapping)<br />
Mỗi block của bộ nhớ chính chỉ có thể được nạp<br />
vào 1 line duy nhất của cache.<br />
Quy ước nạp: (với m là số line, đánh số: 0 đến m-1<br />
B0 → L0 B1 → L1 ...... Bm-1 → Lm-1<br />
Bm → L0 Bm+1 → L1<br />
Vì thế:<br />
L0 : B0, Bm, B2m ...<br />
L1 : B1, Bm+1, B2m+1 ..<br />
Kết luận: Bj chỉ có thể được nạp vào Li với i = j mod m<br />
<br />
4<br />
<br />
15/11/2017<br />
<br />
Ví dụ 1(a)<br />
Bộ nhớ trong có 32 khối, cache có 8 khối, mỗi<br />
khối gồm 32 byte, khối thứ 12 của bộ nhớ trong<br />
được đưa vào cache. Bộ nhớ có kích thước 1 KB<br />
<br />
Thao tách trên bit của<br />
Phép tính mod cho 2n: (8 = 23)<br />
Tối đa 32 khối: 5 bit<br />
12 giá trị nhị phân:<br />
01100<br />
12 mod 8 = 4, 3 bit cuối<br />
100<br />
12 / 8 = 1, 2 bit đầu<br />
01<br />
giá trị (01) được lưu trong Tag để phân biệt Block nào<br />
đang nằm trong Line<br />
Ví dụ: để phân biệt 4, 12, 20, 28<br />
4/8=0<br />
(00)<br />
12 / 8 = 1<br />
(01)<br />
20 / 8 = 2<br />
(10)<br />
28 / 8 = 3<br />
(11)<br />
<br />
5<br />
<br />