Các giao thức dựa trên thư mục

Một phần của tài liệu Các hệ vi xử lý tiên tiến (Trang 66 - 71)

Do bản chất của một số mạng liên thơng và kích thướt của hệ thống bộ nhớ dùng chung, cập nhật hoặc vơ hiệu hóa các cache dùng giao thức snoopy có thể trở nên khơng thực tế. Ví dụ, khi một mạng nhiều tầng được sử dụng để xây dựng một hệ thống bộ nhớ dùng chung lớn, các kỹ thuật truyền phát thông tin được sử dụng trong giao thức snoopy rất tốn kém. Trong những tình huống như vậy, các lệnh tương hợp chỉ nên gửi đến những cache nào bị ảnh hưởng do hoạt động cập nhật. Đây là ý tưởng làm nảy sinh các giao thức dựa trên thư mục. Các giao thức tương hợp cache bằng cách nào đó lưu trữ thơng tin ở những nơi các khối cư trú được gọi là các sơ đồ thư mục. Thư mục là một cấu trúc dữ liệu duy trì thơng tin trên các bộ vi xử lý dùng chung một khối bộ nhớ và trên trạng thái của nó. Thơng tin được duy trì trong thư mục có thể là tập trung hóa hoặc phân tán. Một thư mục trung tâm duy trì thơng tin về tất cả các khối trong cấu trúc dữ liệu tập trung. Trong khi thư mục trung tâm gộp mọi thứ vào một nơi, nó sẽ trở thành một trở ngại và phải trải qua thời gian nghiên cứu lâu dài. Để khắc phục một phần vấn đề này, cùng một thơng tin như thế có thể được xử lý theo kiểu phân tán bằng cách cho phép mỗi mơ-đun bộ nhớ duy trì một thư mục riêng biệt. Trong một thư mục phân tán, cổng ứng với khối bộ nhớ chỉ có một con trỏ một trong những bộ nhớ cache yêu cầu khối.

BẢNG 4.10 Ví dụ 5 (Write-Update Partial Write-Through)

4.5.1 Phân loại giao thức

Lối vào thư mục (đường dẫn thư mục) đối với mỗi khối dữ liệu chứa một số con trỏ để xác định các vị trí của các bản sao của khối. Mỗi lối vào (đường dẫn) chỉ có thể chứa một dirty bit để xác định một cache duy nhất có được phép viết vào khối bộ nhớ này hay không. Hầu hết các giao thức dựa trên thư mục có thể được chia thành ba loại: thư mục ánh xạ hoàn toàn, thư mục hạn chế, và thư mục chuỗi.

Các thư mục ánh xạ hoàn toàn Dưới dạng ánh xạ hoàn toàn, mỗi lối vào thư mục chứa N con trỏ, trong đó N là số bộ xử lý. Do đó, cần phải có N bản sao cache của một khối cụ thể được chia sẻ (được dùng chung) bởi tất cả các bộ vi xử lý. Đối với mỗi khối bộ nhớ, một vector N-bit được duy trì, trong đó N là số bộ vi xử lý trong

Read-Miss Nếu khơng tồn tại bản sao cache khác, thì cung cấp một bản sao từ bộ nhớ toàn cục. Chuyển trạng thái của bản sao này sang Valid Exclusive. Nếu một bản sao cache tồn tại, tạo một bản sao từ bộ nhớ cache. Chuyển trạng thái sang Shared Clean. Nếu các bản sao bộ nhớ cache đang cung cấp là Valid Exclusion hoặc Shared Clean, trạng thái mới của nó trở thành Shared Clean. Nếu các bản sao bộ nhớ cache cung cấp ở trạng thái Dirty hoặc Shared Dirty, trạng thái mới của nó trở thành Shared Dirty.

Write-Hit Nếu trạng thái là Valid Exclusive hoặc Dirty, thực hiện viết cục bộ và chuyển trạng thái sang Dirty. Nếu trạng thái là Shared Clean hoặc Shared Dirty, thực hiện cập nhật và thay đổi trạng thái thành Shared Dirty. Truyền khối cấp nhật cho tất cả các cache khác. Các cache này nằm sẵn trên bus và cập nhật bản sao của chúng, sau đó chuyển trạng thái của chúng thành Shared Clean.

Write-Miss Khối copy họăc xuất phát từ cache khác họăc từ bộ nhớ toàn cục.Nếu khối xuất phát từ bộ nhớ cache khác, thực hiện cập nhật, chuyển trạng thái sang Shared Dirty, và truyền khối cập nhật cho các cache khác. Các cache khác nằm sẵn trên bus, cập nhật bản sao của chúng, và thay đổi trạng thái của chúng thành Shared Clean. Nếu các bản sao đến từ bộ nhớ, thực hiện ghi và chuyển trạng thái sang Dirty.

Thay thế khối Nếu một bản sao ở trạng thái Dirty họăc Shared Dirty, nó phải được viết vào lại bộ nhớ chính nếu khối đang được thay thế.Nếu bản sao ở trạng thái Valid Exclusive, không cần ghi lại khi khối được thay thế.

hệ thống bộ nhớ dùng chung. Mỗi bit trong vector tương ứng với một bộ xử lý. Nếu bit i* được đặt là một, có nghĩa là bộ vi xử lý i có bản sao của khối này trong bộ nhớ cache của nó. Hình 4.7 minh họa sơ đồ ánh xạ hồn tồn. Trong hình, vector gắn với khối X trong bộ nhớ cho thấy rằng X ở Cache C0 và Cache C2. Rõ ràng, không gian không được tận dụng hiệu quả trong phương pháp này, đặc biệt nếu khơng có nhiều bộ xử lý chia sẻ cùng một khối.

Các thư mục giới hạn Các thư mục giới hạn có số con trỏ trên một cổng vào thư mục không đổi bất kể số bộ xử lý. Hạn chế số lượng đồng thời các bản sao cache của bất kỳ khối nào nên giải quyết vấn đề kích thước thư mục có thể tồn tại trong các thư mục ánh xạ hoàn tồn. Hình 4.8 minh họa sơ đồ thư mục hạn chế. Trong ví dụ này, số lượng bản sao chia sẻ được giới hạn ở hai. Đây là lý do tại sao vector gắn với khối X trong bộ nhớ chỉ có hai vị trí. Vector chỉ ra rằng X ở trong cache C0 và Cache C2.

BẢNG 4.12 Ví dụ 6 (Write-Update Write-Back)

Hình 4.7 Thư mục ánh xạ hồn tồn

Hình 4.8 Thư mục giới hạn (chia sẻ tối đa = 2).

Thư mục chuỗi Các thư mục chuỗi giả lập ánh xạ hoàn toàn bằng cách phân phối thư mục giữa các cache. Chúng được thiết kế để giải quyết vấn đề kích thước thư mục mà khơng hạn chế số bản sao khối dùng chung. Các thư mục chuỗi theo dõi bản sao dùng chung

của một khối đặc biệt bằng cách duy trì một chuỗi các con trỏ thư mục. Hình 4.9 cho thấy lối vào thư mục gắn với X có một con trỏ hướng đến Cache C2, do đó nó sẽ có một con trỏ hướng đến cache C0. Tức là, khối X tồn tại trong hai Caches C0 và Cache C2. Con trỏ từ cache C0 đang hướng đến terminator (CT), cho thấy sự kết thúc của danh sách. Terminator: thiết bị kết thúc, phần tử kết thúc

4.5.2 Các giao thức vô hiệu

Vơ hiệu hố thư mục tập trung Khi một yêu cầu viết được phát đi, thư mục trung tâm được sử dụng để xác định các bộ vi xử lý nào có một bản sao của khối.

Tín hiệu vơ hiệu và một con trỏ tới bộ xử lý yêu cầu được chuyển tiếp đến tất cả các bộ vi xử lý có một bản sao của khối. Mỗi bộ nhớ cache bị vô hiệu gửi một xác nhận đến bộ xử lý yêu cầu. Sau khi q trình vơ hiệu hố hồn thành, chỉ có bộ xử lý viết có cache cùng với bản sao của khối. Hình 4.10 biểu diễn yêu cầu write-miss từ Cache C3. Khi nhận được yêu cầu, bộ nhớ sẽ gửi tín hiệu vơ hiệu và một con trỏ đến cache C3 rồi đến cache C0 và Cache C2. Các cache này vơ hiệu hố chính chúng và gửi xác nhận đến cache C3. Sau khi quá trình vơ hiệu được thực hiện, Cache C3 sẽ có quyền truy cập đọc-ghi độc quyền vào X.

Giao diện tương hợp có thể mở rộng (SCI) Giao thức giao diện tương hợp có thể mở rộng dựa trên một danh sách liên kết kép của các thư mục phân tán. Mỗi khối cache được nhập vào một danh sách các bộ xử lý dùng chung khối đó. Đối với mọi địa chỉ khối, các lối vào bộ nhớ và cache có thêm các tag bit. Một phần của tag bộ nhớ chỉ định bộ vi xử lý đầu tiên trong danh sách dùng chung (đứng đầu). Một phần của mỗi tag cache chỉ định các lối vào danh sách dùng chung trước và sau. Nếu khơng tính đến số bit cần thiết trong các cache cục bộ đối với các con trỏ, kích thước thư mục trong bộ nhớ bằng số khối bộ nhớ nhân log2 (số lượng cache).

Ban đầu bộ nhớ ở trạng thái không cache và các bản sao cache không hợp lệ. Một yêu cầu đọc được hướng từ bộ vi xử lý đến bộ điều khiển bộ nhớ. Các dữ liệu yêu cầu được trả lại cho bộ nhớ cache của đối tượng yêu cầu và trạng thái vào của nó thay đổi từ trạng thái vô hiệu sang trạng thái đầu. Điều này thay đổi trạng thái bộ nhớ từ khơng cache sang có cache. Khi một đối tượng yêu cầu đưa yêu cầu đọc của nó đến bộ nhớ, bộ nhớ trả về một con trỏ cho đầu (head). Một yêu cầu đọc từ cache sang cache (được gọi là Prepend) được gửi từ đối tượng yêu cầu đến cache đầu. Khi nhận được yêu cầu, cache đầu hướng con trỏ ngược của nó đến cache của đối tượng yêu cầu. Các dữ liệu yêu cầu được trả lại cho cache của đối tượng yêu cầu và trạng thái vào của nó được chuyển sang trạng thái đầu. Phần đầu của danh sách có quyền lọc (tẩy, xoá) các mục khác trong danh sách để thu được mục exclusive (read-write). Giao tác ban đầu chuyển sang đối tượng trong danh sách chia sẻ thứ hai lọc (tẩy, xố) đối tượng đó trả về con trỏ thuận của nó. Con trỏ thuận được sử dụng để lọc (tẩy, xoá) entry tiếp theo và v.v….. Các entry cũng có thể tự xố chính chúng từ danh sách khi

chúng cần cache các địa chỉ khối khác. Hình 4.11 biểu diễn sự thêm vào và loại bỏ các phép toán trong danh sách chia sẻ trong SCI.

Hình 4.10 Vơ hiệu hố thư mục tập trung.

Entry: lối vào, đường dẫn, đối tượng thư mục phân phối Stanford (SDD) Giao thức thư mục phân phối Stanford (SDD) dựa trên danh sách liên kết đơn của các thư mục phân phối. Cũng giống như giao thức SCI, bộ nhớ hướng đến đầu của danh sách chia sẻ. Mỗi bộ vi xử lý chỉ hướng đến bộ vi xử lý trước nó. Việc thêm vào và loại bỏ từ danh sách chia sẻ được xử lý rất khác so với giao thức SCI.

Trên read-miss, một đối tượng yêu cầu mới gửi một thông điệp read-miss vào bộ nhớ. Bộ nhớ cập nhật con trỏ đầu của nó hướng đến bộ yêu cầu và gửi tín hiệu read-miss- forward (chuyển tiếp read-mis) đến đầu cũ. Khi nhận được yêu cầu, đầu cũ trả về dữ liệu yêu cầu cùng với địa chỉ của nó dưới dạng read-miss-reply (trả lời read-miss). Khi đã nhận được trả lời (đáp ứng), tại cache của đối tượng yêu cầu, dữ liệu được sao chép và con trỏ được hướng đến đầu cũ.

Trên (khi) write-miss, một yêu cầu gửi một thông điệp write-miss vào bộ nhớ. Bộ nhớ cập nhật con trỏ đầu của nó hướng đến đối tượng yêu cầu và gửi một tín hiệu write- miss-forward (chuyển tiếp write miss) tới đầu cũ. Đầu cũ vơ hiệu hố chính nó, trả về dữ liệu yêu cầu dưới dạng tín hiệu dữ liệu đáp ứng write-miss, và gửi một tín write-miss-

forward đến cache tiếp theo trong danh sách. Khi bộ nhớ cache tiếp theo nhận tín hiệu write- miss-forward, nó làm mất hiệu lực chính nó và gửi một tín hiệu write-miss-forward đến cache tiếp theo trong danh sách. Khi tín hiệu write-miss-forward nhận được bởi đi hoặc bởi một cache khơng có bản sao của khối, tín hiệu đáp ứng write-miss được gửi tới đối tượng u cầu. Q trình ghi hồn chỉnh khi đối tượng yêu cầu nhận được cả dữ liệu đáp ứng write-miss và đáp ứng write-miss.

Hình 4.12 biểu diễn việc thêm vào và loại bỏ các phép toán từ danh sách chia sẻ trong SDD.

Một phần của tài liệu Các hệ vi xử lý tiên tiến (Trang 66 - 71)