I. Mô hình process: a. Khái niệm process: Process là chương trình được thực thi: Được nạp vào bộ nhớ: mã chương trình, mã lệnh……. Có các thông tin trạng thái: thanh ghi PC, các thanh ghi,… Mỗi process thực thi trên một CPU ảo Hệ thống có nhiều process đồng thời: Đa chương 1 CPU. Đa xử lý nhiều CPU trên 1 máy. Phân bố nhiều CPU trên nhiều máy. b. Tổ chức thứ bậc các process: Tạo process mới : hệ điều hành thực hiện Tạo cấu trúc thông tin quản lý Cập nhật vùng nhớ, nạp chương trình Tình huống tạo process: Hệ điều hành tạo process mới. User yêu cầu tạo process mới. Process tạo process mới. Kết thúc process: Chủ động: Kết thúc bình thường Kết thúc có lỗi sai Bị động: Bị kết thúc bởi yêu cầu của process khác Kết thúc do lỗi nghiêm trọng (kết thúc bởi hệ điều hành) Thu hồi tài nguyên Quan hệ thứ bậc Parentchild (chacon) Process tạo: Parent process. Process được tạo: Child process. Hiện thực: UNIX : process group: khi cha bị hủy, con bị hủy theo Windows: không có tổ chức thứ bậc, các process ngang hàng.
Trang 1Vấn đề 1 Quản lý process
I Mô hình process:
a Khái niệm process:
− Process là chương trình được thực thi:
Được nạp vào bộ nhớ: mã chương trình, mã lệnh……
Có các thông tin trạng thái: thanh ghi PC, các thanh ghi,…
− Mỗi process thực thi trên một CPU ảo
− Hệ thống có nhiều process đồng thời:
Đa chương - 1 CPU
Đa xử lý - nhiều CPU trên 1 máy
Phân bố - nhiều CPU trên nhiều máy
b Tổ chức thứ bậc các process:
− Tạo process mới : hệ điều hành thực hiện
Tạo cấu trúc thông tin quản lý
Cập nhật vùng nhớ, nạp chương trình
− Tình huống tạo process:
Hệ điều hành tạo process mới
User yêu cầu tạo process mới
Process tạo process mới
Bị kết thúc bởi yêu cầu của process khác
Kết thúc do lỗi nghiêm trọng (kết thúc bởi hệ điều hành)
Thu hồi tài nguyên
− Quan hệ thứ bậc
Parent-child (cha-con)
Process tạo: Parent process
Process được tạo: Child process
Hiện thực:
UNIX : process group: khi cha bị hủy, con bị hủy theo
Windows: không có tổ chức thứ bậc, các process ngang hàng
c Các trạng thái của process:
1 Mô hình đơn giản:
Trang 22 Mô hình 3 trạng thái:
− Thực thi – Running:
Đang thực thi (đang sử dụng CPU)
Chỉ có 1 running process tại 1 thời điểm trên hệ thống đa chương
− Sẵn sàng – Ready:
Sẵn sàng thực thi, tạm dừng chờ CPU
Có nhiều ready process
Được quản lý bằng ready queue
− Bị chặn – Blocked:
Không thể thực thi cho đến khi có biến cố xảy ra
Có nhiều blocked process
Được quản lý bằng blocked queue
2 Chuyển trạng thái:
− Running -> Blocked(1): chờ biến cố
− Running -> Ready (2): hết thời gian
− Ready - > Running (3): được thực thi
− Blocked -> Ready (4): biến cố xảy ra
Thời điểm chuyển trạng thái:
Ngắt quãng thời gian – Clock Interrupt
Dùng để kiểm soát thời gian
Ngắt quãng thiết bị - I/O Interrupt
Liên quan đến thiết bị I/O
Lệnh gọi hệ thống, lỗi – System call, trap
Khi gọi system calls, hay khi có lỗi
Lỗi truy suất bộ nhớ (Memory Fault)
System Call, trap
Bộ điều phối:(scheduler)
Trang 33 Mô hình 5 trạng thái:
− New: khối thông tin quản lý process đã được tạo Process chưa được nạp vào bộ nhớ chính
− Exit: process đã kết thúc, khối thông tin process vẫn được lưu trữ cho phép rút trích
− Chuyển trạng thái:
NULL -> new
New -> Ready : Khi số process nạp chưa vượt quá giới hạn
Running -> Exit : Process kết thúc xảy ra tương ứng với các tình huống chủ động
4 Trạng thái trì hoãn (Suspend):
− Tiến trình không thực thi được chuyển tạm ra bộ nhớ ngoài -> đình hoãn
− Dành bộ nhớ để nạp các tiến trình thực thi khác
− Mô hình 1 trạng thái đình hoãn:
− Mô hình 2 trạng thái đình hoãn:
• Blocked -> Blocked / Suspend
Không còn process sẵn sang
Còn Process sẵn sang nhưng cần thêm bộ nhớ
• Blocked/ Suspend -> Ready/Suspend
• Ready/Suspend -> Ready
Trang 4 Không còn process ở trạng thái sẵn sàng
Process ở trạng thái sẵn sàng/ đình hoãn có độ ưu tiên cao
Bảng File – File Tables
Bảng xuất nhập – I/O Tables
Memory table:
Thông tin cấp phát bộ nhớ cho process
Bộ nhớ chính
Bộ nhớ phụ
Các thuộc tính bảo vệ vùng nhớ dung chung
Thông tin cần cho việc quản lý bộ nhớ ảo
Hầu hết các thông tin được quản lý bởi hệ thống quản lý file.
− Cấu trúc các bảng phụ thuộc hệ điều hành
− Process trên bộ nhớ -> ảnh process (process image)
− Thông tin quản lý process:
Danh hiệu (ID) cho phép xác định 1 process
+Độ ưu tiên +…
PCB : Process Control Block
− Khối thông tin quản lý process
Trang 5 Được tạo và quản lý bởi hệ điều hành
Được tạo vào thời điểm tạo process
− Chứa các thông tin cần thiết để quản lý process
Process ID
Thông tin trạng thái CPU
Thông tin điều khiển Process
Chuyển đổi ngữ cảnh: 2 công đoạn
III Truyền thông giữa các process
a Tương tác giữa các process
− Nhiều tiến trình thực hiện đồng thời
− Ba dạng tương tác giữa các tiến trình
Các process độc lập
Các process biết nhau gián tiếp (thông qua tài nguyên dùng chung)
Các process biết nhau trực tiếp (các process thuộc về 1 phần mềm)
− Các process dùng chung tài nguyên Việc dùng chung tài nguyên có thể dẫn đến tranh chấp
b Tranh chấp tài nguyên
− Điều kiện dẫn đến tranh chấp:
Hai hoặc nhiều process cùng truy suất tài nguyên dùng chung
Thứ tự truy xuất ảnh hưởng đến kết quả thực hiện của các process (truy xuất có cập nhật, sửa đổi)
− Giải pháp giải quyết triệt để vấn đề tranh chấp tài nguyên giữa các process:
− Khi có một process vào vùng tranh chấp thì tất cả các process khác phải ở ngoài vùng tranh chấp.
Các vấn đề nảy sinh:
− Deadlock
− Starvation
Các yêu cầu:
(1) Tại một thời điểm chỉ có tối đa một process đang ở trong vùng tranh chấp.( Điều kiện tiên quyết)
(2) Không có giả sử gì về tốc độ và số lượng CPU
(3) Không có process nào ở ngoài vùng tranh chấp có thể ảnh hưởng đến process khác
(4) Không có process nào chờ vô hạn định
Trang 6 Áp dụng:
− Nguyên tắc chung:
• Đi vào vùng tranh chấp (enter_region())
Kiểm tra điều kiện “được vào”
+ Thỏa: báo hiệu đã vào + Không thỏa: chờ
• Ra khỏi vùng tranh chấp (leave_region())
Báo hiệu: “đã ra”
Cơ chế chờ:
Có 2 dạng chờ:
− Busy-Waiting
Chờ bằng vòng lặp
Lặp vòng kiểm tra điều kiện “được vào”
Dùng trong các giải pháp loại trừ tương hỗ
Bằng phần mềm
Phần cứng hỗ trợ
− Sleep-Wakeup
Chờ bằng trạng thái Blocked:
Process chờ vào vùng tranh chấp -> chuyển sang trạng thía Blocked (sleep)
Process ra khỏi vùng tranh chấp báo hiệu -> đánh thức process chờ
Giải pháp loại trừ tương hỗ có sự hỗ trợ của hệ điều hành
Giải pháp:
Phần mềm giải quyết loại trừ tương hỗ:
− Giải thuật đơn giản:
P0flag=0;
while ( TRUE ){
while (flag==0) flag=1; //vào critical_region();
flag=0; //ra noncritical_region();
}
(chưa giải quyết được)
− Giải thuật luân phiên nghiêm ngặt: (Strict Alternation)
Giải quyết trường hợp 2 process (P0 và P1) và một tài nguyên
Hai process dùng một biến turn để xác định đến phiên process nào vào vùng tranh chấp
Khởi động turn = 0
Trang 7P0 kiểm tra biến turn:
P0 vào vùng tranh chấp nếu turn = 0P0 chờ khi turn = 1
P0 gán turn = 1 khi rời vùng tranh chấp
Đánh giá giải thuật luân phiên nghiêm ngặt
Đạt yêu cầu (1) và yêu cầu (4)
Giả sử P0 vào vùng tranh chấp 100 lần/đơn_vị_thời_gian , P1 vào vùng tranh chấp 1 lần/đơn_vị_thời_gian: do luân phiên nghiêm ngặt nên P0 chỉ được vào vùng tranh chấp
1 lần/đơn_vị_thời_gian không thỏa yêu cầu (2)
Giả sử P1 có lỗi ngoài vùng tranh chấp: P0 dừng mãi mãi tại vòng while không thỏa yêu cầu (3)
− Giải thuật Peterson:
Xét trường hợp 2 process (P0 và P1) và một tài nguyên
Hai process dùng chung:
Biến turn: xác định đến phiên process nào vào vùng tranh chấp.
Mảng boolean interested[2]: thể hiện process sẵn sàng vào vùng tranh chấp.
Interested[0] : P0 sẵn sàng vào vùng tranh chấp
khởi động interested[0] = interested[1]=FALSE
#define FALSE 0
#define TRUE 1
#define N 2 //số process
void enter_region( int process)
{
while (turn == process && interested[other] == TRUE);
Trang 8 Phần cứng hỗ trợ giải quyết loại trừ tương hỗ:
− TSL (Test Set Lock):
Đọc giá trị một từ nhớ vào một thanh ghi sau đó ghi giá trị khác 0 (thường là 1) vào từ nhớ
Thao tác đọc và ghi nêu trên là trong cùng một lệnh – Thao tác đơn vị (atomic, primitive)
Ứng dụng lệnh TSL trong loại trừ tương hỗ:
Giải quyết trường hợp n process
n process dùng chung 1 biến flag, khợi động flag = 0
enter_region:
leave_region:
− CPMXCHG (IA32) – Compare and Exchange
Cú pháp: CMPXCHG DEST, SRC
Hoạt động: CMP accumulator(AL/AX/EAX) với toán hạng đích.Nếu bằng nhau thì toán hạng nguồn
sẽ được copy sang toán hạng đích Còn không thì toán hạng đích sẽ được copy sang accumulator
Swap thao tác trên nội dung của 2 từ; như chỉ thị TSL, nó được thực thi theo tính nguyên tử
Hoạt động loại trừ tương hỗ: 1 biến luận lý toàn cục lock được khai báo và được khởi tạo là false Ngoài ra, mỗi quá trình cũng có 1 biến luận lý cục bộ key Cấu trúc của quá trình Pi được hiển thị như sau:
}
Trang 9Dùng để báo hiệu (signaling)
Khi process chờ báo hiệu thì vào trong trạng thái blocked, không chờ bằng vòng lặp
Khởi động giá trị - init() ; (Semaphore nhận giá trị không âm.)
Giảm giá trị - down() / wait() / P() ; (Giảm giá trị semaphore 1 đơn vị
Nếu semaphore âm thì process gọi thao tác down() sẽ bị blocked, và vào hàng đợi semaphore.)
Tăng giá trị - up() / signal() / V(); (Tăng giá trị semaphore 1 đơn vị
Nếu semaphore không dương thì có 1 process trong hàng đợi semaphore được chuyển sang trạng thái ready )
s.count++;
if (s.count <= 0){
lấy 1 process P ra khỏi s.queue;
đưa process P vào read queue;
} }
d/ Áp dụng semaphores xử lý loại trừ tương hỗ:
Giải quyết trường hợp n process bằng cách dùng chung một semaphore s, khởi động s = 0
while(TRUE) {
down(s); //kiểm tra điều kiện
critical_region(); // vùng tranh chấp
up(s); //thông báo trạng thái
noncritcal_region(); //vùng không tranh chấp
}
e/ Phân loại semaphores
• Couting semaphore (dạng đếm)còn gọi là general semaphore
• Binary Semaphore (dạng nhị phân), trị semaphore thuộc {0,1}
f/ Mutex
• Dạng hiện thực đơn giản của binary semaphore
• Cấu trúc dữ liệu:
struct mutex {
Trang 10Lấy 1 process P ra khỏi s.queue;
Đưa process P vào read queue;
} }
g/ Monitors
Module phần mềm có chức năng tương tự semaphore
Tính chất:
• Dữ liệu cục bộ chỉ có thể truy xuất được bởi các procedure của monitor
• Process vào monitors bằng cách gọi procedure của monitor
• Tại một thời điểm chỉ có tối đa một process đang vận hành trong monitors
Vấn đề đồng bộ
− Bài toán Producer/Consumer
Nhận xét:
• Tổ chức buffer có dạng xoay vòng (circular buffer)
• Producer nhanh hơn: mất dữ liệu
• Consumer nhanh hơn: trùng dữ liệu
Giải quyết:
#define N 100 /* kích thước buffer */
typedef int semaphore; /* kiểu semaphore */
Trang 11}
}
− Bài toán Dining Philosophers
Có 5 triết gia ngồi quanh 1 bàn tròn
Mỗi triết gia có 1 đĩa thức ăn, khi ăn cần 2 nĩa
Hoạt động của triết gia: luân phiên giữa suy nghĩ và ăn
Khi triết gia đói: cần nĩa trái và nĩa phải đồng thời, nếu có 2 nĩa thì ăn
Sau khi ăn thì trả 2 nĩa và típ tục suy nghĩ
Nếu 5 triết gia đồng thời cầm nĩa trái, chờ nĩa phài : deadlock
Nếu 5 triết gia đồng thời trả nĩa trái, suy nghĩ, đồng thời cầm nĩa phải: Starvation
#define N 5 // tổng số triết gia
#define LEFT (i+N-1)%N // số thứ tự của triết gia bên trái
#define RIGHT (i+1)%N // số thứ tự của triết gia bên phải
#define THINKING 0 // đang suy nghĩ
#define HUNGRY 1 // triết gia đói
#define EATING 2 // đang ăn
typedef int semaphore; // semaphore
void philosopher( int i) // i: số thứ tự của triết gia từ 0 đến 4
{
while ( TRUE )
{
Trang 12take_forks(i); // lấy nĩa
}
void put_forks( int i)
{
− Bài toán Reader and Writer
Reader: đọc dữ liệu từ nguồn
Writer: ghi dữ liệu vào nguồn
Nhiều reader có thể cùng đọc dữ liệu Tại 1 thời điểm reader và writer ko thể cùng thao tác trên
nguồn dữ liệu Tại 1 thời điểm chỉ có 1 writer ghi dữ liệu
typedef int semaphore;
if (rc == 0) up(&db); // nếu đây là reader cuối cùng
use_data_read();
}
}
Trang 13void writer( void )
{
while ( TRUE ){
think_up_data();
}
}
− Bài toán Baber shop
Một cửa hiệu cắt tóc có một thợ, một ghế cắt tóc và N ghế cho khách đợi
Nếu không có khách hàng, anh thợ cắt tóc sẽ ngồi vào ghế cắt tóc và ngủ thiếp đi
Khi một khách hàng vào tiệm, anh ta phải đánh thức người thợ
Nếu một khách hàng vào tiệm khi người thợ đang bận cắt tóc cho khách hàng khác, người mới
vào sẽ phải ngồi chờ nếu có ghế đợi trống, hoặc rời khỏi tiệm nếu đã có N người đợi
while ( TRUE ) {
down(&mutex);
if (waiting<CHAIR) {
up(&mutex);
} }
IV Điều phối
a/ Khái niệm:
Trang 14− Điều phối (scheduling):
Xác định thời điểm và chọn process được thực thi
Do bộ điều phối(scheduler) thực hiện
− Các dạng điều phối trên hệ thống đa chương (3 phân cấp điều phối):
Thời gian dài:
Xác định chương trình đưa vào hệ thống để thực thi
Liên quan việc tạo process mới; kiểm soát bậc MultiPrograming
Thời gian trung bình:
Quyết định chuyển process sang trạng thái đình hoãn và ngừng lại
Liên quan việc đưa process vào và ra bộ nhớ
Thời gia ngắn:
Chọn ready process để cho thực thi
Được gọi khi có các sự kiện:
+ Clock Interrupt + I/O interrupt + Operaing system call + Signal
− Các chiến lược điều phối:
⇒ Non-preemptive:
Không dừng process đang thực thi
Một process đang thực thi sẽ thực thi cho đến khi kết thúc hoặc bị chặn
Thực hiện chức năng điều phối
− Cơ chế chính sách điều phối:
Tình huống:
Process có nhiều thread / process con
Process biết mức độ quan trọng của các thread/process con
Cơ chế:
Kernel thực hiện giải thuật điều phối có thông số
Cơ chế của Kernel cho phép qui định chính sách điều phối thông qua các thông số
Chính sách điều phối:
User process cung cấp thông số cho giải thuật điều phối
Qui định chính sách điều phối
− Tiêu chuẩn:
Mọi hệ thống :
Cân bằng phảiCông bằng
Hệ thống xử lí theo nhóm
Thông lượng caoThời gian thực hiện ngắn
Trang 15Hiệu quả sử dụng CPU cao
Hệ thống tương tác:
Thời gian đáp ứng ngắnThời gian đáp ứng phù hợp với tiêu chuẩn công việc
b/ Mục tiêu điều phối:
− Thời gian đáp ứng
− Thông lượng
− Sử dụng CPU hiệu quả
c/ Các phương pháp điều phối:
(1) Độ ưu tiên (Priorities)
(2) First – In – First – Out (FIFO)
(3) Round Robin (RR)
(4) Shortest Job First (SJF)
(5) Shortest Remaining Time (SRT)
(6) Multi-level Feedback Queues (MFQ)
Bài tập xem phần ôn giữa kì: OS.OnGiuaKi.doc
-Vấn đề 2 Quản lý bộ nhớ
I Quản lý bộ nhớ ảo:
− Bộ nhớ ảo (virtual memory) là kỹ thuật do hệ điều hành thực hiên với hỗ trợ của phần cứng
Phân biệt địa chỉ luận lý (địa chỉ ảo ) và địa chỉ vật lý
− Chương trình được viết trên không gian địa chỉ ảo, là thông số của CPU và hệ điều hành
CPU IA 32: 246bytes, Windows: 232bytes
− Khi thực thi, hệ điều hành nạp chương trình vào bộ nhớ, chuyển đổi địa chỉ ảo thành địa chỉ vật lý, thực thi trên bộ nhớ vật lý
Phần thực thi được nạp vào bộ nhớ
Phần còn lại đặt trên đĩa
Cho phép dùng chung không gian địa chỉ giữa các process
Hỗ trợ liên kết động
Bộ nhớ ảo dạng phân trang (paging)
Bộ nhớ ảo dạng phân đoạn (segmentation)
Bộ nhớ ảo dạng phân đoạn có phân trang (paged segmentation/ segmentation with paging)
a/ Tổ chức phân trang:
− Không gian địa chỉ ảo chia thành các trang (page)
Kích thước vài KB, vài MB
− Không gian địa chỉ vật lý bao gồm các khung trang (page frame/ frame)
Kích thước khung trang = kích thước trang
Chứa các trang
Trang 16 Các trang của một process không cần ở trên các khung trang liên tục.
− Có bảng trang (page table) quản lý các trang
Mỗi process có một bảng trang
b/ Bảng trang:
− Có N dòng, với N là số trang -> mỗi dòng tương ứng với 1 trang
− Cấu trúc phần tử bảng trang:
Control bits: các bit điều khiển, phục vụ việc thay thế trang hiệu quả
Bit R (referenced): R = 1 nếu trang đang có được truy xuất trên bộ nhớ
Bit M (modified): M = 1 nếu trang có được ghi trên bộ nhớ
Valid bit/ Present bit:
Valid =0 nếu trang chưa có trên bộ nhớ
Valid = 1 nếu trang đang có trên bộ nhớ
Frame number(Frame #)
Số thứ tự khung trang đang chứa trang
c/ Chuyển đổi địa chỉ:
− Chương trình được viết trong không gian đĩa chỉ ảo (luận lý) và được nạp từng phần và thực thi trong không gian địa chỉ thực (vật lý) Cần có chương trình chuyển đổi địa chỉ ảo sang địa chỉ thực cho mỗi thao tác truy xuất bộ nhớ
− MMU: thành phần của CPU thực hiện việc chuyển đổi địa chỉ ảo sang địa chỉ vật lý
− Vai trò bảng trang: chứa thông tin cần thiết cho việc chuyển đổi địa chỉ
− Hoạt động:
− Địa chỉ ảo theo phân trang
Page Number: số thứ tự trang
Offset /Displacement: địa chỉ trong trang
− Địa chỉ vật lý
Page number: số thứ tự khung trang
Offset /Displacement: địa chỉ trong khung trang
− Truy xuất theo địa chỉ ảo:
Tách page # và offset từ địa chỉ ảo
Chuyển page # thành frame # bằng cách truy xuất bảng trang
A Tìm phần tử quản lý trang
B Kiểm tra Valid bit
1 Valid = 1:
a Thay page# bằng frame#
b Truy xuất dữ liệu trên khung với vị trí offset
2 Valid = 0 :lỗi trang
a Tìm trang trên đĩa
Trang 17b Tìm 1 khung trống (có thề phải thay thế trang nếu khung đấy).
c Sao chép trang vào khung trống
d Cập nhật bảng trang (valid =1, frame# mới)
e Thực hiện truy xuất như bước 1
Sơ đồ + bài tập xem OS.OnGiuaKi.doc
− Tổ chức theo nhiều cấp giảm phí tổn bộ nhớ
− Chỉ bảng trang đang sử dụng mới được nạp vào bộ nhớ giảm phí tổn bộ nhớ
Sơ đồ
Bảng trang dạng bảng băm
− Thường đúng với không gian địa chỉ > 32 bit
− Số phần tử bảng trang << số trang
+ Chỉ số phần tử bảng trang tương ứng với các giá trị hàm
− Tổ chức lưu trữ thông tin trang
+ hashvalue = hash(pageAddress) : tính giả trị hàm băm + pagetable[hashvalue].add(pageinfo) : truy xuất
Sơ đồ
Bảng trang nghịch đảo
− Số phần tử bằng số khung trang
+ Kích thước nhỏ + Chỉ cần 1 bảng trên hệ thống + Vị trí trong bảng là frame number
− Mỗi phần tử bao gồm:
+ Số thứ tự trang tương ứng + Thông tin về process đang sở hữu trang
− Truy xuất theo cơ chế hash
+ Có chuỗi liên kết (chain) giải quyết trường hợp có nhiều trang cũng như số
thứ tự trên bộ nhớ
Sơ đồ
− Tăng tốc độ truy xuất
− TLB (Translation Look aside Buffer)