Một số chương trình phần cứng được phát triển để chuyển tín hiệu địa chỉ truy xuất bộ nhớ chính thành địa chỉ truy xuất Cache. Điều này làm cho bộ nhớ Cache cải tiến có thể được đưa vào sử dụng tại bất cứ một máy tính nào mà không cần sử đổi phần mềm truy xuất chúng
Phương thức để chuyển đổi các tín hiệu địa chỉ ảnh hưởng rất lớn đến giá thành và tốc độ hoạt động của Cache, và không có một phương pháp nào được cho là tốt nhất. Trong phần này, chúng ta sẽ nghiên cứu phương pháp ánh xạ bộ nhớ.
Phương pháp này được thực hiện theo nguyên tắc sau. Đầu tiên, giả sử hệ thống có bộ nhớ chính dung lượng 232 được chia thành 227 khối block, mỗi block có dung lượng là 32 word. Tất nhiên việc chia bộ nhớ chính này chỉ là về mặt logic. Thực tế, bộ nhớ chính vẫn là một khối thống nhất. Với bộ nhớ Cache giả sử trong trường hợp này sẽ bao gồm 214 slot. Mỗi slot có dung lượng đủ lớn để lưu trữ 1 block bộ nhớ chính. Như vậy, 227 block bộ nhớ chính đều có thể được nạp lờn một slot bất kỳ của bộ nhớ Cache. Để theo dừi xem block nào của bộ nhớ chính được lưu trên 1 slot, mỗi slot có một trường tag có độ lớn 27 bit được sử dụng để mã hóa block tương ứng. Trường tag này chính là 27 bit có trọng số
lớn nhất trong 32 tín hiệu địa chỉ mà hệ thống đưa vào Cache. Tất cả các giá trị tag đều được lưu trên một vùng nhớ đặc biệt. Mỗi khi có một block mới được lưu vào Cache, giá trị tag của nó sẽ được cập nhật vào vùng nhớ này.
Hình 7.13. Phương pháp ánh xạ bộ nhớ
Khi một chương trình được nạp vào bộ nhớ chính lần đầu, Cache được coi là trống. Khi thực thi chương trình đó, mỗi một slot sẽ có 1 bit có tên valid được sử dụng để chỉ ra rằng block mà nó chứa có thuộc chương trình đang chạy hay khụng. Ngoài ra, mỗi slot cũn cú một bit dirty được sử dụng để theo dừi xem block nằm trên slot đó có bị thay đổi nội dung hay không. Nếu slot đó đã thay đổi nội dung thì nó cần được ghi ngược trở lại lên bộ nhớ chính trước khi slot đó được tái sử dụng để nạp một block khác.
Khi CPU cần lấy nội dung từ bộ nhớ, nó sẽ kiểm tra trên Cache trước, nếu Cache có nội dung đó, kết quả kiểm tra sẽ là một hit, nếu không có, kết quả là một miss. Khi xử lý lệnh đầu tiên của một chương trình, kết quả là một miss vì chưa có một block nào được nạp lên Cache.
Trong quá trình ánh xạ Cache, mỗi block nhớ đều có thể được ánh xạ đến bất cứ một slot bất kỳ. Việc ánh xạ từ bộ nhớ chính đến Cache được thực hiện thông qua việc phân vùng địa chỉ thành 2 trường tag và word được như hình dưới đây.
Khi thực hiện quá trình truy xuất bộ nhớ chính, bộ điều khiển Cache sẽ truy xuất vào Cache trước, tìm kiếm Cache tag tương ứng xem block cần truy xuất
có trong Cache hay không. Với mỗi slot, nếu bit valid bằng 1, trường tag sẽ được kiểm tra và so sánh với địa chỉ mà CPU cần truy cập. Tất cả các giá trị tag sẽ được kiểm tra cùng một lúc. Nếu có một giá trị tag nào trùng với giá trị tag mà địa chỉ ô nhớ, nội dung ô nhớ sẽ được lấy từ Cache. Nội dung của trường word chính là địa chỉ của ô nhớ này. Nếu không có giá trị tag nào được tìm thấy, khi đó, block trên bộ nhớ chính chứa nội dung cần nạp sẽ được nạp vào Cache rồi sau đó sẽ được chuyển về CPU. Các trường tag, valid, và dirty sẽ được cập nhật rồi hệ thống sẽ tiến hành thực thi.
Để hiểu rừ hơn quỏ trỡnh này, ta sẽ tỡm hiểu quỏ trỡnh truy cập ụ nhớ (A035F014)16. Ô nhớ này coi như đã được nạp lên Cache. Địa chỉ của ô nhớ được mô tả như dưới đây
Trong địa chỉ đó, 27 bit cao của nó có giá trị tương ứng là (501AF8)16 chính là địa chỉ tag. Nếu địa chỉ ta cần truy xuất có mặt trong Cache thì ta sẽ tìm thấy một slot có tag mang giá trị (501AF8)16. Nếu không tìm thấy bất cứ một slot nào có tag như vậy, một miss sẽ diễn ra. Khối dữ liệu tương ứng với trường tag bằng (501AF8)16 sẽ được nạp từ bộ nhớ chính vào một slot nào đó trên Cache.
Mặc dù phương pháp ánh xạ tỏ ra rất hiệu quả nhưng có 2 vấn đề xảy ra trong việc truy xuất bộ nhớ, đây cũng chính là hạn chế của phương pháp ánh xạ. Thứ nhất, quá trình xác định xem slot nào được giải phóng khi một block mới được đưa vào Cache là rất phức tạp. Quá trình này đòi hỏi một lượng phần cứng đáng kể gây trễ hệ thống. Vấn đề thứ hai là khi tìm một địa chỉ tag trong Cache, trường địa chỉ tag so sánh đồng thời ra làm sao với 214 trường tag trong Cache.
Mỗi một phương pháp giải quyết đều có hạn chế riêng của nó. Vấn đề này sẽ được núi rừ hơn trong phần 7.6.2 và 7.6.3.
Chính sách thay thế trong ánh xạ Cache
Khi một block mới cần được ánh xạ vào Cache, các slot trong Cache cần được kiểm tra xem có thể cho phép ghi dữ liệu vào hay không. Nếu có slot thích hợp (như trong trường hợp chương trình bắt đầu thực thi), slot đầu tiên có bit valid bằng 0 sẽ được sử dụng. Khi tất cả các bit valid của tất cả các slot đều bằng 1, một slot sẽ được giải phóng để dành chỗ cho block mới. Có 4 chính sách thay thế có thể được sử dụng: LRU (Least recently used), FIFO (First In First Out), LFU (Least frequently used) và random. Chính sách thứ năm được sử dụng với mục đích phân tích là phương pháp tối ưu.
Với chính sách LRU, một biến thời gian được thêm vào mỗi slot. Biến thời gian này được cập nhật mỗi khi có một slot bất kỳ được truy cập. Khi một slot phải bị giải phóng cho một block mới, nội dung của slot mà ít được sử dụng nhất được xác định bởi biến thời gian ở trên sẽ được giải phóng và block mới sẽ được ghi vào slot này. Chính sách LFU hoạt động tương tự như vậy, ngoại trừ một điều là mỗi slot được cập nhật đều đặn bởi một bộ đếm gắn vào mỗi slot.
Khi cần giải phóng một slot, slot nào được sử dụng với tần số ít nhất sẽ được giải phóng. Chính sách FIFO sẽ thay thế lần lượt các slot theo một chu trình định sẵn, slot này kế tiếp slot khác. Chính sách ramdom chọn ngẫu nhiên một slot bất kỳ để giải phóng.
Ưu nhược điểm của phương pháp ánh xạ Cache
Ánh xạ Cache có ưu điểm là bất cứ block bộ nhớ chính nào cũng có thể được nạp vào Cache slot. Điều này có nghĩa là không cần biết nội dung của block là dữ liệu hay chương trình, nếu còn slot cho bất cứ một block nào thì nó sẽ có thể được lưu trữ vào Cache. Nhưng điều này lại làm cho các nhà thiết kế phần cứng phải bổ xung thêm phần cứng để quản lý các block này. Mỗi slot phải có 27 bit tag để xác định địa chỉ trong bộ nhớ chính, và các tag phải được kiểm tra đồng thời. Điều đó có nghĩa là với ví dụ trên, vùng nhớ lưu trữ tag phải có dung lượng 27 x 214 bit, đồng thời như đã nói ở trên, phải có một cơ chế để tìm kiếm, kiểm tra nội dung của tất cả các tag một cách đồng thời. Ta sẽ bàn về vấn đề này ở những phần sau trong chương này.
Bằng cách hạn chế vị trí mà mỗi block bộ nhớ có thể được nạp vào Cache, ta có thể loại bỏ sự cần thiết của vùng nhớ tag. Loại bộ nhớ Cache như vậy hoạt động theo nguyên tắc ánh xạ trực tiếp mà ta sẽ thảo luận ở phần kế tiếp ngay sau đây