3. Truy cập dữ liệu trong bộ nhớ
3.2 Truy nhập bộ nhớ chính
Hình 4-8 cho ta sơ đồ kết nối các chip trong quá trình vi xử lý truy nhập ở chế độ MAX. Lúc này 8288 phát ra các tín hiệu điều khiển cho BUS và một vài bộ đệm trong bộ
nhớ tạm thời. Bộ điều khiển nhớ điều khiển bộ nhớ để đọc/ viết số liệu tời địa chỉ mong
57
Hình 4-8. Các chip truy nhập bộ nhớ ở chế độ MAX
Hình 4-9 là giản đồ xung của các tín hiệu trên bus hệ thống trong một chu kỳ đọc hay viết bộ nhớ. Trên giản đồ xung theo thời gian ta thấy có 4 tín hiệu liên quan đến chu kỳ bus: xung nhịp từ máy phát nhịp đồng hồ CLK, các tín hiệu địa chỉ/trạng thái. Các tín hiệu địa chỉ/số liệu, tín hiệu sẵn sàng READY để chỉ thị đã hoàn thành việc đọc số liệu
HBE, A19-A16 S7-S3
A15-A0 bus res D15-D0 ổn định
Số liệu vào bộ nhớ D15 – D0 Clock 8284 CPU 8086 Đệ m đị a ch ỉ 7 4 L S 2 4 4 Đ ệ m đị a ch ỉ 7 4 L S 2 4 4 Đ i ề u k h i ể n B U S 8 2 8 8 H ợ p k ên h đị a ch ỉ 7 4 L S 1 5 8 Đệ m b ộ n h ớ Đ i ề u k h i ể n b ộ n h ớ Bộ nhớ chính Asynchronous synchr READ CLK Địa chỉ Số liệu T1 T2 TCycle T3 T4 Địa chỉ trạng thái Địa chỉ /số liệu
Hình 4-9. Các tín hiệu trên bus hệ thống trong một chu kỳ đọc hoặc viết bộ nhớ
a. Chu kỳ đọc bộ nhớ
Nhìn trên hình (a) ta thấy chu kỳ đọc bộ nhớ bao gồm các quá trình xảy ra như sau: T1: Vi xử lý đưa ra tín hiệu điều khiển S2, S1, S0 tới bộ điều khiển bus, kích bộ đệm số liệu và địa chỉ hoạt động. Tiếp đó địa chỉ trên các chân từ A19 đến A0 được đưa vào bộ đệm địa chỉ. Tín hiệu HBE chỉ thị byte hoặc từ đang được đọc. Tín hiệu READY nhảy xuống mức thấp, nó chỉ nhảy lên cao một khi bộ nhớ đã được cấp xong số liệu.
T2: Chuyển hướng truyền số liệu trên bus. Đường BHE và A19 – A16 chuyển sang thông tin trạng thái. Các đường A15-A0 chuyển từ mode địa chỉ sang mode số liệu.
T3: Chu trình truyền số liệu bắt đầu. Chừng nào số liệu chưa ổn định trên D15-D0 các hiệu trạng thái S7- S3 xuất hiện. Khi toàn bộ số liệu được truyền xong vào bộ nhớ, bộ điều khiển nhớ sẽ nâng mức điện thế ở dây READY phải được đồng bộ trước bằng cách cho nó qua máy nhịp 8284 để phát ra xung READY đồng bộ với xung nhịp đưa vào vi xử lý. Như vậy số liệu được truyển từ bộ đệm bộ nhớ tời bộ đệm số liệu. Vi xử lý lúc này khởi phát việc nhận số liệu từ bộ đệm.
T4: vi xử lý kết thúc việc đọc số liệu vào sau ½ chu kỳ . Lúc này các bộ đệm bị cấm nhưng vi xử lý vẫn liên tục cho ra các tín hiệu trạng thái S7-S3. Sau khi kết thúc T4, bus hệ thống lại một lần nữa trở về trạng thái khởi phát.
b. Chu kỳ viết bộ nhớ
Các tín hiệu trên hình (b) giống như ở chu kỳ đọc, ngoại trừ tín hiệu địa chỉ/
số liệu
T1: Các xử lý giống trên và chỉ có bộ điều khiển bus được tác động vì viết số liệu.
T2: Hướng của bus địa chỉ / số liệu không cần đổi bời vì cả địa chỉ và số liệu đều là hướng ra. Do đó ngay sau khi cấp địa chỉ, vi xử lý có thể phát ra ngay số liệu vào bộ đệm ở xung nhịp đồng hồ trong T2. Bộ đệm số liệu truyền nó tới bộ đệm nhớ. Đồng thời bộ điều khiển nhớ sẽ điều khiển bộ nhớ viết số liệu vào nó.
T3: Sau khi hoàn thành việc viết số liệu bên trong bộ nhớ, bộ điều khiển nhớ sẽ nâng mức điện thế trên dây READY lên cao để chỉ thị tới vi xử lý.
T4: Vi xử lý kết thúc quá trình viết. Các bộ đệm bị cấm nhưng vi xử lý tiếp tục ra các tín hiệu trạng thái S7-S3.
4. Bộ nhớ CACHE
Mục đích:
- Giới thiệu chức năng và nguyên lý hoạt động của các cấp bộ nhớ máy tính: bộ nhớ
cache: nguyên lý vận hành, phân loại các mức, đánh giá hiệu quả hoạt động; và nguyên lý vận hành của bộ nhớ ảo.
Mức cache -bộ nhớ trong trong bảng các cấp bộ nhớ có cơ cấu vận hành trong suốt đối với bộ xử lý. Với thao tác đọc bộ nhớ, bộ xử lý gởi một địa chỉ và nhận một dữ liệu từ bộ nhớ trong. Với thao tác ghi bộ nhớ, bộ xử lý viết một dữ liệu vào một ô nhớ với một địa
chỉ được chỉ ra trong bộ nhớ. Để cho chương trình vận hành bình thường thì cache phải
chứa một phần con của bộ nhớ trong để bộ xử lý có thể thâm nhập vào các lệnh hoặc dữ liệu thường dùng từ bộ nhớ cache. Do dung lượng của bộ nhớ cache nhỏ nên nó chỉ chứa một phần chương trình nằm trong bộ nhớ trong. Để đảm bảo sự đồng nhất giữa nội dung của cache và bộ nhớ trong thì cache và bộ nhớ trong phải có cùng cấu trúc. Việc chuyển dữ liệu giữa cache và bộ nhớ trong là việc tải lên hay ghi xuống các khối dữ liệu. Mỗi khối chứa
nhiều từ bộ nhớ tuỳ thuộc vào cấu trúc bộ nhớ cache. Sự lựa chọn kích thước của khối rất quan trọng cho vận hành của cache có hiệu quả.
Hình 4-10. Trao đổi dữ liệu giữa các thành phần CPU
Trước khi khảo sát vận hành của cache, ta xét đến các khái niệm liên quan:
-Thành công cache (cache hit):bộ xử lý tìm gặp phần tử cần đọc (ghi) trong cache. - Thất bại cache (cache miss): bộ xử lý không gặp phần tử cần đọc (ghi) trong cache.
-Trừng phạt thất bại cache (cache penalty): Thời gian cần thiết để xử lý một thất bại cache. Thời gian bao gồm thời gian thâm nhập bộ nhớ trong cộng với thời gian chuyển khối chứa từ cần đọc từ bộ nhớ trong đến cache. Thời gian này tuỳ thuộc vào kích thước của khối.
Để hiểu được cách vận hành của cache, ta lần lượt xem xét và giải quyết bốn vấn đề liên quan đến các tình huống khác nhau xảy ra trong bộ nhớ trong.
vấn đề 1:Phải để một khối bộ nhớ vào chỗ nào của cache (sắp xếp khối)?
vấn đề 2:Làm sao để tìm một khối khi nó hiện diện trong cache (nhận diện khối)?
vấn đề 3: Khối nào phải được thay thế trong trường hợp thất bại cache (thay thế khối)?
vấn đề 4:Việc gì xảy ra khi ghi vào bộ nhớ (chiến thuật ghi)?
Giải quyết vấn đề 1: Phải để một khối bộ nhớ vào chỗ nào của cache (sắp xếp khối)?
Một khối bộ nhớ được đặt vào trong cache theo một trong ba cách sau:
Kiểu tương ứng trực tiếp: Nếu mỗi khối bộ nhớ chỉ có một vị trí đặt khối duy nhất trong cache được xác định theo công thức:
K= i mod n
Trong đó:
K: vị trí khối đặt trong cache
i: số thứ tự của khối trong bộ nhớ trong n: số khối của cache
Như vậy, trong kiểu xếp đặt khối này, mỗi vị trí đặt khối trong cache có thể chứa một trong các khối trong bộ nhớ cách nhauxnkhối (x: 0,1,...,m; n: số khối của cache)
Số thứ tự khối cache Số thứ tự của khối trong bộ nhớ trong
0 0, n, 2n,...mn
1 1,n+1, 2n+1,...,mn+1
… …
n-1 n-1, 2n-1,...mn-1
Kiểu hoàn toàn phối hợp: trong kiểu đặt khối này, một khối trong bộ nhớ trong có thể được đặt vào vị trí bất kỳ trong cache.
Như vậy, trong kiểu xếp đặt khối này, mỗi vị trí đặt khối trong cache có thể chứa một trong tất cả các khối trong bộ nhớ
Kiểu phối hợp theo tập hợp: với cách tổ chức này, cache bao gồm các tập hợp của các khối cache. Mỗi tập hợp của các khối cache chứa số khối như nhau. Một khối của bộ nhớ trong có thể được đặt vào một số vị trí khối giới hạn trong tập hợp được xác định bởi công thức:K= i mod s
Trong đó: K: vị trí khối đặt trong cache i: số thứ tự của khối trong bộ nhớ trong s: số lượng tập hợp trong cache.
Trong cách đặt khối theo kiểu phối hợp theo tập hợp, nếu tập hợp có m khối, sự tương ứng giữa các khối trong bộ nhớ trong và các khối của cache được gọi là phối hợp theo
tập hợpmkhối.
Nếu m=1 (mỗi tập hợp có 1 khối), ta có kiểu tương ứng trực tiếp. Nếu m=n (n: số khối của cache), ta có kiểu tương hoàn toàn phối hợp.
Hiện nay, phần lớn các cache của các bộ xử lý đều là kiểu tương ứng trực tiếp hay kiểu phối hợp theo tập hợp (mỗi tập hợp gồm 2 hoặc 4 khối).
Ví dụ:Bộ nhớ trong có 32 khối, cache có 8 khối, mỗi khối gồm 32 byte, khối thứ 12
của bộ nhớ trong được đưa vào cache.
TH0 TH1 TH2 TH3
Hoàn toàn phối hợp Tương ứng trực tiếp Phối hợp theo tập hợp
Giải quyết vấn đề 2:Làm sao để tìm một khối khi nó hiện diện trong cache (nhận diện khối)?
Mỗi khối của cache đều có một nhãn địa chỉ cho biết số thứ tự của các khối bộ nhớ trong đang hiện diện trong cache. Nhãn của một khối của cache có thể chứ thông tin cần thiết được xem xét để biết được các khối nằm trong cache có chứa thông tin mà bộ xử lý cần đọc hay không. Tất cả các nhãn đều được xem xét song song (trong kiểu tương ứng trực tiếp và phối hợp theo tập hợp) vì tốc độ là yếu tố then chốt. Để biết xem một khối của của cache thứ tự khối Bộ nhớ trong thứ tự khối Bộ nhớ trong
có chứa thông tin mà bộ xử lý cần tìm hay không, người ta thêm một bit đánh dấu (valid bit) vào nhãn để nói lên khối đó có chứa thông tin mà bộ xử lý cần tìm hay không.
Như đã mô tả ở phần đầu, với thao tác đọc (ghi) bộ nhớ, bộ xử lý đưa ra một địa chỉ và nhận (viết vào) một dữ liệu từ (vào) bộ nhớ trong. Địa chỉ mà bộ xử lý đưa ra có thể phân tích thành hai thành phần: phần nhận dạng số thứ tự khối và phần xác định vị trí từ cần đọc trong khối.
Tương ứng với ba kiểu lắp đặt khối đã xét, ta có:
a. Căn cứ vào tổ chức số từ trong khối bộ nhớ mà số bit trong địa chỉ xác định vị trí từ cần đọc trong khối. Cách này đúng với cả ba cách xếp đặt khối đã xét.
b. Phần nhận dạng số thứ tự khối sẽ khác nhau tuỳ thuộc vào cách xếp đặt khối, trường chỉ số khối được so sánh với nhãn của cache để xác định khối trong cache.
Dữ liệu được bộ xử lý đọc cùng lúc với việc đọc nhãn. Phần chỉ số khối của khối trong bộ nhớ trong được so sánh với bảng tương quan để xác định khối có nằm trong cache hay không. Để chắc rằng nhãn chứa thông tin đúng đắn (tức là khối có chứa từ mà bộ xử lý cần đọc-ghi), nếu việc so sánh nhãn của khối cache giống với số thứ tự khối, bit đánh dấu (Valid bit) phải được bật lên. Ngược lại, kết quả so sánh được bỏ qua. Bộ xử lý căn cứ vào phần xác định từ trong khối để đọc (ghi) dữ liệu từ (vào) cache.
- Đối với kiểu tương ứng trực tiếp, phần nhận dạng chỉ số khối được chia thành hai phần:
+ Phần chỉ số khối cache: chỉ ra số thứ tự khối cache tương ứng cần xem xét.
+ Phần nhãn: so sánh tương ứng với nhãn của khối cache được chỉ ra bởi phần chỉ số khối
Chỉ số khối trong bộ nhớ Địa chỉ
từ cần đọc trong khối Nhãn Chỉ số khối cache
Đối với kiểu hoàn toàn phối hợp, phần nhận dạng chỉ số khối trong địa chỉ sẽ được so sánh với nhãn của tất cả các khối cache.
Chỉ số khối
Địa chỉ
từ cần đọc trong khối
Đối với kiểu phối hợp theo tập hợp, phần nhận dạng chỉ số khối được chia thành hai phần:
+ Phần chỉ số tập hợp: chỉ ra số thứ tự tập hợp trong cache cần xem xét.
+ Phần nhãn: so sánh tương ứng với nhãn của các khối cache thuộc tập hợp được chỉ ra bởi phần chỉ số tập hợp.
Chỉ số khối bộ nhớ
Địa chỉ
từ cần đọc trong khối
Ví dụ: phân tích địa chỉ một từ trong được cho ở trên, địa chỉ xác định một từ trong bộ nhớ có 10 bit, tuỳ theo cách xếp đặt khối mà ta có thể phân tích địa chỉ này thành các thành phần như sau:
Đối với kiểu tương ứng trực tiếp:
Đối với kiểu hoàn toàn phối hợp:
Đối với kiểu phối hợp theo tập hợp, giả sử cache gồm 4 tập hợp, mỗi tập hợp gồm hai khối:
Giải quyết vấn đề 3: Khối nào phải được thay thế trong trường hợp thất bại cache (thay thế khối)?
Khi có thất bại cache, bộ điều khiển cache thâm nhập bộ nhớ trong và chuyển khối mà bộ xử lý cần đọc (ghi) vào cache. Như vậy, khối nào trong cache sẽ bị thay thế bới khối mới được chuyển lên. Đối với kiểu tương ứng trực tiếp, vị trí đặt khối không có sự lựa chọn, nó được xác định bởi trường chỉ số khối cache trong địa chỉ của từ cần đọc (ghi). Nếu cache là kiểu hoàn toàn phối hợp hay phối hợp theo tập hợp thì khi thất bại phải chọn lựa thay thế trong nhiều khối. Có bốn chiến thuật chủ yếu dùng để chọn khối thay thế trong cache:
- Thay thế ngẫu nhiên: để phân bố đồng đều việc thay thế, các khối cần thay thế trong cache được chọn ngẫu nhiên.
- Khối xưa nhất (LRU: Least Recently Used): các khối đã được thâm nhập sẽ được đánh dấu và khối bị thay thế là khối không được dùng từ lâu nhất.
- Vào trước ra trước (FIFO: First In First Out): Khối được đưa vào cache đầu tiên, nếu bị thay thế, khối đó sẽ được thay thế trước nhất.
- Tần số sử dụng ít nhất (LFU: Least Frequently Used): Khối trong cache được tham chiếu ít nhất
Điều này sử dụng hệ quả của nguyên tắc sử dụng ô nhớ theo thời gian: nếu các khối mới được dùng có khả năng sẽ được dùng trong tương lai gần, khối bị thay thế là khối không dùng trong thời gian lâu nhất.
Giải quyết vấn đề 4:Việc gì xảy ra khi ghi vào bộ nhớ (chiến thuật ghi)?
Thông thường bộ xử lý thâm nhập cache để đọc thông tin. Chỉ có khoảng 15% các thâm nhập vào cache là để thực hiện thao tác ghi (con số này là 33% với các tính toán vectơ-vectơ và 55% đối với các phép dịch chuyển ma trận). Như vậy, để tối ưu hoá các hoạt
động của cache, các nhà thiết kế tìm cách tối ưu hoá việc đọc bởi vì các bộ xử lý phải đợi đến khi việc đọc hoàn thành nhưng sẽ không đợi đến khi việc ghi hoàn tất. Hơn nữa, một khối có thể được đọc, so sánh và như thế việc đọc một khối có thể được bắt đầu khi chỉ số khối được biết. Nếu thao tác đọc thành công, dữ liệu ô nhớ cần đọc sẽ được giao ngay cho bộ xử lý. Chú ý rằng, khi một khối được ánh xạ từ bộ nhớ trong vào cache, việc đọc nội dung của khối cache không làm thay đổi nội dung của khối so với khối còn nằm trong bộ nhớ trong.
Đối với việc ghi vào bộ nhớ thì không giống như trên, việc thay đổi nội dung của một khối không thể bắt đầu trước khi nhãn được xem xét để biết có thành công hay thất bại. Thao tác ghi vào bộ nhớ sẽ tốn nhiều thời gian hơn thao tác đọc bộ nhớ. Trong việc ghi bộ nhớ còn có một khó khăn khác là bộ xử lý cho biết số byte cần phải ghi, thường là từ 1 đến 8 byte. Để đảm bảo đồng nhất dữ liệu khi lưu trữ, có hai cách chính để ghi vào cache:
-Ghi đồng thời: Thông tin được ghi đồng thời vào khối của cache và khối của bộ nhớ trong. Cách ghi này làm chậm tốc độ chung của hệ thống. Các ngoại vi có thể truy cập bộ nhớ trực tiếp
- Ghi lại: Để đảm bảo tốc độ xử lý của hệ thống, thông tin cần ghi chỉ được ghi vào