操作系統(tǒng)linux版實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)linux版實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)linux版實(shí)驗(yàn)報(bào)告_第3頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、操作系統(tǒng)實(shí)驗(yàn)報(bào)告(Linux版)網(wǎng)絡(luò)142 潘豹 142999實(shí)驗(yàn)一 觀察Linux進(jìn)程狀態(tài)一、實(shí)驗(yàn)?zāi)康脑诒緦?shí)驗(yàn)中學(xué)習(xí)Linux操作系統(tǒng)的進(jìn)程狀態(tài),并通過(guò)編寫(xiě)一些簡(jiǎn)單代碼來(lái)觀察各種情況 下,Linux進(jìn)程的狀態(tài),進(jìn)一步理解進(jìn)程的狀態(tài)及其轉(zhuǎn)換機(jī)制。二、實(shí)驗(yàn)環(huán)境硬件環(huán)境:計(jì)算機(jī)一臺(tái),局域網(wǎng)環(huán)境;軟件環(huán)境:Linux Ubuntu操作系統(tǒng),gcc編譯器。(四)查看不可中斷阻塞”狀態(tài)(D)創(chuàng)建一個(gè) C程序,如uninter_status.c,讓其睡眠30s代碼:#in clude< uni std.h>#in clude<stdio.h>int mai n()int i=0,j

2、=0,k=0;for(i=0;i<1000000;i+)for(j=0;j<1000000;j+) k+;k-;實(shí)驗(yàn)結(jié)果:0 l studentlab-soFt:studentlab-softIs“exanples. desktop金共的 AM 視flf圖片 丈林 T fi 譽(yù)樂(lè) 桌面 studentlab-5oft cd 桌荷 studentleb-soft:-/桌面$ gcc 1»1 *c -o 1*1studentglab-soft桌面$ . / 1.1 & ps1 3821PIDTTYTIMECMD3757pts/100:QQ:00bash3821pts/

3、100:00:ae1.13822Pts/l00:00:00Plstudent1ab-soft:-/A |(二)查看“暫?!睜顟B(tài)(T)運(yùn)行run_status進(jìn)程,其進(jìn)入 R狀態(tài):代碼同上:(三)查看 可中斷阻塞”狀態(tài)(S)創(chuàng)建一個(gè)C程序,如interruptiblie_status.c,讓其睡眠 30s編譯鏈接,后臺(tái)運(yùn)行該程序(后接 &符號(hào)),并使用ps命令查看運(yùn)行狀態(tài) 代碼:#in clude< uni std.h>#in clude<stdio.h>int mai n()sleep(30);return;實(shí)驗(yàn)結(jié)果:pdnpan-Y400: Dan9pan-Y

4、4eo;-$ gcc 1.2, ci In function *nain";1.2. c:613 * uarntng: * roturn" iwith no value, in function returning non-void retur n;ApanpaB-Y4ee:*$ftps'll 4522Plt> TTYTIMECMD4566 pts;2800:06:99bash4522 pt5;2000;GG:OD1.2452孑 pts/2990:3:06pantapan-Y460|(四)查看不可中斷阻塞”狀態(tài)(D)創(chuàng)建一個(gè) C程序,如uninter_stat

5、us.c,讓其睡眠30s編譯鏈接,后臺(tái)運(yùn)行該程序(后接 &),并使用ps命令查看運(yùn)行狀態(tài) 代碼:#in clude< uni std.h>#in clude<stdio.h>int mai n()if(vfork()=0)sleep(300);return;實(shí)驗(yàn)結(jié)果:空令 Q panpan-Y400; «panpan-Y406:q匚匸 1-4”匚-a 1*4 P3npan-Y40e;-$ /l*4 8 ps1 444SPIDTTYTIME4425pts/1900;;eo;oeb»h4445pts/1900;00;001.44446pts/19

6、00 :00P54447pts/19D9::e0:o1,4panpan-y49e:-$ |(五)查看 僵尸”進(jìn)程(Z)創(chuàng)建一個(gè)C程序,如zombie_status.c,在其中創(chuàng)建一個(gè)子進(jìn)程,并讓子進(jìn)程迅速結(jié)束, 而父進(jìn)程陷入阻塞編譯鏈接,后臺(tái)運(yùn)行該程序(后接&),并使用ps命令查看運(yùn)行狀態(tài)(30s內(nèi))代碼:#in clude< uni std.h> #in cldue<stdio.h> int mai n()if(fork()sleep(300);實(shí)驗(yàn)結(jié)果:e O 衣 panpan-Y400: -n -Y466: *$ g匚匚 1.51,5pangpan-Y40

7、O:-$ ,/l + 5 S ps L 4232PIDTTYTIME4214pts/690:69:00bs呂h4232pt£/000;0 91001.54233ptS/000:00:00PS4234pts/000:60:6014 5 «defunct>panpan-Y40e:*$ |實(shí)驗(yàn)二 觀察Linux進(jìn)程/線程的異步并發(fā)執(zhí)一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)本實(shí)驗(yàn)學(xué)習(xí)如何創(chuàng)建 Linux進(jìn)程及線程,通過(guò)實(shí)驗(yàn),觀察 Linux進(jìn)程及線程的異步 執(zhí)行。理解進(jìn)程及線程的區(qū)別及特性, 進(jìn)一步理解進(jìn)程是資源分配單位,線程是獨(dú)立調(diào)度單位。二、實(shí)驗(yàn)環(huán)境硬件環(huán)境:計(jì)算機(jī)一臺(tái),局域網(wǎng)環(huán)境;軟件環(huán)境:L

8、inux Ubuntu操作系統(tǒng),gcc編譯器。三、實(shí)驗(yàn)內(nèi)容和步驟1、進(jìn)程異步并發(fā)執(zhí)行編寫(xiě)一個(gè)C語(yǔ)言程序,該程序首先初始化一個(gè)count變量為1,然后使用fork函數(shù)創(chuàng)建兩個(gè)子進(jìn)程,每個(gè)子進(jìn)程對(duì) count力口 1后,顯示"I am son, count=x ”或"am daughter, count=x ",父進(jìn)程對(duì) count力口 1之后,顯示"I am father, count=x ",其中x使用count值代替。 最后父進(jìn)程使用 waitpid等待兩個(gè)子進(jìn)程結(jié)束之后退出。編譯連接后,多次運(yùn)行該程序,觀察屏幕上顯示結(jié)果的順序性,直到出現(xiàn)不

9、一樣的情 況為止,并觀察每行打印結(jié)果中count的值。代碼:#in cludev uni std.h>#in clude<stdio.h>int mai n()pid_t son _pid,daughter_pid;int coun t=1;son _pid=fork();if(son _pid=O)coun t+;prin tf("i am son,coun t=%dn",co un t);elsedaughter_pid=fork();if(daughter_pid=O)coun t+;prin tf("i am daughter,co un

10、 t=%d n",co un t);elsecoun t+;prin tf("i am father,co un t=%dn",co un t); waitpid(son_pid,NULL,0); waitpid(daughter_pid,NULL,O);QL panbao>ldieapad-y400: pMbHgt<ieapad>y4Mcd 束面 panbaoOtdeapdd:qcc x.c -o x x.c: in function Fin':xc:25:5: warntny: inplLcit declaration of func

11、tion aitpid* Winplicit functi on-declarationMAltpLdsan_ptd»NULL,e);ApanbaoQldeapad-y4M: #桌面$ ./ki an fatherFcount=2 I an son,counts t an daugliter, ccunt=2 panbaotdeapdd-y4ae:,/x t an fatherxount=2 t an ,count=z t an daughter,count-2 panbaotdedpad-yOO:./x t an father,count=2 i en ddught證r匚Qunt=

12、2 t an son,countsDBin tascj曲irleaiD召d ¥4B6i : “虛面5 2、線程異步并發(fā)執(zhí)行編寫(xiě)一個(gè)C語(yǔ)言程序,該程序首先初始化一個(gè) count變量為1,然后使用pthread_create 函數(shù)創(chuàng)建兩個(gè)線程,每個(gè)線程對(duì) count加1后,顯示"I am son, count=x ”或“m daughter, count=x ",父進(jìn)程對(duì) count力口 1之后,顯示"I am father, count=x ",其中x使用count值代替。 最后父進(jìn)程使用 pthread_join等待兩個(gè)線程結(jié)束之后退出。編譯連

13、接后,多次運(yùn)行該程序,觀察屏幕上顯示結(jié)果的順序性,直到出現(xiàn)不一樣的情 況為止,并觀察每行打印結(jié)果中count的值。代碼:#in clude< uni std.h>#in clude<stdio.h>#i nclude<pthread.h>void *daughter(void *num)int* a=(i nt *)num;*a+=1;prin tf("i am daughter,co un t=%d n",*a);void *son( void *num)int* a=(i nt *)num;*a+=1;prin tf("i

14、am son,coun t=%dn",*a);int mai n()pthread_t son _tid,daughter_tid;int coun t=1;pthread_create(&son _tid,NULL,so n,&coun t);pthread_create(&daughter_tid,NULL,daughter, &count); coun t+;prin tf("i am pare nt,co un t:=%dn",co un t);pthreadoin (son_tid,NULL);pthreadoi n(da

15、ughter_tid,NULL);return 0;實(shí)驗(yàn)結(jié)果:0 巴p<an bd o d-40 0; f 面/tmp/ccNFcOEf.cl 在函8 中:b.c: ( . text+0xbl) 2 #ptlhread create p 定義理弓用 bc:( text+Dx匚亡):*pthreadl_create ,耒走義的引用 b+ = : («: *'pthreadi_ jo Ln' 義躺引穽 bciGtext+SKlNl):對(duì)*pthread_j&ln*耒定文的耳I用 011rctZi error: Id returned T exit statu

16、spagcc '02 -wall o b b.c -Ipttirndbc: In functtcn "divhter":; 1: wcr-ilngi control reaches tnd of non-void funttifln -return-type 戸Ib.c: Lfi furttion * son * :b. e: 15:1: h a rntng : control reached end af fion-votd tunettcn -Wr eturn-type J I Apjnbjotdejpjd-yOft:- /'f,/bit ar% par

17、ent,count :=;1 disuqhrer (counts flIt. 3“ son pccunt-3panbdo6idedpad-y4e3;-f'XS ./bX an sonjCount=Jt ar parent.sunt;=31 an daughter,caLjnt=4實(shí)驗(yàn)三 使用信號(hào)量進(jìn)行互斥與同步、實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)介紹在Linux中使用信號(hào)量進(jìn)行進(jìn)程同步、互斥的方法。讀者可以通過(guò)實(shí)驗(yàn)進(jìn)一 步理解進(jìn)程間同步與互斥、臨界區(qū)與臨界資源的概念與含義,并學(xué)會(huì)Linux信號(hào)量的基本使用方法。、實(shí)驗(yàn)環(huán)境硬件環(huán)境:計(jì)算機(jī)一臺(tái),局域網(wǎng)環(huán)境;軟件環(huán)境:Linux Ubuntu操作系統(tǒng),gcc編

18、譯器。、實(shí)驗(yàn)內(nèi)容和步驟三、實(shí)驗(yàn)內(nèi)容和步驟(一) 參考:POSIX 以及 System VSystem V: Unix眾多版本中的一支,最初由 AT&T定義,目前為第四個(gè)版本,其中定義 了較為復(fù)雜的API。POSIX: Portable Operat ing System In terface , IEEE 為 了統(tǒng)一 Un ix 接口而定義的標(biāo)準(zhǔn), 定義了統(tǒng)一的 API接口。Linux即支持System API,又支持 POSIX API(二) 實(shí)驗(yàn)步驟step1 :通過(guò)實(shí)例查看不使用互斥時(shí)的情況(假設(shè)文件命名為n o_sem.c)編譯鏈接,同時(shí)運(yùn)行兩個(gè)進(jìn)程,顯示結(jié)果代碼:#in cl

19、ude<stdio.h>#in clude<stdlib.h>int main (i nt argc,char *argv)char message='x'int i=0;if(argc>1)message=argv10;for(i=0;i<10;i+)prin tf("%c",message);fflush(stdout);sleep(ra nd()%3);prin tf("%c",message);fflush(stdout);sleep(ra nd()%2);sleep(10);exit;實(shí)驗(yàn)結(jié)果

20、:pan$pan-r4G0:-$ gedit panapan>Y4e£):$ get x.c -d x gcc: error, z 沒(méi)有那個(gè)文件或目錄 gee: l err : no input files compLldtLon tt-f nlndted. panpan-v4G0cd 桌面 panpan -Y40B面名 gcc x r c - xIn function "rilin'>.c:13:2: warning: inpliclt decXaratton of function fsl«ep' function -declara

21、tionsleep( rdnd()363);Apanpan-¥4ee:-/桌面S ,/x & Jx o1 7117step2 :使用信號(hào)量來(lái)對(duì)臨界資源進(jìn)行互斥(假設(shè)文件命名為with_sem.c)編譯鏈接,同時(shí)運(yùn)行兩個(gè)進(jìn)程。觀察X和0的出現(xiàn)規(guī)律,并分析原因。代碼:#in clude<stdio.h>#in clude<stdlib.h>#in clude<sys/types.h>#in clude<sys/ipc.h>#in clude<semaphore.h>#in cludevfc ntl.h>#in cl

22、ude<sys/stat.h>int main (i nt argc,char *argv)char message='x:int i=0;if(argc>1)message=argv10;sem_t *mutex=sem_ope n("mysem",O_CREAT,0666,1);for(i=0;i<10;i+) sem_wait(mutex);prin tf("%c",message);fflush(stdout);sleep(ra nd()%3);prin tf("%c",message);ffl

23、ush(stdout);sem_post(mutex);sleep(ra nd()%2);sleep(10);sem_close(mutex);sem_ un li nk("mysem");exit(0);實(shí)驗(yàn)結(jié)果:* r panpan-Y4Q0: 面In functiQn *rtain *:x.c:22:2: warning: tnplVcVt declaration of Function r slvspF -wtmpltclt- function -declarationsleep(rand()X3);A/tnp/ccAkHkxZ.o:在Stkain*中:x.c: (

24、. taxt+Bx4b)I 對(duì)r sen_opn * 未定爻的弓用 x*c:( rtext+Bx67): sen_wait定義的目用 x*c: (. text-i-0xd6):對(duì)r senposr *耒定義的弓用 x,c: (. text+exl23)' 對(duì)'肚Ejrlmh未定義的引用 x*c: (. textSxl2d):對(duì)"he” unlink'未定義的引用 col.Iect2: error r Id r eturned 1 pj(lt panflpan*Y400;*/桌而$ gcc Lpthread x.c o x gcc-lpthread:未找到祈令Y

25、4OQ:"/4lgcc x*c -lipthread -o xx£: In functicin *rtavn *:x.c:22:2: warning t tnpl lc1_t declaration of Function * &leep * - Htnip licit - function -declaration$lcep(rand()X3);ApM9pan«Y40B: */jK面$ ./x,/x 1刖血XXOOXXOGXXOOXXOOXXOOXKGOXXO0XXOOMKOOXXOO1 已完成J 熱pan電pn” 丫4DE:_/桌面$ step3 :使

26、用信號(hào)量來(lái)模擬下象棋紅黑輪流走子的情況編寫(xiě)兩個(gè)C語(yǔ)言程序black_chess.c以及red_chess.c,分別模擬下象棋過(guò)程中紅方走子 和黑方走子過(guò)程。走子規(guī)則:紅先黑后,紅、黑雙方輪流走子,到第10步,紅方勝,黑方輸。代碼:紅色棋#in clude<stdio.h>#in clude<stdlib.h>#in clude<sys/types.h>#in clude<sys/ipc.h>#in clude<semaphore.h>#in cludevfc ntl.h>#in clude<sys/stat.h>in

27、t main (i nt argc,char *argv)int i=0;sem_t *hei=sem_ope n("chess_black_sem",O_CREAT,0666,1);sem_t *ho ng=sem_ope n( "chess_red_sem",0_CREAT,0666,0);for(i=0;i<10;i+) sem_wait(hei);if(i!=9)prin tf("Red chess had moved,black,chess go!n");elseprin tf("Red chess win!

28、n ”); fflush(stdout);sem_post(h on g);sleep(10);sem_close(hei);sem_close(h on g);sem_ un li nk("chess_red_sem");sem_ un li nk("chess_black_sem");exit(0);黑色棋:#in clude<stdio.h>#in clude<stdlib.h>#in clude<sys/types.h>#in clude<sys/ipc.h>#in clude<semapho

29、re.h>#in clude<fc ntl.h>#in clude<sys/stat.h>int main (i nt argc,char *argv)int i=0;sem_t *hei=sem_ope n("chess_black_sem",O_CREAT,0666,1); sem_t *ho ng=sem_ope n("chess_red_sem",0_CREAT,0666,0); for(i=0;i<10;i+)sem_wait(h on g);if(i!=9)prin tf("Black chess

30、 had moved,red chess go!n");elseprin tf("Black chess win!n ”);fflush(stdout);sem_post(hei);sleep(10);sem_close(hei);sem_close(h on g);sem_ un li nk("chess_red_sem");sem_ un li nk("chess_black_sem");exit(0);實(shí)驗(yàn)結(jié)果:panpan-Y400: */臬面 panpan-Y40e:面$ ./廠Ed & ./block 1 3677

31、Red chess had movedblack,ch&ss go! Black chess had moved rred chess go! Red chess had moved,bla匚k*匸hiss go! Black chess had moved,red chess go! Red chess hdd movedfblackche-ss go Black 匚hess had Hoved>red 匚hess go! Red chss had moved,black,che-ss go! Black 匚hess had moved,red chess go J Red c

32、hess h訶d movedtblack,chess go! Black chess had moved,red chess go! Red chess h占d moved,black,chess go Black 匚hess had moved,red chess go! Red ch&ss hd moved,black,ch&ss go! Black chess had moved,red ch&ss go! Red chess hwd movedfblack,chess go! Black chess had moved>red chess go! Red

33、chess had movedTblack,chgo< Black 匸hess had moved,red chess go J Red ch&ss win!Slack chess win!i+已完成JEdpanpanY406:*/桌面$ I實(shí)驗(yàn)四作業(yè)調(diào)度算法模擬、實(shí)驗(yàn)?zāi)康?1) 掌握周轉(zhuǎn)時(shí)間、等待時(shí)間、平均周轉(zhuǎn)時(shí)間等概念及其計(jì)算方法。(2) 理解五種常用的進(jìn)程調(diào)度算法( FCFS SJF HRRF、HPF、RR),區(qū)分算法之間的 差異性,并用C語(yǔ)言模擬實(shí)現(xiàn)各算法。(3) 了解操作系統(tǒng)中高級(jí)調(diào)度、中級(jí)調(diào)度和低級(jí)調(diào)度的區(qū)別和聯(lián)系。、實(shí)驗(yàn)環(huán)境硬件環(huán)境:計(jì)算機(jī)一臺(tái),局域網(wǎng)環(huán)境;軟件環(huán)境

34、:Linux Ubuntu操作系統(tǒng),gcc編譯器。、實(shí)驗(yàn)內(nèi)容和步驟本實(shí)驗(yàn)所選用的調(diào)度算法均默認(rèn)為非搶占式。 實(shí)驗(yàn)所用的測(cè)試數(shù)據(jù)如下表所示。本實(shí)驗(yàn)所用的測(cè)試數(shù)據(jù)如下表所示表實(shí)驗(yàn)測(cè)試數(shù)據(jù)作業(yè)Id到達(dá)時(shí)間執(zhí)行時(shí)間優(yōu)先權(quán)180050028153013830252483520258451526700101782050作業(yè)的數(shù)據(jù)結(jié)構(gòu): typedef struct nodeint nu mber; / 作業(yè)號(hào)int reach_time;作業(yè)抵達(dá)時(shí)間int need_time; 作業(yè)的執(zhí)行時(shí)間 in t privilege;/ 作業(yè)優(yōu)先權(quán) float excelle nt;響應(yīng)比int start_tim

35、e;作業(yè)開(kāi)始時(shí)間int wait_time;等待時(shí)間in t visited;/ 作業(yè)是否被訪問(wèn)過(guò) bool isreached;/ 作業(yè)是否已經(jīng)抵達(dá) job;代碼:#i nclude <stdio.h>#in clude <stri ng.h> #i nclude <stdlib.h> #in clude<stdbool.h>/最大作業(yè)數(shù)量const int MAXJOB=50;/作業(yè)的數(shù)據(jù)結(jié)構(gòu) typedef struct nodeint number;/ 作業(yè)號(hào)int reach_time;/作業(yè)抵達(dá)時(shí)間 int need_time;/作業(yè)

36、的執(zhí)行時(shí)間 int privilege;/作業(yè)優(yōu)先權(quán) float excellent;/ 響應(yīng)比 int start_time;/作業(yè)開(kāi)始時(shí)間 int wait_time;/ 等待時(shí)間 int visited;/作業(yè)是否被訪問(wèn)過(guò) bool isreached;/作業(yè)是否抵達(dá) job;job jobs50; 作業(yè)序列int quantity;/ 作業(yè)數(shù)量/初始化作業(yè)序列void in itial_jobs()int i;for(i=0;i<MAXJOB;i+)jobsi. nu mber=0;jobsi.reach_time=0;jobsi.privilege=0;jobsi.excell

37、e nt=0;jobsi.start_time=0;jobsi.wait_time=0;jobsi.visited=0;jobsi.isreached=false;qua ntity=O;/重置全部作業(yè)信息void reset_ji nfo()int i;for(i=0;i<MAXJOB;i+)jobsi.start_time=0;jobsi.wait_time=0;jobsi.visited=0;,若無(wú)返回-1/查找當(dāng)前current_time已到達(dá)未執(zhí)行的最短作業(yè)int fin dminjob(job jobs,i nt count)int minjob=-1;/=jobs0. ne

38、ed_time;int min loc=-1;int i;for(i=0;i<co un t;i+)if(mi nloc=-1)if( jobsi.isreached=true && jobsi.visited=0) minjob=jobsi. need_time;min loc=i;else if(minjob>jobsi. need_time&&jobsi.visited=0&&jobsi.isreached=true) minjob=jobsi. need_time;min loc=i;return mi nloc;/查找最早到

39、達(dá)作業(yè),若全部到達(dá)返回-1.int fin drearlyjob(job jobs,i nt count)int rearlyloc=-1;int rearlyjob=-1;int i;for(i=0;i<co un t;i+)if(rearlyloc=_1)if(jobsi.visited=0)rearlyloc=i;rearlyjob=jobsi.reach_time;else if(rearlyjob>jobsi.reach_time&&jobsi.visited=0)rearlyjob=jobsi.reach_time;rearlyloc=i;return

40、rearlyloc;/讀取作業(yè)數(shù)據(jù)void readJobdata()FILE *fp;char fname20;int i;/輸入測(cè)試文件文件名prin tf("please in put job data file n amen");sca nf("%s",fname);if(fp=fope n(fname,"r")=NULL)prin tf("error, ope n file failed, please check file name:' n");else/依次讀取作業(yè)信息while(!feof(

41、fp)if(fscanf(fp,"%d %d %d %d",&jobsquantity.number,&jobsquantity.reach_time,&jobsquantity .n eed_time,&jobsqua ntity.privilege)=4)qua ntity+;/打印作業(yè)信息prin tf("output the orig in job datan");printf("n");prin tf("tjoblDtreachtimet needtimetprivilegen&qu

42、ot;);for(i=0;i<qua ntity;i+)prin tf("t%-8dt%-8dt%-8dt%-8dn",jobsi. number,jobsi.reach_time,jobsi. need_time,jobsi .privilege);/FCFSvoid FCFS()int i;int curre nt_time=0;in t loc;int total_waitime=0;int total_r oun dtime=0;/獲取最近到達(dá)的作業(yè)loc=fi ndrearlyjob(jobs,qua ntity);/輸出作業(yè)流printf("nn

43、FCFS 算法作業(yè)流 n”);n");prin tf("tjobIDtreachtimetstarttimetwaittimetro un dtimen");curre nt_time=jobsloc.reach_time;/每次循環(huán)找出最先到達(dá)的作業(yè)并打印相關(guān)信息for(i=0;i<qua ntity;i+)if(jobsloc.reach_time>curre nt_time)jobsloc.start_time=jobsloc.reach_time;curre nt_time=jobsloc.reach_time;elsejobsloc.star

44、t_time=curre nt_time;jobsloc.wait_time=curre nt_time-jobsloc.reach_time;prin tf("t%-8dt%-8dt%-8dt%-8dt%-8dn",loc+1,jobsloc.reach_time,jobsloc.start_time,job sloc.wait_time,jobsloc.wait_time+jobsloc .n eed_time);jobsloc.visited=1;curre nt_time+=jobsloc .n eed_time;total_waitime+=jobsloc.wai

45、t_time;total_r oun dtime=total_r oun dtime+jobsloc.wait_time+jobsloc .n eed_time;/獲取剩余作業(yè)中最近到達(dá)作業(yè)loc=fi ndrearlyjob(jobs,qua ntity);printf(” 總等待時(shí)間:%-8d 總周轉(zhuǎn)時(shí)間:%-8dn",total_waitime,total_roundtime);printf( “平 均 等 待 時(shí) 間 :%4.2f 平 均 周 轉(zhuǎn) 時(shí)間:%4.2fn",(float)total_waitime/(quantity),(float)total_roun

46、dtime/(quantity);/短作業(yè)優(yōu)先作業(yè)調(diào)度void SFJschdulejob(job jobs,i nt count)int mai n()in itial_jobs();readJobdata();FCFS();reset_ji nfo();SFJschdulejob(jobs,qua ntity);system("pause");return 0;實(shí)驗(yàn)結(jié)果:V409:4面S gcc-a apanlpan-QU:./a please input job data file nane sscutput th origin job dRtwjoblDreacht

47、imeneedtiTcprivilege1sea59e2813G1233S2524S352584515267001017礙決作業(yè)流S2&s0joblDreachtimestarttineroufldtiHC67607&8ie1S09aoe2815ase3565782&ase6 &fiS3030365556049359107595總等待時(shí)fe:3LG 平均等待時(shí)間: sht 1i pause:84936總周轉(zhuǎn)時(shí)|'»1:46544.29平溝周轉(zhuǎn)時(shí)間:66.43not foundes10Q實(shí)驗(yàn)五Linux內(nèi)存分配、實(shí)驗(yàn)?zāi)康?、 了解Linux內(nèi)存的

48、分配和虛擬內(nèi)存管理的原理,學(xué)習(xí)如何使用 malloc動(dòng)態(tài)申請(qǐng)內(nèi)存, 了解動(dòng)態(tài)申請(qǐng)與靜態(tài)申請(qǐng)的區(qū)別。2、 深入理解Linux的內(nèi)存布局:代碼段、數(shù)據(jù)段、BSS段、堆棧段、堆二、實(shí)驗(yàn)環(huán)境硬件環(huán)境:計(jì)算機(jī)一臺(tái),局域網(wǎng)環(huán)境;軟件環(huán)境:Linux Ubuntu 操作系統(tǒng),gcc編譯器。、實(shí)驗(yàn)內(nèi)容和步驟第一部分:編程分析 Linux中內(nèi)存動(dòng)態(tài)申請(qǐng)與內(nèi)存靜態(tài)申請(qǐng)的區(qū)別要求:1、 編寫(xiě)一個(gè)Linux C程序,在該程序中使用定義一個(gè)全局變量,以及使用malloc申請(qǐng)一段內(nèi)存(可大于物理內(nèi)存大小,理論上在32位系統(tǒng)中可以申請(qǐng)小于 3G空間,但由于malloc 要求申請(qǐng)連續(xù)的空間,所以能申請(qǐng)到的空間一般在2G以下)

49、。2、 打印出全局變量的起始地址,以及malloc分配的內(nèi)存的地址;3、觀察運(yùn)行結(jié)果,并分析說(shuō)明結(jié)果的地址是否是物理地址。代碼:#in clude<stdio.h>#in clude<stdlib.h>in t pin t128;int mai n()char* pbuf=(char *)malloc(sizeof(char)*1024*1024*1024);if(p in t)prin tf("the address of pint is %xn ”,p in t);if(pbuf)prin tf("the address of pbuf is %

50、xn ”,pbuf);if(pbuf)free(pbuf);pbuf=NULL;return 0;實(shí)驗(yàn)結(jié)果:panpan-Y400:燈鼻面pan3pan-Y4O0:-$ gcc z + c -o zg error r.c:沒(méi)肩那個(gè)文件或冃錄gcc:'-r no input filesconpi1ntinn ternihated.panljpan-V460icd 卓面 pan(3pan-Y4O0 135 gcc z . c -a ?zIn funttion rnainJ:zc:9:10: warring; fornatexpects srgunent of type 1 unsigned

51、 int', but argutent 2 has type *intrnat=printf("the address of pint is,pint:Aic; 13:16; ning; forat '%mR eicpecargument of type 1 unsigned ihtr r but argun #nt 2 has typ電'thar * *-Wfornat=Jprintf(k theciF pbuf is 賢»ptjuf;Apdh$pan>¥4Gtl./ztheof pint isthe address of pbuf

52、 is 24cel010 panpmn¥40®T農(nóng)面$ 第二部分:進(jìn)一步了解Linux內(nèi)存的分配和虛擬內(nèi)存管理的原理、了解Linux的內(nèi)存布局:代碼段、數(shù)據(jù)段、BSS段、堆棧段、堆。要求:1、編寫(xiě)一個(gè)Linux C程序,在該程序中定義初始化全局變量、未初始化全局變量、初始化靜態(tài)變量、未初始化靜態(tài)變量、局部變量、使用malloc分配的局部變量2、打印出各種變量的的起始地址代碼:#i nclude <stdio.h>#i nclude <stdlib.h> /定義兩個(gè)初始化的全局變量int data_var0 = 10;int data_var1 = 1

53、0; / 定義兩個(gè)未初始化的全局變量int bss_var0;int bss_var1;int mai n()/分別定義一個(gè)初始化和一個(gè)未初始化的靜態(tài)變量static int data_var2 = 10;static int bss_var2;/定義兩個(gè)局部變量int stack_varO = 1;int stack_var1 = 1;int stack_var2 = 1;printf(”TEXT Segmentn ”);prin tf("Address of main: %pn", main);printf(”DATA Segmentn ”);prin tf("

54、;Address of data_var0: %pn", &data_varO);prin tf("Address of data_var1: %pn", & data_var1);prin tf("Address of data_var2: %pn", &data_var2);printf(”BSS Segmentn");prin tf("Address of bss_varO(BSS Segme nt): %pn", & bss_var0);prin tf("Addre

55、ss of bss_var1(BSS Segme nt): %pn", & bss_var1);prin tf("Address of bss_var2(BSS Segme nt): %pn", & bss_var2);printf(”STACK Segmentn");prin tf("Address of stack_var0: %pn", &stack_var0);prin tf("Address of stack_var1: %pn", &stack_var1);printf(

56、"Address of stack_var2: %pn", &stack_var2); / 使用 malloc 分配三個(gè)大小為 1024B的內(nèi)存char* heap_varO = (char*)malloc(1024);char* heap_var1 = (char*)malloc(1024);char* heap_var2 = (char*)malloc(1024); / 使用 malloc 分配三個(gè)大小為 512MB 的內(nèi) 存char* mmap_var0 = (char*)malloc(1024 * 1024 * 512);char* mmap_var1 = (char*)malloc(1024 * 1024 * 512);char* mmap_var2 = (char*)malloc(1024 * 1024 * 512);printf(”HEAP Segmentn");if(heap_var0)prin tf("Address of heap_var0:%pn", heap_var0);free(heap_var0); heap_var0 = NULL;if(h

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論