HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆTHÔNG TIN ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ BÀI TẬP MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH VIẾT CHƯƠNG TRÌNH BẰNG NGÔN NGỮ C MÔ TẢ THUẬT TOÁN LẬP LỊCH CHO CPU KHÔNG ƯU TIÊN THEO THUẬT TOÁN SJF (SHORTER JOB FIRT) Sinh viên thực hiện: Nguyễn Thanh Hải MSSV: AT160221 Trần Trung Hiếu MSSV: AT160519 Vũ Minh Hiếu MSSV: AT160520 Lớp: AT16C405 Người hướng dẫn: TS. Nguyễn Đào Trường Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã Hà Nội, 2021 NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN MỤC LỤC LỜI NÓI ĐẦU .........................................................................................................1 Chương 1 KHÁI QUÁT VỀ THUẬT TOÁN SJF(SHORTER JOB FIRT) ......2 1.1 Khái quát về thuật toán Shorter job first. ................................................... 2 1.11 Những điều cần biết trước khi tìm hiểu về thuật toán...............................2 1.1.2 Khái niệm về thuật toán Shorter job first .................................................2 1.2 Giải thích thuật toán và ví dụ. .................................................................... 2 1.2.1 Giải thích thuật toán ................................................................................2 1.2.2 Ví dụ .........................................................................................................3 Chương 2 MÔ TẢ THUẬT TOÁN SJF(SHORTER JOB FIRT) BẰNG C ......4 2.1 Mô tả thuật toán SJF bằng C. ..................................................................... 4 2.1.1 Giải thích thuật toán ................................................................................4 2.1.2 Kết quả .....................................................................................................8 KẾT LUẬN ..............................................................................................................9 TÀI LIỆU THAM KHẢO ....................................................................................10 TỪ NGỮ VIẾT TẮT ..........................................................................................10 LỜI NÓI ĐẦU Trong thời đại ngày nay, quản lý thời gian chưa bao giờ dễ dàng, rất nhiều lần chúng ta có thể tiêu xài một cách hoang phí. Thế nên trong suốt chiều dài lịch sử chúng ta luôn tìm cách để tối ưu thời gian. Máy tính cũng vậy. Nó thật sự cần các thuật toán để tránh việc lãng phí tài nguyên cũng như tối ưu thời gian hoạt động nhất có thể. Hiểu được vấn đề này, nhóm chúng em học hỏi, tìm tòi để viết báo cáo về thuật toán SJF (Shortest Job First) - một trong những thuật toán tối ưu hiệu quả dành cho CPU, cũng như mô tả thuật toán bằng C . Chúng em khi làm bản báo cáo cũng đã gặp không ít khó khăn và thắc mắc, nhưng nhờ thầy TS.Nguyễn Đào Trường mà chúng em đã có thể hoàn thành bản báo cáo này. Với bài báo cáo đòi hỏi tính chính xác cao cũng như tập chung cao thì sai sót sẽ có thể xảy ra. Rất mong thầy và các bạn có thể đóng góp nhận xét về bản báo cáo để chúng em có thể cải thiện hơn nữa. CHƯƠNG 1: KHÁI QUÁT VỀ THUẬT TOÁN SFJ(SHORTER JOB FIRT) Chương này trình bày sẽ trình bày về khái quát thuật toán SFJ(Shortest Job First) 1.1 Khái quát về thuật toán Shorter job first 1.1.1 Những điều cần biết trước khi tìm hiểu về thuật toán. - Tiến trình là một bộ phận của một chương trình thực đang thực hiện, đơn vị thực hiện tiến trình là processer. - Như mọi người đã biết, tiến trình có hai thứ rất quan trọng khi lập lịch cho CPU, đó là Burst Time(thời gian sử dụng CPU) và Arival Time(thời gian đến CPU). - Để giải thích đơn giản, Arival Time giống như khoảng thời gian cần để đến trường vậy. VD: có bạn nhà ở hà đông, có bạn nhà ở thanh xuân, ... Điều này dẫn đến việc có khoảng thời gian mà các bạn đi học sẽ khác nhau. Có bạn mất 8 tiếng, có bạn mất 15 phút. Còn Burst Time giống như thời gian lên lớp học ở trường. Có người học 1 ca, có người học 5 ca. - Vì thời gian để xử lý tiến trình là khác nhau, nên việc lập lịch cho CPU cũng có nhiều thuật toán được viết ra, điển hình là Shorter job first. 1.1.2 Khái niệm về thuật toán Shorter job first - Thuật toán Shorter job first là thuật toán cho phép hệ điều hành chọn tiến trình có chiều dài burt time nhỏ nhất để cho CPU xử lý. - Khi lựa chọn các tiến trình, nó có hai dạng: một là ưu tiên, hai là không ưu tiên. Nhưng trong khuôn khổ của bản báo cáo, chúng em sẽ chỉ làm về không ưu tiên. -SFJ là tối ưu cho thời gian chờ đợi trung bình của các tiến trình là nhỏ nhất 1.2 Giải thích thuật toán và ví dụ. 1.2.1 Giải thích thuật toán - B1: Hệ điều hành sẽ chọn tiến trình đã đến đầu tiên.
Trang 1KHOACÔNG NGHỆTHÔNGTIN
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
BÀITẬPMÔNHỌC NGUYÊNLÝ HỆĐIỀUHÀNH
VIẾTCHƯƠNG TRÌNH BẰNG NGÔNNGỮCMÔ TẢTHUẬT TOÁNLẬPLỊCH CHOCPUKHÔNG ƯUTIÊNTHEO
THUẬTTOÁNSJF(SHORTERJOBFIRT)
Sinh viên thực
hiện:NguyễnThanh
HảiMSSV:AT16022
1
Trần Trung
HiếuMSSV:AT16
0519
Vũ Minh
HiếuMSSV:
AT160520Lớp:AT1
6C405
Người hướngdẫn:
TS.NguyễnĐàoTrường
KhoaCông nghệthông tin – Họcviện Kỹthuậtmậtmã
Trang 2NHẬNXÉTVÀCHOĐIỂMCỦAGIÁOVIÊN
Trang 3
Trang 4
LỜI NÓI ĐẦU .1
Chương 1KHÁIQUÁT VỀ THUẬT TOÁN SJF( SHORTER JOB FIRT ) .2
1.1 Khái quát về thuật toán Shorterjob first 2
1.11 Những điều cần biết trước khi tìm hiểu về thuật toán 2
1.1.2 Khái niệm vềthuật toán Shorter job first 2
1.2 Giải thích thuật toán và ví dụ 2
1.2.1 Giải thích thuật toán .2
1.2.2 Ví dụ 3
Chương 2 MÔ TẢ THUẬT TOÁN SJF( SHORTER JOB FIRT ) BẰNG C 4
2.1 Mô tả thuật toán SJF bằng C 4
2.1.1 Giải thích thuật toán .4
2.1.2 Kết quả 8
KẾT LUẬN .9
TÀI LIỆU THAM KHẢO .10
TỪ NGỮ VIẾT TẮT .10
Trang 5Trong thời đại ngày nay, quản lý thời gian chưa bao giờ dễ dàng, rất
nhiềulần chúng ta có thể tiêu xài một cách hoang phí Thế nên trong suốt chiều dài lịchsử chúng ta luôn tìm cách để tối ưu thời gian Máy tính cũng vậy Nó thật sự cầncácthuật toánđểtránhviệclãngphítàinguyêncũngnhưtốiưuthờigianhoạtđộng nhất có thể Hiểu được vấn đề này, nhóm chúng em học hỏi, tìm tòi để viếtbáo cáo
về thuật toán SJF (Shortest Job First) - một trong những thuật toán tối ưuhiệu quả dành cho CPU, cũng như mô tả thuật toán bằng C Chúng em khi làm bảnbáo cáo cũng đã gặp không ít khó khăn và thắc mắc, nhưng nhờ thầy TS.NguyễnĐào Trường mà chúng em đã có thể hoàn thành bản báo cáo này Với bài báo cáođòi hỏi tính chính xác cao cũng như tập chung cao thì sai sót sẽ có thể xảy ra Rấtmong thầy và các bạn có thể đóng góp nhận xét về bản báo cáo để chúng em có thểcảithiệnhơn nữa
Trang 6JOBFIRT)
Chươngnàytrìnhbàysẽtrìnhbàyvềkháiquátthuậtt o á n SFJ(Shortest Job First)
1.1 Khái quát vềthuậttoánShorter jobfirst
1.1.1 Nhữngđiều cầnbiếttrước khitìmhiểuvề thuậttoán.
- Tiến trình là một bộ phận của một chương trình thực đang thực hiện,đơnvịthực hiện tiến trình là processer
- Như mọi người đã biết, tiến trình có hai thứ rất quan trọng khi lậplịch cho CPU, đó là Burst Time(thời gian sử dụng CPU) và Arival Time(thờigianđến CPU)
- Để giải thích đơn giản, Arival Time giống như khoảng thời gian cầnđể đến trường vậy VD: có bạn nhà ở hà đông, có bạn nhà ở thanh xuân, Điều này dẫn đến việc có khoảng thời gian mà các bạn đi học sẽ khác nhau.Có bạn mất 8 tiếng, có bạn mất 15 phút Còn Burst Time giống như thời gianlênlớp học ởtrường Có ngườihọc1 ca, có ngườihọc 5 ca
- Vì thời gian để xử lý tiến trình là khác nhau, nên việc lập lịch choCPUcũngcó nhiềuthuậttoánđượcviếtra,điển hìnhlà Shorter jobfirst
1.1.2 Khái niệmvềthuậttoánShorterjobfirst
- Thuật toán Shorter job first là thuật toán cho phép hệ điều hành chọntiếntrình cóchiều dàiburttime nhỏ nhấtđể cho CPUxửlý
- Khi lựa chọn các tiến trình, nó có hai dạng: một là ưu tiên, hai làkhông ưu tiên Nhưng trong khuôn khổ củabản báo cáo, chúng ems ẽ
c h ỉ làmvề không ưu tiên
-SFJlàtốiư uchothờigianchờđợi tr un g bìnhcủacác tiếntrìnhlànhỏ nhất
1.2 Giảithích thuậttoán và vídụ.
1.2.1 Giảithíchthuậttoán
- B1:Hệđiềuhànhsẽchọn tiếntrìnhđãđếnđầu tiên
Trang 7- B2: Sau khi CPU xử lý xong tiến trình đầu tiên, lúc này nó sẽ
lựachọn xem tiến trình đã đến vàchọn tiến trình có burstt i m e
n h ỏ nhấtđể cho CPUxửlý.
- B3: Tiếp tục lặp lại quá trìnhchọn tiến trình có burst time nhỏnhấtvà cho CPUxửlý.
1.2.2 Vídụ
- Chúng tacó bàitoán nhưthế này:
Biểuđồ Granttcủalịch biểunhưsau:
- Thờigianchờđợicủa các tiếntrình:P1= 0,P2=11,P3= 6,P4= 3
- Thờigianchờ đợitrungbình:(0+11+ 6+3) /4=5
Trang 8CHƯƠNG2:M Ô T Ả THUẬT TOÁN SJF(SHORTER JOB FIRT)
BẰNG C
Chương này trình bày chitiếttoàn bộmôtả thuậttoán bằng C
2.1 Môtảthuật toánSJFbằngC.
2.1.1 Giảithíchcode:
- Đầu tiên thì chúng em khai báo sử dụng các thư viện cũng như tạo struct đểđịnh nghĩa dữ liệu quan trọng cho Process: Procces ID, Burst Time, ArrivalTime
Hình2.1Sửdụngthưviệnvà tạo structProcess
- Hàm ghiFile có tác dụng tạo Ffle, lưu file cũng như ghi những thông
sốđược nhập từ bàn phím cho dữ liệu Process Khi nhập biến count(tức nhậpsố tiến trình) thì hàm sẽ tạo bản ghi bằng vòng lặp for để lưu dữ liệu choProcessbằng mảng
Trang 9Hình2.2 HàmghiFile.
- Hàm nhapProc để nhập tất cả dữ liệu của Process từ bàn phím như tên tiếntrình, burt time, arrival time Với biến count được từ bàn phím của hàm main,nósẽ tạo cácbiến bằngmảng cho từng dữliệu củaProcess
Hình2.3HàmnhapProc
- Hàm sortByArt là hàm dùng để sắp xếp các Arrival Time đã nhập từbàn phím theo dạng từ bé đến lớn Hàm này để tìm xem đâu là tiếntrình đếntrước
Trang 10- Hàm sortByBt để sắp xếp từ bé đến lớn của tiến trình nàoxuất hiện.VD: P1 chạy xong tiến trình nhưng P3 và P4 đã đến và P2 chưa đến.Lúc này hàm tìm
xem Bt của P3 hay P4 bé hơn(P2 chưa đến nênkhông tính) để xử lý Với d là vị trí của i + 1 túc là tt liền sau của ttđang hoạt động và c là à
vị trí tính trình đủ điều kiện thoải mãn (điềukiện bé hơn thời gian sau khi tt hiện tại hoàn thành (tức là biến timecủa hàmrun))
Trang 11- Hàm run dùng để làm những nhiệm vụ sau: thứ nhất là tính khoảngthờig i a n đ ể m ộ t t i ế n t r ì n h c h ạ y , t h ứ h a i l ọ c r a k h i t i ế n t
r ì n h t r ư ớ c chạy xong thì có tiến trình nào đã đến, thứ ba truyền dữ liệu biến tìmđượcởnhiệmvụ haivề hàmsortByBt
- Ở nhiệm vụ đầu tiên thì sau khi biết chọn tiến trình nào rồi thì lúc đóbiến time sẽ tìm xem tiến trình chạy xong ở thời gian nào(VD: P1 xửlý xong ởgiây60, P2xửlý xongởgiây 70, )
time=proc.bt+time;//tính thờigiansau khixửlý 1 tiếntrình
- Ở nhiệm vụ thứ hai, hàm run sẽ lấy mảng được sắp xếp từ sortByArtvàsosánhvớibiếntimevừatínhđượcsaumỗilầnxửlýtiếntrình(V D:P1chạythứ60 thì P2vớiP3đến chưa)
int index;//bien index de tinh so tien trinh can phai
xetfor(int i=k+1;i<count;i++){
if(mangProc[i].art< time){//locracactientrinhnaocanphai xetindex=i; }else{
break;
}
}
- Ởnhiệmvụthứbalàcóđượcdữliệutừnhiệmvuithứhaithìlúcnày hàmruntruyền lạicho hàmsortByBt
sortByBt(mangProc,k + 1 , i n d e x ) ; / /
l ấ y g i á t r ị đ ã t í n h ở h à m r u n đ ể tínhtiếp ởhàmsortByBt
Trang 12- HàmrunProgramđượcchạyxongđãtínhthờigianchờcủacáctiếntrình lúc này sẽtínhthờigian chờtrung bìnhcủatiếntrình
Hình2.7Hàm runProgram
Trang 13- Hàm main dùng chạy chương trình Nhập giá trị cho biến count sauđó truyền cho dữ liệu cho process, nhapProc, ghiFile, sortByArt và đợihàmrunProgramtính toán xongvàin kếtquả
Hình2.8 Hàmmain
2.1.2 Kếtquả
Trang 14KẾTLUẬN -Sauđây làtoànbộ mãnguồn củachươngtrình code
bằngC.#include<stdio.h>
#include
<string.h>#include<m
ath.h>
//tao
structstructProc
ess{
Trang 15int bt; // Burst Time, thoi gian hoan thanh cua cac tien trinhint art;//ArrivalTime,thoi gianvao cua cac tientrinh };
typedefstructProcessprocess;
//taofile
void ghiFile(process a[], int count)
{FILE* fp;
fp = fopen
("D://Input.txt","w");fprintf(fp,"sotien
trinh:%d\n",count);
fprintf(fp,"process %3 Burst Time %3 Arrival Time\ n");for(int i=0;i< count;i++){
fprintf(fp,"%5d%10d%10d\n",a[i].pid,a[i].bt,a[i].art); }
fclose(fp);
}
//hàm nhap
void nhapProc(process proc[], int count)
{int name =0;
for(int i= 0;i < count;i++){
printf("Nhaptentientrinh%d:", + +name);scanf("%d",&proc[i].pid);
printf("\nNhap burt time :");scanf("%d",
&proc[i].bt);printf("\nNhap Arrival
Time :");scanf("%d",&proc[i].art);
}
}
//hàmsapxepmangtheogiatriart
void sortByArt(process mangProc[], int count)
{process tmp;
for(inti=0;i<count-1;i++){for(intj=
i+1;j< count;j++){
if(mangProc[i].art > mangProc[j].art)
{tmp = mangProc[i];mangProc[i] = mangProc[j];mangProc[j]
=tmp;
} }
Trang 16}
//hàmsapxep mangtheo giatribttrong khoang[d,c]
//vi dung de loc ra cac tien trinh nao se duoc xet de chay
tiepvoidsortByBt(process mangProc[],intd,intc){
processtmp;
for(int i= d;i < c;i++){
for(int j = i+1; j <= c; j++)
{if(mangProc[i].bt >
mangProc[j].bt){tmp=mangProc[i];
mangProc[i] = mangProc[j];mangProc[j] =tmp;
}
} }
}
//hamrunde chay1tientrinh
intrun(processproc,intk,intcount,processmangProc[],int time){
time=proc.bt+time;// bien time detinhthoigian sau khichay xong 1 tien trinh
// printf("tientrinh%d",proc.pid);
intindex;//bienindex detinh sotientrinhcanphaixetfor(int
i=k + 1;i<count; i++){
if(mangProc[i].art< time){//locracactientrinhnaocanphai xetindex=i; }else{
}
break;
}
sortByBt(mangProc,k+1,index);// sapxepcactientrinhcanphaixet theogia tri bt returntime;
}
//muc dich: tinh ra thoi gian cho cua tung tien
trinhintrunProgram(processmangProc[],intcount){
intsumWaiteTime=0;int
time=0;
for(int i= 0 ;i <count ;i++){
Trang 17//thoigiansaukhichaytientrinh thui printf("tientrinh%d",mangProc[i].pid);if(i
==0){
printf("0\n");
}else{
}
intwaitTime= time-mangProc[i].art-mangProc[i].bt;
//tinhthoi gianthoi gianchocuatungtientrinhprintf("%d\n", waitTime);
sumWaiteTime+=waitTime;//tongthoigiancho }
returnsumWaiteTime;
}
intmain(){
int count;
printf("Nhapsotientrinh:");sc
anf("%d",&count);
process mangProc[count],
queue[count];nhapProc(mangProc, count);//
inputghiFile(mangProc,count);//ghivaofil
e
sortByArt(mangProc,count);//sapxepprocesstheothoigianvao
printf("Ketqua:\n");
intsumWaiteTime= runProgram(mangProc,count);//tinhrathoigiantrungbinh cuatungtientrinh
printf("\n => thoi gian cho trung binh cua cac tien trinh: %0.2f",
(float)sumWaiteTime/count);
return0;
}
A Nhữngkếtquảđạtđượccủa bàitập mônhọc
- Hiểu biết hơn về kiến thức môn nguyên lý hệ điều hành, cũng như các hoạt độngcủaHĐHvà CPUkhimà phảilậplịchcho các tiếntrình
- Tăngkhảnănglàmviệc nhóm
- Họcthêmđược nhữnggóc nhìn khácquaviệclập trình
- Xâydựngđượcchươngtrìnhđểgiải bàitoán
Trang 18B Hướng pháttriểntiếptheo vàđề xuất
Bài tập mang tính thực tế cao khi phải giải quyết nhu cầu hiểu rõ hơn vấn đề vềHĐH cũng như CPU Nhóm em có thể được có nhiều những ví dụ sinh động, dễhiểu,cũng kiếnthức sáthơn so vớithực tế
Nhóm 4 chúng emxinchânthành cảmơnthầy và cácbạn!
TÀILIỆUTHAMKHẢO
[1].TSNguyễn ĐàoTrường, Tàiliệu giảngdạy mônnguyên lýhệ điềuhành
NHỮNGTỪNGỮVIẾTTẮT
• CPU:Central ProcessingUnit
• HĐH:Hệđiềuhành
• tt:tiếntrình