Lập lịch CPU - ndtien-practice-c
Download
Report
Transcript Lập lịch CPU - ndtien-practice-c
Chương 5: Lập lịch CPU
Nguyên lý hệ điều hành
Nguyễn Đức Thịnh - ĐHNNHN
Chương 5: Lập lịch CPU
Các khái niệm
Tiêu chí lập lịch
Thuật toán lập lịch
Lập lịch luồng
Lập lịch đa xử lý
Các ví dụ
Đánh giá thuật toán
Nguyên lý hệ điều hành
5.2
Nguyễn Đức Thịnh - ĐHNNHN
Mục tiêu
Giới thiệu về lập lịch CPU, cần thiết cho các hệ điều hành đa chương
Một số thuật toán lập lịch CPU
Tiêu chí để lựa chọn thuật toán lập lịch CPU cho một hệ thống
Nguyên lý hệ điều hành
5.3
Nguyễn Đức Thịnh - ĐHNNHN
Khái niệm
Hiệu suất sử dụng CPU tối đa với đa chương trình
Chu trình CPU–I/O Burst– Thực thi tiến trình là một chu trình của
thực thi CPU và I/O wait
Phân phối CPU burst
Nguyên lý hệ điều hành
5.4
Nguyễn Đức Thịnh - ĐHNNHN
Tần số của CPU-burst
Nguyên lý hệ điều hành
5.5
Nguyễn Đức Thịnh - ĐHNNHN
Chu trình thay đổi giữa CPU và
I/O Bursts
Nguyên lý hệ điều hành
5.6
Nguyễn Đức Thịnh - ĐHNNHN
Bộ lập lịch CPU
Lựa chọn trong một trong số các tiến trình trong bộ nhớ đã sẵn sàng
thực thi để cấp phát CPU
Quyết định lập lịch CPU có thể xảy ra khi một tiến trình:
1. Chuyển từ running sang waiting
2. Chuyển từ running sang ready
3. Chuyển từ waiting sang ready
4.
Kết thúc
Các trường hợp 1 và 4 là không bắt buộc (nonpreemptive)
Các trường hợp khác là bắt buộc (preemptive)
Nguyên lý hệ điều hành
5.7
Nguyễn Đức Thịnh - ĐHNNHN
Bộ điều phối (Dispatcher)
Bộ điều phối chuyển điều khiển CPU tới tiến trình được chọn bởi bộ
lập lịch ngắn hạn; các công việc gồm có:
chuyển ngữ cảnh
chuyển sang user mode
nhảy tới vị trí hiện tại trong user program để bắt đầu thực thi tiếp
Độ trễ (Dispatch latency) – thời gian để bộ điều phối dừng một tiến
trình và bắt đầu thực thi tiến tình khác
Nguyên lý hệ điều hành
5.8
Nguyễn Đức Thịnh - ĐHNNHN
Tiêu chí lập lịch
Sử dụng CPU (utilization) – luôn có công việc được giao cho CPU
Thông lượng (throughput) – số lượng tiến trình thực thi xong trong
một đơn vị thời gian
Thời gian xoay vòng (Turnaround time) – thời gian để thực thi một
tiến trình
Thời gian chờ (Waiting time) – thời gian một tiến trình chờ trong
ready queue
Thời gian trả lời (Response time) – thời gian từ lúc một request
được gửi đi đến khi response đầu tiên được tạo ra, chưa gửi đi (đối
với các hệ chia sẻ thời gian)
Nguyên lý hệ điều hành
5.9
Nguyễn Đức Thịnh - ĐHNNHN
Tiêu chí lập lịch
Sử dụng tối đa CPU
Tối đa thông lượng
Tối thiểu thời gian xoay vòng
Tối thiểu thời gian chờ
Tối thiểu thời gian trả lời
Nguyên lý hệ điều hành
5.10
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch First-Come, First-Served (FCFS)
Tiến trình
Burst Time
P1
24
P2
3
P3
3
Nếu các tiến trình được xếp theo thứ tự: P1 , P2 , P3
Biểu đồ Gantt lập lịch như sau:
P1
P2
0
24
P3
27
30
Thời gian chờ: P1 = 0; P2 = 24; P3 = 27
Trung bình: (0 + 24 + 27)/3 = 17
Nguyên lý hệ điều hành
5.11
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch FCFS
Giả sử các tiến trình được xếp theo thứ tự:
P2 , P3 , P1
Biểu đồ Gantt như sau:
P2
0
P3
3
P1
6
30
Thời gian chờ: P1 = 6; P2 = 0; P3 = 3
Thời gian trung bình: (6 + 0 + 3)/3 = 3
Tốt hơn trường hợp trước
Nhận thấy rằng tiến trình ngắn hơn đặt trước tiến trình dài
Nguyên lý hệ điều hành
5.12
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch Shortest-Job-First (SJF)
Tính toán thời gian của CPU burst tiếp theo của mỗi tiến trình. Chọn
tiến trình với thời gian ngắn nhất.
SJF là tối ưu – thời gian chờ trung bình tối thiểu
Tính được thời gian của CPU burst tiếp theo.
Nguyên lý hệ điều hành
5.13
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ về SJF
Tiến trình
Arrival Time
Burst Time
P1
0.0
6
P2
2.0
8
P3
4.0
7
P4
5.0
3
Biểu đồ lập lịch SJF
P4
0
P3
P1
3
9
P2
16
24
Thời gian chờ trung bình = (3 + 16 + 9 + 0) / 4 = 7
Nguyên lý hệ điều hành
5.14
Nguyễn Đức Thịnh - ĐHNNHN
Thời gian của CPU Burst tiếp theo
Chỉ có thể ước lượng
Dựa trên thời gian của các CPU burst trước đó, sử dụng exponential
averaging
1. t thoigian cua CPU burst thun
n
2.
gia triuoc luong cua thoigian CPU burst tieptheo
n 1
3. , 0 1
4. Dinh nghia :
n1 tn 1 n .
Nguyên lý hệ điều hành
5.15
Nguyễn Đức Thịnh - ĐHNNHN
Ước lượng thời gian của
CPU Burst tiếp theo
Nguyên lý hệ điều hành
5.16
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ Exponential Averaging
=0
n+1 = n
Các giá trị trước đó không được sử dụng.
=1
n+1 = tn
Chỉ có CPU burst ngay trước đó được dùng.
Ta khai triển công thức:
n+1 = tn+(1 - ) tn-1 + …
+(1 - )j tn-j + …
+(1 - )n +1 t0
Vì và (1 - ) không lớn hơn 1, các toán hạng sau có trọng số nhỏ
hơn của toán hạng trước.
Nguyên lý hệ điều hành
5.17
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch độ ưu tiên
Độ ưu tiên (priority) được gán cho mỗi tiến trình
CPU được cấp phát cho tiến trình với độ ưu tiên cao nhất
Preemptive
Nonpreemptive
SJF là lập lịch độ ưu tiên với độ ưu tiên là ước lượng thời gian của
CPU burst kế tiếp
Vấn đề Starvation – các tiến trình với độ ưu tiên thấp có thể không
bao giờ được thực thi
Giải pháp Aging – ta tăng dần độ ưu tiên của các tiến trình đó
Nguyên lý hệ điều hành
5.18
Nguyễn Đức Thịnh - ĐHNNHN
Round Robin (RR)
Mỗi tiến trình nhận được một đơn vị thời gian CPU ngắn (time
quantum), thường là 10-100 milliseconds. Hết đơn vị thời gian này,
tiến trình bị bắt buộc tạm ngừng và chuyển vào cuối của ready queue.
Nếu có n tiến trình trong ready queue và time quantum là q đơn vị thời
gian, thì mỗi tiến trình nhận 1/n thời gian CPU trong khoảng thời gian
q đơn vị thời gian. Không có tiến trình nào phải đợi nhiều hơn (n-1)q
đơn vị thời gian.
Hiệu suất
Khi q lớn thì tương đương với FIFO
q phải lớn so với thời gian chuyển ngữ cảnh, nếu không thời gian
phụ trội (để chuyển ngữ cảnh) quá lớn
Nguyên lý hệ điều hành
5.19
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ RR với Time Quantum = 4
Tiến trình
P1
P2
P3
Burst Time
24
3
3
Biểu đồ Gantt:
P1
0
P2
4
P3
7
P1
10
P1
14
P1
18 22
P1
26
P1
30
Thông thường, thời gian turnaround trung bình cao hơn SJF,
nhưng response tốt hơn
Nguyên lý hệ điều hành
5.20
Nguyễn Đức Thịnh - ĐHNNHN
Time Quantum và Chuyển ngữ cảnh
Nguyên lý hệ điều hành
5.21
Nguyễn Đức Thịnh - ĐHNNHN
Turnaround Time thay đổi khi Time Quantum thay đổi
Nguyên lý hệ điều hành
5.22
Nguyễn Đức Thịnh - ĐHNNHN
Hàng đợi đa cấp
Ready queue được chia thành queues riêng biệt:
foreground (tương tác)
background (xử lý theo lô)
Mỗi queue có thuật toán lập lịch của riêng nó:
foreground – RR
background – FCFS
Lập lịch được tiến hành như sau:
Lập lịch theo độ ưu tiên cố định (lập lịch toàn bộ foreground rồi mới
đến background). Có thể xuất hiện starvation.
Time slice – mỗi queue nhận một lượng thời gian CPU để lập lịch
cho các tiến trình trong nó; ví dụ: 80% cho foreground bằng RR và
20% cho background bằng FCFS
Nguyên lý hệ điều hành
5.23
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch hàng đợi đa cấp
Nguyên lý hệ điều hành
5.24
Nguyễn Đức Thịnh - ĐHNNHN
Hàng đợi đa cấp feedback
Một tiến trình có thể di chuyển giữa các hàng đợi; aging có thể
được cài đặt bằng cách này.
Bộ lập lịch hàng đợi đa cấp feedback được định nghĩa bởi các
tham số sau:
số lượng hàng đợi
thuật toán lập lịch cho mỗi hàng đợi
phương thức xác định khi nào nâng bậc một tiến trình
phương thức xác định khi nào hạ bậc một tiến trình
phương thức xác định hàng đợi mà một tiến trình sẽ gia nhập
khi tiến trình đó sử dụng dich vụ
Nguyên lý hệ điều hành
5.25
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ
Ba hàng đợi:
Q0 – RR với time quantum 8 milliseconds
Q1 – RR với time quantum 16 milliseconds
Q2 – FCFS
Lập lịch
Một job mới gia nhập hàng đợi Q0 và được xử lý FCFS. Job đó
nhận được 8 milliseconds thời gian CPU. Nếu sau đó nó chưa kết
thúc, nó được chuyển sang hàng đợi Q1.
Tại Q1 job lại được xử lý FCFS và nhận 16 milliseconds. Nếu nó
vẫn chưa hoàn tất, nó được chuyển tới Q2.
Nguyên lý hệ điều hành
5.26
Nguyễn Đức Thịnh - ĐHNNHN
Multilevel Feedback Queues
Nguyên lý hệ điều hành
5.27
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch luồng
Phân biệt giữa luồng user-level và kernel-level
Mô hình Many-to-one và Many-to-Many, thread library lập lịch cho các
luồng user-level chạy trong một LWP
Còn gọi là process-contention scope (PCS) vì việc lập lịch chỉ
so sánh giữa các luồng trong cùng tiến trình
Luồng trong kernel được lập lịch theo system-contention scope
(SCS) – so sánh giữa các luồng trong hệ thống
Nguyên lý hệ điều hành
5.28
Nguyễn Đức Thịnh - ĐHNNHN
Thư viện Pthread
API cho phép lựa chọn giữa PCS và SCS lúc tạo luồng:
PTHREAD_SCOPE_PROCESS lập lịch luồng sử dụng PCS
scheduling
PTHREAD_SCOPE_SYSTEM sử dụng SCS scheduling.
Nguyên lý hệ điều hành
5.29
Nguyễn Đức Thịnh - ĐHNNHN
Các hàm API lập lịch của Pthread
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
int main(int argc, char *argv[])
{
int i;
pthread_t tid[NUM_THREADS];
pthread_attr_t attr;
/* get the default attributes */
pthread_attr init(&attr);
/* set the scheduling algorithm to PROCESS or SYSTEM */
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
/* set the scheduling policy - FIFO, RT, or OTHER */
pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
/* create the threads */
for (i = 0; i < NUM_THREADS; i++)
pthread_create(&tid[i], &attr, runner, NULL);
Nguyên lý hệ điều hành
5.30
Nguyễn Đức Thịnh - ĐHNNHN
Các hàm API lập lịch của Pthread
/* now join on each thread */
for (i = 0; i < NUM_THREADS; i++)
pthread_join(tid[i], NULL);
}
/* Each thread will begin control in this function */
void *runner(void *param)
{
printf("I am a thread\n");
pthread_exit(0);
}
Nguyên lý hệ điều hành
5.31
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch đa bộ xử lý
Lập lịch CPU trở nên khó khăn hơn khi có nhiều processor
Ta chỉ quan tâm trường hợp: Các bộ xử lý là thuần nhất
(Homogeneous processors)
Asymmetric multiprocessing – chỉ một processor truy cập dữ liệu
hệ thống, giảm nhẹ gánh nặng chia sẻ dữ liệu
Symmetric multiprocessing (SMP) – mỗi processor tự lập lịch, tất
cả các tiến trình trong một ready queue chung, hoặc mỗi processor
có ready queue riêng
Processor affinity – tiến trình giữ nguyên processor mà nó đang
chạy, hạn chế đổi processor
soft affinity (chỉ hạn chế chứ không đảm bảo)
hard affinity (được hỗ trợ bởi lời gọi hệ thống, ví dụ: Linux)
Nguyên lý hệ điều hành
5.32
Nguyễn Đức Thịnh - ĐHNNHN
NUMA và Lập lịch CPU
Nguyên lý hệ điều hành
5.33
Nguyễn Đức Thịnh - ĐHNNHN
Bộ xử lý đa nhân
Xu hướng gần đây đặt nhiều nhân xử lý trên cùng chip vật lý
Nhanh hơn và tiêu thụ điện ít hơn
Đa luồng trên cùng một nhân cũng ngày càng phổ biến
Tận dụng thời gian truy cập bộ nhớ để chạy các luồng khác
Nguyên lý hệ điều hành
5.34
Nguyễn Đức Thịnh - ĐHNNHN
Hệ thống đa nhân đa luồng
Nguyên lý hệ điều hành
5.35
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ trong các OS
Lập lịch trong Solaris
Lập lịch trong Windows XP
Lập lịch trong Linux
Nguyên lý hệ điều hành
5.36
Nguyễn Đức Thịnh - ĐHNNHN
Bảng điều phối trong Solaris
Nguyên lý hệ điều hành
5.37
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch trong Solaris
Nguyên lý hệ điều hành
5.38
Nguyễn Đức Thịnh - ĐHNNHN
Độ ưu tiên trong Windows XP
Nguyên lý hệ điều hành
5.39
Nguyễn Đức Thịnh - ĐHNNHN
Lập lịch trong Linux
Thời gian lập lịch là ngắn
Chia làm hai vùng: time-sharing and real-time
Real-time từ 0 đến 99 và nice value từ 100 đến 140
Nguyên lý hệ điều hành
5.40
Nguyễn Đức Thịnh - ĐHNNHN
Độ ưu tiên và time-slice
Nguyên lý hệ điều hành
5.41
Nguyễn Đức Thịnh - ĐHNNHN
Danh sách các tác vụ theo độ ưu tiên
Nguyên lý hệ điều hành
5.42
Nguyễn Đức Thịnh - ĐHNNHN
Đánh giá thuật toán
Mô hình tất định – lấy một bộ test và đánh giá hiệu suất của các thuật
toán với input đó
Mô hình hàng đợi
Cài đặt
Nguyên lý hệ điều hành
5.43
Nguyễn Đức Thịnh - ĐHNNHN
Đánh giá bộ lập lịch CPU
bằng mô phỏng
Nguyên lý hệ điều hành
5.44
Nguyễn Đức Thịnh - ĐHNNHN
Hết chương 5
Nguyên lý hệ điều hành
Nguyễn Đức Thịnh - ĐHNNHN