- Đọc/Ghi ngày, tháng, năm
HỆ ĐIỀU HÀNH NHIỀU BỘ VI XỬ LÝ
6.1.1. Hệ thống đa xử lý UMA dùng mơ hình Bus
Các hệ thống cĩ nhiều bộ xử lý đơn giản nhất đều dựa trên một bus chung, được minh họa trong hình 6-1(a). Hai hoặc nhiều CPU và một hoặc nhiều bộ nhớ, tất cả sử dụng một tuyến bus để truyền thơng. Khi một CPU muốn đọc một từ nhớ, trước tiên nĩ phải kiểm tra xem bus cĩ rỗi khơng. Nếu trạng thái bus là rỗi, CPU sẽ gởi địa chỉ của từ nhớ mà nĩ muốn đọc dữ liệu lên trên
bus, kiểm tra một vài tín hiệu điều khiển, và đợi cho đến khi bộ nhớđặt từ nhớ được yêu cầu lên lên bus.
Hình 6.1: Các hệ thống đa xử lý dùng mơ hình Bus: (a) Khơng cĩ cache. (b) Cĩ cache. (c) Cĩ cache và các bộ nhớ riêng.
Cịn nếu bus bận khi một CPU muốn đọc hoặc ghi bộ nhớ, CPU phải đợi đến khi bus trở về trạng thái rỗi. Đối với hệ thống cĩ 2 hoặc 3 CPU, việc cạnh tranh bus là cĩ thể quản lý được. Tuy nhiên nếu hệ thống cĩ số lượng CPU lớn hơn (ví dụ 32, hoặc 64 CPU), điều này là khơng thể. Hệ thống bị hạn chế hồn tồn bởi băng thơng cho phép của bus, và vì vậy hầu hết các CPU sẽ rỗi trong phần lớn thời gian.
Giải pháp cho vấn đề này là thêm bộ nhớ cache cho mỗi CPU như chỉ ra trong hình 6-1(b). Bộ nhớ cache cĩ thể nằm bên trong chip của CPU, nằm kế bên, nằm trên bo mạch của CPU, hoặc được kết hợp từ các cách trên. Điều này thực sự làm giảm bớt tải cho bus chung. Và vì vậy hệ thống cĩ thể hỗ trợ nhiều CPU hơn. Nĩi chung, caching khơng thực hiện trên một đơn vị nhớ riêng nào, mà nĩ dựa trên khối các byte (thường là các khối 32-byte hoặc 64-byte). Khi một từ nhớ được tham chiếu đến, thì tồn bộ khối (block) chứa từ nhớ đĩ sẽ được nạp vào trong cache
Mỗi block dữ liệu trong cache hoặc là read-only (trong trường hợp nĩ hiện diện trong nhiều cache
ở cùng một thời điểm), hoặc là read-write (trong trường hợp nĩ khơng hiện diện trong các cache
khác). Nếu một CPU cố gắng ghi một từ nhớđang hiện diện bên trong một hoặc một vài cache
khác, một tín hiệu sẽđược phần cứng phát lên trên busđể thơng báo cho các cache khác biết việc ghi này. Nếu các cache này cĩ một bản sao (giống như bản gốc trong bộ nhớ), thì chúng sẽ chỉ hủy bỏ những bản sao này và cho phép CPU nạp block dữ liệu từ bộ nhớ vào cache. Đối với một vài cache cĩ một bản sao đã được thay đổi, thì nĩ phải hoặc là được ghi ngược lại ra bộ nhớ trước khi việc ghi được thực hiện, hoặc được truyền trực tiếp đến CPU cĩ nhu cầu ghi thơng qua bus. Một khả năng khác cĩ thể được thiết kế như trong hình 6-1(c). Trong mơ hình này, mỗi CPU khơng chỉ cĩ cache mà cịn cĩ bộ nhớ riêng được truy xuất thơng qua một bus riêng. Để sử dụng tối ưu cấu hình này, trình biên dịch nên đặt tất cả các chương trình text, chuỗi, hằng số và những dữ liệu chỉđọc, ngăn xếp, và các biến cục bộ vào trong các bộ nhớ riêng này. Bộ nhớ chia sẻ dùng chung chỉđược sử dụng cho các biến chia sẻ. Trong hầu hết các trường hợp, việc làm này sẽ giảm đáng kể lưu lượng cho bus chung, tuy nhiên điều này cũng địi hỏi sự tích cực hợp tác từ trình biên dịch.