phát nhiều rảnh ghi trên đĩa vật lý như là các đĩa nhỏ khi cần. Hiển nhiên, tổng kích thước của tất cả đĩa nhỏ là nhỏ hơn kích thước của không gian đĩa vật lý sẵn có.
processes
kernel
hardware
processes
processes
processes
Có thể bạn quan tâm!
- Nguyên lý hệ điều hành - 2
- Nguyên lý hệ điều hành - 3
- Cấu Trúc Client-Server Của Windows Nt
- Biểu Diễn Lưu Đồ Hàng Đợi Của Lập Lịch Tiến Trình
- Nguyên lý hệ điều hành - 7
- Chương Trình C Đa Luồng Dùng Pthread Api
Xem toàn bộ 306 trang tài liệu này.
kernel
kernel
kernel
VM1
VM2
VM3
Virtual machine implementation
hardware
Programming interface
Hình 1.11 Các mô hình hệ thống. (a) Máy không ảo. (b) máy ảo
Do đó, người dùng được cho máy ảo của chính họ. Sau đó, họ có thể chạy bất kỳ hệ điều hành hay gói phần mềm nào sẵn dùng trên phần cứng bên dưới. Đối với hệ thống IBM VM, một người dùng thường chạy CMS - một hệ điều hành giao tiếp đơn người dùng. Phần mềm máy ảo được quan tâm với đa máy ảo đa chương trên một máy vật lý nhưng không cần xem xét bất cứ phần mềm hỗ trợ người dùng. Việc sắp xếp này có thể cung cấp một sự phân chia hữu ích thành hai phần nhỏ hơn của vấn đề thiết kế một hệ thống giao tiếp đa người dùng.
1.2.6 Cài đặt và thiết kế hệ thống
Mặc dù khái niệm máy ảo là hữu ích nhưng rất khó cài đặt. Nhiều công việc được yêu cầu cung cấp một bản sao chính xác của máy bên dưới. Máy bên dưới có hai chế độ: chế độ người dùng và chế độ kiểm soát. Phần mềm máy ảo có thể chạy trong chế độ kiểm soát vì nó là hệ điều hành. Chính máy ảo có thể thực hiện chỉ trong chế độ người dùng. Tuy nhiên, chỉ khi máy vật lý có hai chế độ thì nó mới là máy ảo. Do đó, chúng ta phải có một chế độ người dùng ảo và một chế độ kiểm soát ảo. Cả hai đều chạy trong chế độ người dùng vật lý. Các hoạt động đó gây ra sự chuyển từ chế độ người dùng tới chế độ kiểm soát trên một máy thật (như lời gọi hệ thống hay
cố gắng thực hiện một chỉ thị được cấp quyền) cũng phải gây ra sự chuyển đổi từ chế độ người dùng ảo tới chế độ kiểm soát ảo trên một máy ảo.
Có hai ưu điểm chính trong việc sử dụng máy ảo. Thứ nhất, bằng cách bảo vệ hoàn toàn các tài nguyên hệ thống, máy ảo cung cấp mức độ bảo mật cao. Thứ hai, máy ảo cho phép phát triển hệ thống được thực hiện mà không cần phá vỡ hoạt động hệ thống thông thường.
Mỗi máy ảo hoàn toàn bị cô lập từ các máy ảo khác, vì thế chúng ta không gặp phải bất kỳ vấn đề bảo mật nào như tài nguyên hệ thống khác hoàn toàn được bảo vệ. Thí dụ, các ứng dụng không được tin cậy được tải về từ Internet có thể được chạy trong một máy ảo riêng. Một bất lợi của môi trường này là không có sự chia sẻ tài nguyên trực tiếp. Hai tiếp cận cung cấp sự chia sẻ được cài đặt. Thứ nhất, có thể chia sẻ một đĩa nhỏ. Cơ chế này được làm mẫu sau một đĩa được chia sẻ vật lý. Thứ hai, có thể định nghĩa một mạng của các máy ảo, mỗi máy ảo có thể gửi thông tin qua các mạng giao tiếp này nhưng nó được cài đặt bằng phần mềm.
Những hệ thống máy ảo như thế là một phương tiện truyền thông hữu hiệu cho việc nghiên cứu và phát triển hệ điều hành. Thông thường, thay đổi một hệ điều hành là một tác vụ khó. Vì các hệ điều hành là các chương trình lớn và phức tạp, sự thay đổi trên một phần này có thể gây một lỗi khó hiểu trong những phần khác. Sức mạnh của hệ điều hành làm cho trường hợp này là cực kỳ nguy hiểm. Vì hệ điều hành thực hiện trong chế độ kiểm soát, một thay đổi sai trong một con trỏ có thể gây lỗi và có thể phá hủy toàn hệ thống tập tin. Do đó, cần phải kiểm tra tất cả thay đổi của hệ điều hành một cách cẩn thận.
Tuy nhiên, hệ điều hành chạy trên máy và điều khiển hoàn toàn máy đó. Do đó, hệ thống hiện hành phải bị dừng và ngừng việc sử dụng trong khi những thay đổi được thực hiện và kiểm tra. Thời điểm này thường được gọi là thời gian phát triển hệ thống. Vì nó làm cho hệ thống không sẵn dùng đối với người sử dụng nên thời gian phát triển hệ thống thường được lập thời biểu vào buổi tối hay cuối tuần, khi tải hệ thấp.
Một hệ thống máy ảo có thể loại trừ nhiều vấn đề này. Người lập trình hệ thống được cung cấp chính máy ảo của họ, và phát triển hệ thống được thực hiện trên máy ảo thay vì trên máy vật lý thật sự. Một hệ điều hành thông thường ít khi bị phá
vỡ vì phát triển hệ thống. Mặc dù những thuận lợi này, nhưng rất ít cải tiến trên kỹ thuật này được thực hiện gần đây.
Câu hỏi và bài tập chương 1
1. Trình bày khái niệm về tài nguyên hệ thống, cho ví dụ minh hoạ
2. Nêu các chức năng cơ bản của hệ điều hành
3. Trình bày mối quan hệ giữa hệ điều hành và các thành phần trong hệ thống, từ đó nêu khái niệm hệ điều hành
4. Phân biệt hệ điều hành đơn nhiệm và đa nhiệm, cho ví dụ thông qua hệ điều hành DOS và Windows
5. Thông qua các hệ điều hành đã biết, cho ví dụ minh hoạ để làm rò các tính chất của hệ điều hành
6. So sánh cơ chế bảo vệ của hệ điều hành Windows 9x, Windows 2000 và Windows XP
7. Nêu các chương trình hệ thống, chương trình ứng dụng trong hệ điều hành DOS và Windows
8. Nêu các thành phần của hệ điều hành, lấy ví dụ minh hoạ từ các hệ điều hành cụ thể
9. Lời gọi hệ thống là gì, các cách truyền tham số cho lời gọi hệ thống
10. Máy ảo là gì? Vì sao cần máy ảo? Cho biết các máy ảo đã được cài đặt và sử dụng trong thực tế
Chương 2: QUẢN LÝ TIẾN TRÌNH
2.1 Tiến tình
Hệ thống máy tính đơn nhiệm chỉ cho phép một chương trình được thực hiện tại một thời điểm. Chương trình này có toàn quyền điều khiển hệ thống và có truy xuất tới tất cả tài nguyên của hệ thống. Hệ thống đa nhiệm hay sử dụng trong máy tính hiện nay cho phép nhiều chương trình được nạp vào bộ nhớ và được thực hiện đồng thời, do đó cần điều khiển phức tạp hơn và phân chia nhiều hơn giữa các tiến trình.
Một hệ điều hành đa nhiệm sẽ phải thực hiện đồng thời nhiều chương trình của người sử, đồng thời phải quan tâm đến các thao tác của người sử dụng với hệ thống như vào ra dữ liệu, trao đổi dữ liệu giữa các tiến trình, … Do đó, một hệ thống đa nhiệm sẽ chứa tập hợp các tiến trình: tiến trình hệ điều hành thực hiện mã hệ thống, tiến trình người dùng thực hiện mã người dùng. Tất cả tiến trình này đều có thể được phối hợp thực hiện đồng thời bằng một hay nhiều CPU. Bằng cách chuyển đổi CPU giữa các tiến trình, hệ điều hành đa nhiệm có thể làm cho máy tính hoạt động với hiệu suất cao hơn.
2.1.1 Khái niệm tiến trình
Trong hệ điều hành đa nhiệm, một người dùng có thể chạy nhiều chương trình tại một thời điểm: bộ xử lý văn bản, trình duyệt web, e-mail, … Thậm chí nếu người dùng chỉ thực hiện một tiến trình tại một thời điểm, thì hệ điều hành đa nhiệm cũng cần các tiến trình hệ thống hỗ trợ hoạt động bên trong như quản lý bộ nhớ, quản lý vào ra dữ liệu, …
1) Tiến trình
Một tiến trình là một chương trình đang thực hiện. Một tiến trình không chỉ là chương trình, mà còn bao gồm hoạt động hiện tại như giá trị của bộ đếm chương trình, nội dung các thanh ghi của bộ xử lý, ngăn xếp tiến trình để chứa dữ liệu tạm thời trong tiến trình thực hiện tiến trình (như các tham số phương thức, các địa chỉ trả về, các biến cục bộ) và phần dữ liệu chứa các biến toàn cục.
Một chương trình là một thực thể thụ động, như nội dung của các tập tin được lưu trên đĩa, trái lại một tiến trình là một thực thể chủ động, với một bộ đếm chương trình xác định chỉ thị lệnh tiếp theo sẽ thực hiện và tập hợp tài nguyên có liên quan.
Mặc dù hai tiến trình có thể được liên kết với cùng chương trình nhưng chúng được chứa hai thứ tự thực hiện riêng rẽ. Thí dụ, nhiều người dùng có thể đang chạy các bản sao của chương trình gửi nhận thư, hay cùng người dùng có thể nạp lên nhiều bản sao của một chương trình soạn thảo văn bản. Mỗi bản sao của chúng là một tiến trình riêng và mặc dù các phần văn bản là giống nhau, các phần dữ liệu khác nhau. Ngoài ra, một tiến trình có thể tạo ra nhiều tiến trình khác khi nó thực hiện.
2) Trạng thái tiến trình
Khi một tiến trình thực hiện, nó thay đổi trạng thái. Trạng thái của tiến trình được định nghĩa bởi các hoạt động hiện hành của tiến trình đó. Mỗi tiến trình có thể ở một trong những trạng thái sau:
- Mới (new): tiến trình đang được tạo ra
- Đang chạy (running): các chỉ thị đang được thực hiện
- Chờ (waiting): tiến trình đang chờ sự kiện xảy ra (như hoàn thành việc nhập/xuất hay nhận tín hiệu)
- Sẵn sàng (ready): tiến trình đang chờ được nhận một bộ xử lý.
- Kết thúc (terminated): tiến trình hoàn thành việc thực hiện
terminated
new
admit
dispatch
exit
ready
running
interrupt
I/O or event completion
I/O or event wait
waiting
Hình 2.1 Lưu đồ trạng thái tiến trình
3) Khối điều khiển tiến trình
Mỗi tiến trình được quản lý trong hệ điều hành bởi một khối điều khiển tiến trình (Process Control Block - PCB). Một PCB được hiển thị trong (Hình 2.2). Nó chứa nhiều trường thông tin gắn liền với một tiến trình cụ thể, gồm:
sách.
Hình 2.2 Khối điều khiển tiến trình
- Con trỏ tiến trình (pointer): chứa con trỏ để liên kết các PCB thành danh
- Trạng thái tiến trình (process state): trạng thái có thể là mới, sẵn sàng, đang
chạy, chờ đợi, kết thúc, …
- Bộ đếm chương trình (program counter): bộ đếm hiển thị địa chỉ của chỉ thị kế tiếp sẽ được thực hiện cho tiến trình này.
- Các thanh ghi (registers): các thanh ghi khác nhau về số lượng và loại, phụ thuộc vào kiến trúc máy tính. Chúng gồm các bộ tổng (accumulators), các thanh ghi chỉ mục (index), các con trỏ ngăn xếp, các thanh ghi đa năng (general-purpose registers), cùng với thông tin mã điều kiện (condition-code information). Cùng với bộ đếm chương trình, thông tin trạng thái này phải được lưu khi xuất hiện một ngắt, cho phép tiến trình lưu vị trí lệnh sẽ thực hiện tiếp (Hình 2.3).
- Thông tin lập lịch CPU (CPU scheduling information): thông tin gồm độ ưu tiên của tiến trình, các con trỏ chỉ tới các hàng đợi lập lịch, và các tham số lập lịch khác.
- Thông tin quản lý bộ nhớ (Memory management information): thông tin này có thể gồm những thông tin như giá trị của các thanh ghi cơ sở (base) và thanh ghi giới hạn (limit), các bảng trang hay các bảng phân đoạn, phụ thuộc hệ thống bộ nhớ được tổ chức bởi hệ điều hành.
- Thông tin tính toán (accounting information): thông tin này gồm lượng CPU và thời gian thực được dùng, công việc hay số tiến trình, …
- Thông tin trạng thái nhập/xuất (I/O status information): thông tin này gồm danh sách của thiết bị nhập/xuất được cấp phát tiến trình này, một danh sách các tập tin đang mở, …
PCB đơn giản phục vụ như kho chứa cho các thông tin khác nhau khi chuyển đổi CPU từ tiến trình này sang tiến trình khác.
Hình 2.3 Lưu đồ chuyển CPU từ tiến trình này sang tiến trình khác
2.1.2 Lập lịch tiến trình
Mục tiêu của việc đa chương là có nhiều tiến trình thực hiện tại mọtt thời điểm để tận dụng tối đa hiệu suất sử dụng CPU. Mục tiêu của lập lịch là chuyển CPU giữa các tiến trình thường xuyên để người dùng có thể giao tiếp với mỗi chương trình trong khi các chương trình đang chạy. Một hệ thống có 1 bộ vi xử lý chỉ có thể chạy một tiến trình tại một thời điểm, nếu nhiều hơn một tiến trình tồn tại, các tiến trình còn lại phải chờ cho tới khi CPU rỗi mới có thể được thực hiện, do đó cần lập lịch cho CPU.
1) Hàng đợi lập lịch
Khi các tiến trình được đưa vào hệ thống, chúng được đặt vào hàng đợi. Hàng đợi chứa tất cả tiến trình trong hệ thống. Các tiến trình đang nằm trong bộ nhớ chính sẵn sàng và chờ để thực hiện được giữ trong một danh sách được gọi là hàng đợi sẵn sàng. Hàng đợi này thường được lưu như một danh sách liên kết. Đầu của hàng đợi sẵn sàng chứa hai con trỏ: một chỉ đến PCB đầu tiên và một chỉ tới PCB cuối cùng trong danh sách. Chúng ta bổ sung thêm trong mỗi PCB một trường con trỏ chỉ tới PCB kế tiếp trong hàng đợi sẵn sàng.
Hệ điều hành cũng có các hàng đợi khác. Khi một tiến trình được cấp phát CPU, nó thực hiện trong một khoảng thời gian và cuối cùng kết thúc, được ngắt, hay chờ một sự kiện xác định xảy ra như hoàn thành một yêu cầu nhập/xuất. Trong trường hợp có yêu cầu nhập/xuất, một yêu cầu có thể là ổ băng từ hay một ổ đĩa từ. Vì hệ thống có nhiều tiến trình, đĩa từ có thể bận với yêu cầu nhập/xuất của các tiến trình khác. Do đó, tiến trình phải chờ đĩa từ. Danh sách tiến trình chờ một thiết bị nhập/xuất cụ thể được gọi là hàng đợi thiết bị. Mỗi thiết bị có hàng đợi của nó (Hình 2.4)
Hình 2.4 Hàng đợi sẵn sàng và các hàng đợi nhập/xuất khác nhau