Một hạt nhân đã trở thành kho chứa của nhiều tính năng dư thừa, vì vậy kết qủa làkhó khăn để quản lý và điều chỉnh. Các mục tiêu thiết kế ban đầu làm cho nó khó khăn để cung cấp hỗ tr
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM THÁI NGUYÊN
Giáo viên hướng dẫn :Lương Thị Hồng Lan
Nhóm sinh viên thực hiện: Nhóm 1
Lâm Thị Minh Nguyệt
Trang 2A: CÁC VẤN ĐỀ TÌM HIỂU VÀ CÔNG VIỆC CỦA TỪNG THÀNH VIÊN TRONG NHÓM
1 History:cả nhóm cùng thực hiện
2 Design principle: Lâm Thị Minh Nguyệt thực hiện
3 System components: Đặng Thị Hương thực hiện
4 Process management: Nguyễn Thị Hiến thực hiện
5 Interprocess communication: Vũ Hoài Thương thực hiện
6 Memory management: Chu Thị Giang thực hiện
7 Programmer Interface: Lâm Thị Minh Nguyệt thực hiện
Trang 3
Sự phát triển của Mach đi theo con đường tiến hóa từ hệ thống UNIX BSD Banđầu Mach được phát triển bên trong hạt nhân BSD 4.2, với thành phần hạt nhân BSDđược thay thế bằng thành phần Mach khi thành phần Mach hoàn tất Thành phần BSDđược cập nhật đến BSD 4.3 khi trở thành sẵn có Trước năm 1986, bộ nhớ ảo và truyềnthông đang chạy trên dòng máy tính DEC VAX, bao gồm bộ đa xử lý phiên bản củaVAX Sau một thời gian ngắn, phiên bản đã dành cho IBM RT/PC và cho CN 3 máytrạm Năm 1987, chứng kiến sự hoàn thành của Multimax Encore và phiên bản bộ đa xử
lý Sequent Balance, bao gồm cả nhiệm vụ và hỗ trợ luồng, cũng như phiên bản đầu tiêncủa hệ thống, Phiên bản 0 và Phiên bản 1
Thông qua Phiên bản 2.0, Mach cung cấp khả năng tương thích với hệ thống BSDtương ứng bao gồm nhiều mã trong hạt nhân của BSD Những tính năng mới và khả năngcủa hạt nhân Mach trong các phiên bản lớn hơn hạt nhân BSD tương ứng Mach 3.0(Hình 1.1) di chuyển mã BSD bên ngoài của hạt nhân, để lại một hạt nhân nhỏ hơn nhiều
Hệ thống này thực hiện chỉ có tính năng cơ bản của Mach trong hạt nhân, tất cả các mã
cụ thể UNIX đã bị đổi để chạy máy chủ trong chế độ người dùng Loại trừ mã số cụ thểUNIX từ hạt nhân cho phép thay thế của BSD với một hệ điều hành khác, hoặc đồng thờithực hiện nhiều giao diện của hệ thống điều hành bên trên hạt nhân Ngoài BSD, chế độngười dùng đã được thực hiện để phát triển cho hệ điều hành DOS, hệ điều hànhMacintosh và OSF/1 Cách tiếp cận này có điểm tương đồng với khái niệm máy ảo,nhưng máy ảo được định nghĩa bằng phần mềm (giao diện hạt nhân Mach) chứ khôngphải bởi phần cứng Phiên bản 3.0, Mach trở thành có sẵn trên rất nhiều hệ thống, baogồm bộ đa xử lý SUN, Intel, IBM và bộ đa xử lý DEC, Sequent và hệ thống Encore.Mach đã được đẩy vào vị trí hàng đầu sự chú ý của các ngành công nghiệp khiSoftware Foundation (OSF) được mở rộng công bố vào năm 1989 rằng nó sẽ sử dụngMach 2.5 làm nền tảng cho hệ điều hành mới của nó, OSF/1 Phiên bản ban đầu của OSF/
Trang 4bao gồm các công ty công nghệ như IBM, DEC, HP Mach 2.5 cũng là cơ sở cho hệ điềuhành trên máy trạm NEXT, đứa con tinh thần của Steve Jobs, Apple Computer nổi tiếng.OSF đánh giá Mach 3.0 là cơ sở cho một phiên bản hệ điều hành trong tương lai,vànghiên cứu về Mach sẽ tiếp tục tại CMU, OSF và những nơi khác.
Trang 5 Hỗ trợ cho kiến trúc đa dạng, bao gồm cả bộ đa xử lý với mức độ truy cập bộ nhớchia sẻ khác nhau, bộ nhớ truy cập đồng bộ (UMA), truy cập bộ nhớ không đều(NUMA), và không có bộ truy cập từ xa (Norma).
Khả năng hoạt động với thay đổi tốc độ mạng máy tính khác nhau, từ mạng rộnglớn đến mạng cục bộ tốc độ cao và chặt chẽ cùng bộ đa xử lý
Cấu trúc hạt nhân đơn giản, với một số lượng nhỏ các khái niêm trừu tượng (lầnlượt, những khái niệm này là cách tổng quát đầy đủ cho phép hệ điều hành khácđược thực hiện trên Mach)
Phân phối hoạt động, cung cấp minh bạch cho khách hàng và tổ chức hướng đốitượng cả trong lẫn ngoài
Bộ nhớ tích hợp quản lý, và truyền thông, cung cấp thông tin liên lạc hiệu quả với
số lượng lớn dữ liệu cũng như truyền thông dựa trên quản lý bộ nhớ
Hỗ trợ hệ thống không đồng nhất, để làm cho Mạch được phổ biến rộng rãi vàtương thích giữa các hệ thống máy tính từ nhiều nhà cung cấp
Các nhà thiết kế Mach đã chịu nhiều ảnh hưởng lớn bởi BSD (UNIX nói chung),những lợi ích bao gồm:
Một giao diện lập trình đơn giản, với tập tốt các bản gốc và thống nhất tập hợp cácgiao diện tiện ích của hệ thống
Dễ dàng di động cho một lớp rộng của bộ xử lý đơn
Một thư viện rộng lớn của các tiện ích và ứng dụng
Khả năng kết hợp các tiện ích một cách dễ dàng thông qua đường dẫn
Tất nhiên, các nhà thiết kế cũng muốn khắc phục những hạn chế của BSD mà họ đãthấy:
Trang 6 Một hạt nhân đã trở thành kho chứa của nhiều tính năng dư thừa, vì vậy kết qủa làkhó khăn để quản lý và điều chỉnh.
Các mục tiêu thiết kế ban đầu làm cho nó khó khăn để cung cấp hỗ trợ cho bộ đa
xử lý, phân phối hệ thống và chia sẻ thư viện chương trình (chẳng hạn như: vì hạtnhân được thiết kế cho bộ đa xử lý đơn, nó không có quy định dành cho mã khóahoặc dữ liệu bộ vi xử lý khác có thể được sử dụng.)
Khái niệm trừu tượng cơ bản quá nhiều, cung cấp tương tự quá nhiều, cạnh tranhphương tiện thực hiện nhiệm vụ tương tự
Sự phát triển của Mach là một công việc khổng lồ Những lợi ích trong hệ thốngnày có giá trị lớn như nhau Tuy nhiên, hệ điều hành chạy trên nhiều bộ đa xử lý kiếntrúc, và nó có thể dễ dàng được chuyển đến những cái trong tương lai Nó làm cho nghiêncứu dễ dàng hơn, bởi vì các nhà khoa học máy tính có thể thêm các tính năng thông quacấp mã sử dụng, thay vì phải viết hệ điều hành thích hợp riêng của chúng Vùng thửnghiệm bao gồm hệ điều hành cơ sở dữ liệu, hệ thống phân phối đáng tin cậy, ngôn ngữ
bộ đa xử lý, bảo mật, và phân phối trí tuệ nhân tạo Trong phiên bản hiện tại của nó, hệthống Mach thường là hiệu quả như các phiên bản khác trong UNIX khi thực hiện
VẤN ĐỀ 3: SYSTEM COMPONENTS (THÀNH PHẦN HỆ THỐNG MACH)
Để đạt được các mục tiêu thiết kế của Mach, các nhà phát triển làm giảm chức năng
hệ điều hành thành tập hợp nhỏ các khái niệm các khái niệm trừu tượng cơ bản, trong sốtất cả các chức năng khác có thể được bắt nguồn Cách tiếp cận Mach là đặt càng ít càngtốt trong hạt nhân, nhưng để làm những gì là đủ mạnh để tất cả các tính năng này có thểđược thực hiện ở cấp độ người dùng
Trang 7Triết lý thiết kế của Mach là phải có một hạt nhân đơn giản, dễ mở rộng, tập trungvào các cơ sở truyền thông Ví dụ như, tất cả các yêu cầu đến hạt nhân, và tất cả sựchuyển đổi dự liệu giữa các quá trình xử lý là thông qua cơ chế giao tiếp Do đó Mach cóthể cung cấp, bảo vệ toàn bộ hệ thống người sủ dụng bằng cách bảo vệ cơ chế thông tinliên lạc Tối ưu hóa đường dẫn truyền thong này có thể dẫn đến tăng hiệu suất đáng kể,
và đơn giản hơn là cố gắng để tối ưu hóa một số đường dẫn Mach dễ mở rộng, bởi vìchức năng truyền thống dựa trên hạt nhân có thể được thực hiện như các máy chủ cấpngười dùng Ví dụ như, tất cả máy nhắn tin (bao gồm cả máy nhắn tin mặc định) có thểđược thực hiện bên ngoài và được gọi là hạt nhân cho người sủ dụng
Mach là một ví dụ về hệ thống hướng đối tượng và hoạt động các thao tác dữ liệu đóđược đóng gói vào một bản tóm tắt đối tượng Chỉ có các hoạt động của các đối tượng cóthể ảnh hưởng đến các thực thể được xác định trong nó Các chi tiết của các hoạt độngnày được thực hiện ẩn, như là cấu trúc dữ liệu nội bộ Do đó, lập trình viên có thể sửdụng một đối tượng duy nhất bằng cách gọi định nghĩa của nó, xuất ra thao tác Một lậptrình viên có thể thay đổi thao tác bên trong mà không thay đổi định nghĩa giao diện, do
đó, thay đổi và tối ưu hóa không ảnh hưởng đến các khía cạnh khác của hoạt động hệđiều hành Các phương pháp tiếp cận hướng đối tượng được hỗ trợ bởi Mach cho phépđối tượng cư trú bất cứ nơi nào trong mạng lưới hệ thống Mach, minh bạch cho ngườidùng
Khái niệm trừu tượng của Mach là trung tâm của hệ thống bao gồm:
Nhiệm vụ(tác vụ) là môi trường thực hiện cung cấp các đơn vị cơ bản của phân phối
tài nguyên Nó bao gồm khoảng không gian địa chỉ ảo và truy cập được bảo vệ tàinguyên hệ thống thông qua cổng, và nó có thể chứa một hoặc nhiều luồng
Trang 8 Luồng là đơn vị cơ bản thực hiện và phải chạy trong hoàn cảnh của một tác vụ (mà
cung cấp không gian địa chỉ) Tất cả các luồng trong vòng một phần nhiệm vụ củanhiệm vụ tài nguyên (cổng, bộ nhớ,…) Không có khái niệm về một “Quá trình” trongMach Thay vào đó, một quá trình truyền thống sẽ được thực hiện như một nhiệm vụvới một luồng điều khiển
Cổng là đối tượng tham chiếu cơ bản trong cơ chế Mach và được thực hiện như một
kênh truyền thông bảo vệ hạt nhân Giao tiếp được thực hiện bằng cách gửi tin nhắnđến các cổng, các tin nhắn được xếp hàng đợi tại cổng đích nếu không có luồng làngay lập tức sẵn sàng để nhận được chúng Cổng được bảo vệ bởi khả năng quản lýcủa hạt nhân, hoặc quyền cổng, một nhiệm vụ phải có quyền cổng để gửi một thôngđiệp (tin nhắn) đến cổng Lập trình viên gọi một hoạt động trên một đối tượng bằngcách gửi thông điệp tới cổng liên kết với đối tượng Các đối tượng được đại diện bởimột cổng nhận được các tin nhắn
Thiết lập Cổng là một nhóm các cổng chia sẻ hàng đợi tin nhắn thông thường Luồng
có thể nhận tin nhắn cho một xác lập cổng và do đó nó có phục vụ nhiều cổng Mỗi tinnhắn nhận được xác định các cổng cá nhân (trong xác lập) mà từ đó nó nhận được,người nhận có thể dùng để xác định đối tượng gọi tin nhắn
Thông báo (tin nhắn) là phương pháp cơ bản của thông tin liên lạc giữa các luồng
trong Mach Nó là một bộ sưu tập đánh máy của các đối tượng dữ liệu cho từng đốitượng, nó có thể chứa dữ liệu thực tế hoặc một con trỏ để ra-vào dòng dữ liệu Quyềncổng được chuyển trong thông báo, đi qua cổng trong thông báo là cách duy nhất để dichuyển chúng giữa các nhiệm vụ (đi qua quyền cổng trong bộ nhớ chung thì khônglàm việc, bởi vì hạt nhân Mach sẽ không cho phép các nhiệm vụ mới sử dụng quyềnđạt được theo cách này)
Bộ nhớ đối tượng là nguồn gốc của bộ nhớ, nhiệm vụ có thể truy cập nó bằng cách
lập bản đồ một phần của đối tượng (hoặc toàn bộ đối tượng) vào không gian địa chỉ
Trang 9của chúng Các đối tượng có thể được quản lý bởi một người quản lý chế độ người
sử dụng bộ nhớ bên ngoài Ví dụ là một tập tin được quản lý bởi một tập tin máy chủ,tuy nhiên, bộ nhớ đối tượng có thể là một đối tượng bất kì truy cập đến bộ nhớ-ánh
xạ có ý nghĩa Một bộ đệm ánh xạ thực hiện một đường dẫn UNIX là một ví dụ Hình
1.2 minh họa các khái niệm trừu tượng này
Một tính năng khác của Mach, và là chìa khóa để hệ thống hiệu quả, là sự phối hợpcác bộ nhớ và các tính năng truyền thông liên quá trình (IPC) Trong khi đó, một số
hệ thống phân phối khác (ví dụ như Solaris, với các tính năng NFS) có mục đíchriêng là mở rộng hệ thống tập tin trên một mạng Mach, có mục đích chung là cungcấp, sáp nhập mở rộng bộ nhớ và thông báo tại trung tâm hạt nhân của nó Tính năngnày không chỉ cho phép Mach sử dụng cho phân phối và lập trình song song mà còngiúp trong thực hiện là hạt nhân của chính bản thân nó
Mach kết nối quản lý bộ nhớ và truyền thông IPC bằng cách cho phép mỗi ngườiđược sử dụng trong việc thực hiện của người khác Quản lý bộ nhớ dựa trên việc sửdụng các bộ nhớ đối tượng Mỗi bộ nhớ đối tượng được đại diện bởi một cổng (hoặcnhiều cổng) và IPC tin nhắn được gửi đến cổng này để yêu cầu hoạt động (ví dụ:pagein, pageout) trên đối tượng Bởi vì IPC được sử dụng, bộ nhớ đối tượng có thểlưu trên hệ thống từ xa và được truy cập rõ ràng Hạt nhân lưu trữ các nội dung của
bộ nhớ đối tượng trong bộ nhớ cục bộ (địa phương).Ngược lại, kĩ thuật quản lý bộnhớ được sử dụng trong việc thực hiện đi qua tin nhắn Nếu có thể, Mach chuyển tinnhắn bằng cách di chuyển con trỏ vào bộ nhớ đối tượng chung, chứ không phải bằngcách sao chép các đối tượng tương tự
Trang 10Hình 1.2: Các khái niệm trừu tượng cơ bản của Mach
IPC có xu hướng liên quan đến chi phí hệ thống lớn, trong hệ thống nội bộ tin nhắn.Bởi vì Mach là hạt nhân dựa trên tin nhắn, xử lý tin nhắn phải được thực hiện có hiệuquả Hầu hết việc xử lý tin nhắn trong hệ điều hành truyền thống kem hiệu quả là do hoặcsao chép các tin nhắn từ một nhiệm vụ này đến nhiệm vụ khác (cho tin nhắn mạng nộibộ) hoặc mạng tốc độ truyền thấp Để giải quyết những vấn đề này, Mach sử dụng bộ nhớ
ảo để chuyển các nội dung của tin nhắn lớn Nói cách khác, việc chuyển giao thông báothay đổi nhiệm vụ của không gian địa chỉ bao gồm một bản sao của nội dung tin nhắn.Bản sao ảo, kĩ thuật được dùng để tránh hoặc trì hoãn việc sao chép thực tế của dữ liệu.Biện pháp này có một số ưu điểm sau:
Trang 11 Tăng cường sự linh hoạt trong quản lý bộ nhớ cho các chương trình người sửdụng.
Cho phép các phương pháp tiếp cận sao chép ảo được sử dụng chặt chẽ và lỏngtrong máy tính
Cải thiện hiệu suất qua thông báo UNIX
Dễ dàng chuyển nhiệm vụ hơn; bởi vì cổng là vị trí độc lập, một công việc vàtất cả các cổng của nó có thể được di chuyển từ máy này sang máy khác, tất cảnhiệm vụ mà trước đây giao tiếp với nhiệm vụ dời có thể tiếp tục làm như vậy
vì chúng tham khảo một nhiệm vụ bởi cổng cảu nó và giao tiếp thông qua tinnhắn đến các cổng này
VẤN ĐỀ 4: PROCESS MANAGEMENT (QUÁ TRÌNH QUẢN
LÝ CỦA HỆ THỐNG)
Một nhiệm vụ có thể được xem là quy trình truyền thống không có con trỏ lệnh hoặc
bộ thanh ghi Nhiệm vụ chứa dấu cách địa chỉ ảo, tập hợp các quyền cổng, và thông tin
kế toán Một nhiệm vụ là thực thể thụ động (chẳng làm gì) trừ phi nó có một hoặc nhiềuluồng thực hiện nó
I CẤU TRÚC CƠ BẢN
- Một nhiệm vụ có chứa một luồng tương tự như một quá trình UNIX Cũng nhưcuộc gọi hệ thống rẽ nhánh tạo ra quy trình UNIX mới, Mach tạo ra nhiệm vụ mới để môphỏng hành vi này Bộ nhớ của nhiệm vụ mới là lặp lại khoảng không gian địa chỉ củamáy chủ, khi đọc bằng thuộc tính kế thừa của bộ nhớ máy chủ Nhiệm vụ mới chứa mộtluồng, được bắt đầu ở cùng một điểm khi gọi rẽ nhánh tạo ra trong máy chủ Luồng vànhiệm vụ cũng có thể được tạm hoãn và làm tiếp
Trang 12- Luồng đặc biệt hữu ích trong ứng dụng máy chủ, phổ biến nhiều ở UNIX, vì mộtnhiệm vụ có thể có nhiều luồng để phục vụ nhiều yêu cầu Luồng cũng cho phép sử dụnghiệu quả tài nguyên điện toán song song
- Thay vì có một quy trình trên mỗi bộ vi xử lý, với hình thức hiệu năng tương ứng
và trên đầu hệ điều hành, nhiệm vụ có thể cho luồng của nó phát tán giữa bộ xử lý songsong Luồng thêm hiệu suất cho người dùng cấp chương trình là rất tốt Chẳng hạn như,trong UNIX, toàn bộ quy trình phải chờ khi lỗi trang xảy ra hoặc khi cuộc gọi hệ thốngđược thực hiện Trong một nhiệm vụ với nhiều luồng, luồng chỉ gây ra lỗi trang hoặccuộc gọi hệ thống bị trì hoãn; tất cả các luồng khác vẫn tiếp tục được thực hiện Vì Mach
có hạt nhân hỗ trợ luồng và luồng có vài chi phí liên quan đến chúng Chúng đã hỗ trợcấu trúc dữ liệu trong phần lõi, và phức tạp hơn phần lõi - lịch trình các thuật toán phảiđược cung cấp Ở cấp độ người dùng, luồng có thể thuộc một trong hai trạng thái:
Hoạt động : luồng bao gồm cả việc thực hiện lẫn chờ để được phân bố bộ xử lý.
Luồng được xem là hoạt động mặc dù là nó bị chặn trong phần lõi ( ví dụ: chờ lỗitrang)
Trì hoãn : luồng không thực hiện trên bộ xử lý cũng không chờ để được phân bổ
bộ xử lý Luồng có thể khôi phục chỉ khi nó được gửi về trạng thái hoạt động Hai trạng thái này đều được liên kết với một nhiệm vụ Một hoạt động trong mộtnhiệm vụ ảnh hưởng đến tất cả luồng trong nhiệm vụ, do đó trì hoãn nhiệm vụ liênquan đến việc tạm hoãn tất cả các luồng trong đó Tạm hoãn nhiệm vụ và luồng nhíp
là riêng biệt, cơ chế độc lập, tuy nhiên, để khôi phục một luồng trong nhiệm vụ tạmhoãn không làm tiếp nhiệm vụ, Mach cung cấp sơ khai mà từ đó luồng - công cụ đồng
bộ hóa có thể được xây dựng Cách thực hiện này phù hợp với triết lý của Mach vềcung cấp chức năng tối thiểu trong phần lõi Các cơ sở Mach IPC có thể được dùng đểđồng bộ hoá, với quy trình trao đổi thông điệp tại mọi điểm (cuộc hẹn)
Trang 13Luồng - sự đồng bộ hoá được cung cấp bởi các cuộc gọi để bắt đầu và ngăn chặnluồng ở những thời điểm thích hợp Một số trì hoãn được lưu giữ đối với mỗi luồng Sốlượng này cho phép tạm hoãn nhiều cuộc gọi được thực hiện trên luồng, và chỉ khi sốlượng tương đương giữa các cuộc gọi bằng nhau xảy ra thì luồng thực hiện tiếp Thậtđáng tiếc, tính năng này có hạn chế riêng Vì nó là lỗi cho một cuộc gọi bắt đầu sẽ đượcthực hiện trước khi chấm dứt cuộc gọi (số đếm tạm hoãn sẽ trở thành tiêu cực), nhữngthói quen này không thể được dùng để đồng bộ hóa truy cập dữ liệu chia sẻ
1 Luồng Gói
Mach cung cấp các thói quen ở mức độ thấp nhưng linh hoạt hơn thay vì đánh bóng,
số lượng lớn, và chức năng hạn chế hơn Thay vì lập trình viên làm việc ở mức độ thấpnày, Mach cung cấp nhiều giao diện ở mức cao hơn cho lập trình C và các ngôn ngữkhác Chẳng hạn như, luồng gói C cung cấp đa luồng điều khiển, các biến chia sẻ, loại trừlẫn nhau cho phần quan trọng, và biến điều kiện cho đồng bộ hoá Trong thực tế, luồng C
là một trong những ảnh hưởng lớn trên chuẩn POSIX luồng P nhiều hệ điều hành đangđược sửa đổi để hỗ trợ Kết quả là có nhiều điểm giống nhau lớn giữa luồng C và luồng Ptrong giao diện lập trình Luồng - thường điều khiển bao gồm gọi để thực hiện nhiệm vụnày :
Tạo ra luồng mới trong nhiệm vụ, cho chức năng để thực hiện và tham biến đầuvào Luồng sau đó thực hiện đồng thời với việc tạo ra luồng, mà nhận được mộtđịnh dạng cột khi trở về cuộc gọi
Phá hủy các luồng gọi, và trả về một giá trị cho các luồng tạo ra
Chờ cho một luồng cụ thể chấm dứt trước khi cho phép luồng gọi tiếp tục Cuộcgọi là công cụ đồng bộ hóa, giống như chờ đợi hệ thống UNIX các cuộc gọi
Năng suất sử dụng bộ xử lý, báo hiệu người lập chương trình có thể chạy luồngkhác vào lúc này Cuộc gọi này cũng hữu ích với sự có mặt của người lập chương
Trang 14trình ưu tiên, khi nó có thể được dùng để chuyển nhượng CPU tự nguyện trước khilượng tử thời gian (hoặc khoảng cách lịch biểu) hết hạn nếu luồng không cần CPU.Loại trừ lẫn nhau đạt được khi qua sử dụng spinlocks Các thói quen liên quan đếnloại trừ lẫn nhau này là :
Mutex_ alloc thường xuyên tự động tạo ra biến mutex
Mutex _free thường xuyên miễn phí deallocates mutex tạo ra động biến
Mutex_lock thường xuyên khóa biến mutex Vòng lặp luồng thực hiện trong
spinlock cho đến khi đạt được khóa Kết quả thất bại nếu luồng với khóa mutexcùng biến Giới hạn chờ không được đảm bảo bằng luồng gói C Đúng hơn là nóphụ thuộc vào lệnh phần cứng được dùng để thực hiện các thói quen mutex
Mutex_unlock thường trình mở khoá biến mutex, giống thao tác tín hiệu điển hình
Các thói quen liên quan đến đồng bộ hoá tổng quát này là :
Condition_alloc điều kiện thường xuyên tự động phân bố một biến điều kiện
Condition_free thường xuyên xóa một điều kiện tự động tạo ra một biến được
phân bổ theo kết quả của alloc điều kiện
Condition_wait điều kiện thường xuyên mở khoá biến mutex kết hợp và ngăn
chặn luồng cho đến tín hiệu điều kiện được thực hiện trên điều kiện biến, chỉ rarằng sự kiện đang chờ có thể đã xảy ra Mutex biến sau đó được khóa, và luồngtiếp tục Tín hiệu điều kiện không bảo đảm rằng điều kiện vẫn lưu giữ khi luồng bỏ
Trang 15chặn cuối cùng gửi trả từ điều kiện của nó chờ đợi gọi, cho nên luồng đánh thứcvòng lặp, thực hiện các thói quen chờ đợi điều kiện cho đến khi nó được bỏ chặn
và điều kiện được nắm giữ
Như một ví dụ về các luồng C, xem xét giới hạn - vùng đệm đồng bộ hoá vấn đề.Nhà sản xuất và người tiêu dùng đại diện luồng truy cập chung giới hạn - vùng lưu trữtạm thời Chúng ta sử dụng mutex biến để bảo vệ vùng đệm khi nó được cập nhật Mộtkhi chúng tôi có quyền truy cập vào vùng đệm, chúng tôi sử dụng biến điều kiện để ngănchặn việc sản xuất luồng nếu vùng đệm đầy và để ngăn chặn luồng của người tiêu dùngnếu vùng đệm trống rỗng Mặc dù chương trình này thường được viết trong ngôn ngữ Ctrên Mach hệ thống, chúng tôi sẽ sử dụng cú pháp Pascal-like quen thuộc của chươngtrước đây cho độ rõ nét Như trong Chương 6, chúng tôi giả định rằng vùng đệm bao gồm
n khe, mỗi cái có khả năng giữ một mục Các cột tín hiệu mutex cung cấp loại trừ lẫn
nhau cho truy cập vào vùng lưu trữ tạm thời và khởi tạo đến giá trị 1 Cột tín hiệu đầy đủ
và đếm số lượng bộ đếm trống và đầy đủ của vùng đệm tương ứng Cột tín hiệu rỗng làkhởi tạo đến n giá trị ; cột tín hiệu đầy đủ là khởi tạo đến giá trị 0 Biến điều kiện làkhông rỗng khi vùng đệm có mục trong nó, và không đầy đủ nếu vùng đệm có khe cắmrỗng
Bước đầu tiên bao gồm việc phân bổ mutex và điều kiện biến :
mutex_alloc ( mutex ) ; codition_alloc ( không rỗng, nonfull );
Mã cho luồng sản xuất là được chỉ ra ở hình 1.3 ; mã cho luồng người tiêu dùng vàđược chỉ ra ở hình 1.4 Khi chương trình kết thúc, mutex và biến điều kiện cần được huỷphân bổ :
mutex_free ( mutex ) ; condition_free ( nonempty, nonfull );
Trang 16Người lập chương trình CPU
Người lập chương trình CPU cho luồng - dựa vào bộ đa xử lý hệ điều hành phức tạphơn là quy trình của nó - dựa vào họ hàng Có luồng nói chung:
tín hiệu điều kiện ( không rỗng );
mutex mở khoá ( mutex );
}while ( TRUE);
Hình 1.3: Cấu trúc quy trình của nhà sản xuất
trong hệ thống multithreaded hơn có quy trình trong hệ thống đa tác vụ Theo dõi nhiều
bộ xử lý cũng khó khăn và là tương đối mới với phạm vi nghiên cứu Mach sử dụngchính sách đơn giản để người lập chương trình dễ quản lý Chỉ luồng được xếp lịch, nênkhông có kiến thức về nhiệm vụ được cần đến trong người lập chương trình Tất cả luồngcạnh tranh chia đều cho tài nguyên, bao gồm cả phần thời gian Mỗi luồng có ưu tiên kết
Trang 17hợp miền số từ 0 đến 127, được dựa trên mức trung bình theo cấp số mũ của nó sử dụngCPU Vậy là, luồng mới sử dụng CPU cho một số lượng lớn thời gian có mức ưu tiênthấp nhất Mach dùng ưu tiên để đặt luồng trong 32 hàng đợi hoạt động toàn cầu Nhữnghàng đợi này được tìm kiếm theo thứ tự ưu tiên cho luồng chờ đợi khi bộ xử lý rỗng.Mach cũng tiếp tục cho mỗi bộ xử lý, hoặc cục bộ, hàng đợi hoạt động Hàng đợi cục bộhoạt động được dùng để luồng ràng buộc với bộ xử lý cá nhân Chẳng hạn như, trình điềukhiển thiết bị cho một thiết bị kết nối với CPU cá nhân, phải hoạt động trên địa chỉ CPU
Thay vì bộ điều phối trung tâm gán luồng đến bộ xử lý, mỗi bộ xử lý thảo luận cục
bộ và toàn cầu hàng đợi hoạt động chọn luồng thích hợp để chạy Luồng trong hàng đợichạy cục bộ có ưu tiên tuyệt đối trên những hàng đợi toàn cầu, vì nó được cho rằng chúngđang thực hiện một số việc thường ngày cho phần lõi Hàng đợi chạy - như hầu hết mọiđối tượng khác trong Mach - bị khoá khi chúng được sửa đổi để tránh thay đổi đồng thờibởi nhiều bộ vi xử lý Khó khăn lập kế hoạch bổ sung phát sinh từ bộ đa xử lý bản chấtcủa Mach
tín hiệu điều kiện ( nonfull );
mutex mở khoá ( mutex );
Trang 18
/ / tiêu thụ khoản mục trong nextc
} while ( TRUE);
Hình 1.4 Cấu trúc của quy trình người tiêu dùng
Lượng tử thời gian cố định không phải là thích hợp vì, chẳng hạn như, có thể có ít luồngrunnable hơn là có bộ xử lý sẵn có Sẽ hay lãng phí khi ngắt luồng với ngữ cảnh chuyểnsang phần lõi khi lượng tử của luồng cạn kiệt, chỉ để có luồng được đặt vào đúng quay lạitrạng thái chạy Do đó, thay vì sử dụng lượng tử có chiều dài cố định, Mach thay đổi kíchthước của lượng tử thời gian ngược lại với tổng số luồng trong hệ thống Nó giữ lượng tửthời gian trên toàn bộ hằng số hệ thống, tuy nhiên Chẳng hạn như, trong hệ thống với 10
bộ xử lý, 11 luồng, và 100 phần nghìn giây lượng tử, công - tắc ngữ cảnh cần xảy ra trênmỗi bộ xử lý một lần mà thôi mỗi giây để duy trì lượng tử mong đợi Tất nhiên, sự phứctạp vẫn tồn tại Thậm chí chuyển nhượng CPU trong khi chờ nguồn lực khó còn hơn cả
nó trên hệ điều hành truyền thống Trước tiên, luồng phải cấp phát gọi để cảnh báo ngườilập chương trình luồng sắp sửa ngăn chặn Cảnh báo này tránh tình trạng tranh đua và sự
bế tắc, có thể xảy ra khi thực hiện xảy ra trong môi trường bộ đa xử lý Một giây gọi thực
sự đã làm cho luồng được đi hàng đợi chạy cho đến sự kiện thích hợp xảy ra Người lậpchương trình dùng nhiều trạng thái luồng bên trong khác để điều khiển thi hành luồng
2 Xử lý ngoại lệ
Mach được thiết kế để cung cấp một cách duy nhất, đơn giản, ngoại lệ nhất quán
-xử lý hệ thống, với sự hỗ trợ cho các tiêu chuẩn ngoại lệ do người dùng định nghĩa Đểtránh dư thừa trong phần lõi, Mach sử dụng hạt nhân nguyên thuỷ bất cứ khi nào có thể
Trang 19Chẳng hạn như, một xử lý ngoại lệ chỉ là luồng mà trong trong đó các trường hợp ngoại
lệ xảy ra Cuộc gọi thủ tục từ xa (RPC) được thông báo sử dụng để đồng bộ hoá thực hiệncác luồng gây ra trường hợp ngoại lệ Và xử lý để giao tiếp thông tin về các trường hợpngoại lệ giữa đối tượng và người điều khiển Trường hợp ngoại lệ cũng được sử dụng để
mô phỏng gói tín hiệu BSD
Sự gián đoạn để thực hiện chương trình bình thường có hai loại: trường hợp ngoại lệbên trong được tạo ra và ngắt ngoài Ngắt không đồng bộ được tạo ra sự gián đoạn củaluồng hoặc tác vụ, trong khi đó các trường hợp ngoại lệ gây ra do sự xuất hiện của điềukiện bất thường trong quá trình thực hiện luồng Thiết bị ngoại lệ generalpurpose củaMach được dùng để phát hiện ra lỗi và hỗ trợ trình gỡ rối
Thiết bị này cũng hữu ích cho các chức năng khác, như là lấy vùng lõi của tác vụhỏng, cho phép tác vụ xử lý lỗi riêng của chúng (phần lớn số học), và mô phỏng lệnhkhông triển khai trong phần cứng
Mach hỗ trợ hai hạt nhân khác nhau của xử lý ngoại lệ Xử lý lỗi được hỗ trợ bởiluồng xử lý ngoại lệ, trong khi trình gỡ lỗi sử dụng cho mỗi xử lý tác vụ Nó khắc phụclỗi của luồng hoặc để có ngoại lệ từ nhiều luồng gọi gỡ lỗi nhiều Ngoài phân biệt này, sựkhác biệt duy nhất giữa hai loại ngoại lệ nằm trong sự kế thừa từ tác vụ máy chủ Tác vụngoại lệ xử lý các tiện ích được chuyển từ máy chủ đến tác vụ của các máy con, cho nêntrình gỡ lỗi có khả năng thao tác toàn bộ cây của tác vụ Xử lý lỗi không được kế thừa vàmặc định không xử lý tại luồng và thời gian tạo ra các tác vụ Cuối cùng, xử lý lỗi được
ưu tiên hơn trình gỡ lỗi nếu ngoại lệ xảy ra cùng một lúc Lý do cho biện pháp này là xử
lý lỗi thường là bộ phận của tác vụ và do đó phải thực hiện bình thường ngay cả với sự cómặt của trình gỡ lỗi
Xử lý ngoại lệ thu được như sau :
Trang 20 Luồng đối tượng gây ra thông báo về sự xuất hiện của một ngoại lệ thông quathông báo RPC được gửi để xử lí
Đối tượng sau đó gọi thường trình để đợi cho đến khi ngoại lệ xử lý
Xử lý được thông báo về ngoại lệ, thường bao gồm thông tin về ngoại lệ, luồng, vàtác vụ gây ra ngoại lệ
Xử lý thực hiện chức năng theo kiểu của ngoại lệ Xử lý hành động liên quan tớiviệc xoá các trường hợp ngoại lệ, đã làm cho đối tượng tiếp tục, hoặc chấm dứtluồng đối tượng
Để hỗ trợ thi hành của chương trình BSD, Mach cần hỗ trợ tín hiệu BSDstyle Tín hiệucung cấp phần mềm tạo ngắt và các trường hợp ngoại lệ Thật đáng tiếc, tín hiệu có chứcnăng hạn chế trong multithreaded hệ điều hành Vấn đề đầu tiên là, trong UNIX, xử lý tínhiệu phải là thường trình trong quá trình nhận tín hiệu Nếu tín hiệu được gây ra bởi mộtvấn đề trong quá trình của nó (ví dụ như, chia cho 0), vấn đề không thể được khắc phục,
vì quy trình đã giới hạn truy cập vào ngữ cảnh riêng của nó Thứ hai là những rắc rối củatín hiệu được dành riêng cho chương trình singlethreaded Ví dụ như, nó làm cho cácluồng vô nghĩa trong nhiệm vụ để nhận được tín hiệu, nhưng làm thế nào một tín hiệu cóthể được nhìn thấy chỉ bằng một luồng?
Vì hệ thống tín hiệu phải làm việc chính xác với ứng dụng đa luồng cho Mach đểchạy chương trình BSD 4.3, tín hiệu không thể bị huỷ bỏ Tạo ra gói tín hiệu chính xáctheo chức năng ghi lại vài lần mã Tuy nhiên, vấn đề cuối cùng với tín hiệu UNIX làchúng có thể bị mất Mất mát này xảy ra khi tín hiệu khác cùng kiểu xảy ra trước khi xử
lý Trường hợp ngoại lệ của Mach được xếp hàng đợi như là một kết quả do RPC thựchiện
Tín hiệu phát sinh bên ngoài, bao gồm người gửi từ một quy trình BSD này sang
Trang 21một quy trình BSD khác, được xử lí bằng phần máy chủ BSD của phần lõi Mach 2.5 Do
đó hành động của chúng giống như là thuộc BSD Trường hợp ngoại lệ phần cứng là vấn
đề khác nhau, vì chương trình BSD sẽ nhận được trường hợp ngoại lệ phần cứng như mộttín hiệu Do đó, ngoại lệ phần cứng gây ra bởi luồng phải đến các luồng như một tín hiệu
Vì vậy kết quả này được tạo ra, ngoại lệ phần cứng được chuyển thành RPCs ngoại lệ.Đối với nhiệm vụ và luồng không cho phép sử dụng các thiết bị ngoại lệ xử lý Mach,điểm đến này mặc định RPC – tác vụ trong phần lõi Nhiệm vụ này chỉ có một mục đích :luồng của nó sẽ chạy trong một vòng lặp liên tục, nhận được các RPCs ngoại lệ Đối vớimỗi RPC, nó biến ngoại lệ thành các tín hiệu thích hợp, mà được gửi đến luồng gây rangoại lệ phần cứng Sau đó, nó hoàn chỉnh RPC, giải phóng điều kiện ngoại lệ ban đầu.Với việc hoàn thành RPC, luồng khởi xướng nhập lại trạng thái hoạt động Ngay lập tức
nó xem tín hiệu và thực hiện mã xử lý tín hiệu của nó Theo cách này, tất cả các ngoại lệphần cứng bắt đầu ở cách giống như trường hợp ngoại lệ đồng nhất RPCs Luồng khôngđược thiết kế để xử lý ngoại lệ như vậy, tuy nhiên, nhận được trường hợp ngoại lệ nhưchúng sẽ trên một hệ thống BSD chuẩn tín hiệu Mach 3.0, tín hiệu xử lý mã là di chuyểntoàn bộ vào máy chủ, nhưng tổng thể cấu trúc và luồng của điều khiển tương tự Mach2.5
VẤN ĐỀ 5: INTERPROCESS COMMUNICATION (LIÊN TIẾN TRÌNH GIAO TIẾP BÊN TRONG HỆ THỐNG)
Hầu hết các hệ điều hành thương mại, như là UNIX, cung cấp giao tiếp giữa quytrình và giữa máy chủ cố định, tên toàn cầu ( hoặc địa chỉ Internet ) Không có độc