Bộ nhớ đệm hoạt động như thế nào?

Để nghiên cứu cách bộ nhớ đệm L1 hoạt động như thế nào, hãy xem xét sự tương đồng dưới đây.

Giả sử tình huống thực tế

Câu chuyện này liên quan đến một người (trong trường hợp này, là bạn) để đóng vai như bộ xử lý yêu cầu và vận hành dữ liệu từ bộ nhớ. Nhà bếp nơi thực phẩm được chuẩn bị là bộ nhớ hệ thống chính (điển hình DDR, DDR2 hay DDR3 DIMM). Người hầu bàn là bộ quản lý bộ nhớ đệm và bộ nhớ đệm L1 là cái bàn mà người ăn được ngồi.

Phải nói rằng bạn bắt đầu ăn tại một nhà hàng đặc biệt mỗi ngày vào cùng một thời gian. Bạn vào, ngồi xuống, đặt món hot dog. Để làm câu chuyện cân xứng chính xác, bạn thường ăn với tốc độ một miếng (byte?) trong vòng 4 giây (233MHz = khoảng 4ns theo chu kỳ). Mất 60 giây cho nhà bếp chuẩn bị món ăn mà bạn đặt (bộ nhớ chính 60ns).

Vì vậy khi tới lần đầu, bạn ngồi xuống, đặt món hot dog và phải chờ 60 giây cho thức ăn được chế biến trước khi bạn có thể ăn. Sau khi người hầu bàn mang thức ăn ra, bạn ăn với tốc độ bình thường. Rất nhanh bạn kết thúc món hot dog, bạn gọi người hầu bàn tới và đặt món hamburger. Và lại mất 60 giây để chờ món hamburger được chế biến. Khi món ăn mang lên, bạn lần nữa ăn ở tốc độ đủ. Sau khi ăn xong hamburger, bạn đặt đĩa khoai tây chiên. Lần nữa bạn chờ đợi, sau đó 60 giây thức ăn được mang ra, bạn ăn nó với tốc độ đủ. Cuối cùng bạn quyết định kết thúc bữa ăn và đặt bánh phô mai cho tráng miệng. Sau 60 giây chờ đợi khác, bạn cũng ăn với tốc độ như vậy. Tóm lại việc ăn của bạn chủ yếu là thời gian chờ đợi, sau đó là việc ăn thực sự ở tốc độ bình thường.

Sau khi vào nhà hàng hai đêm liên tục đúng 6 giờ chiều và đặt cùng món trong cùng lần đặt, đêm thứ ba người hầu bàn bắt đầu nghĩ: Người khách này luôn đến đây đúng 6 giờ chiều, ăn cố định các món ăn, vậy sao ta không chuẩn bị trước để ông ta ngạc nhiên và có thể có món tiền thưởng cao từ ông ấy. Vì vậy ngày sau bạn vào nhà hàng, khi gọi món hot dog, người hầu bàn mang ra ngay, không chờ đợi! Kế tiếp món thứ hai cho đến món cuối cùng cũng vậy. Tóm lại việc ăn của bạn bao gồm việc ăn, không chờ đợi thức ăn được chế biến, nhờ trước hết sự thông minh và sự quan tâm của người bồi bàn.

bộ nhớ đệm hoạt động ra sao

Tuy nhiên, vẫn có khi quy trình không xảy ra chính xác như vậy

Thí dụ này chính xác mô tả chức năng của bộ nhớ đệm cấp 1 trên bộ xử lý. Bộ nhớ đệm L1 chính là cái bàn chứa một hay nhiều đĩa thức ăn. Không có người hầu bàn, không gian trên bàn là một tầng đệm món ăn đơn giản (buffer). Khi được lưu trữ, bạn có thể ăn cho đến khi tầng đệm này hết, nhưng không có ai thông minh để làm đầy nó lại. Người hầu bàn chính là bộ quản lý bộ nhớ đệm làm việc và thông minh để quyết định món ăn nào được đặt trên bàn trước khi bạn cần chúng. Giống như bộ điều khiển bộ đệm thực, anh ta dùng các kĩ năng của anh ta để đoán thức ăn nào nào bạn sẽ yêu cầu kế tiếp, nếu người hầu bàn suy đoán đúng thì bạn sẽ không phải chờ đợi.

Đêm thứ tư bạn đến chính xác giờ và bất đầu món hot dog như thường lệ. Người hầu bàn rất tự tin, có chuẩn bị sẵn món hot dog chờ bạn đến, cho nên không có sự chờ đợi.

Ngay khi bạn kết thúc món hot dog và ngay khi anh ta đặt món lên đĩa ăn, bạn nói “Này anh bạn, tôi muốn món xúc xích lợn rán bây giờ; tôi không đặt món hamburger này.” Người hầu bàn đoán sai, hậu quả là bạn phải chờ đủ 60 giây cho nhà bếp chuẩn bị sự yêu cầu của bạn. Điều này được hiểu như một cache miss, trong đó bộ điều khiển bộ đệm không làm đầy bộ đệm chính xác dữ liệu bộ xử lý thực sự cần tiếp theo. Kết quả là sự sự chờ đợi, hay trong trường hợp của hệ thống Pentium 233MHz mẫu. Hệ thống về cơ bản giảm 16MHz (tốc độ RAM) bất cứ khi nào một cache miss xảy ra!