Hệ Điều Hành Phân Tán Chorus (Phần cuối)

Phần 6: Quản lý bộ nhớ trong Chorus

Quản lý bộ nhớ trong Chorus vay mượn nhiều ý tưởng từ Mach. Tuy nhiên, nó cũng chứa một số ý tưởng không có mặt ở Mach hiện tại. Trong phần này chúng ta sẽ mô tả những khái niệm cơ bản và cách thức chúng được sử dụng.

6.1. Vùng và phân đoạn (Regions and Segments)

Các khái niệm chính đằng sau quản lý bộ nhớ trong Chorus là các vùng (region) và các phân đoạn (segment). Vùng (region) A là một dãy liên tiếp các địa chỉ ảo, ví dụ, 1024-6143. Về lý thuyết, một vùng có thể bắt đầu ở bất kỳ địa chỉ ảo và kết thúc tại bất kỳ địa chỉ ảo, nhưng để làm bất cứ điều gì hữu ích, một vùngcần được liên kết trang và có chiều dài bằng với một số số nguyên của các trang. Tất cả các byte trong vùng phải có các đặc tính bảo vệ như nhau (ví dụ, chỉ đọc). Vùng là một tài sản của các tiến trình, và tất cả các thread trong một tiến trình xem cùng một vùng. Hai vùng trong tiến trình tương tự có thể không trùng lặp.

Phân đoạn (segment) A là một tập tiếp giáp các byte được đặt tên và được bảo vệ bởi một khả năng. Tập tin và trao đổi các khu vực trên đĩa là những loại phổ biến nhất của các phân đoạn. Phân đoạn có thể được đọc và viết bằng cách sử dụng các cuộc gọi hệ thống cung cấp khả năng của phân đoạn, số byte, bộ đệm, và việc chuyển giao. Các cuộc gọi được sử dụng để thực hiện họat động truyền thống I/O trên các tập tin.

6.2. Ánh xạ (Mappers)

Chorus hỗ trợ trang bên ngoài kiểu Mach, được gọi là mappers. Mỗi mapper điều khiển một hoặc nhiều phân đoạn đó được ánh xạ vào khu vực. Phân đoạn có thể được ánh xạ vào nhiều vùng, ngay cả trong không gian địa chỉ khác nhau cùng một lúc, như trong hình. 6.1. Ở đây các phân đoạn S1 và S2 là hai ánh xạ vào các quá trình A và B, trên cùng một máy nhưng tại các địa chỉ khác nhau. Nếu quá trình A ghi địa chỉ A1 nó thay đổi từ đầu tiên của S1. Nếu quá trình B sau đó đọc B1 nó cũng được các giá trị A đã viết. Hơn nữa, nếu S1 là một tập tin, khi cả hai quá trình chấm dứt, thay đổi sẽ được thực hiện trong các tập tin trên đĩa.

VMM  trong mỗi hạt nhân duy trì một bộ nhớ cache các trang và theo dõi những trang thuộc về phân đoạn. Các trang trong bộ nhớ cache nội bộ có thể thuộc về phân đoạn được đặt tên, chẳng hạn như các tập tin, hoặc để phân đoạn không tên, chẳng hạn như các khu vực trao đổi. Hạt nhân theo dõi thông tin các trang. Nó có thể loại bỏ các trang clean, nhưng phải trả lại các trang dirty đến mappers thích hợp để lấy lại không gian của nó.

Một giao thức giữa các hạt nhân và mapper xác định dòng chảy của các trang trong cả hai hướng. Khi một lỗi trang xảy ra, kiểm tra hạt nhân để xem các trang cần thiết được lưu trữ. Nếu không, hạt nhân sẽ gửi một thông điệp tới các mapper kiểm soát phân đoạn của trang yêu cầu (và các trang có thể liền kề cũng). Các thread bị treo sau đó được đình chỉ cho đến khi trang đến.

When the mapper gets the request, it checks to see if the needed page is in its own cache (in its own address space). If not, it sends a message to the thread managing the disk to perform I/O and fetch the page. When the page arrives (or if it was already present), the mapper notifies the kernel, which then accepts the page, adjusts the MMU page tables, and resumes the faulting thread.

Khi mapper các nhận được yêu cầu, nó kiểm tra xem các trang cần thiết có trong bộ nhớ cache riêng của mình không (trong không gian địa chỉ riêng của mình). Nếu không, nó sẽ gửi một thông điệp tới các thread quản lý các ổ đĩa để thực hiện I /O và tìm nạp các trang. Khi trang đến (hoặc nếu nó đã được trình bày), mapper các thông báo hạt nhân, mà sau đó chấp nhận các trang, điều chỉnh các bảng trang MMU, và hồ sơ các thread bị treo.

Hình 6.1 Phân đoạn được ánh xạ tới không gian địa chỉ trong cùng thời điểm

Phần 7: Sự kiện phần cứng và xử lý ngoại lệ (Hardware Event & Exception)

Các Nucleus Chorus cung cấp thiết bị đơn giản cho phép các tác nhân người dung sử dụng phương án xử lý ngoại lệ của riêng mình. Ngoài ra, Chorus hỗ trợ hiệu năng cao và xử lý các sự kiện ngoại lệ đối với các hệ thống con có nhu cầu hỗ trợ trực tiếp các thiết bị phần cứng cũng như thời gian thực ứng dụng.

7.1 Mắc kẹt, Ngoại lệ, và Ngắt (Traps, Exceptions, and Interrupts)

Trap là các cuộc gọi có chủ đích tới hạt nhân hoặc một hệ thống con để gọi dịch vụ. Chương trình gây trap bằng cách gọi hệ thống như gọi một thủ tục thư viện. Hệ thống hỗ trợ hai cách xử lý bẫy. Trong cách đầu tiên, tất cả các bẫy trong một vector bẫy cụ thể đi đến một thread của hạt nhân duy nhất mà vector đã sẵn sàng để xử lý. Trong cách thứ hai, mỗi vector bẫy được gắn với một loạt các thread hạt nhân, với tác nhân giám sát Chorus sử dụng nội dung của đăng ký tới thứ tự trong mảng để lấy ra thread. Cơ chế thứ hai cho phép tất cả các cuộc gọi hệ thống sử dụng các vector cùng một bẫy, với số lượng cuộc gọi vào hệ thống sẽ được đăng ký

Ngoại lệ (Exception) là sự kiện bất ngờ, xảy ra do tai nạn, như trường hợp chia cho số không, tràn dấu chấm động, hoặc lỗi một trang. Nó có thể sắp xếp cho một thread hạt nhân để dẫn đến xử lý các ngoại lệ. Nếu bộ xử lý có thể hoàn thành việc xử lý, nó sẽ trả về một mã số đặc biệt và xử lý các trường hợp ngoại lệ là xong. Nếu không (hoặc nếu không có xử lý hạt nhân được chỉ định), hạt nhân trì hoãn các thread đó gây ra các ngoại lệ và gửi một thông điệp tới một cổng ngoại lệ xử lý đặc biệt liên quan đến tiến trình của thread. Thông thường, một số tiến trình khác sẽ được chờ đợi một thông điệp trên cổng nà. Nếu không có cổng ngoại lệ tồn tại, các thread đứt đoạn, bị hủy.

Ngắt (Interrupts) được gây ra bởi sự kiện không đồng bộ, như ve đồng hồ hoặc hoàn thành một yêu cầu I/O. Chúng không nhất thiết liên quan đến bất cứ điều gì các thread hiện tại đang làm. Thay vào đó, nó có thể sắp xếp trước khi ngắt xảy ra trên một vector gián đoạn nhất định (ví dụ, một thiết bị cụ thể), một thread hạt nhân mới sẽ được tạo một cách tự nhiên để xử lý nó. Nếu một gián đoạn thứ hai xuất hiện trên cùng một vector trước khi cái đầu tiên đã chấm dứt, một thread thứ hai được tạo ra, và như vậy. Tất cả các I / O ngắt trừ đồng hồ được xử lý theo cách này. Đồng hồ là được giám sát bời chính nó, nhưng nó có thể được thiết lập để thông báo cho người dùng một thread nếu muốn. Ngắt đề có thể gọi chỉ một tập hữu hạn các dịch vụ hạt nhân do hệ thống đang ở trong một trạng thái không rõ khi chúng được bắt đầu. Các hoạt động chúng có thể làm trên semaphores và mutexes, hoặc gửi minimessages tới miniports đặc biệt.

7.2 Xử lý ngoại lệ cơ bản

Trong hình thức đơn giản của nó, các Nucleus Chorus cung cấp cơ chế cho phép người sử dụng hoặc hệ thống kiểm soát các sự kiện ngoại lệ. Một thread có thể yêu cầu để kết hợp cổng với trường hợp ngoại lệ xảy ra với một tác nhân. Khi Nucleus phát hiện một trường hợp ngoại lệ và tác nhân có một cổng được giao cho công việc, nó sẽ gửi một thông điệp đến cổng đó, mô tả điều kiện ngoại lệ. Thread lắng nghe trên cổng này sau đó có thể tùy hành động phù hợp để đưa ra ngoại lệ.
Nếu không có cổng đã được chỉ định, trường hợp ngoại lệ gây ra treo các thread được tạo ra cho các ngoại lệ.

7.3 Tác nhân giám sát ngoại lệ

Đối với các tác nhân giám sát (supervisor actor), Chorus cung cấp các cơ sở bổ sung hệ thống, theo đó có thể truy cập trực tiếp sự kiện cấp thấp I/O và các sự kiện ngoại lệ phần cứng để đáp ứng nhu cầu. Tác nhân giám sát hỗ trợ một cơ chế ngắt thiết bị từ phần cứng đến thread người sử dụng.

Khi ngắt xảy ra, tác nhân giám sát giữ trạng thái của thread bị gián đoạn và thự chiện liên tục các cuộc gọi theo thứ tự ưu tiên người dùng kết hợp với ngắt. Sau khi trình tự cuối cùng đã hoàn thành, tác nhân giám sát có thể bắt đầu gia hạn.

Phần 8: So sánh hệ điều hành phân tán Chorus với Ameoba & Mach

Trong phần này chúng ta sẽ xem xét điểm chung và khác giữa ba hệ điều hành phân tán.

8.1 Quan điểm (Philosophy)

Amoeba, Mach và Chorus có lịch sử khác nhau và triết lý khác nhau. Amoeba được thiết kế từ đầu như một hệ thống phân tán để sử dụng trên một tập của các CPU được kết nối bởi mạng LAN. Sau đó, bộ đa xử lý và WAN đã được thêm vào. Mach bắt đầu ra như là một hệ điều hành cho một bộ xử lý duy nhất, với bộ đa xử lý và mạng LAN được thêm vào sau đó. Chorus bắt đầu như một dự án nghiên cứu điều hành hệ thống phân tán khá xa với UNIX, và đã đi qua ba phiên bản chính, mỗi lần lại gần gũi hơn với UNIX. Các hệ quả của các nền tảng khác nhau có thể thấy trong các hệ thống.

Một khác biệt tiếp liên quan đến “microkernel”. Quan điểm Amoeba theo châm ngôn nổi tiếng do phi công Pháp và nhà văn Antoine de St Exupery giải thích: Sự hoàn hảo đạt được không phải khi ko còn gì để thêm vào, mà là khi ko còn gì để bỏ đi”. Triết lý này đã dẫn đến một hạt nhân tối thiểu, với hầu hết các mã trong các máy chủ sử dụng cấp người dùng.
Các nhà thiết kế Mach, ngược lại, muốn cung cấp đủ chức năng hạt nhân để xử lý các phạm vi rộng nhất có thể có của các ứng dụng. Ở nhiều vùng, Amoeba có một cách để làm điều gì đó và Mach có chứa hai hoặc ba, thuận tiện hơn và hiệu quả trong những hoàn cảnh khác nhau. Do đó, hạt nhân Mach là lớn hơn năm lần các cuộc gọi hệ thống (bao gồm cả các cuộc gọi tới thread hạt nhân). Chorus chiếm một vị trí trung gian giữa Amoeba và Mach, nhưng nó vẫn có hệ thống các cuộc gọi hơn 4,2 BSD UNIX, đó là rất khó cho một microkernel. Một so sánh được đưa ra trong hình 10.1.

System Kernel calls
Amoeba 30
Version 7 UNIX 45
4.2 BSD 84
Chorus 112
Mach 153
SunOS 165

Hình 8.1 Số lần cuộc gọi tới hạt nhân

8.2 Đối tượng (Objects)

Trong cả ba hệ thống, các đối tượng được đặt tên, địa chỉ, và được bảo vệ. Trong Amoeba, khả năng (capabilities) được quản lý trong không gian người sử dụng và bảo vệ bởi chức năng này. Capabilities cho hệ thống các đối tượng được xác định (ví dụ, tiến trình) và cho các đối tượng người dùng định nghĩa (ví dụ, thư mục) được đối xử một cách thống nhất và xuất hiện trong thư mục cấp người dùng để đặt tên và giải quyết tất cả các đối tượng.

Mach cũng có capabilities, nhưng chỉ cho cổng. Đây là những quản lý hạt nhân trong danh sách năng lực, mỗi tiến trình. Không giống như Ameoba, không có khả năng cho các tiến trình hoặc hệ thống khác hoặc các đối tượng người dùng định nghĩa, và không thường được sử dụng trực tiếp bởi các chương trình ứng dụng. Cổng capabilities được thông qua giữa các tiến trình một cách có kiểm soát, do đó, Mach có thể tìm thấy chúng bằng cách nhìn chúng trong bảng hạt nhân.

Chorus về cơ bản xây dựng các đối tượng giống như Mach, nhưng cũng sử dụng hệ thống năng lực của Ameoba cho phép các hệ thống con để xác định các đối tượng mới được bảo hộ. Không giống như Ameoba, Chorus không có một trường rõ ràng cho các quyền được  phép. Giống như các khả năng của Ameoba và không giống như của Mach, Chorus “có thể được truyền từ một tiến trình này tới tiến trình khác đơn giản bằng cách đưa chúng vào một thông điệp hoặc viết chúng vào một tập tin được chia sẻ.

8.3. Tiến trình (Processes)

Tất cả ba hệ thống hỗ trợ tiến trình với nhiều thread. Các thread được quản lý và theo lịch trình của hạt nhân, mặc dù thread cấp người sử dụng có thể được xây dựng trên nó. Amoeba không cung cấp cho người dùng điều khiển tạo thread, trong khi Mach và Chorus cho phép các tiến trình thiết lập các ưu tiên và chính sách của thread trong phần mềm. Mach cung cấp hỗ trợ đa phức tạp hơn so với hai hệ kia

Trong Amoeba và Chorus, đồng bộ hóa giữa các chủ đề được thực hiện bằng mutexes và semaphores. Trong Mach nó được thực hiện bởi mutexes và các biến điều kiện. Amoeba và Mach hỗ trợ một số hình thức biến tổng thể. Chorus sử dụng phần mềm đăng ký để xác định bối cảnh riêng của từng thread.

Amip, Mach, và Chorus tất cả các việc trên multiprocessors, nhưng chúng khác nhau về cách đối phó với các thread trên các máy. Trong Amoeba, tất cả các thread của một quá trình chạy trên cùng một CPU. Trong Mach tiến trình có quyền kiểm soát tốt hơn cho thread chạy trên CPU đó (bằng cách sử dụng khái niệm bộ vi xử lý). Do đó, các thread của cùng một tiến trình có thể chạy song song trên các CPU khác nhau.

Chorus hỗ trợ có nhiều thread trong một tiến trình duy nhất chạy trên các CPU khác nhau cùng một lúc, nhưng điều này được xử lý hoàn toàn bởi hệ điều hành. Không có sự can thiệp với người sử dụng để quản lý thread tới vi xử lý cấp phát, nhưng sẽ có trong tương lai.

Chorus cho phép một tiến trình được bắt đầu trên máy tính bất kỳ. Các bản sao UNIX cung cấp một cách để thiết lập các trạng thái mặc định.

8.4 Bộ nhớ (Memory Model)

Mô hình quản lý bộ nhớ Chorus được lấy chủ yếu từ Mach. Nó cũng có các đối tượng bộ nhớ (segments) có thể được ánh xạ tới.  Các trang nhu cầu này được kiểm soát bởi các trang bên ngoài (mapper), như trong Mach.

Amip, Mach, và Chorus tất cả các hỗ trợ bộ nhớ phân tán chia sẻ, nhưng theo nhiều cách khác nhau. Amoeba hỗ trợ chia sẻ các đối tượng được nhân rộng trên tất cả các máy sử dụng chúng. Đối tượng có thể có kích thước bất kỳ và có thể hỗ trợ bất kỳ hoạt động.

Mach và Chorus, ngược lại, hỗ trợ một bộ nhớ phân tán dựa trên trang chia sẻ. Khi một thread hỏi đến một trang không nằm trên máy của mình, trang đó được lấy từ máy hiện tại của nó và mang đến. Nếu có nhiều truy cập cùng một trang, xung đột có thể xảy ra.

8.5. Truyền thông (Communication)

Amoeba hỗ trợ cả hai giao tiếp RPC và nhóm truyền thông cơ bản. RPCs được địa chỉ tới các cổng, là các địa chỉ dịch vụ. Chúng được bảo vệ bằng cách sử dụng chức năng mã hóa một chiều. Việc gửi và nhận các máy có thể được ở bất cứ nơi nào. Giao diện RPC là rất đơn giản: chỉ có ba cuộc gọi hệ thống, không có bất kỳ tùy chọn.
Tin nhắn có thể được gửi đến nhóm bất kỳ với một sự bảo đảm đáng tin cậy. Ngoài ra, tất cả các thành viên trong nhóm thấy tất cả các thư đến theo thứ tự chính xác như nhau.

Ngược lại, truyền thông trong Mach là từ tiến trình tới cổng, chứ không phải từ tiến trình tới tiền trình. Hơn nữa, người gửi và cổng phải được đặt trên cùng một nút. Sử dụng một máy chủ mạng thông điệp. Mach không hỗ trợ truyền thông nhóm.
Thông điệp Mach có thể đơn giản hay phức tạp. Thông điệp đơn giản chỉ là các bit và không được xử lý bằng bất kỳ cách đặc biệt nào bời hạt nhân.

Truyền thông trong Chorus tương tự như Mach, nhưng đơn giản hơn. Thông điệp được chuyển đến cổng và có thể được gửi không đồng bộ hoặc sử dụng RPC. Mọi thông tin liên lạc Chorus được xử lý bởi hạt nhân, như trong Amoeba. Không gì giống như các máy chủ mạng thông điệp trong Chorus. Giống như Amoeba và không giống như Mach, một thông điệp Chorus có một tiêu đề cố định, có thông tin nguồn và đích, và một phần thân không định kiểu đó chỉ là một mảng các byte.

Chorus hỗ trợ quảng bá ở cấp độ hạt nhân nhưng theo một cách giống như Mach, tốt hơn như Amoeba. Các cổng có thể được nhóm lại với nhau trong các nhóm cổng, và thông điệp gửi đến tất cả các thành viên của một nhóm cổng (hoặc chỉ một). Không bảo đảm rằng tất cả các tiến trình hiểu các thông điệp theo đúng thứ tự, như trong Amoeba.

8.6 Máy chủ (Servers)

Amoeba có một loạt các máy chủ cho các chức năng cụ thể, bao gồm cả quản lý tập tin, quản lý thư mục, sao chép đối tượng, và cân bằng tải. Tất cả đều dựa trên các đối tượng và khả năng. Amip hỗ trợ nhân rộng các đối tượng thông qua các thư mục có chứa khả năng. Ví dụ như khi một file được mở, khả năng file đạt được và lưu trữ trong bảng mô tả file.

Mach có một máy chủ chạy BSD UNIX như là một chương trình ứng dụng. Nó cung cấp 100  phần trăm tương thích nhị phân, một lợi ích rất lớn cho việc chạy các phần mềm hiện tại mà mã nguồn không có sẵn.

Chorus cung cấp đầy đủ khả năng tương thích nhị phân với hệ thống V UNIX. Bản sao này được thực hiện bởi một tập các tiến trình (như Amoeba) chứ không phải bằng cách chạy UNIX như  một chương trình ứng dụng (như Mach). Tuy nhiên, một số trong các tiến trình này có chứa mã UNIX, như Mach và không giống như Amoeba. Cũng như trong amip, ví dụ, khi một tập tin được mở ra, một khả năng cho nó được nạp và được lưu trữ trong bảng mô tả tập tin.

Item Amoeba Mach Chorus
Designed for: Distributed system 1 CPU, multiprocessor 1 CPU, multiprocessor
Execution model Pool processor Workstation Workstation
Microkernel? Yes Yes Yes
Number of kernel calls 30 153 112
Automatic load balancing? Yes No No
Capabilities General Only ports General
Capabilities in: User space Kernel User space
Threads managed by: Kernel Kernel Kernel
Transparent heterogenity? Yes No No
User-settable priorities? No Yes Yes
Multiprocessor support Minimal Extensive Moderate
Mapped object Segment Memory object Segment
Demand paging? No Yes Yes
Copy on write? No Yes Yes
External pagers? No Yes Yes
Distributed shared memory Object based Page based Page based
RPC? Yes Yes Yes
Group communication Reliable, ordered None Unreliable
Asynchronous communication? No Yes Yes
Intermachine messages Kernel User space/kernel Kernel
Messages address to: Process Port Port
UNIX emulation Source Binary Binary
UNIX compatibility POSIX (partial) BSD System V
Single-server UNIX? No Yes No
Multiserver UNIX? Yes No Yes
Optimized for: Remote case Local case Local case
Automatic file replication? Yes No No

Hình 8.3 Một số so sánh về Amoeba, Mach, và Chorus.

Kết luận

Giống như Amoeba và Mach, Chorus là một hệ điều hành dựa trên microkernel để sử dụng trong các hệ thống phân tán. Nó cung cấp khả năng tương thích nhị phân với hệ thống UNIX V, hỗ trợ cho các ứng dụng thời gian thực, và lập trình hướng đối tượng.

Chorus bao gồm ba lớp khái niệm: lớp hạt nhân, các hệ thống con, và các quá trình người dùng. Lớp hạt nhân chứa các microkernel thích hợp, cũng như hạt nhân một số quy trình chạy trong chế độ hạt nhân và chia sẻ không gian địa chỉ của microkernel. Lớp giữa chứa các hệ thống con, được sử dụng để xây dựng hệ thống cung cấp hoạt động hỗ trợ cho các chương trình người dùng, mà nằm trong các lớp trên.

Microkernel cung cấp sáu trừu tượng chính: các tiến trình, luồng, các vùng, các thông điệp, cổng, các nhóm cổng, và định danh duy nhất. Tiến trình cung cấp một cách để thu và quản lý tài nguyên. Luồng là những đơn vị hoạt động trong hệ thống, và được lên kế hoạch bởi hạt nhân bằng cách sử dụng một lịch trình ưu tiên. Khu vực là các khu vực của không gian địa chỉ ảo có thể có các phân đoạn ánh xạ vào chúng. Cổng là vùng đệm được sử dụng để nắm giữ các thư gửi đến chưa được đọc. Định danh duy nhất là tên nhị phân được sử dụng để xác định nguồn tài nguyên.

Tài liệu hướng dẫn

1, Overview of the CHORUS Distributed Operating Systems_M. Rozier, V. Abrossimov, F. Armand, I. Boule, M. Gien, M. Guillemont, F. Herrmann, C. Kaiser

2, Distributed  Operating  Systems_Andrew  S.  Tanenbaum and  Robbert  Van  Renesse

Leave a Reply