Giáo trình Hệ điều hành - Chương 1: Mở đầu
Một hệ điều hành là phần mềm chứa đựng tất cả các chương trình cần thiết để điều hành máy tính thực hiện các ứng dụng khác nhau. Nếu một người sử dụng máy tính chỉ để xử lý text, anh ta sẽ mong rằng, máy tính chứa đựng tất cả các chức năng của ứng dụng xử lý text.
Các phần mềm của hệ điều hành được dùng trên thị trường là những phần mềm đã được chuẩn hoá. Tất cả đều có chung những chức năng là kết nối giữa phần cứng của máy tính ( như bộ vi xử lý, bộ nhớ và thiết bị xuất nhập) và các phần mềm ứng dụng ( như các files, các chương trình của người sử dụng…).
Bạn đang xem tài liệu "Giáo trình Hệ điều hành - Chương 1: Mở đầu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- giao_trinh_he_dieu_hanh_chuong_1_mo_dau.doc
Nội dung text: Giáo trình Hệ điều hành - Chương 1: Mở đầu
- Điều đó được chỉ ra một cách chặt chẽ hơn trong hình 1.2 dưới đây với mô hình hệ thống các lớp. Lớp a User1 User 2 User 3 Lớp b Compiler Editor Các ứng dụng Lớp c Dịch vụ hệ điều hành Lớp d Phần cứng Hình 1.2. Mô hình các lớp 1.2 Các giao diện và máy ảo Ở trên chúng ta đã nói tới mô hình của các lớp. Sự tương đối của việc lớp này ( thí dụ lớp a) ứng dụng lớp kia ( thí dụ lớp b) chỉ ra rằng, lớp b đã dịch vụ lớp a. Đó là trường hợp ở việc sử dụng một procedure dưới lớp b trong một chương trình của lớp a. Nếu chúng ta xuất phát từ đó, rằng tất cả các khả năng dịch vụ được yêu cầu theo một thứ tự xác định, do đó những yêu cầu của người sử dụng đới với các chương trình tiện ích hay các yêu cầu của các chương trình tiện ích đối với các hệ điều hành hoặc các yêu cầu của hệ điều hành đới với phần cứng thì được diễn biến theo trục thời gian Và những yêu cầu đó được sắp xếp liền kề nhau. Mỗi một lớp không chỉ tạo thành một đơn vị phần mềm như hình 1.2, mà chúng còn được sắp xếp một cách tuần tự cạnh nhau. Những chức năng dịch vụ của một lớp ( các procedure, các dữ liệu và các giao thức tiện dụng của chúng) được người ta tập hợp trong một giao diện. Chương trình mà nó mang lại những khả năng dịch vụ được tập hợp thành một dãy các lệnh, mà những dịch vụ này được sử dụng như những khả năng riêng. Lớp dưới cùng được tạo bởi phần cứng của máy tính. Vì các chức năng của chúng được điều chỉnh qua các giao diện, do đó người ta coi chúng như một máy. Tuy nhiên, máy này không tự làm việc được, nó không phải là máy thực và do đó người ta gọi là máy ảo. Chức năng của các máy ảo tổng thể được tạo bởi sự cộng tác của các máy ảo riêng lẻ. Cho đến nay chúng ta đã có sự phân biệt giữa máy vật lý và máy ảo. Bây giờ có thêm loại thứ 3: máy logic. Một số người cho máy logic là máy ảo, số người khác tách biệt chúng thành máy vật lý và máy ảo. Một ổ đĩa ảo được mô hình hoá một trường của các khối bộ nhớ mà nó xem đồng nghĩa với một số khối tuần tự. Ngược lại, ổ đĩa logic được mô tả một cái gì cụ thể hơn, nó được hiểu là ổ đĩa cứng với nhiều điểm khác biệt như thời gian trễ và sự ưu tiên khi vận chuyển dữ liệu ( data). Hình 1.3 chỉ ra điều đó
- phần mềm để quản lý thiết bị, bộ nhớ và bộ vi xử lý, đồng thời cả những phần mềm quan trọng để quản lý mạng. NSD (User 1) NSD (User 2) GIAO DIỆN NSD (User Interface) Các ứng dụng Các dịch vụ Các công cụ Nhân hệ điều hành (Operating System Kernel) Phần cứng (Hardware) Hình 1.4. Cấu trúc khái quát các phần mềm của máy tính 1.3.1Gọi hệ thống (system- call) Các dịch vụ của nhân được yêu cầu qua việc gọi hệ điều hành và được dẫn tới như gọi các procedure bình thường theo một khuôn khổ nhất định. Vì việc nạp nhân hệ điều hành ở bộ nhớ chính có thể thay đổi, do đó các chương trình tiện dụng luôn luôn được kết nối một cách mới mẻ. Ở hầu hết các nhân hệ điều hành có một cơ cấu gọi đặc biệt để đáp ứng khả năng dịch vụ mà không biết địa chỉ chính xác của procedure. Cơ chế gọi này bao gồm bộ nhớ các tham số ở trên ngăn xếp (stack) và khởi động một tín hiệu phần cứng hay bắt đầu một ngắt phần mềm (softwareinterrupt). Như vậy, tại một ngắt phần cứng, bộ vi xử lý lưu trữ trạng thái và địa chỉ lệnh ( instructionadress) ở ngăn xếp, đón nhận trạng thái và địa chỉ của lệnh kế sau đó ở bộ nhớ chính và tiếp tục thực hiện các lệnh ở địa chỉ này. Ở việc tự khởi động của hệ thống máy tính thì địa chỉ đưa vào của nhân hệ điều hành được mô tả trên không gian bộ nhớ ngắt, do đó chương ứng dụng tìm thấy dấu đợi lệnh ( prompt) hệ điều hành. Hình 1.5 chỉ ra quá trình gọi hệ thống như vậy.
- Vỏ NSD1 Vỏ NSD2 (User shell 1) (User shell 2) Chương Chương trình Chương trình trình hệ NSD hệ thống 1 thống 2 trạng thái NSD trạng thái nhân Giao diện kiểm tra và phân bổ chức năng quản lý Dãy xuất / nhập Hệ thống file tiến trình bộ nhớ phô TTY máy mouse đĩa mạng quản lý bày in mềm Phần cứng Hình 1.6.Các lớp của hệ điều hành Unix Cho đến nay, Unix vẫn là một hệ điều hành có nhiều thế mạnh khác nhau. Bởi lẽ, nó không chỉ là một hệ điều hành trợ giúp đồng thời nhiều người sử dụng, mà còn có thể thực hiện đồng thời nhiều chương trình. Nhờ việc thực thi vượt trội với ngôn ngữ lập trình bậc cao C thì nó có thể truy cập một cách dễ dàng và nhanh chóng tới một phần cứng khác. Ở một bộ biên dịch C cũ, người ta muốn thay đổi bộ tạo mã ( Codegenerator) với câu lệnh mới thì công việc chính phải làm là, phải mô tả lại các chương trình của hệ điều hành cũng như của nhân bằng ngôn ngữ C và sau khi biên dịch, chúng có thể chạy như một máy tính mới. Tuy nhiên, ở việc chuyển đổi như thế cũng còn vài vấn đề cần phải được hoàn hảo. Các phiên bản đầu tiên của Unix thì phụ thuộc rất nhiều vào phần cứng, trước hết nó phụ thuộc vào bề rộng từ (word- width) của CPU. Trong các phiên bản sau này ( Berkeley Unix cũng như Systems IV và V) đã được tu chỉnh và sửa chữa nhiều. Cho đến nay công việc chuyển đổi không phải không còn vấn đề. Từ sự thực thi này tới sự thực thi khác đều có cấu trúc cơ sở khác biệt của Unix. Do đó loại và số lượng của gọi hệ thống là đa dạng. Việc chuyển đổi chương trình người sử dụng giữa các phiên bản khác nhau thực ra đã được giảm thiểu. Để có sự trợ giúp, thì những tổ chức khác nhau đã được thành lập. Nỗi bậc nhất là nhóm X/Open ( tại bắc Mỹ và Châu Âu). Một hiệp định của các công ty và trường đại học đã đưa ra một vài chuẩn khác nhau. Một trong các chuẩn đầu tiên đó là hệ thống chuyển đổi POSIX ( Portable Operating System Interface based on Unix) của Unix, mà nó được định nghĩa là một lượng các dịch vụ có thể sử dụng khác nhau. Tất nhiên chúng chỉ là những dịch vụ, chứ không được định nghĩa trực tiếp là gọi hệ thống. Điều thú vị là, biểu trưng Unix phù hợp với một giao diện bắt
- • Độ bền vững ( strengthen) Nó đạt được nhờ sự phân chia chặt chẽ của các chương trình với nhau và nhờ việc luôn luôn giữ vững các quá trình ngoại vi (cơ cấu DOS ảo) đối với các chương trình chạy trên MS-DOS hay trên Windows. Các chức năng này là đồng đều, nhưng việc truy cập(số liệu) trực tiếp được tách ra trên phần cứng, do vậy với các chức năng này thì các chương trình cũ có thể chạy được. Những biện pháp phụ như một hệ thống files có độ chính xác lỗi và những cơ cấu bảo vệ chuyên dụng để kiểm tra sự chọn files, mạng và chương trình đã trợ giúp cho mục đích này. • Độ thuận tiện (commodity) Đó là khả năng có thể bảo quản và mở rộng, qua đó, một hệ điều hành được viết bằng ngôn ngữ C, có thể trao đổi mạnh và được phân lớp ngay từ đầu. Với lớp HAL (xem hình 1.7), phần cứng được mô phỏng như là máy ảo và ở việc truy cập tới các bộ vi xử lý khác nó thu hẹp sự thay đổi cần thiết trên các đơn thể. Điều thú vị là từ các version 4.0 của hệ thống Win32 thì đã tiết kiệm thời gian để gọi hệ thống từ Win32 tới Win NT. Sự trợ giúp của chuẩn khác ( như hệ thống file OS/2 với version 4.0) thì hệ điều hành Win NT đã được điều chỉnh. 1.4 Sự giao kết phần cứng và phần mềm. Cấu tạo của các máy ảo cho phép giữ lại giao diện một cách tương tự tới các đơn thể và thay đổi sự thực thi. Do đó, nó sẽ có điều kiện để thực hiện việc thực thi nhờ một sự giao trộn qua lại từ phần cứng và phần mềm. Đối với khả năng dịch vụ thì điều đó không quan trọng. Vì phần cứng làm việc hầu như nhanh hơn, nhưng giá đắt hơn; ngược lại phần mềm làm việc chậm hơn, nhưng giá lại rẻ hơn và có thể thay đổi nhanh chóng hơn. Do đó, khi thiết kế cấu trúc một máy tính , người ta phải lưu ý giải quyết hai nguyên do kể trên. Hình 1.8 là một thí dụ, cho thấy sự phân lớp theo mã máy tượng trưng (trên hình vẽ ký hiệu p-code), mà nó hoặc là được giao kết bằng phần mềm qua bộ biên dịch (compiler) và bộ thông dịch(interpreter), hoặc là có thể được thực hiện bằng phần cứng qua các lệnh máy. Trong trường hợp thứ hai, lớp ở giữa được di chuyển trong phần cứng (xem hình 1.8 ở phía bên trái). Trong đó, mỗi lệnh p-code được thực hiện một chức năng (tức là được lập trình bằng mã microcode) ở trong CPU. Program in p-code Program in p-code Microcode- p-code/machinecode hardware and CPU- CPU- hardware hardware Hình 1.8. Sự giao kết phần cứng và phần mềm bằng mã p-code
- Từ việc nghiên cứu hệ thống đơn vi xử lý như vừa nêu, người ta có thể thiết lập một hệ thống với nhiều bộ vi xử lý. Mỗi lần người ta kết nối các bộ vi xử lý khác nhau thì sẽ nhận cấu trúc hệ thống khác nhau. Cấu trúc đơn giản nhất cho thấy, đó là một CPU mà các bộ vi xử lý đơn được mắc song song qua một bảng kết nối, chẳng hạn qua một bus đa nhiệm (multi-master- systembus). Hình 1.10 mô tả một hệ thống nhiều bộ vi xử lý; trong đó P 1 .Pn là các bộ vi xử lý đơn và M 1 Mn là các bộ nhớ quảng đại. Các đơn thể bộ vi xử lý được định vị trên một phía bảng kết nối, còn phía kia là các đơn thể bộ nhớ. Đối với mỗi việc truy cập mã chương trình hay mã dữ liệu thì một sự kết nối giữa chúng được tạo ra, sự kết nối này tồn tại trong suốt thời gian yêu cầu. P 1 P2 Pn Bảng kết nối (với multi-master-systembus) Nhân Chương Chương M1 M2 HĐH trìnhNSD1 trìnhNSDn Hình 1.10. Hệ thống đa vi xử lý Một cấu trúc như vậy dẫn tới một cách dễ dàng sự giảm sút hiệu suất thực thi, vì bảng kết nối quá tải khi phải thường xuyên truy cập bộ nhớ. Trong trường hợp này, một sự trợ giúp được dẫn ra từ việc quan sát, rằng các bộ vi xử lý hầu như chỉ tham chiếu giới hạn hẹp một phần chương trình. Ở đây, bộ nhớ có thể được phân chia và được dẫn ra một cách dày đặc hơn tới mỗi một bộ vi xử lý (xem hình 1.11). Tất nhiên, sự phân chia này phải được trợ giúp bởi bộ biên dịch để nó phân chia chương trìng người sử dụng một cách thích hợp.
- truy cập đồng bộ ở các phương tiện điều hành. Đó chính là phương hướng được tiếp tục xem xét kỷ lưởng ở các chương sau. 1.6. Các bài tập của chương 1 Bài tập 1.1. Về hệ điều hành Mục đích của hệ điều hành bao gồm việc phân bổ các phương tiện điều hành theo sự thỉnh cầu của người sử dụng. a). Vì sao phải tạo thô một hệ điều hành ? b). Có những phương tiện điều hành nào bạn biết? c). Người sử dụng nào có thể được thỉnh cầu ? (Ở đây khái niệm người sử dụng là một khái niệm khái quát). d). Người sử dụng đòi hỏi những yêu cầu gì ở hệ điều hành? e). Bạn hãy giải thích các khái niệm máy ảo và giao diện. Bài tập 1.2. Về hệ điều hành Unix a). Trên phạm vi các máy tính của cơ quan bạn, hệ điều hành Unix có bao nhiêu gọi hệ thống ? b). Các gọi hệ thống được phân thành máy nhóm chức năng ? c). Một gọi hệ thống được thực thi trên máy tính của bạn như thế nào? Gợi ý:Nếu bạn mở quyển sổ tay về lập trình Assembler hay C, hoặc nếu bạn thực hiện trình Debugger dịch trở lại một gọi hệ thống được viết bằng ngôn ngữ C thành Assembler; khi đó các tệp tin include của C (như syscall.h. trap.h, proc.h, kernel.h )sẽ đưa ra nhiều trợ giúp thú vị.