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.