Tiến trình - ndtien-practice-c

Download Report

Transcript Tiến trình - ndtien-practice-c

Nguyên lý hệ điều hành

Chương 3: Tiến trình

Nguyễn Đức Thịnh - ĐHNNHN

Chương 3: Tiến trình

      Khái niệm về tiến trình Lập lịch tiến trình Các hàm xử lý liên quan Truyền thông liên tiến trình (IPC) Ví dụ về các hệ IPC Truyền thông trong hệ Client-Server

Nguyên lý hệ điều hành 3.2

Nguyễn Đức Thịnh - ĐHNNHN

Mục tiêu

 Khái niệm tiến trình – chương trình đang thực thi, yếu tố cơ bản của mọi quá trình tính toán  Mô tả các đặc trưng khác nhau của tiến trình, bao gồm lập lịch, tạo và ngắt, và truyền thông  Truyền thông trong hệ client-server

Nguyên lý hệ điều hành 3.3

Nguyễn Đức Thịnh - ĐHNNHN

Khái niệm tiến trình

 OS thực thi nhiều chương trình:   Hệ xử lý theo lô – job Hệ chia sẻ thời gian – user program hoặc task  Các thuật ngữ

job

process

có thể dùng thay thế cho nhau  Tiến trình – chương trình đang thực thi; thực thi tiến trình phải là tuần tự  Tiến trình gồm có:    program counter stack data section

Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.4

Tiến trình trong bộ nhớ

Nguyên lý hệ điều hành 3.5

Nguyễn Đức Thịnh - ĐHNNHN

Trạng thái tiến trình

 Khi một tiến trình thực thi, nó thay đổi

trạng thái (state)

new

: Tạo mới tiến trình    

running

: Đang thực thi các chỉ thị lệnh (instruction)

waiting

: Đang chờ một

event

ready

: Sẵn sàng để được gán cho một processor

terminated

: Thực thi hoàn tất

Nguyên lý hệ điều hành 3.6

Nguyễn Đức Thịnh - ĐHNNHN

Lưu đồ trạng thái

Nguyên lý hệ điều hành 3.7

Nguyễn Đức Thịnh - ĐHNNHN

Process Control Block (PCB)

Thông tin gắn với mỗi tiến trình:  Trạng thái tiến trình       Program counter CPU register Thông tin lập lịch CPU Thông tin quản lý bộ nhớ Thông tin kế toán (ai đang sử dụng bao nhiêu resource) Thông tin trạng thái I/O

Nguyên lý hệ điều hành 3.8

Nguyễn Đức Thịnh - ĐHNNHN

Process Control Block (PCB)

Nguyên lý hệ điều hành 3.9

Nguyễn Đức Thịnh - ĐHNNHN

CPU thay đổi giữa các tiến trình

Nguyên lý hệ điều hành 3.10

Nguyễn Đức Thịnh - ĐHNNHN

Hàng đợi (queue) tiến trình

Job queue

– tất cả các tiến trình trong hệ thống 

Ready queue

– các tiến trình đang ở trong bộ nhớ và sẵn sàng thực thi 

Device queues

– các tiến trình đang chờ thiết bị I/O  Các tiến trình di chuyển giữa các queue, không cố định

Nguyên lý hệ điều hành 3.11

Nguyễn Đức Thịnh - ĐHNNHN

Ready Queue và các I/O Device Queues

Nguyên lý hệ điều hành 3.12

Nguyễn Đức Thịnh - ĐHNNHN

Biểu diễn của lập lịch tiến trình

Nguyên lý hệ điều hành 3.13

Nguyễn Đức Thịnh - ĐHNNHN

Bộ lập lịch

Bộ lập lịch dài hạn

đưa vào ready queue (hoặc job scheduler) – lựa chọn tiến trình để 

Bộ lập lịch ngắn hạn

(hoặc CPU scheduler) – lựa chọn tiến trình thực thi kế tiếp và phân bố CPU

Nguyên lý hệ điều hành 3.14

Nguyễn Đức Thịnh - ĐHNNHN

Lập lịch trung hạn

Nguyên lý hệ điều hành 3.15

Nguyễn Đức Thịnh - ĐHNNHN

Bộ lập lịch

 Bộ lập lịch ngắn hạn được gọi thường xuyên (milliseconds)  tốc độ nhanh) (cần  Bộ lập lịch dài hạn được gọi không thường xuyên (seconds, minutes)  (có thể chậm)  Bộ lập lịch dài hạn điều khiển

mức độ đa chương trình

 Tiến trình có thể có các giới hạn:  

I/O-bound process

dùng CPU lien tục – dành nhiều thời gian I/O hơn tính toán, ít

CPU-bound process

– chiếm nhiều thời gian CPU

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.16

Chuyển ngữ cảnh (context switch)

 Khi CPU chuyển tới tiến trình khác, hệ thống phải lưu trạng thái của tiến trình cũ và nạp trạng thái (đã được lưu trước đó) của tiến trình mới thông qua

context switch

.

Ngữ cảnh (Context)

của một tiến trình được biểu diễn trong PCB  Thời gian chuyển ngữ cảnh ảnh hưởng tới hiệu suất hệ thống; hệ thống không làm công việc gì hữu ích trong khi chuyển ngữ cảnh  Thời gian phụ thuộc vào hỗ trợ của phần cứng

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.17

Khởi tạo tiến trình

Parent

process tạo ra

children

processes, và tiếp tục, tạo thành một cây của các process  Tiến trình được định danh và quản lý thông qua

process identifier

(

pid

)  Chia sẻ tài nguyên  Parent và children chia sẻ tất cả các kiểu tài nguyên   Children chia sẻ tập con của tài nguyên của parent Parent và child không chia sẻ tài nguyên  Thực thi  Parent và children thực thi đồng thời  Parent đợi children kết thúc

Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.18

Khởi tạo tiến trình

 Không gian địa chỉ   Child sao chép lại parent Child có một program được nạp vào trong nó  Ví dụ UNIX   Lời gọi hệ thống

fork

tạo tiến trình mới Lời gọi

exec

được dùng sau

fork

để thay thế không gian bộ nhớ của tiến trình với một chương trình mới

Nguyên lý hệ điều hành 3.19

Nguyễn Đức Thịnh - ĐHNNHN

Khởi tạo tiến trình

Nguyên lý hệ điều hành 3.20

Nguyễn Đức Thịnh - ĐHNNHN

Nguyên lý hệ điều hành

Chương trình C tạo các process

} { int main() pid_t pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Failed"); exit(-1); } } else if (pid == 0) { /* child process */ execlp("/bin/ls", "ls", NULL); } else { /* parent process */ /* parent will wait for the child to complete */ wait (NULL); printf ("Child Complete"); exit(0);

Nguyễn Đức Thịnh - ĐHNNHN 3.21

Ví dụ về cây process trong Solaris

Nguyên lý hệ điều hành 3.22

Nguyễn Đức Thịnh - ĐHNNHN

Kết thúc tiến trình

 Tiến trình thực thi lệnh cuối cùng và yêu cầu OS xóa nó (

exit

)   Dữ liệu output từ child tới parent (thông qua

wait

) Tài nguyên tiến trình được giải phóng bởi OS  Parent có thể kết thúc thực thi của children process (

abort

)   Child vượt quá tài nguyên được phân bổ Task được gán cho child không cần thiết nữa  Nếu parent kết thúc  Một số OS không cho phép child tiếp tục nếu parent của nó kết thúc – Tất cả children kết thúc -

cascading termination Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.23

Truyền thông liên tiến trình

     Tiến trình trong một hệ thống có thể

độc lập

hoặc

hợp tác

Việc hợp tác giữa các tiến trình có thể ảnh hưởng hoặc bị ảnh hưởng bởi tiến trình khác, bao gồm chia sẻ dữ liệu Lý do để phối hợp các tiến trình:   Chia sẻ thông tin Tăng tốc tính toán   Module hóa Sự tiện dụng Phối hợp tiến trình cần

truyền thông liên tiến trình

(

IPC

) Hai mô hình của IPC   Bộ nhớ chia sẻ Truyền thông điệp

Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.24

Mô hình truyền thông

Nguyên lý hệ điều hành 3.25

Nguyễn Đức Thịnh - ĐHNNHN

Phối hợp tiến trình

 Các tiến trình

độc lập

không ảnh hưởng hoặc bị ảnh hưởng bởi việc thực thi của tiến trình khác  Các tiến trình

phối hợp

có thể ảnh hưởng hoặc bị ảnh hưởng bởi việc thực thi của tiến trình khác  Ưu điểm của phối hợp tiến trình:   Chia sẻ thông tin Tăng tốc độ tính toán   Module hóa Sự tiện dụng

Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.26

Vấn đề Producer-Consumer

 Trong phối hợp tiến trình,

producer

được tiêu thụ bởi

consumer

process process tạo ra thông tin  

unbounded-buffer

không đề ra giới hạn của buffer

bounded-buffer

giả định buffer có size cố định

Nguyên lý hệ điều hành 3.27

Nguyễn Đức Thịnh - ĐHNNHN

Giải pháp bộ nhớ chia sẻ với Buffer giới hạn

 Dữ liệu chia sẻ

#define BUFFER_SIZE 10 typedef struct { . . .

} item; item buffer[BUFFER_SIZE]; int in = 0; int out = 0;

 Giải pháp này chỉ có thể dùng BUFFER_SIZE-1 phần tử

Nguyên lý hệ điều hành 3.28

Nguyễn Đức Thịnh - ĐHNNHN

Buffer giới hạn – Producer

} while (true) { /* Tạo một item */ while (((in = (in + 1) % BUFFER_SIZE) == out) ; /* không làm gì – buffer đầy */ buffer[in] = item; in = (in + 1) % BUFFER_SIZE;

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.29

Nguyên lý hệ điều hành

Buffer giới hạn – Consumer

while (true) { while (in == out) ; // chưa có item mới } // Lấy một item ra khỏi buffer item = buffer[out]; out = (out + 1) % BUFFER_SIZE; return item;

Nguyễn Đức Thịnh - ĐHNNHN 3.30

Truyền thông liên tiến trình – Truyền thông điệp

     Cơ chế để tiến trình giao tiếp và đồng bộ hóa các hoạt động Hệ thống thông điệp – tiến trình giao tiếp với nhau không dựa vào các biến chia sẻ IPC cung cấp các hàm: 

send

(

message

) – thông điệp với kích thước cố định  Nếu

P

Q

muốn giao tiếp, cần phải: 

receive

(

message

) tạo ra một

communication link

giữa chúng  Trao đổi thông điệp thông qua send/receive Cài đặt của communication link:   vật lý (ví dụ: bộ nhớ chia sẻ, bus phần cứng) logic (ví dụ: thuộc tính logic)

Nguyên lý hệ điều hành 3.31

Nguyễn Đức Thịnh - ĐHNNHN

Các vấn đề cài đặt

      Các link được cài đặt như thế nào?

Một link có thể được gắn với nhiều hơn hai process không?

Có thể có bao nhiêu link giữa mỗi cặp process?

Dung lượng của mỗi link?

Kích thước của thông điệp cố định hay thay đổi?

Một chiều hay hai chiều?

Nguyên lý hệ điều hành 3.32

Nguyễn Đức Thịnh - ĐHNNHN

Truyền thông trực tiếp

 Tiến trình sử dụng các hàm:  

send

(

P, message

) – send a message to process P

receive

(

Q, message

) – receive a message from process Q  Thuộc tính của liên kết:   Liên kết được tạo ra tự động Một liên kết được gán với đúng một cặp tiến trình   Mỗi cặp tiến trình được cấp đúng một liên kết Liên kết có thể một chiều, nhưng thường là hai chiều

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.33

Truyền thông gián tiếp

 Thông điệp được điều hướng và nhận từ mailbox (còn gọi là port)  Mỗi mailbox có một định danh  Các tiến trình truyền thông được nếu có mailbox chung  Thuộc tính của liên kết truyền thông:  Liên kết chỉ được tạo nếu các tiến trình chia sẻ mailbox chung    Một liên kết có thể được gán với nhiều tiến trình Mỗi cặp tiến trình có thể chia sẻ vài liên kết truyền thông Liên kết có thể một chiều hoặc hai chiều

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.34

Truyền thông gián tiếp

 Các chức năng:  tạo mailbox mới   gửi và nhận thông điệp thông qua mailbox hủy một mailbox  Các hàm cơ bản:

send

(

A, message

) – gửi một thông điệp tới mailbox A

receive

(

A, message

) – nhận một thông điệp từ mailbox A

Nguyên lý hệ điều hành 3.35

Nguyễn Đức Thịnh - ĐHNNHN

Truyền thông gián tiếp

 Chia sẻ mailbox   

P 1 , P 2 ,

P 3

chia sẻ mailbox A

P 1

, gửi;

P 2

P 3

nhận Ai nhận được thông điệp?

 Giải pháp  Một liên kết chỉ được gán với nhiều nhất hai process   Chỉ cho phép một process nhận thông điệp tại mỗi thời điểm Cho phép hệ thống lựa chọn receiver tùy ý. Sender được thông báo về receiver.

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.36

Đồng bộ hóa

 Truyền thông điệp có thể là blocking hoặc là non-blocking 

Blocking

được coi là

đồng bộ (synchronous)

 

Blocking send:

block sender cho đến khi thông điệp được nhận

Blocking receive:

block receiver cho đến khi thông điệp sẵn sàng 

Non-blocking

được coi là

không đồng bộ (asynchronous)

Non-blocking send:

sender gửi thông điệp và tiếp tục 

Non-blocking receive:

hoặc null receiver nhận một thông điệp hợp lệ

Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.37

Bộ đệm (buffer)

 Hàng đợi các thông điệp được gắn với liên kết; được cài đặt theo một trong ba cách: 1.

Dung lượng không – không có thông điệp Sender phải đợi receiver 2.

Dung lượng giới hạn – giới hạn

n

Sender phải đợi nếu link đầy thông điệp 3.

Dung lượng không giới hạn – không giới hạn số thông điệp Sender không bao giờ đợi

Nguyên lý hệ điều hành 3.38

Nguyễn Đức Thịnh - ĐHNNHN

Ví dụ về các hệ IPC - POSIX

 POSIX chia sẻ bộ nhớ:  Đầu tiên tiến trình tạo ra segment bộ nhớ chia sẻ segment id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR);  Tiến trình muốn truy cập bộ nhớ chia sẻ phải trỏ tới đó: shared memory = (char *) shmat(id, NULL, 0);  Bây giờ tiến trình có thể viết tới bộ nhớ chia sẻ sprintf(shared memory, "Writing to shared memory");  Khi kết thúc tiến trình có thể giải phóng bộ nhớ chia sẻ khỏi không gian bộ nhớ của nó: shmdt(shared memory);

Nguyễn Đức Thịnh - ĐHNNHN Nguyên lý hệ điều hành 3.39

Ví dụ về các hệ IPC - Mach

 Truyền thông trong Mach dựa trên thông điệp:   Lời gọi hệ thống cũng là thông điệp Mỗi tác vụ nhận hai mailbox lúc được tạo ra - Kernel và Notify  Chỉ ba lời gọi hệ thống là cần thiết cho truyền thông điệp msg_send(), msg_receive(), msg_rpc()  Mailbox cần cho việc truyền thông, được tạo ra thông qua port_allocate()

Nguyên lý hệ điều hành 3.40

Nguyễn Đức Thịnh - ĐHNNHN

Ví dụ về các hệ IPC – Windows XP

 Truyền thông điệp thông qua

local procedure call (LPC)

  Chỉ truyền thông được giữa process trên cùng hệ thống Sử dụng cổng (như mailbox) để tạo và duy trì kênh truyền thông  Cách thức truyền thông như sau:  Client tạo một handle tới đối tượng các cổng kết nối của hệ thống.

 Client gửi một yêu cầu kết nối.

 Server tạo hai communication ports và trả về handle của một port tới client.

 Client và server sử dụng handle của port tương ứng để gửi thông điệp hoặc callback và nghe (listen) các trả lời (replies).

Nguyên lý hệ điều hành 3.41

Nguyễn Đức Thịnh - ĐHNNHN

Local Procedure Call trong Windows XP

Nguyên lý hệ điều hành 3.42

Nguyễn Đức Thịnh - ĐHNNHN

Truyền thông trong các hệ Client-Server

 Sockets  Remote Procedure Calls  Đường ống (Pipes)  Remote Method Invocation (Java)

Nguyên lý hệ điều hành 3.43

Nguyễn Đức Thịnh - ĐHNNHN

Sockets

 Socket được định nghĩa là

điểm kết thúc của truyền thông

 Bao gồm địa chỉ IP và cổng  Socket

161.25.19.8:1625

chỉ cổng

1625

của host

161.25.19.8

 Truyền thông giữa một cặp socket

Nguyên lý hệ điều hành 3.44

Nguyễn Đức Thịnh - ĐHNNHN

Truyền thông Socket

Nguyên lý hệ điều hành 3.45

Nguyễn Đức Thịnh - ĐHNNHN

Remote Procedure Calls

 Remote procedure call (RPC) trừu tượng khái niệm procedure calls giữa các tiến trình trong một hệ thống nối mạng 

Stub

– đại diện phía client (client-side proxy) cho procedure thực sự trên server  Client side stub định vị server và

truyền (marshall)

tham số  Server side stub nhận thông điệp này, unpack các tham số được truyền, và thực thi procedure trên server

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.46

Thực thi của RPC

Nguyên lý hệ điều hành 3.47

Nguyễn Đức Thịnh - ĐHNNHN

Đường ống (Pipes)

 Đóng vai trò như một ống dẫn cho phép hai process giao tiếp với nhau 

Các vấn đề

 

Truyền thông một chiều hay hai chiều?

Trong trường hợp hai chiều, bán song công (half-duplex) hay song công toàn phần (full-duplex)?

 

Có nhất thiết phải đề ra liên hệ (ví dụ: parent-child) giữa các process trong truyền thông?

Các đường ống có thể được dùng trong một network không?

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.48

Ordinary Pipes

Ordinary Pipes

cho phép truyền thông theo kiểu producer-consumer chuẩn  Producer viết tới một đầu cuối (end) (

write-end

của pipe)  Consumer đọc từ đầu cuối còn lại (

read-end

của pipe)  Ordinary pipe là một chiều  Yêu cầu quan hệ parent-child giữa các tiến trình tham gia truyền thông

Nguyên lý hệ điều hành Nguyễn Đức Thịnh - ĐHNNHN 3.49

Ordinary Pipes

Nguyên lý hệ điều hành 3.50

Nguyễn Đức Thịnh - ĐHNNHN

Pipe được đặt tên (Named Pipes)

 Named Pipes mạnh hơn ordinary pipes  Truyền thông hai chiều  Không cần quan hệ parent-child giữa các tiến trình tham gia truyền thông  Nhiều tiến trình có thể dùng named pipe để truyền thông  Được cài đặt trong UNIX và Windows

Nguyên lý hệ điều hành 3.51

Nguyễn Đức Thịnh - ĐHNNHN

Nguyên lý hệ điều hành

Hết chương 3

Nguyễn Đức Thịnh - ĐHNNHN