Đồ án Xây dựng chương trình mô phỏng các giải thuật định thời cho CPU

MỤC LỤC

 

TỔNG QUAN VỀ ĐỀ TÀI

CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI 5

1.1. BỐI CẢNH VÀ LÝ DO THỰC HIỆN ĐỀ TÀI 5

1.2. MỤC TIÊU CỦA ĐỀ TÀI 5

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT 6

2.1. GIỚI THIỆU 6

2.1.1. Mục tiêu lập lịch 6

2.1.2. Các đặc điểm của tiến trình 6

2.1.3. Điều phối không độc quyền và điều phối độc quyền 7

2.2. CÁC KHÁI NIỆM CƠ BẢN 9

2.2.1. Khái niệm giờ CPU 9

2.2.2. Các trạng thái của tiến trình liên quan đến giờ CPU 9

2.2.3. Khái niệm lập lịch cho CPU 11

2.3. CÁC THUẬT TOÁN LẬP LỊCH 12

2.3.1. First Come First Served(FCFS) 12

2.3.2. Round robin(RR) 13

2.3.3. Shortest Job First(SJF) 14

2.3.4. Shortest Remain Time(SRT) 15

CHƯƠNG 3. CÀI ĐẶT THUẬT TOÁN 16

3.1. MÔ HÌNH CÀI ĐẶT THUẬT TOÁN 16

3.1.1. Cấu trúc dữ liệu 16

3.1.2. Thuật toán xử lý chung 17

3.2. THUẬT TOÁN 19

3.2.1. First In First Out(FIFO) 19

3.2.2. Round Robin(RR) 21

3.2.3. Shortest Job First(SRT) 23

3.2.4. Shortest Remain Time(SRT) 25

CHƯƠNG 4. XÂY DỰNG CHƯƠNG TRÌNH DEMO 27

4.1. CÁC MODUN CHÍNH 27

4.2. MÔI TRƯỜNG PHÁT TRIỂN 27

4.3. GIAO DIỆN CỦA CHƯƠNG TRÌNH 27

4.3.1. About 27

4.3.2. Input 28

4.3.3. Output 30

4.3.4. Control 30

4.4. ĐÁNH GIÁ VÀ NHẬN XÉT 32

 

 

doc31 trang | Chuyên mục: Hệ Điều Hành | Chia sẻ: dkS00TYs | Lượt xem: 4070 | Lượt tải: 1download
Tóm tắt nội dung Đồ án Xây dựng chương trình mô phỏng các giải thuật định thời cho CPU, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ẫn tới giải thuật này có nhiều dị bản khác nhau và sẽ tối ưu hay không tối ưu phụ thuộc vào trưng dụng CPU.
Shortest Remain Time(SRT)
Tương tự như SJF nhưng trong thuật toán này, độ ưu tiên thực hiện các tiến trình dựa vào thời gian cần thiết để thực hiện nốt tiến trình(bằng tổng thời gian trừ đi thời gian đã thực hiện). Như vậy, trong thuật toán này cần phải thường xuyên cập nhật thông tin về giời gian đã thực hiện của tiến trình. Đồng thời, chế độ phân bổ lại giờ CPU cũng phải được áp dụng nếu không sẽ làm mất tình ưu việc của thuật toán.
Ưu điểm :
Thời gian chờ đợi,tồn tại trong hệ thống của mỗi tiến trình đều ngắn
Thuật toán tối ưu nhất
Nhược điểm :
Việc cài đặt thuật toán khá phức tạp
Cần quản lý chặt chẽ việc điều phối các tiến trình
Quản lý thời gian đến của mỗi tiến trình
CÀI ĐẶT THUẬT TOÁN
Mô hình cài đặt thuật toán
Cấu trúc dữ liệu
Tiến trình
Cấu trúc dữ liệu đề xuất cho việc quả lý tiến trình được xây dựng thành một lớp nhằm tạo điều kiện cho việc quản lý các tiến trình được dễ dàng.
Code
class TIENTRINH
{
	private:
	int stt;
	int t_den;
	int t_xuly;
	int t_cho;
	int finish;
	public:
	TIENTRINH();
	TIENTRINH(int stt,int t_den,int t_xuly);
	void insert(int stt,int t_den,int t_xuly);
	int getT_DEN();
	void setT_DEN(int a);
	int getT_XULY();
	void setT_XULY(int a);
	int getT_CHO();
	void setT_CHO(int a);
	int getFINISH();
	void setFINISH(int a);
	int getSTT();
};
Stt : số thứ tự của tiến trình
t_den : thời gian đến của tiến trình
t_xuly : thời gian xữ lý của tiến trình
t_cho : thời gian chờ của tiến trình
finish : thời gian hoàn thành của tiến trình
và các hàng thiết lập và lấy thông tin
Ready List
Ready list tổ chức theo danh sách liên kết chỉ chứa số thứ tự của các tiến trình.Và việc tổ chức các tiến trình vào ra trong ready list tuân theo các giải thuật được dùng trên danh sách liên kết.
Code
struct DS
 {
	int id;
	DS *next;
 };
typedef DS* list;
Id: chứa số thứ tự tiến trình trong Ready List
Input
Input được tổ chức theo danh sách liên kết đơn nhằm lưu giữ các giá trị khi nhập các tiến trình và là dữ liệu để phục hồi lại các tiến trình nhằm để tránh các trường hợp sai lệnh và mất dữ liệu khi xử lý.
Code
struct Input
 {
	int den,xuly;
	Input *next;
 };
typedef Input* IN;
den: thời gian đến của tiến trình khi nhập liệu
xử lý: thời gian xử lý của tiến trình khi nhập liệu
Thuật toán xử lý chung
Việc cài đặt thuật toán được mô phòng theo cách làm việc của CPU và tất các thuật toán con đều theo mô hình thuật toán này.
Tiến trình ở đầu danh sách sẽ được ưu tiên xữ lý trước và nó chiếm dụng CPU tại thời điểm đó.
Việc đi kèm thèo là xem xét thời gian xữ lý các tiến trình đã hết chưa. Nếu đã hết thì nghĩa là hoàn thành việc xữ lý, ngược lại thì tiếp tục xữ lý theo thuật toán.
Xong mỗi chu kỳ của CPU ( 1 quantum ) thì cập nhật lại danh sách để loại bỏ các tiến trình đã hoàn thành hay sắp xếp hay thêm các tiến trình mới vào
Hình 3.1.2-1. Sơ đồ thuật toán đề xuất chung cho các giải thuật
Thuật toán
First In First Out(FIFO)
Hình 3.2.1-1.Thuật toán FIFO
Code
void FIFO()
{
 int time=0,ok=1,i,j=0,ID;
 while(ok)
 {
	 ID=-1;
	 PrintRL(ready,time);
	 listBox2->Items->Add("------------------");
	 for(i=0;i<quantum;i++)
	 {
	 // nap readylist luc bat dau
	 if(tt[j].getT_DEN()==time && j<n )
	 { them(j);
	j++;
	listBox2->Items->Add("Time = "+time.ToString()+" : Nap tien trinh : "+(tt[j-1].getSTT()).ToString());
	 }
	 // nen ton tai tt trong readylist thi lam,ko thi thoat quantum
	 if(ready)
	 {
	ID=(*ready).id;
	listBox2->Items->Add("Time = "+time.ToString()+" : xu ly tien trinh : "+(tt[ID].getSTT()).ToString());
	if(tt[ID].getT_XULY()>0)
	 {
	// tang thoi gian cho cua cac tt trong ready
	tangT_CHO(ready,ID);
	tt[ID].setT_XULY(tt[ID].getT_XULY() - 1);
	if(tt[ID].getT_XULY()==0) xoa();
	 }
	time++;
	if(tt[ID].getT_XULY()==0)
	 {	tt[ID].setFINISH(time);
	 listBox2->Items->Add("Time = "+time.ToString()+" : hoan thanh tien trinh : "+(tt[ID].getSTT()).ToString());
	break;
	 }
	 }
	 else
	 {
	 tangT_CHO(ready,-1);
	 time++;
	 break;
	 }
	 }
	 listBox2->Items->Add("-------Hoan thanh chu ky-------");
	 listBox2->Items->Add("------------------");
	 if(checkFinish()) ok=0;
 }
 TIME=time
}
Round Robin(RR)
Hình 3.2.2-1.Round Robin
Code
void RR()
{
 int time=0,ok=1,i,j=0,ID,check;
 while(ok)
 {
	 ID=-1;
	 check=0;
	 PrintRL(ready,time);
	 listBox2->Items->Add("------------------");
	 for(i=0;i<quantum;i++)
	 {// nap readylist luc bat dau
	 if(tt[j].getT_DEN()==time && j<n )
	 { them(j);
	j++;
	listBox2->Items->Add("Time = "+time.ToString()+" : Nap tien trinh : "+(tt[j-1].getSTT()).ToString());
	 }
	 // nen ton tai tt trong readylist thi lam,ko thi thoat quantum
	 if(ready)
	 {
	ID=(*ready).id;
	listBox2->Items->Add("Time = "+time.ToString()+" : xu ly tien trinh : "+(tt[ID].getSTT()).ToString());
	if(tt[ID].getT_XULY()>0)
	 {
	// tang thoi gian cho cua cac tt trong ready
	tangT_CHO(ready,ID);
	tt[ID].setT_XULY(tt[ID].getT_XULY() - 1);
	if(tt[ID].getT_XULY()==0) xoa(); 
	 }
	time++;
	if(tt[ID].getT_XULY()==0)
	 {	tt[ID].setFINISH(time);
	listBox2->Items->Add("Time = "+time.ToString()+" : hoan thanh tien trinh : "+(tt[ID].getSTT()).ToString());
	check=1; // ****
	break; // ****
	 }
	 }
	 else
	 {
	 tangT_CHO(ready,-1);
	 time++;
	 break;
	 }
	 }
	 if(!check) hoanvi();
	 listBox2->Items->Add("-------Hoan thanh chu ky-------");
	 listBox2->Items->Add("------------------");
	 if(checkFinish()) ok=0;
 }
 TIME=time;
}
Shortest Job First(SRT)
Hình 3.2.3-1. Shortest Job First
Code
void SJF()
{
 int time=0,ok=1,i,j=0,ID;
 while(ok)
 {
	 ID=-1;
	 PrintRL(ready,time);
	 listBox2->Items->Add("------------------");
	 for(i=0;i<quantum;i++)
	 {
	 // nap readylist luc bat dau
	 if(tt[j].getT_DEN()==time && j<n )
	 { them(j);
	j++;
	listBox2->Items->Add("Time = "+time.ToString()+" : Nap tien trinh : "+(tt[j-1].getSTT()).ToString());
	 }
	 // nen ton tai tt trong readylist thi lam,ko thi thoat quantum
	 if(ready)
	 {
	ID=(*ready).id;
	listBox2->Items->Add("Time = "+time.ToString()+" : xu ly tien trinh : "+(tt[ID].getSTT()).ToString());
	if(tt[ID].getT_XULY()>0)
	 {
	// tang thoi gian cho cua cac tt trong ready
	tangT_CHO(ready,ID);
	tt[ID].setT_XULY(tt[ID].getT_XULY() - 1);
	if(tt[ID].getT_XULY()==0) xoa();
	 }
	time++;
	if(tt[ID].getT_XULY()==0)
	 {	tt[ID].setFINISH(time);
	listBox2->Items->Add("Time = "+time.ToString()+" : hoan thanh tien trinh : "+(tt[ID].getSTT()).ToString());
	break;
	 }
	 }
	 else
	 {
	 tangT_CHO(ready,-1);
	 time++;
	 break;
	 }
	 }
	 sapxep();
	 listBox2->Items->Add("-------Hoan thanh chu ky-------");
	 listBox2->Items->Add("------------------");
	 if(checkFinish()) ok=0;
 }
 TIME=time;
}
Shortest Remain Time(SRT)
Hình 3.2.4-1.Shortest Remain Time
Code
void SRT()
{
 int time=0,ok=1,i,j=0,ID;
 while(ok)
 {
	 ID=-1;
	 PrintRL(ready,time);
	 listBox2->Items->Add("------------------");
	 for(i=0;i<quantum;i++)
	 {
	 // nap readylist luc bat dau
	 if(tt[j].getT_DEN()==time && j<n )
	 { them(j);
	j++;
	listBox2->Items->Add("Time = "+time.ToString()+" : Nap tien trinh : "+(tt[j-1].getSTT()).ToString());
	 }
	 // nen ton tai tt trong readylist thi lam,ko thi thoat quantum
	 if(ready)
	 {
	ID=(*ready).id;
	sapxep();
	if( ID != (*ready).id ) break; //****
	listBox2->Items->Add("Time = "+time.ToString()+" : xu ly tien trinh : "+(tt[ID].getSTT()).ToString());
	if(tt[ID].getT_XULY()>0)
	 {
	// tang thoi gian cho cua cac tt trong ready
	tangT_CHO(ready,ID);
	tt[ID].setT_XULY(tt[ID].getT_XULY() - 1);
	if(tt[ID].getT_XULY()==0) xoa();
	 }
	time++;
	if(tt[ID].getT_XULY()==0)
	 {	tt[ID].setFINISH(time);
	listBox2->Items->Add("Time = "+time.ToString()+" : hoan thanh tien trinh : "+(tt[ID].getSTT()).ToString());
	break;
	 }
	 }
	 else
	 {
	 tangT_CHO(ready,-1);
	 time++;
	 break;
	 }
	 }
	 sapxep();
	 listBox2->Items->Add("-------Hoan thanh chu ky-------");
	 listBox2->Items->Add("------------------");
	 if(checkFinish()) ok=0;
 }
 TIME=time;
}
XÂY DỰNG CHƯƠNG TRÌNH DEMO
Các modun chính
Input: dùng để nhập dữ liệu
Nhập từ file
Nhập từ bàn phím
Ouput: hiển thị các tiến trình đã nhập
Control: lựa chọn các giải thuật
First In First Out 
Round Robin
Shortest Job First
Shortest Remain Time
Result
About: thông ti về chương trình
Info
Help
Exit: thoát khỏi chương trình
Môi trường phát triển
Sử dụng ngôn ngữ VC++ và giao diện windows để cho thao tác nhập dữ liệu, mô phỏng được dễ dàng.
Giao diện của chương trình
About
Info
Hình 4.3.1-1.Hiển thị thông tin về đồ án môn học
Help
Hình 4.3.1-2.Hiển thị trợ giúp cho việc thao tác trên chương trình
Input
File
Hình 4.3.2-1.Nhập dữ liệu từ file
Bàn phím
Hình 4.3.2-2.Nhập dữ liệu từ bàn phím
Output
Hình 4.3.3-1.Hiển thị thông tin các tiến trình đã nhập
Control
FIFO
Hình 4.3.4-1.Điều khiển giải thuật FIFO và tùy chỉnh quantum tùy ý
RR
Hình 4.3.4-2.Round Robin
SJF
Hình 4.3.4-3.Shortest Job First
SRT
Hình 4.3.4-4.Shortest Remain Time
Result
Hình 4.3.4-5.Hiển thị bản so sánh giữa các tiến trình và lựa chọn giải thuật tối ưu nhất
Đánh giá và nhận xét
Giao diện chương trình bắt mắt
Các modun được bố trí hợp lí và gọn gàn
KẾT LUẬN
Xây dựng thành công chương trình mô phỏng các giải thuật định thời CPU
Qua đó nắm bắt rõ các giải thuật lập lịch
TÀI LIỆU
Nguyễn Kim Tuấn.Giáo Trình Lý Thuyết Hệ Điều Hành.Đại học Huế,trường đại học khoa học,khoa công nghê thông tin, Huế 06/2004, 217t
Đặng Vũ Tùng. Giáo Trình Lý Thuyết Hệ Điều Hành.Sở giáo dục và đào tạo Hà Nội, nhà xuất bản Hà Nội 2005, 165t.
Trần Hồ Thủy Tiên.Giáo Tìình Nguyên Lý Hệ Điều Hành.Đại học Đà Nẵng, Trường đại học Bách Khoa, Khoa Công Nghệ Thông Tin 01/04/2010.

File đính kèm:

  • docĐồ án Xây dựng chương trình mô phỏng các giải thuật định thời cho CPU.doc