Giáo trình Hệ điều hành - PGS. Từ Minh Phương (Học viện Bưu chính Viễn thông)

Giáo trình về hệ điều hành, biên soạn theo chương trình đào tạo chuẩn, hệ thống hóa kiến thức từ cơ bản đến nâng cao., phục vụ nghiên cứu và ứng dụng thực tiễn

Chuyên ngành

Hệ Điều Hành

Người đăng

Ẩn danh

Thể loại

Giáo Trình

2023

279
1
0

Phí lưu trữ

55 Point

Tóm tắt

I. Tổng quan giáo trình hệ điều hành Nền tảng khoa học máy tính

Giáo trình hệ điều hành cung cấp kiến thức nền tảng và cốt lõi trong ngành khoa học máy tính. Đây là một thành phần không thể thiếu, đóng vai trò trung gian giữa phần cứng và người sử dụng. Việc nắm vững các nguyên lý từ tài liệu hệ điều hành là cơ sở để hiểu sâu sắc về toàn bộ hệ thống máy tính. Môn học này không chỉ trang bị kỹ năng cài đặt, sử dụng và khai thác hệ thống hiệu quả mà còn đi sâu vào các khía cạnh thiết kế và xây dựng. Nội dung giáo trình tập trung vào việc trình bày các khái niệm và nguyên lý hoạt động một cách tổng quát, thay vì chỉ dựa trên một hệ điều hành cụ thể như hệ điều hành Windows hay hệ điều hành Linux. Mục tiêu là giúp người học có cái nhìn toàn diện, từ đó có thể áp dụng vào nhiều nền tảng khác nhau. Các khái niệm trung tâm như quản lý tiến trình, quản lý bộ nhớ, và hệ thống tập tin được diễn giải chi tiết, kết hợp với các ví dụ minh họa thực tiễn để liên kết lý thuyết và thực tế. Một hệ thống máy tính điển hình bao gồm phần cứng (CPU, bộ nhớ, thiết bị I/O) và phần mềm (hệ điều hành, chương trình ứng dụng). Hệ điều hành quản lý các tài nguyên phần cứng, tạo ra một môi trường thuận tiện và hiệu quả cho các chương trình ứng dụng hoạt động. Nó che giấu sự phức tạp của phần cứng thông qua các lớp trừu tượng, cung cấp một giao diện lập trình ứng dụng (API) nhất quán. Nhờ đó, lập trình viên không cần phải làm việc trực tiếp với các thanh ghi hay lệnh máy cấp thấp. Các slide hệ điều hànhbài tập hệ điều hành thường xoay quanh các chủ đề này, giúp củng cố kiến thức về cấu trúc máy tính và nguyên tắc vận hành của hệ thống.

1.1. Vai trò của môn học hệ điều hành trong đào tạo CNTT

Trong chương trình đào tạo công nghệ thông tin, môn học hệ điều hành được xem là môn học cơ sở bắt buộc. Kiến thức từ môn học này mang lại ba lợi ích chính. Thứ nhất, nó cung cấp kỹ năng cài đặt, sử dụng và đánh giá hệ điều hành một cách hiệu quả, cần thiết cho chuyên gia vận hành hạ tầng. Thứ hai, nó trình bày kiến thức từ góc độ thiết kế và xây dựng, phục vụ cho các chuyên gia hệ thống. Thứ ba, và cũng là mục tiêu chính của nhiều giáo trình, là cung cấp kiến thức về các khái niệm và nguyên lý chung, giúp người học hiểu sâu hơn về cấu trúc máy tính. Theo PGS. Từ Minh Phương, việc nắm vững kiến thức này là "cơ sở cho việc hiểu biết sâu sắc hệ thống máy tính nói chung".

1.2. Cấu trúc hệ thống máy tính Phần cứng và phần mềm

Một hệ thống máy tính được chia thành bốn thành phần chính: phần cứng, hệ điều hành, chương trình ứng dụng và người dùng. Phần cứng, bao gồm CPU, bộ nhớ và các thiết bị vào/ra, cung cấp các tài nguyên tính toán cơ bản. Hệ điều hành là lớp phần mềm quản lý và điều phối việc sử dụng phần cứng giữa các ứng dụng khác nhau. Các chương trình ứng dụng, như trình duyệt web hay trình soạn thảo văn bản, định nghĩa cách các tài nguyên hệ thống được sử dụng để giải quyết vấn đề của người dùng. Hệ điều hành đóng vai trò như một "chính phủ", phân bổ tài nguyên một cách công bằng và hiệu quả, đảm bảo hệ thống hoạt động ổn định.

1.3. Các thành phần chính của một hệ điều hành tiêu biểu

Một hệ điều hành hiện đại thường bao gồm nhiều thành phần cốt lõi. Quản lý tiến trình chịu trách nhiệm tạo, xóa và điều phối các tiến trình. Quản lý bộ nhớ theo dõi phần nào của bộ nhớ đang được sử dụng, cấp phát và thu hồi không gian bộ nhớ khi cần. Quản lý hệ thống tệp tin cung cấp một cái nhìn logic, nhất quán về việc lưu trữ thông tin. Ngoài ra còn có hệ thống quản lý I/O để che giấu sự phức tạp của các thiết bị phần cứng cụ thể và hệ thống mạng để hỗ trợ giao tiếp giữa các máy tính. Tất cả các thành phần này cùng nhau tạo nên một cấu trúc hệ điều hành hoàn chỉnh.

II. Vấn đề cốt lõi của hệ điều hành Quản lý tài nguyên phức tạp

Một trong những thách thức lớn nhất mà mọi giáo trình hệ điều hành đều phải đề cập là việc quản lý tài nguyên hệ thống một cách hiệu quả và công bằng. Tài nguyên máy tính, bao gồm thời gian CPU, không gian bộ nhớ, không gian lưu trữ và các thiết bị vào/ra, đều có giới hạn. Trong một môi trường đa nhiệm, nhiều chương trình (tiến trình) cùng cạnh tranh để được sử dụng các tài nguyên này. Hệ điều hành phải đóng vai trò là người quản lý, quyết định tiến trình nào được cấp phát tài nguyên nào, trong bao lâu và theo thứ tự nào. Việc phân phối không hợp lý có thể dẫn đến hiệu suất hệ thống kém, thời gian chờ đợi kéo dài, hoặc thậm chí là tình trạng tê liệt hệ thống. Ví dụ, nếu hai tiến trình cùng yêu cầu ghi ra đĩa, hệ điều hành phải quyết định thứ tự thực hiện để tối ưu hóa việc truy cập. Vấn đề trở nên phức tạp hơn khi các tiến trình cần hợp tác và chia sẻ tài nguyên. Quá trình đồng bộ hóa là cực kỳ quan trọng để đảm bảo dữ liệu được nhất quán và tránh xung đột. Tuy nhiên, các cơ chế đồng bộ hóa nếu không được thiết kế cẩn thận có thể dẫn đến deadlock (bế tắc), một tình huống mà hai hay nhiều tiến trình chờ đợi lẫn nhau vô thời hạn và không tiến trình nào có thể tiếp tục. Giải quyết và phòng tránh deadlock là một trong những bài toán kinh điển của khoa học máy tính. Bên cạnh đó, hệ điều hành còn phải đảm bảo tính bảo mật và an toàn, ngăn chặn một tiến trình truy cập trái phép vào vùng nhớ hoặc tài nguyên của tiến trình khác. Đây là nhiệm vụ sống còn để duy trì sự ổn định của toàn hệ thống.

2.1. Thách thức trong phân phối tài nguyên CPU bộ nhớ I O

Việc phân phối tài nguyên là một bài toán tối ưu hóa phức tạp. Đối với CPU, hệ điều hành phải sử dụng các thuật toán lập lịch CPU để quyết định tiến trình nào sẽ chạy tiếp theo, nhằm tối đa hóa thông lượng và giảm thiểu thời gian chờ. Đối với bộ nhớ, thách thức là cấp phát không gian cho nhiều tiến trình trong khi bộ nhớ vật lý có hạn. Đối với các thiết bị I/O, hệ điều hành phải quản lý hàng đợi các yêu cầu và điều phối hoạt động để tránh xung đột. Mỗi loại tài nguyên đòi hỏi một chiến lược quản lý riêng biệt, và hệ điều hành phải cân bằng tất cả các yêu cầu này.

2.2. Vấn đề đồng bộ hóa và nguy cơ deadlock trong đa nhiệm

Khi các tiến trình đồng thời truy cập vào dữ liệu dùng chung, nguy cơ sai lệch dữ liệu là rất cao nếu không có cơ chế đồng bộ hóa. Các kỹ thuật như semaphore, mutex, và monitor được sử dụng để đảm bảo rằng tại một thời điểm chỉ có một tiến trình được phép truy cập vào vùng dữ liệu quan trọng (critical section). Tuy nhiên, việc sử dụng sai các công cụ này có thể dẫn đến deadlock. Một hệ điều hành phải có khả năng phát hiện, phòng ngừa, tránh né hoặc phục hồi từ các tình huống bế tắc để đảm bảo hệ thống không bị treo.

2.3. Đảm bảo an ninh và bảo mật trong môi trường đa người dùng

Trong hệ thống đa người dùng, việc bảo vệ tài nguyên của người dùng này khỏi người dùng khác là tối quan trọng. Hệ điều hành phải thực thi các cơ chế kiểm soát truy cập. Ví dụ, nó cần đảm bảo một tiến trình không thể đọc hoặc ghi vào vùng nhớ của một tiến trình khác, trừ khi được cho phép rõ ràng. Tương tự, hệ thống tệp tin phải có các quyền truy cập (đọc, ghi, thực thi) để kiểm soát ai có thể làm gì với một tệp tin. Các cơ chế này là nền tảng để xây dựng một hệ thống an toàn và đáng tin cậy.

III. Phương pháp quản lý tiến trình và bộ nhớ trong hệ điều hành

Để giải quyết các thách thức về tài nguyên, giáo trình hệ điều hành trình bày chi tiết hai phương pháp quản lý cốt lõi: quản lý tiến trình và quản lý bộ nhớ. Quản lý tiến trình là hoạt động giám sát các chương trình đang chạy, được gọi là tiến trình. Mỗi tiến trình là một thực thể động, cần tài nguyên như CPU và bộ nhớ để hoàn thành nhiệm vụ. Hệ điều hành chịu trách nhiệm tạo, xóa, tạm dừng và tiếp tục các tiến trình. Một phần quan trọng của quản lý tiến trình là lập lịch CPU, tức là quyết định tiến trình nào được sử dụng CPU tại một thời điểm nhất định. Các thuật toán lập lịch khác nhau sẽ tối ưu hóa các tiêu chí khác nhau, chẳng hạn như thời gian đáp ứng hoặc hiệu suất tổng thể. Song song đó, quản lý bộ nhớ là nhiệm vụ không kém phần quan trọng. Bộ nhớ chính (RAM) là một tài nguyên quý giá và cần được phân chia một cách hiệu quả giữa các tiến trình. Hệ điều hành phải theo dõi các vùng nhớ đang được sử dụng và các vùng còn trống. Các kỹ thuật như phân trang (paging) và phân đoạn (segmentation) được sử dụng để cấp phát bộ nhớ. Hơn nữa, để vượt qua giới hạn của bộ nhớ vật lý, khái niệm bộ nhớ ảo ra đời. Kỹ thuật này cho phép một tiến trình sử dụng không gian địa chỉ lớn hơn nhiều so với bộ nhớ RAM thực có, bằng cách sử dụng một phần của đĩa cứng làm không gian trao đổi. Hệ điều hành quản lý việc ánh xạ giữa địa chỉ ảo và địa chỉ vật lý, mang lại sự linh hoạt và hiệu quả cho việc thực thi chương trình.

3.1. Kỹ thuật quản lý tiến trình và phương pháp lập lịch CPU

Quản lý một tiến trình bao gồm việc lưu trữ thông tin về nó trong một khối quản lý tiến trình (Process Control Block - PCB), bao gồm trạng thái, bộ đếm chương trình, các thanh ghi, và thông tin lập lịch CPU. Hệ điều hành sử dụng các hàng đợi (sẵn sàng, chờ I/O) để tổ chức các tiến trình. Các thuật toán lập lịch như First-Come First-Served (FCFS), Shortest-Job-First (SJF), và Round Robin (RR) được áp dụng để phân phối thời gian CPU, mỗi thuật toán có ưu và nhược điểm riêng phù hợp với các loại hệ thống khác nhau.

3.2. Cách thức tổ chức và quản lý bộ nhớ chính bộ nhớ ảo

Bộ nhớ chính được quản lý bằng nhiều kỹ thuật. Phân chương cố định và động là các phương pháp ban đầu, nhưng dễ gây ra phân mảnh. Phân trang chia bộ nhớ logic và vật lý thành các khối có kích thước cố định (page và frame), giúp giải quyết vấn đề phân mảnh ngoại. Trong khi đó, bộ nhớ ảo kết hợp RAM và đĩa cứng để tạo ra một không gian địa chỉ lớn. Khi một tiến trình cần truy cập một trang không có trong RAM, một ngắt (page fault) xảy ra và hệ điều hành sẽ tải trang đó từ đĩa vào bộ nhớ.

3.3. Giao diện lập trình API và vai trò của lời gọi hệ thống

Để các chương trình ứng dụng có thể yêu cầu dịch vụ từ hệ điều hành (ví dụ: tạo tiến trình mới, đọc file), chúng sử dụng một giao diện được gọi là Lời gọi hệ thống (System Call). Lời gọi hệ thống chuyển quyền điều khiển từ chế độ người dùng sang chế độ kernel (chế độ hạt nhân), nơi hệ điều hành có thể thực hiện các thao tác đặc quyền. Các lập trình viên thường không gọi trực tiếp các lời gọi hệ thống mà thông qua Giao diện lập trình ứng dụng (API), chẳng hạn như Win32 API trên hệ điều hành Windows hoặc POSIX API trên hệ điều hành Linux và Unix. API cung cấp một lớp trừu tượng tiện lợi và đảm bảo tính di động của mã nguồn.

IV. Bí quyết tối ưu hệ thống tập tin và quản lý thiết bị I O

Bên cạnh việc quản lý CPU và bộ nhớ, một hệ điều hành hiệu quả phải có khả năng quản lý lưu trữ và các thiết bị ngoại vi một cách tối ưu. Hệ thống tệp tin là một trong những thành phần dễ thấy nhất của hệ điều hành, cung cấp một cơ chế trừu tượng hóa để lưu trữ và truy xuất dữ liệu trên các thiết bị lưu trữ thứ cấp như đĩa cứng. Thay vì làm việc với các khối (block) vật lý trên đĩa, người dùng và chương trình tương tác với các thực thể logic là tệp (file) và thư mục (directory). Hệ điều hành chịu trách nhiệm ánh xạ các tệp này lên đĩa, quản lý không gian trống, và cung cấp các thao tác như tạo, xóa, đọc, ghi tệp. Cấu trúc hệ điều hành trong phần này bao gồm các phương pháp cấp phát không gian đĩa như cấp phát liên tục, liên kết, hoặc chỉ mục (indexed), mỗi phương pháp đều có sự đánh đổi giữa hiệu suất, không gian và độ phức tạp. Song song với đó, quản lý I/O (vào/ra) là một nhiệm vụ quan trọng khác. Hệ điều hành phải quản lý một loạt các thiết bị đa dạng, từ bàn phím, chuột cho đến các ổ đĩa tốc độ cao. Để che giấu sự khác biệt của các thiết bị này, hệ điều hành sử dụng một hệ thống con I/O bao gồm các trình điều khiển thiết bị (device drivers). Trình điều khiển là phần mềm chuyên biệt, hiểu rõ cách giao tiếp với một thiết bị cụ thể. Hệ thống I/O cũng cung cấp các dịch vụ như bộ đệm (buffering) và caching để cải thiện hiệu suất, giảm thiểu số lần truy cập vật lý đến thiết bị. Một kỹ thuật quan trọng là Truy cập bộ nhớ trực tiếp (DMA), cho phép thiết bị truyền dữ liệu trực tiếp đến/từ bộ nhớ mà không cần sự can thiệp liên tục của CPU.

4.1. Cấu trúc hệ thống tệp tin File thư mục và phương pháp cấp phát

Hệ thống tệp tin tổ chức dữ liệu thành các file, mỗi file có các thuộc tính như tên, loại, kích thước, và quyền truy cập. Các file được nhóm lại trong các thư mục để tạo thành một cấu trúc phân cấp, giúp việc quản lý trở nên dễ dàng. Hệ điều hành sử dụng các phương pháp cấp phát khác nhau để lưu trữ file trên đĩa. Cấp phát liên tục nhanh nhưng gây phân mảnh. Cấp phát liên kết linh hoạt nhưng truy cập tuần tự chậm. Cấp phát chỉ mục (như trong hệ thống file của Unix) giải quyết được nhiều nhược điểm nhưng đòi hỏi không gian cho các khối chỉ mục.

4.2. Nguyên tắc quản lý I O Driver và truy cập bộ nhớ trực tiếp

Mục tiêu của hệ thống con quản lý I/O là cung cấp một giao diện đơn giản và đồng nhất cho các chương trình ứng dụng, bất kể thiết bị vật lý bên dưới là gì. Điều này đạt được thông qua các trình điều khiển thiết bị (drivers). Khi một ứng dụng yêu cầu thao tác I/O, hệ điều hành sẽ gọi driver tương ứng. Để tăng hiệu quả cho việc truyền khối dữ liệu lớn, cơ chế Truy cập bộ nhớ trực tiếp (Direct Memory Access - DMA) được sử dụng, giải phóng CPU để thực hiện các công việc khác trong khi dữ liệu đang được truyền.

4.3. Tìm hiểu về Kernel và Shell Giao diện cốt lõi của hệ thống

Hai thành phần tương tác chính của hệ điều hành là KernelShell. Kernel (nhân) là phần cốt lõi, chạy ở chế độ đặc quyền và quản lý trực tiếp phần cứng. Nó cung cấp các dịch vụ cơ bản nhất. Shell (vỏ) là giao diện người dùng, nhận lệnh và yêu cầu kernel thực hiện chúng. Shell có thể là dạng dòng lệnh (Command-Line Interface - CLI) như bash trên Linux, hoặc giao diện đồ họa (Graphical User Interface - GUI) như Windows Explorer. Shell đóng vai trò là cầu nối giữa người dùng và các chức năng mạnh mẽ của kernel.

V. Phân tích các hệ điều hành mã nguồn mở Linux và các biến thể

Lịch sử phát triển hệ điều hành chứng kiến sự ra đời và thống trị của nhiều hệ thống khác nhau, trong đó hệ điều hành Linux và gia đình Unix chiếm một vị trí đặc biệt quan trọng. Bắt nguồn từ Unix, được phát triển tại Bell Labs vào cuối những năm 1970, các hệ điều hành này đã đặt nền móng cho nhiều khái niệm hiện đại. Unix là hệ điều hành đầu tiên được viết phần lớn bằng ngôn ngữ bậc cao (ngôn ngữ C), mang lại khả năng di động cao trên nhiều kiến trúc phần cứng. Nó giới thiệu cấu trúc hệ thống tệp tin phân cấp, khái niệm tiến trình và đường ống (pipes), những ý tưởng vẫn còn nguyên giá trị cho đến ngày nay. Sự thành công của Unix trong môi trường học thuật đã tạo ra nhiều biến thể, nổi bật nhất là Berkeley Software Distribution (BSD). Tuy nhiên, khi Unix dần bị thương mại hóa, nhu cầu về một hệ điều hành tự do, miễn phí đã thúc đẩy Linus Torvalds tạo ra Linux vào năm 1991. Linux là một hệ điều hành mã nguồn mở, có nghĩa là mã nguồn của nó được công khai và mọi người đều có quyền sửa đổi, cải tiến và phân phối lại. Điều này đã thu hút một cộng đồng lập trình viên khổng lồ trên toàn thế giới, góp phần làm cho Linux trở nên cực kỳ mạnh mẽ, ổn định và linh hoạt. Linux tuân thủ chuẩn POSIX, đảm bảo khả năng tương thích cao với các ứng dụng Unix. Ngày nay, hệ điều hành Linux được sử dụng rộng rãi trên các máy chủ, siêu máy tính, thiết bị nhúng và cả máy tính để bàn thông qua các bản phân phối (distributions) như Ubuntu, Fedora và Debian.

5.1. Lịch sử phát triển và đặc điểm của hệ điều hành Unix

Unix được Ken Thompson và Dennis Ritchie phát triển, mang triết lý thiết kế "mọi thứ là một tệp tin" và sử dụng các công cụ nhỏ, chuyên dụng có thể kết hợp với nhau. Việc cung cấp mã nguồn cho các trường đại học đã thúc đẩy sự phát triển nhanh chóng và tạo ra nhiều cải tiến quan trọng như bộ nhớ ảo và giao thức mạng TCP/IP trong phiên bản BSD. Unix đã trở thành tiêu chuẩn de facto cho các hệ thống máy chủ và máy trạm chuyên nghiệp trong nhiều thập kỷ.

5.2. Hệ điều hành mã nguồn mở Linux và các bản phân phối

Linux ban đầu chỉ là một kernel, được Linus Torvalds phát triển như một dự án cá nhân. Để tạo thành một hệ điều hành hoàn chỉnh, nó được kết hợp với các công cụ và tiện ích từ dự án GNU. Thành công của Linux đến từ mô hình phát triển mở, cho phép nó nhanh chóng thích ứng với các công nghệ mới. Các bản phân phối Linux (distros) như Ubuntu hay Red Hat Enterprise Linux đóng gói kernel Linux cùng với một bộ phần mềm và công cụ quản lý, cung cấp một hệ điều hành sẵn sàng để sử dụng cho người dùng cuối và doanh nghiệp.

5.3. So sánh cấu trúc vi nhân microkernel và nguyên khối monolithic

Unix và hệ điều hành Linux ban đầu được xây dựng theo cấu trúc hệ điều hành nguyên khối (monolithic). Trong cấu trúc này, toàn bộ hệ điều hành chạy trong không gian kernel, mang lại hiệu suất cao do việc giao tiếp giữa các thành phần rất nhanh. Ngược lại, cấu trúc vi nhân (microkernel) chỉ giữ lại các chức năng tối cần thiết trong kernel (như quản lý tiến trình và liên lạc), còn các dịch vụ khác (như hệ thống file, driver) chạy như các tiến trình ở chế độ người dùng. Cấu trúc này an toàn và linh hoạt hơn nhưng có thể chậm hơn do chi phí giao tiếp giữa các tiến trình.

VI. Xu hướng phát triển tương lai của các hệ điều hành hiện đại

Lĩnh vực hệ điều hành không ngừng phát triển để đáp ứng những yêu cầu mới của công nghệ. Giáo trình hệ điều hành hiện đại không chỉ dừng lại ở các khái niệm kinh điển mà còn mở rộng sang các xu hướng định hình tương lai của ngành khoa học máy tính. Một trong những xu hướng quan trọng nhất là ảo hóa (virtualization). Ảo hóa là kỹ thuật cho phép một máy tính vật lý chạy nhiều hệ điều hành khách (guest OS) cùng một lúc, mỗi hệ điều hành chạy trên một máy ảo (virtual machine). Công nghệ này mang lại sự linh hoạt, tối ưu hóa việc sử dụng tài nguyên phần cứng và là nền tảng cốt lõi cho điện toán đám mây. Điện toán đám mây (Cloud Computing) là một mô hình cung cấp tài nguyên tính toán (như CPU, lưu trữ, phần mềm) dưới dạng dịch vụ qua mạng Internet. Các hệ điều hành được thiết kế cho đám mây phải có khả năng quản lý hàng ngàn máy chủ, tự động hóa việc cấp phát và thu hồi tài nguyên, đồng thời đảm bảo tính sẵn sàng và khả năng chịu lỗi cao. Một xu hướng nổi bật khác là tính toán di động. Sự bùng nổ của điện thoại thông minh và máy tính bảng đã tạo ra một thế hệ hệ điều hành mới như Android và iOS. Các hệ điều hành này phải được tối ưu hóa cho các thiết bị có tài nguyên hạn chế, đặc biệt là về năng lượng (pin), đồng thời cung cấp giao diện người dùng thân thiện dựa trên màn hình cảm ứng và hỗ trợ mạnh mẽ các kết nối không dây. Những thách thức này đòi hỏi các giải pháp mới trong quản lý tiến trìnhquản lý bộ nhớ.

6.1. Ảo hóa và vai trò trong các hệ thống tính toán hiện đại

Công nghệ ảo hóa cho phép một hệ quản lý máy ảo (Virtual Machine Manager - VMM hay hypervisor) tạo ra và quản lý nhiều máy ảo trên một hệ thống phần cứng duy nhất. Điều này cho phép các doanh nghiệp hợp nhất máy chủ, giảm chi phí vận hành và tăng cường khả năng phục hồi sau thảm họa. Các hệ điều hành như hệ điều hành Windows Server và hệ điều hành Linux hiện nay đều tích hợp sâu các tính năng hỗ trợ ảo hóa.

6.2. Điện toán đám mây Cloud Computing và tác động lên hệ điều hành

Điện toán đám mây cung cấp các mô hình dịch vụ như IaaS (Hạ tầng như một dịch vụ), PaaS (Nền tảng như một dịch vụ) và SaaS (Phần mềm như một dịch vụ). Hệ điều hành trong môi trường đám mây phải hỗ trợ khả năng co giãn linh hoạt, quản lý tài nguyên phân tán trên quy mô lớn và cung cấp các API mạnh mẽ để tự động hóa việc triển khai và quản lý ứng dụng. Các dự án như OpenStack là ví dụ về các nền tảng đám mây hệ điều hành mã nguồn mở.

6.3. Tính toán di động Thách thức mới cho hệ điều hành di động

Hệ điều hành di động đối mặt với những thách thức riêng biệt. Chúng phải quản lý năng lượng một cách chặt chẽ để kéo dài thời gian sử dụng pin. Quản lý vòng đời ứng dụng cũng khác biệt, các ứng dụng có thể bị tạm dừng hoặc tắt khi không hoạt động để tiết kiệm tài nguyên. Ngoài ra, vấn đề bảo mật trên thiết bị di động cũng rất quan trọng, đòi hỏi các cơ chế sandbox và quản lý quyền truy cập nghiêm ngặt để bảo vệ dữ liệu người dùng khỏi các ứng dụng độc hại.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI từ nội dung tài liệu gốc; tài liệu do người dùng đóng góp và được kiểm duyệt trước khi xuất bản. Báo lỗi nội dung.

25/07/2025

Trích đoạn nội dung tài liệu

Chương 1. Giới thiệu chung 17 dòng lệnh cho phép người dùng ra chỉ thị cho hệ điều hành băng cách gõ lệnh dưới dạng văn bản, ví dụ chương trình cmd.exe của Windows. Giao điện đồ họa sử đụng hệ thống cửa số, thực đơn và thiết bị trỏ như chuột, kết hợp với bàn phím để giao tiếp với hệ thống. : - Thực hiện các thao tác vào/ra dữ liệu.

Người dùng và chương trình trong khi thực hiện có thể có nhu cầu vào/ra đữ liệu với đĩa hoặc các thiết bị ngoại vi. Để thực hiện vào/ra, cần ghi các lệnh được xác định sẵn ra những thanh ghi nhất định của bộ điều khiển thiết bị ngoại vi, gọi là cổng vào/ra, sau đó đọc lại kết quả hoặc trạng thái của thao - tác vào/ra. Để tránh cho chương trình không phải làm việc trực tiếp với phần cứng qua nhiều bước phức tạp như vậy, yêu cầu vào/ra sẽ được giao cho hệ điều hành thực hiện. | | - Làm việc với hệ thống file.

File là một khái niệm lôgic dùng để trim tượng hóa công việc vào/ra thông tin với bộ nhớ ngoài. Đa số người dùng và chương trình có nhu cầu đọc, ghi, tạo, xóa, chép file hoặc làm việc với thư mục. Ngoài ra còn nhiều thao tác khác với file như quản lý quyền truy cập, sao lưu. Hệ điều hành giúp thực hiện những thao tác này dưới dạng các dịch vụ.

- Phát hiện và xử lý lỗi. Để đảm bảo cho hệ thống hoạt động én định, an toàn, hệ điều hành cần phát hiện và xử lý kịp thời các lỗi xuất hiện trong phần cứng cũng như phần mềm. Các lỗi phần cứng có thể là lỗi bộ nhớ, mất điện, máy in hết giấy v. Các lỗi phần mềm có thê do chương trình viết sai, các phép chia cho “0°, lỗi truy cập bộ nhớ v.

Nếu không có hệ điều hành, người dùng và chương trình ứng đụng sẽ phải tự phát hiện và xử lý các lỗi xuất hiện. Trong khi thực hiện, chương trình có thể có nhu cầu trao đổi thông tin với nhau, thậm chí với chương trình đang thực hiện trên máy khác được nối mạng. Hệ điều hành cung cấp dịch vụ cho phép thiết lập liên lạc và truyền thông tin đưới dạng các thông điệp (message) hoặc thông qua những vùng bộ nhớ dùng chung (shared memory). Trong trường hợp truyền thông điệp, hệ điều hành 18 Giáo trình Hệ điều hành đóng vai trò chuyển các gói tin theo những quy tắc nhất định gọi là giao thức truyền thông.

- Cấp phát tài nguyên. Trong các hệ thống cho phép nhiều chương trình thực hiện đồng thời cần có cơ chế cấp phát và phân phối tài nguyên hợp lý. Mỗi đạng tài nguyên cần có cách cấp phát riêng, ví dụ cơ chế cấp phát CPU hoàn toàn khác so với cấp phát bộ nhớ. Nhờ có hệ điều hành, người sử dụng và trình ứng dụng không phải tự thực hiện việc cấp phát tài nguyên, đồng thời vẫn đảm bảo tài nguyên được | cấp phát công bằng và hiệu quả.

- Dịch vụ an ninh và bảo mật. Đối với hệ thống nhiều người dùng. thường có xuất hiện yêu cầu bảo mật thông tin, tức là đảm bảo người dùng này không tiếp cận được với thông tin của người khác nếu không được phép. Tương tự như vậy, hệ thống cần đảm bảo để tiến trình không truy cập trái phép tài nguyên (như vùng bộ nhớ, file mở) của tiến trình khác hay của chính hệ điều hành bằng cách kiểm soát truy cập tới tài nguyên.

Nhiều hệ điều hành còn cho phép kiểm tra người đùng thông qua việc kiểm soát đăng nhập vào hệ thống. - Tải và chạy hệ điều hành Ở đây cần nói thêm về việc tải hệ điều hành vào bộ nhớ. Như đã nói ở trên, việc tải các chương trình vào bộ nhớ là do hệ điều hành thực hiện. Do hệ điều hành là chương trình đầu tiên được thực hiện khi khởi động hệ thống nên hệ điều hành phải tự tải chính mình từ bộ nhớ ngoài vào bộ nhớ trong.

Chính xác hơn, quá trình đó được gọi là booting (viết tắt của bootstrapping). Hệ điều hành có một chương trình nhỏ gọi là chương trình tải hay chương trình méi (OS loader hoặc boot). Chương trình này năm ở một vị trí xác định trên đĩa hoặc thiết bị nhớ ngoài khác. Chăng hạn, đối với đĩa, chương trình này nằm ở - sector đầu tiên của đĩa.

Việc chương trình tải nằm ở vị trí xác định như vậy là rất quan trọng vì nếu không có vị trí xác định, phần cứng sẽ không thể tìm ra chương trình tải hệ điều hành. Giới thiệu chung 19. Sau khi khởi động hệ thống, một chương trình nằm sẵn trong bộ nhé ROM (ví dụ trong BIOS của máy vi tính) sẽ được kích hoạt va đọc chương trình mỗi của hệ điều hành từ vị trí quy ước trên đĩa vào bộ nhớ. Sau đó, chương trình mỗi chịu trách nhiệm tải các phần khác của hệ điều hành vào bộ nhớ và trao cho hệ điều hành quyền điều khiển hệ thống.

Nếu phần đĩa chứa chương trình môi bị hỏng, phần cứng sẽ hiển thị thông báo với nội dung “không tìm thấy hệ điều hành”. Trong trường hợp máy tính được cài nhiều hệ điều hành, chương trinh mdi (goi 14 Multi OS loader) sé cho phép người đùng chọn một trong các hệ điều hành đó để tải vào bộ nhớ. GIAO DIEN LAP TRINH CUA HE DIEU HANH Để các chương trình có thể sử đụng được những dịch vụ nói trên, hệ điều hành cung cấp một giao diện gọi là giao điện lập trình. Giao diện này bao gồm các lời gọi hệ thống (system calls) mà chương trình sử đụng để yêu cầu một dịch vụ nào đó từ phía hệ điều hành.

Lời gọi hệ thống là dạng lệnh đặc biệt mà chương trình ứng dụng gọi khi cần yêu cầu hệ điều hành thực hiện một việc gì đó. Các hệ điều hành trước đây thường cung cấp lời gọi hệ thống dưới dạng các lệnh hợp ngữ, đo đó lời gọi hệ thống còn được gọi là “lệnh máy mở rộng”. Ví dụ các lời gọi kiểu này là các hàm ngắt 21h của DOS mà chương trình viết trên hợp ngữ gọi bằng lệnh int. Hệ điều hành hiện nay thường cho phép gọi lời gọi hệ thống trực tiếp từ ngôn ngữ bậc cao như C hoặc C++.

Lúc này, lời gọi hệ thống giống như một lời gọi hàm hoặc chương trình con thông thường.4 là ví dụ một lời gọi hệ thống của hệ điều hành Windows cho phép ghi ra file. Trên thực tế, chương trình ứng dụng ít sử dụng trực tiếp lời gọi hệ thống. Thay vào đó, lời gọi hệ thống được thực hiện qua những thư viện hàm gọi là thư viện hệ thống cùng với những hàm hệ thống khác. Các hàm này sẽ giúp người lập trình gọi lời gọi hệ thống tương ứng của hệ điều hành.

Giao diện lập trình Win32 API (Application 20 Giáo trình Hệ điều hành Programming Interface - Giao dién lap trinh tmg dung) do hệ điều hành Windows cung cấp là một ví đụ thư viện như vậy. Các ví dụ khác là POSIX API dùng cho UNIX, Linux và Java API dùng cho máy ảo Java. NTSTATUS ZwWriteFile( _In_ HANDLE FileHandle, _In_opt_ HANDLE Event, _In_opt_ PIO_APC_ ROUTINE ApcRoutine, _In_opt_ PVOID ApcContext, _Out_ PIO STATUS BLOCK IoStatusBlock, _In_ PVOID Buffer, _In_ ULONG Length, _In_opt_ PLARGE_INTEGER ByteOffset, _In_opt_ PULONG Key , )7 Hình 1. Lời gọi hệ thong với dịch vụ ghi ra file cua Windows Trên hình 1.5 là ví đụ một hàm của Win32 API cho phép yêu cầu địch vụ ghi ra file của Windows.

Có thể so sánh hàm này với hàm zwWriteFile trong ví đụ ở hình 1.4 để thấy mỗi quan hệ giữa lời gọi hệ thống và API. BOOL WINAPI WriteFile( __in HANDLE hFile, __in ‘LPCVOID IpBuffer, __in + DWORD nNumberOfBytesToWrite, __out_opt LPDWORD IpNumberOfBytesWritten, __inout_opt LPOVERLAPPED IpOverlapped }z Hinh 1. Ham ghi file trong th vién Windows API Khi viết chương trình, người lập trình sẽ sử dụng các hàm do giao diện lập trình ứng dụng API cung cấp thay vì gọi trực tiếp lời gọi hệ thống. Chương trình dịch (compiler) sau đó sẽ thực hiện việc chuyển đổi lời gọi hàm sang lời gọi hệ thống tương ứng của hệ điều hành.

Giới thiệu chung 21 _Trên thực tế, đa số API và lời gọi hệ thống có hình thức khá tương tự nhau như trong ví dụ ở hình trên. Việc sử dụng API có một số ưu điểm so với sử dụng trực tiếp lời gọi hệ thống: - Thứ nhát, chương trình dễ dàng chuyên sang thực hiện trên hệ thống khác có cùng API. Khi hệ điều hành nâng cấp lời gọi hệ thống bằng cách thêm chức năng mới, chương trình gọi trực tiếp lời gọi hệ thống sẽ phải viết lại, trong khi chương trình sử dụng API thì không. - Thứ hai, hàm API thường thực hiện thêm một số thao tác so với lời gọi hệ thống tương ứng.

Ví dụ, khi thực hiện lời gọi hệ thống để tạo tiến trình mới, cần thực hiện một số thao tác trước và sau lời gọi này. Hàm API tương ứng đã chứa sẵn đoạn mã thực hiện các thao tác này, do vậy chương trình gọi hàm API sẽ không phải tự thực hiện các. - Thứ ba, hàm API thường hỗ trợ các phiên bản khác nhau của hệ điều hành và tự phát hiện phiên bản phù hợp. Các lời gọi hệ thống và hàm API thường thuộc một trong các nhóm sau: quản lý tiến trình, quản lý file và thư mục, quản lý thiết bị, đảm bao thong tin và liên lạc giữa các tiến trình.1 là vi dụ một số hàm API quan trọng trong thư viện Win32 API của Windows và POSIX cho Unix và Linux.

Lưu ý rằng hình này chỉ liệt kê một số lượng nhỏ hàm API trong số hàm trăm hàm của hệ thống. Ví dụ một số hàm API quan trọng cua POSIX va Win32 API POSIX Win32 Mô tả fork CreateProcess Tạo tiến trình mới execve - CreateProcess = fork + execve exit ExitProcess Kết thúc tiến trình open CreateFile Tạo mới file hoặc mở một file đã có 22 Giáo trình Hệ điều hành POSIX Win32 Mô tả close CloseHandle Đóng một file đang mở read ReadFile Đọc từ file write WriteFile Ghi ra file lseek SetFilePointer Di chuyển tới một vị trí cụ thé trong file stat GetFileAttributeExt .| Đọc các thuộc tính của file mkdir CreateDirectory Tạo thư mục mới rmdir RemoveDirectory Xóa thư mục unlink | DeleteFile Xóa một file chdir SetCurrentDirectory Thay đổi thư mục hiện thời 1. QUA TRÌNH PHÁT TRIEN HE DIEU HANH Cac hé diéu hanh ngày nay là những hệ thông phần mềm phức tạp thực hiện nhiều chức năng tỉnh vi liên quan tới quản lý tài nguyên và chương trình. Các tính năng và kỹ thuật được sử dụng trong hệ điều hành hiện đại không có ngay mà được xây dựng và hoàn thiện qua nhiều thế hệ hệ điều hành khác nhau.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ