BÀI 3: NỘI DUNG: TỔ CHỨC BUS VÀ TỔ CHỨC BỘ NHỚ
3.9. Tổ chức bộ nhớ Cache
Yêu cầu về một bộ nhớ máy tính có dung lượng lớn, có thời gian truy nhập đáp ứng được đòi hỏi của CPU nhưng lại phải có giá thành không đắt, chỉ có thể được giải quyết bằng một bộ nhớ kiểu nhiều mức, trong đó các bộ nhớ vật lý có thời gian truy nhập ngắn hơn được đặt ở mức cao hơn. Bộ nhớ vật lý có thời gian truy nhập đáp ứng được đòi hỏi của CPU được đặt ngay sau CPU, trước bộ nhớ chính, là bộ nhớ SRAM (Hình 37, mục 3.2). Bộ nhớ SRAM có thời gian truy nhập ngắn hơn nhiều so với bộ nhớ chính được xây dựng từ các chip DRAM. Bộ nhớ SRAM tuy có thời gian truy nhập rất thấp nhưng lại đắt tiền, nên chỉ được sử dụng với một dung lượng nhớ hợp lý. Bộ nhớ SRAM được dùng ở đây với tính chất một bộ nhớ đệm và được gọi là bộ nhớ cache (bộ nhớ ẩn). Bộ nhớ cache được sử dụng để lưu trữ các lệnh và dữ liệu thường được gọi đến trong quá trình thực hiện chương trình. Việc quy chiếu (truy nhập) đến bộ nhớ ở mức vật lý thực chất là truy cập vào bộ nhớ cache. Khi CPU phát ra địa chỉ quy chiếu tới bộ nhớ chính, địa chỉ này được dùng để quy
Kiến trúc máy tính – Bài 3 Trang 30 chiếu tới cache. Việc quy chiếu đến cache được gọi là “trúng” (hit) nếu ô nhớ ứng với địa chỉ quy chiếu có trong cache và gọi là “trượt” (miss) nếu không tìm thấy ô nhớ cần quy chiếu ở trong cache, khi đó phải truy cập đến bộ nhớ chính. Việc truy nhập đến bộ nhớ chính chỉ xảy ra khi không tìm thấy thông tin cần có trong cache.
Cache ánh xạ trực tiếp
Phương pháp đơn giản nhất để tổ chức bộ nhớ cache là phương pháp ánh xạ trực tiếp, trong đó mỗi khối nhớ trong bộ nhớ chính được ánh xạ vào một dòng cache nhất định.
Bộ nhớ chính được chia thành nhiều khối nhớ, mỗi khối nhớ gồm 1 hoặc nhiều ô nhớ liền nhau (hình dưới đây)
Bộ nhớ cache gồm nhiều khối, gọi là khối cache hoặc dòng cache. Mỗi khối cache chứa các thông tin như: số hiệu thẻ, bit cờ và bản thân khối dữ liệu, trong đó khối dữ liệu trong cache
là bản sao của khối dữ liệu trong bộ nhớ chính. Cấu trúc một khối cache như sau:
Số thẻ F Khối dữ liệu
Địa chỉ bộ nhớ chính được coi là gồm nhiều phần, trong đó có một phần bit địa chỉ sẽ đóng vai trò địa chỉ khối cache. Giả sử bộ nhớ chính có địa chỉ 16 bit và cache có 16 dòng (khối) cache, mỗi dòng cache chứa một khối dữ liệu 4 byte. Khi đó 2 bit thấp nhất trong địa chỉ xác định vị trí byte trong khối, 4 bit cao hơn tiếp theo xác định vị trí khối cache, 10 bit cao nhất xác định số thẻ. Số thẻ ở đây được dùng để đánh dấu sự khác biệt của các khối nhớ
có cùng vị trí ánh xạ (vị trí khối cache) trên bộ nhớ cache.
0000000000000000 35
0000000000000001 46
Kiến trúc máy tính – Bài 3 Trang 31
0000000000000010 20
0000000000000011 FF
0000000000000100 4A
0000000000000101 55
0000000000000110 3A
0000000000000111 6F
. . .
1111111111111100
1111111111111101
1111111111111110
Tổ chức cache ánh xạ trực tiếp được thực hiện theo cách từng vùng khối nhớ được ánh xạ (sao chép) vào cache, trong đó mỗi khối nhớ được sao chép lên một dòng cache nhất định (Bảng 7) cùng với số thẻ tương ứng. Với bộ nhớ cache có c dòng (khối) cache, khối nhớ thứ j trong bộ nhớ chính sẽ được đặt tại dòng cache i theo công thức:
i = j mod c Quá trình truy nhập cache được tiến hành như sau:
Kiến trúc máy tính – Bài 3 Trang 32
Khi CPU phát một địa chỉ quy chiếu tới bộ nhớ, bộ điều khiển cache sẽ tách phần các bit xác định số khối ra và theo đó truy cập vào vị trí khối cache tương ứng. Tiếp đó bộ điều khiển cache sẽ thực hiện so sánh phần bit địa chỉ xác định số thẻ với số thẻ của chính khối cache này. Nếu so sánh thấy trùng có nghĩa truy nhập "trúng", khi đó phần bit địa chỉ xác định vị trí byte dữ liệu được dùng để truy nhập dữ liệu trong khối cache. Nếu thao tác truy nhập bộ nhớ là đọc, thì dữ liệu được đưa ra cho CPU, nếu là ghi bộ nhớ, thì dữ liệu sẽ được chuyển từ CPU vào cache. Nếu phần bit địa chỉ xác định số thẻ không trùng với bất kỳ số thẻ nào trong cache thì có nghĩa là ô nhớ cần truy nhập không có trong cache, truy nhập “trượt”, khi đó cần phải truy nhập tới bộ nhớ chính.
Tổ chức cache theo kiểu ánh xạ trực tiếp đơn giản và không đắt, nhưng có nhược điểm là mỗi khối nhớ chỉ có một vị trí cố định trong cache. Nếu xảy ra hiện tượng chương trình quy chiếu nhiều lần đến cùng vị trí khối cache (dòng cache), khi đó sẽ phải liên tục thực hiện thao tác hoán đổi các khối, điều này làm cho thời gian truy cập trung bình lớn lên. Cache ánh xạ liên kết.
Một kỹ thuật tổ chức cache khác là kỹ thuật ánh xạ liên kết, trong đó mỗi khối của bộ nhớ chính được ánh xạ (sao chép) vào bất kỳ dòng nào trong cache.
Bộ nhớ chính, được chia thành nhiều khối nhớ, mỗi khối nhớ gồm 1 hoặc nhiều ô nhớ liền nhau. Giả sử bộ nhớ có địa chỉ 16 bit. Có thể chia bộ nhớ thành các khối, mỗi khối 4 byte. Mỗi khối nhớ có một địa chỉ khối, xác định bởi 14 bit địa chỉ cao, vị trí của từng ô trong khối được xác định bởi 2 bit địa chỉ thấp
1000111100001000 F5
1000111100001001 FF
Kiến trúc máy tính – Bài 3 Trang 33
1000111100001010 20
1000111100001011 3B
1000111100001100 4A
1000111100001101 50
1000111100001110 77
1000111100001111 65
1000111100010000
1000111100010001
1000111100010010
1000111100010011
Cache bao gồm nhiều khối cache (dòng cache). Cấu trúc một khối cache như sau:
Số thẻ F Khối dữ liệu
Số thẻ ở đây mang thông tin về vị trí (địa chỉ) của khối dữ liệu (khối nhớ) trong bộ nhớ chính. Thực chất số thẻ là phần các bit địa chỉ cao trong địa chỉ của khối nhớ (đóng vai trò địa chỉ khối) trong bộ nhớ chính. Khối dữ liệu trong cache là bản sao của khối dữ liệu trong bộ nhớ chính. Bit cờ F được dùng trong việc quản lý ghi-đọc cache.
Đơn vị quản lý bộ nhớ sao chép các khối nhớ trong bộ nhớ chính vào cache theo cách: sao nội dung của từng khối nhớ vào phần dữ liệu trong khối cache, đồng thời tạo ra số thẻ tương ứng trong khối cache.
Quá trình truy nhập cache được tiến hành như sau (hình dưới đây)
Kiến trúc máy tính – Bài 3 Trang 34
Địa chỉ của ô nhớ cần truy cập được gửi ra bus địa chỉ. Bộ điều khiển cache tách lấy phần địa chỉ khối là các bit địa chỉ cao, ví dụ ở đây là 14 bit địa chỉ cao, so sánh với các số thẻ trong cache. Nếu tìm thấy số thẻ trùng với địa chỉ khối, truy nhập “trúng”, khi đó 2 bit địa chỉ thấp được dùng để truy nhập đến từ dữ liệu trong cache, thao tác truy nhập cache được tiến hành. Nếu phần địa chỉ khối nhớ không trùng với bất kỳ số thẻ nào, có nghĩa là ô nhớ cần truy cập không có trong cache, việc truy cập được gọi là “trượt”. Khi đó cần phải truy cập tới bộ nhớ chính. Khối dữ liệu ứng với địa chỉ cần truy cập được đưa từ bộ nhớ chính vào cache, đồng thời từ dữ liệu tương ứng được gửi đến CPU hoặc được chuyển từ CPU đến cache.
Ưu điểm của phương pháp ánh xạ liên kết là cho phép nạp linh hoạt từng khối nhớ trong bộ nhớ chính vào cache. Nhược điểm của phương pháp này là cần có một mạch phần cứng thực hiện được việc kiểm tra so sánh đồng thời tất
cả các thẻ trong cache khi truy nhập. Điều này làm cho cache có giá thành cao.
Cache tập liên kết
Kỹ thuật tập liên kết kết hợp được các thế mạnh của hai kỹ thuật ánh xạ trực tiếp và
kỹ thuật ánh xạ liên kết. Cache tập liên kết được chia thành nhiều tập (dòng tập), mỗi tập gồm 2 hoặc 4 dòng cache. Các dòng cache này tạo thành một tập liên kết. Mỗi khối dữ liệu trong bộ nhớ chính có thể được ánh xạ vào bất kỳ dòng tập nào. Cách tổ chức này còn giải quyết được tình huống có thể xảy ra với kỹ thuật ánh xạ trực tiếp, khi chương trình thường xuyên quy chiếu đến các lệnh hoặc dữ liệu cùng chung một dòng cache.
Địa chỉ bộ nhớ chính được coi là tập hợp của 3 trường bit địa chỉ: số thẻ,
số thứ tự (dòng) tập và số thứ tự từ dữ liệu trong tập. Khi địa chỉ ô nhớ được CPU phát ra, bộ điều khiển cache tách lấy phần số tập để truy nhập cache. Khi dòng tập trong cache được truy nhập thì cả 2 hay nhiều thẻ trong dòng tập này
Kiến trúc máy tính – Bài 3 Trang 35 cùng được kiểm tra, để xác định việc truy nhập vào khối cache. Các bit địa chỉ xác định vị trí từ dữ liệu sẽ được dùng để truy nhập từ dữ liệu
Kỹ thuật ghi bộ nhớ
Kỹ thuật ghi bộ nhớ có cache cần đảm bảo dữ liệu được ghi đến ô nhớ đích ở bộ nhớ chính, nhưng với thời gian ngắn nhất. Có một vài kỹ thuật được dùng để ghi dữ liệu vào bộ nhớ có cache, là kỹ thuật ghi xuyên (write through) và kỹ thuật sao lưu (copy back).
Với kỹ thuật ghi xuyên (cache ghi xuyên) dữ liệu được ghi lên cả cache lẫn bộ nhớ chính cùng một lúc, không dùng đến bit cờ F. Kỹ thuật này làm thời gian ghi bộ nhớ tăng lên. Với kỹ thuật sao lưu (cache sao lưu), mỗi khối cache có thêm một bit cờ
F đánh dấu sự thay đổi nội dung dữ liệu. Khi khối dữ liệu lần đầu tiên được đặt vào cache, cờ F được đặt bằng 0. Khi thực hiện ghi bộ nhớ, dữ liệu chỉ được ghi vào cache và bit cờ F được lập (F = 1). Giá trị F=1 ghi nhận nội dung cache khác với nội dung ở bộ nhớ chính. Sau đó, nếu khối dữ liệu trong cache cần được thay thế bằng khối dữ liệu khác từ bộ nhớ chính trong trường hợp truy nhập “trượt”, thì bit cờ F được kiểm tra để xác định xem có cần thực hiện thao tác sao lưu dữ liệu trên cache vào bộ nhớ chính hay không. Nếu F = 1 thì cần thực hiện sao lưu, nếu F = 0 thì không cần sao lưu. Kỹ thuật này làm tăng tốc độ truy cập bộ nhớ và được gọi là kỹ thuật sao lưu có dựng cờ.