1.1.1 Cấu trúc phân lớp của hệ thống
Kiến trúc của một hệ thống máy tính
Hình trên mô tả một kiến trúc hệ thống điển hình hiện nay. Một hệ thống máy tính đa năng hiện đại bao gồm một/ nhiều CPUs và một số bộ điều khiển thiết bị (divice controllers) được kết nối thông qua một bus chung cung cấp quyền truy cập giữa các thành phần và bộ nhớ dùng chung (shared memory). Mỗi bộ điều khiển thiết bị phụ trách một loại thiết bị cụ thể (ví dụ: ổ đĩa, thiết bị âm thanh hoặc màn hình đồ họa).
- CPU là "bộ não" của máy tính, thực hiện các tác vụ tính toán và điều phối mọi hoạt động của hệ thống, đảm bảo rằng các chương trình chạy đúng và hiệu quả.
- Bộ điều khiển thiết bị duy trì một số bộ nhớ đệm cục bộ trong hệ thống và một tập hợp các thanh ghi mục đích đặc biệt. Bộ điều khiển thiết bị chịu trách nhiệm di chuyển dữ liệu giữa các thiết bị ngoại vi mà nó điều khiển và bộ nhớ đệm cục bộ của nó.
- CPUs và các bộ điều khiển thiết bị thực hiện đồng thời, cạnh tranh với nhau để sử dụng bộ nhớ dùng chung.
Các thành phần của một hệ thống
Hình trên mô tả các thành phần của hệ thống máy tính (theo Silberschatz năm 2002). Từ mức thấp nhất tới cao nhất, một hệ thống máy tính bao gồm: phần cứng (hardware), hệ điều hành (operating system), chương trình ứng dụng (application programs - chương trình ứng dụng hướng tới người dùng và ứng dụng hệ thống), người dùng (users).
- Phần cứng: Cung cấp các tài nguyên tính toán cơ bản (CPU, bộ nhớ, thiết bị vào ra)
- Hệ điều hành: điều khiển, và phối hợp việc sử dụng phần cứng cho những ứng dụng khác nhau của nhiều người dùng khác nhau.
- Chương trình ứng dụng: ví dụ chương trình dịch, hệ quản trị cơ sở dữ liệu (MySQL, Postgres SQL,...), game, ... Các ứng dụng này sử dụng tài nguyên của máy tính để giải quyết các yêu cầu của người sử dụng.
- Người dùng: người sử dụng hoặc máy móc, máy tính khác.
Mục tiêu của hệ điều hành
Hình trên mô tả vị trí của hệ điều hành trong hệ thống máy tính. Hệ điều hành nằm giữa phần cứng của hệ thống và các chương trình ứng dụng. Mục tiêu của hệ điều hành là cung cấp một môi trường để người sử dụng có thể thực hiện được các chương trình ứng dụng và làm cho máy tính dễ sử dụng hơn, thuận lợi hơn và hiệu quả hơn. Bằng cách:
- Thứ nhất, chuẩn hoá giao diện người dùng với các hệ thống phần cứng khác nhau.
- Thứ hai, hệ điều hành giúp sử dụng hiệu quả tài nguyên phần cứng, và khai thác tối đa hiệu suất phần cứng.
Ví dụ, giả sử có một số ứng dụng chụp ảnh được sử dụng cùng lúc trên các laptop sử dụng hệ điều hành window. Khi mở ứng dụng đó lên, các đoạn mã của ứng dụng đó sẽ phải thực hiện kết nối và mở camera vật lý trang bị trên máy tính. Khi đó, các đoạn mã không cần tương tác trực tiếp với camera vật lý mà sẽ gọi tới các API tương tác với camera vật lý được hệ điều hành cung cấp (nằm ở Virtual Machine Interface). Hệ điều hành trong trường hợp này có nhiệm vụ điều tiết, xử lý các yêu cầu sử dụng tài nguyên camera vì có thể xảy ra trường hợp có nhiều yêu cầu sử dụng camera cùng lúc. Các yêu cầu sử dụng camera sau khi được hệ điều hành xử lý sẽ được chuyển đến driver camera (nằm ở Physical Machine Interface), driver này có nhiệm vụ điều khiển camera vật lý. Phân tích một chút nhiệm vụ của hệ điều hành trong trường hợp này, hệ điều hành cung cấp công cụ duy nhất để tương tác với camera của tất cả các hãng máy tính hiện có trên thị trường (nhiệm vụ 1) giúp người dùng dễ dàng hơn trong quá trình sử dụng máy tính. Ngoài ra, trong trường hợp các ứng dụng tranh giành nhau sử dụng camera, hệ điều hành sẽ xử lý các yêu cầu sử dụng đó làm sao đảm bảo hiệu suất sử dụng phần cứng tối đa (phần cứng xử dụng tối đa dẫn đến tối ưu thời gian phải chờ đợi của người dùng).
1.1.2 Chức năng của Hệ điều hành
Giả lập một máy tính ảo
Hệ điều hành giả lập một máy tính ảo, máy tính đó ẩn giấu chi tiết phải thực của các tác vụ và giúp khai thác các chức năng của phần cứng dễ dàng hơn và hiệu quả hơn. Các lợi ích cụ thể của hệ điều hành trong vai trò giả lập một máy tính ảo như sau:
- Đơn giản các vấn đề lập trình.
- Lập trình giờ đây không cần phải thao tác trực tiếp với các dãy số nhị phân mà có thể sử dụng các ngôn ngữ bậc cao gần gũi với con người hơn.
- Mỗi tiến trình nghĩ nó sở hữu toàn bộ bộ nhớ, thời gian CPU, thiết bị,... (Giải thích thêm một chút, hệ điều hành cung cấp cho mỗi tiến trình một "ảo tưởng" rằng nó đang sở hữu toàn bộ bộ nhớ, CPU, và các thiết bị đầu vào/đầu ra. Điều này giúp các lập trình viên không cần phải quan tâm đến việc các tiến trình khác đang chạy trên hệ thống và cũng sử dụng các tài nguyên đó. Thay vì phải quản lý sự cạnh tranh giữa các tiến trình, lập trình viên chỉ cần tập trung vào nhiệm vụ của tiến trình của mình, giúp việc phát triển phần mềm trở nên dễ dàng hơn)
- Giúp giao tiếp với các thiết bị dễ dàng hơn phần cứng thuần tuý. Ví dụ về Ethernet TCP/IP Card. Đây là một thiết bị phần cứng trong máy tính, được sử dụng để kết nối máy tính với mạng Ethernet (một loại mạng cục bộ). Ethernet card xử lý việc gửi và nhận các khung dữ liệu (frames) qua mạng thông qua bộ giao thức TCP/IP. Hệ điều hành cung cấp các driver và giao thức như TCP/IP để trừu tượng hóa những chi tiết phức tạp này. Điều này giúp lập trình viên không cần phải viết mã để trực tiếp điều khiển Ethernet card mà chỉ cần sử dụng các hàm và giao thức do hệ điều hành cung cấp.
- Bằng việc thêm một máy ảo mới (bộ nhớ ảo, ram ảo,...) khi cần, chúng ta có thể mở rộng hệ thống mà không cần mua thêm phần cứng.
- Các tiến trình không làm ảnh hưởng trực tiếp đến các tiến trình khác, lỗi ở một tiến trình không làm hỏng đến toàn bộ hệ thống. Khi hệ điều hành mô phỏng một máy ảo, nó cung cấp cho mỗi tiến trình một môi trường riêng biệt, gọi là không gian địa chỉ ảo (virtual address space). Điều này có nghĩa là mỗi tiến trình hoạt động như thể nó là tiến trình duy nhất đang chạy trên hệ thống, với bộ nhớ và tài nguyên riêng của mình. Vì các tiến trình được cách ly, chúng không thể truy cập hoặc thay đổi dữ liệu của nhau. Điều này ngăn chặn các lỗi trong một tiến trình lan rộng ra và ảnh hưởng đến các tiến trình khác hoặc toàn bộ hệ thống.
- Hữu ích cho quá trình phát triển hệ điều hành. Khi sử dụng một máy ảo, nếu hệ điều hành thử nghiệm bị lỗi, thì chỉ giới máy ảo đó. Ngoài ra chúng ta có thể thử nghiệm các chương trình trong hệ điều hành khác. Ví dụ máy window cài máy ảo chạy ubuntu, chúng ta có thể thử nghiệm các chương trình trên Linux mà không cần mua thêm một máy khác.
Ví dụ, chúng ta có thể cài đặt ba máy ảo chạy ba hệ điều hành khác nhau trên một hệ thống host sử dụng Linux thông qua một lớp ảo hoá (vitualization layer): Windows NT, Windows XP, free version of Berkeley Software Distribution (BSD).
Quản lý tài nguyên của hệ thống (chức năng chính)
Tài nguyên của hệ thống (ví dụ: vi xử lý, bộ nhớ, thiết bị vào ra, file,...) được chương trình sử dụng để thực hiện các công việc xác định. Các chương trình đòi hỏi các tài nguyên hệ thống thời gian (sử dụng) và không gian (nhớ). Hệ điều hành lúc này cần phải quản lý tài nguyên để hoạt động máy tính là hiệu quả nhất
- Hệ điều hành phải phân phối các tài nguyên cho các chương trình khi cần thiết.
- Cần phải giải quyết tranh chấp khi có nhiều request cho cùng một tài nguyên.
- Quyết định thứ tự cấp phát tài nguyên cho những yêu cầu (request) từ các chương trình