操作系統linux版實驗報告材料_第1頁
操作系統linux版實驗報告材料_第2頁
操作系統linux版實驗報告材料_第3頁
操作系統linux版實驗報告材料_第4頁
操作系統linux版實驗報告材料_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、標準操作系統實驗報告(LinUX版)網絡142 潘豹142999文案實驗一觀察LinUX進程狀態一、實驗目的在本實驗中學習LinUX操作系統的進程狀態,并通過編寫一些簡單代碼來觀察各種情況 下,LinUX進程的狀態,進一步理解進程的狀態及其轉換機制。二、實驗環境硬件環境:計算機一臺,局域網環境;軟件環境:LinUX UbUntu 操作系統,gcc編譯器。(四)查看不可中斷阻塞”狀態(D)創建一個 C程序,如Uninter_status.c,讓其睡眠30s代碼:#in ClUdev Uni std.h>#in cUde<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-;實驗結果:0 StUdentt: 桌面StUdetlab-soft:IS“exanples i desktop 模扯 視類 圖月 下H 音樂 桌面StUdentlab-soft:$ Cd 桌面StUdenttab-soft:桌面$ gcc 1 * 1 .c -o 1.1StudentfLab -SOft:-/桌面$ ,/1.1 & PS1 3821PIDTTYTlMECMD3757pts/109:00:00bash3821ptl1*13822pts/1pStuden

3、tlab-SOft:桌而$ |(二)查看“暫停”狀態(T)運行rUn_StatUS進程,其進入 R狀態: 代碼同上:(三)查看 可中斷阻塞”狀態(S)創建一個 C程序,如interrUptiblie_StatUS.c ,讓其睡眠 30s編譯鏈接,后臺運行該程序(后接 &符號),并使用PS命令查看運行狀態 代碼:#in cUde< Uni std.h>#in cUde<stdio.h> int mai n()SleeP(30); return;實驗結果:pan©Pdn-Y400; Zpanpan-V4G0 gcc 1.2»C -o 1÷

4、;21,2,Ct Tn function 'nain":1.2»c :6:3 ; warning- * returnj With no VaILlet in functior returning non -VOid return;PanePan-Y40: $ 1.2 SPS1 452Z PID TT¥TlWE CMDash 2PS4566pt2fl00:00:004522 pts2盹:盹:朋4523 pts/20e:ee;eePanePan-Y4iS (四)查看不可中斷阻塞”狀態(D)創建一個 C程序,如Uninter StatUS.c,讓其睡眠30s編譯

5、鏈接,后臺運行該程序(后接 &),并使用PS命令查看運行狀態 代碼:#in clude< Uni std.h>#in ClUdeVStdio.h>int mai n()if(vfork()=0) Seep(300); return;實驗結果:靜第芒 pan©Pan-Y400: «par0pa*gcc 1.4, C LO 1 i 4PanePan-Y,40:*> 1,4 aPSL 4445PlD TTYTlMECMD4425 pts/19&6Qbash4445 pts/19&0:00;01,44446 pts/19&9:

6、&0:60PS4447 pts/1999:09:601.4PanSPan-Y,4G = I(五)查看 僵尸”進程(Z)創建一個C程序,如ZOmbie_StatUS.c,在其中創建一個子進程,并讓子進程迅速結束, 而父進程陷入阻塞編譯鏈接,后臺運行該程序(后接&),并使用PS命令查看運行狀態(30s內)代碼:#in clude< Uni Std.h>#in cldUe<Stdio.h>int mai n()if(fork()SleeP(300); 實驗結果:令魯嵋 Pan(Pan-Y400:Parl> Y400 :»$ gcc 1,5, C

7、1÷5P30p3-Yh4O:-S1.5 &1 4232PID TT¥TlME4214 pts/O4232 pts/O;00:fid4233 pts/O4234 pts90:00:60paSpan-Yh40z-SIPSCMDZsh1.5PS1-5 <defunct>實驗二觀察LinUX進程/線程的異步并發執一、實驗目的通過本實驗學習如何創建 LinUX進程及線程,通過實驗,觀察 LinUX進程及線程的異步 執行。理解進程及線程的區別及特性, 進一步理解進程是資源分配單位,線程是獨立調度單位。二、實驗環境硬件環境:計算機一臺,局域網環境;軟件環境:LinUX

8、 UbUntu 操作系統,gcc編譯器。三、實驗內容和步驟1進程異步并發執行編寫一個C語言程序,該程序首先初始化一個 count變量為1 ,然后使用fork函數創 建兩個子進程, 每個子進程對 CoUnt力口 1后,顯示"I amson, count=x ”或“I amdaughter, CoUnt=x ” ,父進程對 count 力口 1 之后,顯示"I am father, count=x” ,其中 X 使用 count值代替。最后父進程使用 WaitPid等待兩個子進程結束之后退出。編譯連接后,多次運行該程序,觀察屏幕上顯示結果的順序性,直到出現不一樣的情 況為止,并

9、觀察每行打印結果中count的值。代碼:#in clude< 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=%d n",co Un t);elsedaughter_pid=fork();if(daughter_pid=0)COUn t+;Prin tf("i am daughter,co Un t=%d

10、 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);Q令* PanbaaideCiPad-y4CO:屮車面 pabotdepad<y4B0: -S Cd 虞直 pt>aoidcapad-y466; gcc X ÷ C o X x.c: In function rnin,ix,C!ZSr5t earning: Vmpltctt deckaratto Of f

11、unction jwatt>td , - WtrnPItC-Lt-fuctt o-dcclarationWAltPId (SOnVPid a Ml LL , O );JRPMIbllOQideflPI>d-y400: 桌面$ JXI an father f COUnt=2i an sonlcont-2i. an daughter,cot-2PanbdO Idea pad-y3D0:$ . xi an Ilather,cout-21. art son COUritI an daughter jc0t=2 panbotdcapad-y4Q6: -/桌面帛 x i an father,C

12、OUt2 t an daughtrcojt=2 t an SOnJCOUnt=2Danbg Id 已日 utad -桌面 $ 2、線程異步并發執行編寫一個C語言程序,該程序首先初始化一個 CoUnt變量為1,然后使用Pthread_Create 函數創建兩個線程, 每個線程對CoUnt力口 1后,顯示"I amson, count=x "或“I amdaughter, CoUnt=x ” ,父進程對 count 力口 1 之后,顯示"I am father, count=x” ,其中 X 使用 count值代替。最后父進程使用Pthread_join等待兩個線程結

13、束之后退出。編譯連接后,多次運行該程序,觀察屏幕上顯示結果的順序性,直到出現不一樣的情 況為止,并觀察每行打印結果中CoUnt的值。代碼:#in ClUdeV Uni std.h>#in CIUdeVStdio.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("

14、;i am son,coun t=%d n",*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, &coun t);COUn t+;Prin tf("i am Pare nt,co Un t:=%dn",co Un t);PthreadOin (son_tid,NULL);PthreadLjO

15、i n(daughter_tid,NULL);return 0;實驗結果:6 * Penbaideapad-y4QC:亠/臬tfjtpccNFtocf.c: j.!*rat*中:bc(, text+xbj :對,thred-cretefIeh文的引鋼b÷cU , tet+ecej: TPthrad-cret,未定文的引一毋b÷ct(. rext+fcI 對*rhr羽(CjOJLfI "耒宦義前引用b.ct(. et+xied):對*|rthrei3_Jntni未定義的引用 colltct2: error: Id rffttrred T exit StatUSPnb

16、ftoQidtoped400r而$ gcc -02 -WalI -o b b.c -Ipthreadbc: Ir function daughter,:b.c:»:l: WOriIirq: COntrQl reaches tnd of o votd function retur' type b+匸;In function * SPn t;b«c:lS;l: »dnlnq: ctrg I -EdthEL end f 4hi -VOid function -WretLr n- type pa DbacHBtdra pad 4ft:, /bR M PArentf

17、Count:?t a daughterPCaUht>41 SOn cont=3jp3nb.o<ldm呂tl卓面S . /b1 Jn SCIn ,count=2i an Parent,cut:=3jl An daughterpcout=4PaflhaoUBaMi->V400:*ASS 實驗三使用信號量進行互斥與同步一、實驗目的本實驗介紹在LinUX中使用信號量進行進程同步、互斥的方法。讀者可以通過實驗進一 步理解進程間同步與互斥、臨界區與臨界資源的概念與含義,并學會LinUX信號量的基本使用方法。二、實驗環境硬件環境:計算機一臺,局域網環境;軟件環境:LinUX UbUntu

18、操作系統,gcc編譯器。三、實驗內容和步驟三、實驗內容和步驟(一)參考:PoSlX 以及 SyStem VSyStem V: UniX眾多版本中的一支,最初由 AT&T定義,目前為第四個版本,其中定 義了較為復雜的 API。POSIX : POrtabIe OPerating SyStem Interface , IEEE 為了統一 UniX 接口而定義的標準, 定義了統一的 API接口。LinUX即支持SyStem API ,又支持 POSIX API(二)實驗步驟step1:通過實例查看不使用互斥時的情況(假設文件命名為n o_sem.c)編譯鏈接,同時運行兩個進程,顯示結果代碼:

19、#in ClUdevStdio.h>#in cUde<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;

20、實驗結果:協魯® pan®Pan-Y400:卄/事面PBnePallgedttpapA-40:gcc x.c -Q X5cc: error: x.c:沒有那個文件或目錄guc:. (. rr r o ipdt filesCOnP,Llatic te'iratedPanPan-Y4QQ:-$ Cd 面 panpan-Y4:*/面S get *.C -0 X x*c: In fuction *ai,x.c:13:2: Warning: implicit declaration Of function 'SIeeP' -WiPlPliCit -functi

21、on '(JeclerattQnSl PepCdIfil);Apap*Y4B!*面S x & ./x oi Z一 _step2:使用信號量來對臨界資源進行互斥(假設文件命名為With_sem.c)編譯鏈接,同時運行兩個進程。觀察X和O的出現規律,并分析原因。代碼:#in clude<stdio.h>#in clude<stdlib.h>#in ClUde<systypes.h>#in clude<sys/ipc.h>#in clude<semaphore.h>#in clude<fc ntl.h>#in c

22、lude<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",messag

23、e); fflush(stdout);Sem_post(mutex); sleep(ra nd()%2);sleep(10);Sem_close(mutex);Sem_u nil nk("mysem"); exit(0);實驗結果:PanOPan-Y400: EFjll面x,c:: In function >vn'x÷c: 22:2; arn<5 : inplicit declaration Of function *SIeeP, l - WinPlci t-fctinr 'declarationsieep(rad0V3);:C 

24、47; tcxt+xj1b): ,6CH OlKnf 未定義的引用-'- 一丄一.,-S-誦;C text+Gdfr)I 5,senpost,耒定叉的引用'未宦義的弓用 x*c: C < xt4izd: ,sen ULnk'未定文的引用 collect?: error T Id retr ed 1 exit StdtUStpcCAkHkx?.¢1fnai*中; I _x.c; ”=_ F ,c : C + tet+67× ,aeFt-Wsit*未定義的弓 M.cI.tt+l23 對*5F-ClS?PanPar-Y4C0: Ti5 cc Lpth

25、reod .c -o X gcc-Ipthcead:未找到命會Panpar*-V4Q0:-/貞T1$ gcc x<c -IPthreaCl o K .c: In function falt:k<:22:2: MJrning: VnpKcit decIaratLor Of function , SIeeP , l WinPIiCit-function -IjeeIJratlOnJSIJeeP(rand O K3 JPMeP>n-Y4S0i-面$ & x oJ×1 9692XXCOXXOCXXOXOOXXOOXXOOXXOXXOOXXDOKCl)+ 巳完成Pan

26、$Pan-Y40OrJS |step3 :使用信號量來模擬下象棋紅黑輪流走子的情況編寫兩個C語言程序black_chess.c以及red_chess.c,分別模擬下象棋過程中紅方走子 和黑方走子過程。走子規則:紅先黑后,紅、黑雙方輪流走子,到第10步,紅方勝,黑方輸。代碼: 紅色棋#in clude<stdio.h> #in clude<stdlib.h>#in ClUde<systypes.h>#in clude<sys/ipc.h>#in clude<semaphore.h>#in clude<fc ntl.h>#in

27、 ClUde<sysstat.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(hei);if(i!=9)Prin tf("Red CheSS had moved,black,chess go!n");elsePrin

28、 tf("Red CheSS win!n");fflush(stdout);Sem_post(h On g);sleep(10);Sem_close(hei);Sem_close(h On g);Sem_ Un Ii nk("chess_red_sem");Sem_ Un Ii nk("chess_black_sem");exit(0);黑色棋:#in clude<stdio.h>#in clude<stdlib.h>#in clude<sys/types.h>#in clude<sys/ip

29、c.h>#in clude<semaphore.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

30、)Prin tf("Black CheSS had moved,red CheSS go!n");elsePrintf("Black CheSS win!n");fflush(stdout);Sem_post(hei);sleep(10);Sem_close(hei);Sem_close(h On g);Sem_ Un Ii nk("chess_red_sem");Sem _un Ii nk("chess_black_sem"); exit(0);實驗結果:pan®Pan-Y400:呼臬面 pan0pan

31、*Y466:*/桌面$ red ./black 1 3677Red chess had moved,black,chess go! BIark chess had moved, red Che-SS go! Red CheSS had movedJbla匚k*chef55 go! 6Lack 匚hess had PlOVedJred CheSS go! Red CheSS had moved J black,chess go! BIaCk CheSS had (TlOVed,red 匚hess go! Red CheSS had moved ,black,che go! BIaCk chess

32、 had moved電d CheSS go! Reel CheSS hd IlIQVed J black,ches5 go ! BlaCk CheSS had PlOVedJred CheSS go! Red CheSS had movedfblack,chess go! BIaCk 匚hes had movedFred chess go! Red CheSS had movedtbiack,chess go! BLaCk chess had moved,red ChfrSS go! Red CheSS hd moved,black,chess go! BIaCk 匚hess had oved

33、,red CheSS go! Red CheSS had moved t black, ch ess go! BlaCk CheSS had moved,red CheSS goJ Red chess Win!Black CheSS Wini1+已完成./ redPan(JPan-?4fie:/桌面$ I實驗四作業調度算法模擬、實驗目的(1) 掌握周轉時間、等待時間、平均周轉時間等概念及其計算方法。(2) 理解五種常用的進程調度算法(FCFS、SJF、HRRF、HPF、RR),區分算法之間 的差異性,并用C語言模擬實現各算法。(3) 了解操作系統中高級調度、中級調度和低級調度的區別和聯系。、實

34、驗環境硬件環境:計算機一臺,局域網環境;軟件環境:LinUX UbUntu操作系統,gcc編譯器。、實驗內容和步驟本實驗所選用的調度算法均默認為非搶占式。實驗所用的測試數據如下表所示。本實驗所用的測試數據如下表所示表實驗測試數據作業Id到達時間執行時間優先權180050028153013830252483520258451526700101782050作業的數據結構:typedef StrUCt nodeint number; / 作業號int reach_time;作業抵達時間 int need_time;作業的執行時間 int privilege;/作業優先權 float excellen

35、t; 響應比 int Start_time;/作業開始時間 int Wait_time;/ 等待時間 int visited;/作業是否被訪問過 bool isreached;/作業是否已經抵達 job;代碼:#i nclude <stdio.h>#in clude <stri ng.h> #i nclude <stdlib.h> #in clude<stdbool.h>/最大作業數量ConStint MAXJoB=50;/作業的數據結構typedef StrUCt nodeint number;/ 作業號int reach_time;作業抵達時

36、間int need_time;/作業的執行時間int privilege;/作業優先權float excellent;/ 響應比int Start_time;/作業開始時間int Wait_time;/ 等待時間int visited;/作業是否被訪問過bool isreached;/作業是否抵達job;job jobs50;/ 作業序列 int quantity;/ 作業數量/初始化作業序列void in itial_jobs()int i;for(i=0;i<MAXJOB;i+)jobsi. nu mber=0; jobsi.reach_time=0; jobsi.privilege

37、=0; jobsi.excelle nt=O; jobsi.start_time=0; jobsi.wait_time=0; jobsi.visited=0; jobsi.isreached=false;qua ntity=O;/重置全部作業信息Void resetnfo()int i;for(i=0;i<MAXJOB;i+) jobsi.start_time=0;jobsi.wait_time=0;jobsi.visited=0;/查找當前CUrrent_time已到達未執行的最短作業,若無返回-1 int fin dminjob(job jobs,i nt CoUnt)int min

38、job=-1;/=jobs0. need_time;int min IoC=-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;retur

39、n mi nloc;/查找最早到達作業,若全部到達返回-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;rea

40、rlyloc=i;return rearlyloc;ZZ讀取作業數據void readJobdata()FlLE *fp;Char fname20;int i;ZZ輸入測試文件文件名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, PIeaSe CheCk file name:' n");elseZZ依

41、次讀取作業信息while(!feof(fp)if(fscanf(fp,"%d %d %d %d",&jobsquantity.number,&jobsquantity.reach_time,&jobsquantity. n eed_time,&jobsqua ntity.privilege)=4)qua ntity+;ZZ打印作業信息Prin tf("output the orig in job data' n");Printf("'n");Prin tf("tjoblDtre

42、achtimet needtimetprivilegen");for(i=0;i<qua ntity;i+)Prin tf("t%-8dt%-8dt%-8dt%-8d n",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;/獲取最近到達的作 業loc=fi ndrearlyjob(jobs

43、,qua ntity);/輸出作業流Printf("nnFCFS 算法作業流 n");Printf("n");Prin tf("tjoblDtreachtimetstarttimetwaittimetro Un dtimen");CUrre nt_time=jobsloc.reach_time;/每次循環找出最先到達的作業并打印相關信息for(i=0;i<qua ntity;i+)if(jobsloc.reach_time>curre nt_time) jobsloc.start_time=jobsloc.reach_ti

44、me;CUrre nt_time=jobsloc.reach_time;elsejobsloc.start_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,jobs loc.wait_time,jobsloc.wait_time+jobsloc .n eed_time);jobsloc.visited=1;CUrre nt_

45、time+=jobsloc .n eed_time;total_Waitime+=jobsloc.wait_time;total_r OUn dtime=total_r OUn dtime+jobsloc.wait_time+jobsloc .n eed_time;ZZ獲取剩余作業中最近到達作業loc=fi ndrearlyjob(jobs,qua ntity);Printf("總等待時間 %8d 總周轉時間:%-8dn",tOtaLWaitime,total_roundtime);Printf(“平 均 等 待 時 間 :%4.2f 平 均 周 轉 時間:%4.2fn&q

46、uot;,(float)tOtaLWaitime/(quantity),(float)tOtaLroUndtime(quantity);/短作業優先作業調度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;實驗結果:ll>d-r*tvP r - J LU 31CmI *a*Mfr-Y4M 1gcc aX -o

47、 aPaIltPall-Y4t-jK$ ÷aPIeaSe input job dntE file nameSSQUtPUt the Origin iob ClataJOblDreachtt IlgSoo81Sdttn503025201519prttlrege012221820C5S作業流JObID總等待:3Ie 平均等待時間: Eh: 1: pae:reachte reo 8Q& 815 820 830 釘5 845Starttlrle79aoe850ae8BSl693G總同轉時q = us44.29平均周轉時間:斫,43WaItttne&S3S備 SS7505rou

48、nctinel56S 砧809S16HOt found實驗五 LinUX內存分配一、實驗目的1、 了解LinUX內存的分配和虛擬內存管理的原理,學習如何使用malloc動態申請內存, 了解動態申請與靜態申請的區別。2、深入理解LinUX的內存布局:代碼段、數據段、 BSS段、堆棧段、堆二、實驗環境硬件環境:計算機一臺,局域網環境;軟件環境:LinUX UbUntu 操作系統,gcc編譯器。三、實驗內容和步驟第一部分:編程分析 LinUX中內存動態申請與內存靜態申請的區別要求:1、 編寫一個LinUX C程序,在該程序中使用定義一個全局變量,以及使用malloc申請一段內存(可大于物理內存大小,

49、理論上在32位系統中可以申請小于 3G空間,但由于malloc 要求申請連續的空間,所以能申請到的空間一般在2G以下)。2、 打印出全局變量的起始地址,以及malloc分配的內存的地址;3、觀察運行結果,并分析說明結果的地址是否是物理地址。代碼:#in ClUdevStdio.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

50、",p in t);if(pbuf)Prin tf("the address of PbUf is %xn ",pbuf);if(pbuf)free(pbuf);PbUf=NULL;return 0;實驗結果:PanPan-Y400:彳桌面PaPan-Y4:-$ 9cc z÷c -G Zgcc;z.c:沒有那于文杵或目錄9cc; f*l C rrr : no InPUIt filescpilti teriatd,panpan-Y40O Cd 臬面PanePan*Y46:gcc ZkC -a Zztc: In function dnair,ZkC:9:1

51、E w rrtr g: for31 f%x, exPeCtS arqunent Of type CUnSLgned intj f but arquent 2 hNE type ,lnt *, -wfr13t=PrIntf(Ilth總 JdcIr*ss Of Ptrt t xn, JPtntJAZ.c: 13:10: drig : FOrnat H ! , eIPeCti a rgert f type i uigMl Lftt* I but srgiEent 2 has type 'MmL *, *Wfor*t=JPrtntf("the address Of PbUf is x

52、n, fpbuf);APanPBn-Yqee tHS JZthe address Of Plnt is 61D6Othe ddd es Of PbLlF IS 24cellp2<鋰pn¥40B桌而,第二部分:進一步了解LinUX內存的分配和虛擬內存管理的原理、了解LinUX的內存布局:代碼段、數據段、BSS段、堆棧段、堆。要求:1、編寫一個LinUX C程序,在該程序中定義初始化全局變量、未初始化全局變量、初始化靜態變量、未初始化靜態變量、局部變量、使用malloc分配的局部變量2、打印出各種變量的的起始地址代碼:#i nclude <stdio.h>#includ

53、e <stdlib.h> /定義兩個初始化的全局變量int data_varO = 10;int data_var1 = 10; /定義兩個未初始化的全局變量int bss_varO;int bss_var1;int mai n()/分別定義一個初始化和一個未初始化的靜態變 量StatiC int data_var2 = 10;StatiC int bss_var2;定義兩個局部變 量int StaCk_var0 = 1;int StaCk_var1 = 1;int StaCk_var2 = 1;Printf("TEXT Segmentn");Prin tf(&

54、quot;Address of main: %pn", main);Printf("DATA Segmentn");Prin tf("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

55、 tf("Address of bss_varO(BSS Segme nt): %pn", & bss_var0);Prin tf("Address of bss_VarI(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&

56、quot;, &stack_var0);Prin tf("Address of StaCk_var1: %pn", &stack_var1);Printf("Address of StaCk_var2: %pn", &stack_var2); / 使用 malloc 分配三個大小為1024B的內存char* heap_var0 = (Char*)malloc(1024);char* heap_var1 = (Char*)malloc(1024);char* heap_var2 = (Char*)malloc(1024); / 使用 malloc 分配三個大小為 512MB 的內存char* mmap_var

溫馨提示

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

評論

0/150

提交評論