Một số kiểu cấu trúc hệ điều hành 30

Một phần của tài liệu Giáo trình Hệ điều hành (Trang 30 - 34)

CHƯƠNG 1 : GIỚI THIỆU CHUNG

1.7. CẤU TRÚC HỆ ĐIỀU HÀNH 24

1.7.3. Một số kiểu cấu trúc hệ điều hành 30

Các thành phần đã nêu ở phần trên cần được tổ chức, kết hợp với nhau theo một cách

nào đó để tạo ra một hệ thống thống nhất là hệ điều hành. Trong phần này, ta sẽ xem xét một số kiểu cấu trúc hệ điều hành thường được sử dụng.

1.7.3.1. Cấu trúc nguyên khối

Cấu trúc nguyên khối (monolithic), hay cấu trúc đơn giản, là cấu trúc trong đó tồn bộ

các chương trình và dữ liệu của hệ điều hành có chung một khơng gian nhớ và do vậy có thể coi như một khối duy nhất. Hệ điều hành lúc đó trở thành một chương trình lớn, là tập hợp

các thủ tục hay các chương trình con. Mỗi chương trình con có thể tự do gọi chương trình con khác khi cần thiết.

Cách tổ chức hệ điều hành như vậy cho ta hình ảnh tương tự với chương trình được viết theo kiểu lập trình cấu trúc, trong đó tồn bộ chương trình tạo thành từ các chương trình con, ví dụ chương trình viết trên ngơn ngữ C hay Pascal. Các chương trình con được dịch, sau đó liên kết thành một chương trình lớn. Việc che dấu thơng tin hồn tồn khơng có, tức là bất cứ chương trình con nào cũng có thể gọi chương trình con khác hoặc truy cập vào các dữ liệu chung của chương trình.

{ . . printf(“Hello world.\n”); . . }

Thư viện C/C++ chuẩn Chế độ

người dùng

Chế độ nhân

Giao diện lời gọi hệ thống

Thực hiện lời gọi hệ thống Write() Write() trình ứng dụng trình ứng dụng Hệ điều hành Chế độ người dùng Chế độ đặc quyền

Khi chương trình ứng dụng cần dùng tới các dịch vụ của hệ điều hành, chương trình ứng dụng sẽ sử dụng lời gọi hệ thống do hệ điều hành cung cấp. Lời gọi hệ thống được chuyển cho chương trình con tương ứng của hệ điều hành thực hiện. Chương trình con này sẽ gọi

thêm các chương trình con khác để thực hiện nhiệm vụ nếu cần thiết.

Ưu điểm lớn nhất của cấu trúc nguyên khối là tốc độ thực hiện cao. Do có chung khơng

gian địa chỉ, việc truy cập dữ liệu hoặc gọi chương trình con cần thiết được thực hiện nhanh

chóng, khơng phải chịu những phí tổn về thời gian và bộ nhớ (ngăn xếp) như khi chuyển đổi giữa những mơ đun có khơng gian nhớ khác nhau (giữa các chương trình khác nhau).

Nhược điểm của cách tổ chức này là thiếu tính mềm dẻo và khó làm cho hệ thống có độ tin cậy cao. Do tồn bộ nhân là một chương trình lớn nên việc thay đổi bất cứ thành phần nào cũng ảnh hưởng tới toàn bộ nhân. Điều này làm cho hệ thống khơng mềm dẻo, khó thay đổi. Ngồi ra, do toàn bộ hệ điều hành là một khối, mỗi chương trình con trong khối lại có thể truy cập tới dữ liệu và chương trình con khác, việc xuất hiện lỗi sẽ làm cho cả hệ thống tê liệt. Việc liên kết các thành phần thành một khối lớn cịn khiến cho nhân ln có kích thước lớn. Kể cả các thành phần không cần đến cũng được tải vào bộ nhớ cùng với các thành phần khác.

Để khắc phục các nhược điểm nói trên, trong một số hệ điều hành cấu trúc khối, người

ta tổ chức các mơ đun có thể tải từ đĩa và gắn vào nhân khi cần thiết. Trong trường hợp không dùng tới có thể xố các mơ đun khỏi nhân. Tuy là các mô đun riêng nhưng khi đã được tải vào bộ nhớ, các mô đun này nhập vào với nhân thành một khối có cùng khơng gian địa chỉ. Điều này đảm bảo cho hệ điều hành giữ được cấu trúc nguyên khối mà vẫn khơng có các thành

phần thừa. Một ví dụ cho cách tổ chức kiểu này là hệ điều hành Linux.

Cấu trúc của Linux được thể hiện trên hình 1.15. Nhân của Linux có thể mở rộng nhờ

các mô đun. Các mô đun này được tải vào bộ nhớ khi cần và khỏi bộ nhớ khi không cần nữa. Chẳng hạn khi ta sử dụng đĩa CD-ROM, mô đun chịu trách nhiệm điều khiển vào ra với đĩa sẽ

được tải vào bộ nhớ. Q trình này khơng địi hỏi khởi động lại máy để có thể sử dụng thiết bị

mới thêm vào. Các mô đun được tải vào trong hai trường hợp: khi người dùng sử dụng các

lệnh insmod và rmmod hoặc khi nhân cần các mơ đun và tự tải vào cho mình. Sau khi được

tải vào bộ nhớ, chương trình và dữ liệu của mơ đun tải vào có cùng khơng gian nhớ với nhân. Các hàm chứa trong mô đun sẽ được các hàm khác của nhân “nhìn thấy” và gọi nếu cần. Nói cách khác mơ đun và các thành phần khác của nhân tạo thành một “khối” nhân mới lớn hơn.

các trình ứng dụng các trình tiện ích các trình quản lý hệ thống

các mơ đun tải được

nhân

thư viện hệ thống

Cách tổ chức này cho phép tận dụng ưu thế về tốc độ của cấu trúc khối đồng thời đảm bảo

cho nhân không chứa các phần thừa.

1.7.3.2. Cấu trúc phân lớp

Để việc xây dựng một hệ thống phần mềm lớn và phức tạp như hệ điều hành được đơn

giản hơn, nguyên tắc thường được sử dụng là nguyên tắc mơ đun hóa, theo đó tồn hệ thống

được phân thành các mơ đun sao cho từng mơ đun có thể được phát triển, thay đổi, kiểm tra

lỗi tương đối độc lập với các mô đun khác. Một trong các kiểu cấu trúc cho phép áp dụng

nguyên tắc này là cấu trúc phân lớp.

Cấu trúc phân lớp là cấu trúc trong đó các thành phần của hệ điều hành được phân thành các lớp nằm chồng lên nhau hay tiếp xúc với nhau theo một thứ tự nhất định (hình 1.16). Lớp trên cùng (hay ngoài cùng) là lớp các chương trình ứng dụng, lớp dưới cùng (hoặc trong cùng) tương ứng với phần cứng. Việc liên lạc giữa các lớp được quy định sao cho mỗi lớp chỉ có thể liên lạc với lớp nằm kề bên trên và kề bên dưới.

Điểm đặc biệt của cấu trúc phân lớp là mỗi lớp chỉ có thể sử dụng dịch vụ do lớp nằm

ngay bên dưới cung cấp. Dịch vụ này được cung cấp qua giao diện của lớp dưới, thường là

dưới dạng các hàm mà lớp trên có thể gọi. Các chi tiết cụ thể của lớp dưới như cấu trúc dữ liệu, mã chương trình được che dấu khỏi lớp trên. Lớp trên chỉ quan tâm tới dịch vụ được

cung cấp mà không cần quan tâm đến các chi tiết này. Như vậy, ta có thể thay đổi các lớp độc lập với nhau, chỉ cần đảm bảo giữ nguyên giao diện với lớp trên. Phần lớn các lớp chạy trong chế độ nhân hay chế độ đặc quyền.

Trình ứng dụng Hệ thống file Liên lạc giữa các tiến trình

Quản lý vào/ra Quản lý bộ nhớ Quản lý tiến trình

Phần cứng

Hình 1.16. Ví dụ cấu trúc phân lớp

Một ưu điểm rõ nét của cấu trúc phân lớp là cấu trúc này cho phép thực hiện dị lỗi và hồn thiện hệ điều hành một cách tương đối dễ dàng. Việc dị lỗi và hồn thiện được thực hiện từ dưới lên trên. Trước tiên lớp dưới được kiểm tra độc lập với lớp trên. Sau khi đã chắc chắn lớp dưới khơng có lỗi, ta có thể chuyển sang kiểm tra lớp trên. Do các dịch vụ lớp dưới cung cấp cho lớp trên đã được kiểm tra, nên nếu xuất hiện lỗi, có thể tập trung tìm lỗi trong lớp

trên. Quá trình tìm lỗi được thực hiện từ dưới lên trên như vậy cho tới khi tới lớp trên cùng của hệ thống.

Tuy nhiên, khó khăn thường gặp khi thiết kế hệ điều hành có cấu trúc phân lớp là việc xác định số lớp cũng như phân chia thành phần cụ thể của mỗi lớp là không dễ dàng. Do mỗi lớp chỉ có thể gọi lớp nằm ngay bên dưới, cần xác định và phân hoạch chính xác các lớp trên cơ sở chức năng và tương tác giữa các phần của hệ điều hành. Ví dụ, khối quản lý bộ nhớ ảo của hệ điều hành thường sao chép một phần không gian nhớ ảo lên đĩa. Như vậy, chương

trình quản lý sao chép ra đĩa phải nằm ở lớp thấp hơn lớp có chứa khối quản lý bộ nhớ ảo. Có như vậy, khối quản lý bộ nhớ mới có thể sử dụng được dịch vụ sao chép này.

Một nhược điểm nữa của cấu trúc phân lớp là tốc độ tương đối thấp so với các kiểu cấu trúc khác. Mỗi khi chương trình ứng dụng yêu cầu thực hiện các thao tác (chẳng hạn vào/ra) thông qua lới gọi hệ thống. Yêu cầu này được truyền từ lớp trên xuống phần cứng thơng qua các lớp trung gian. Trong q trình truyền, mỗi lớp sẽ có các xử lý riêng của mình như thêm

địa chỉ, tạo ra lời gọi lớp dưới thích hợp v.v. Kết quả là thời gian phục vụ của hệ thống sẽ tăng

lên so với trường hợp không phân lớp.

Do các nhược điểm nêu trên, cấu trúc phân lớp hồn tồn ít được sử dụng trong thời

gian gần đây. Trong một số trường hợp, cấu trúc phân lớp cũng được sử dụng nhưng với số

lượng lớp ít, mỗi lớp đảm nhiệm nhiều chức năng hơn (như hệ điều hành OS/2). Ngoài ra, cấu trúc phân lớp thường được sử dụng kết hợp với các kiểu cấu trúc khác (xem phần cấu trúc lai bên dưới). Cách tổ chức này cho phép tận dụng một phần ưu điểm của việc phân lớp đồng

thời giảm được khó khăn trong khâu thiết kế và tổ chức tương tác giữa các lớp.

1.7.3.3. Cấu trúc vi nhân

Một kiểu cấu trúc mới hơn và khá phổ biến khác là cấu trúc vi nhân (microkernel).

các hệ điều hành có cấu trúc kiểu này, phần nhân chỉ chứa các chức năng quan trọng nhất như quản lý tiến trình, quản lý bộ nhớ, liên lạc giữa các tiến trình. Các chức năng cịn lại của hệ

điều hành được tổ chức thành các mô đun khác, mỗi mơ đun có thể là một chương trình riêng

biệt. Các mơ đun này có thể hoạt động trong chế độ đặc quyền như phần nhân hoặc như các

chương trình ứng dụng thơng thường.

Mỗi khi có yêu cầu cung cấp dịch vụ từ chương trình ứng dụng, chẳng hạn yêu cầu đọc hoặc ghi file, yêu cầu sẽ chuyển cho nhân. Nhân sẽ chuyển tiếp yêu cầu cho mô đun tương

ứng thực hiện, trong trường hợp này là mô đun quản lý hệ thống file. Như vậy, nhiệm vụ của

nhân khi đó chỉ là đảm bảo liên lạc giữa chương trình ứng dụng và mơ đun cung cấp dịch vụ. Hình 1.17 cho ta hình dung về cấu trúc vi nhân và liên lạc giữa trình ứng dụng với các mơ đun của hệ điều hành thông qua vi nhân.

Cách tổ chức này cho phép giảm tối thiểu kích thước nhân (từ đây sinh ra tên gọi vi nhân) cũng như kích thước các mơ đun. Ưu điểm chính của cách tổ chức này là việc thiết kế, cài đặt, quản lý các mô đun sẽ dễ dàng và mềm dẻo hơn so với cấu trúc khối. Các mơ đun có

thể được xây dựng riêng biệt, sau đó tải vào khi có nhu cầu. Một ưu điểm khác là do đa số các mô đun chạy trong chế độ người dùng như các chương trình ứng dụng thông thường, khi các

các mô đun này có lỗi sẽ khơng ảnh hưởng tới tồn bộ hệ điều hành. Lấy ví dụ mơ đun làm

nhiệm vụ quản lý đĩa và file. Việc xuất hiện sự cố trong mô đun này chỉ ảnh hưởng tới việc

Nhược điểm của cấu trúc vi nhân là việc chuyển đổi giữa các mơ đun địi hỏi thời gian

và tài ngun hệ thống. Các mơ đun chỉ có thể liên lạc với nhau theo những cơ chế liên lạc nhất định (thường là bằng cách chuyển thông điệp - message passing) chứ không thể trực tiếp gọi hàm và truy cập dữ liệu của mô đun khác. Cách liên lạc như vậy chậm hơn nhiều so với cách gọi hàm trực tiếp. Việc chuyển đổi giữa tiến trình khác nhau của các mơ đun cũng cần các chi phí về thời gian và tài nguyên khác (cất giữ trạng thái tiến trình của mơ đun này trước khi chuyển sang tiến trình của mơ đun khác).

1.7.3.4. Cấu trúc lai

Trên thực tế, các hệ điều hành thường được tổ chức bằng cách kết hợp các kiểu cấu trúc kể trên, thay vì hồn tồn dựa trên một kiểu cấu trúc duy nhất. Cách kết hợp như vậy được gọi là cấu trúc lai. Như đã nhắc tới ở trên, cấu trúc cơ bản của Linux là cấu trúc nguyên khối, tuy vậy nhiều chức năng được tổ chức dưới dạng các mô đun tải được, cho phép dễ dàng thêm,

bớt, bổ sung vào nhân. Như vậy, hệ thống có tốc độ nhanh của cấu trúc nguyên khối, trong

khi vẫn sử dụng được ngun tắc mơ đun hóa để tăng tính mềm dẻo. Tương tự như vậy, mặc dù Windows có cấu trúc cơ bản dưới dạng vi nhân, rất nhiều thành phần của Windows vẫn hoạt động trong chế độ nhân và có chung khơng gian nhớ để không ảnh hưởng tới tốc độ. Một cách kết hợp thường được sử dụng khác là kết hợp cấu trúc phân lớp với cấu trúc vi nhân, như trong các hệ điều hành iOS.

Một phần của tài liệu Giáo trình Hệ điều hành (Trang 30 - 34)

Tải bản đầy đủ (PDF)

(186 trang)