




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)二 Linux進(jìn)程通信一、實(shí)驗(yàn)?zāi)康?)了解有關(guān)Linux系統(tǒng)調(diào)用;2)學(xué)習(xí)有關(guān)Linux的進(jìn)程創(chuàng)建,理解進(jìn)程創(chuàng)建后兩個并發(fā)進(jìn)程的執(zhí)行。二、實(shí)驗(yàn)內(nèi)容在Linux環(huán)境下,用C/C+語言編程,使用系統(tǒng)調(diào)用fork創(chuàng)建進(jìn)程多個子進(jìn)程。(1) 調(diào)試并完成下列程序,完成實(shí)驗(yàn)要求:#include "stdio.h" #include "sys/types.h" #include "unistd.h" int main() pid_t pid1; pid_t pid2; pid1 = fork(); pid2 = fork(); printf(
2、"pid1:%d, pid2:%dn", pid1, pid2); 要求:A.請說出執(zhí)行這個程序后,將一共運(yùn)行幾個進(jìn)程。B.觀察運(yùn)行結(jié)果,并給出分析與解釋。答:A.執(zhí)行這個程序后,將一共運(yùn)行4個進(jìn)程。A.運(yùn)行結(jié)果如下:分析與解釋:fork()函數(shù)能夠建立子進(jìn)程,且使得子進(jìn)程得到父進(jìn)程地址空的一個復(fù)制;而且,當(dāng)創(chuàng)建成功時,如果是父進(jìn)程則返回0,子進(jìn)程則返回子進(jìn)程的ID,但是,fork()創(chuàng)建的進(jìn)程并不是從該程序開頭開始執(zhí)行,它只是和父進(jìn)程一樣繼續(xù)執(zhí)行后續(xù)代碼,因此在之后的語句中,父子進(jìn)程同時創(chuàng)建一個進(jìn)程,就形成了四個進(jìn)程,如圖上所示。 所以,在上面的截圖中,第一次fork()
3、函數(shù)時成功產(chǎn)生了父子進(jìn)程pid分別為2775和0,第二次使用fork()函數(shù)時父子進(jìn)程又各產(chǎn)生了一對父子進(jìn)程父進(jìn)程產(chǎn)生的父子進(jìn)程的pid分別為2776和0,子進(jìn)程產(chǎn)生的父子進(jìn)程的pid分別為0和2777。因?yàn)檫M(jìn)程是并發(fā)的,他的調(diào)度我們無法干預(yù),所以出現(xiàn)的結(jié)果并非都是一成不變的,執(zhí)行多次后,輸出的順序有可能不一樣。(2)參考下面的相關(guān)程序?qū)嵗?,編寫一個管道實(shí)驗(yàn)程序,實(shí)現(xiàn)兩個進(jìn)程之間的數(shù)據(jù)通信。要求:父進(jìn)程順序?qū)懭肴舾蓚€字符串,子進(jìn)程順序讀出內(nèi)容,并寫入文件piple.txt,并顯示出來。(寫出設(shè)計(jì)步驟、數(shù)據(jù)結(jié)構(gòu)、關(guān)鍵代碼、實(shí)驗(yàn)結(jié)果及其分析說明)答:設(shè)計(jì)步驟:用pipe()創(chuàng)建一個管道fd,用fo
4、rk調(diào)用產(chǎn)生兩個進(jìn)程(父進(jìn)程和子進(jìn)程);將父進(jìn)程將要傳輸給子進(jìn)程的信息寫在readbuffer;然后使子進(jìn)程通過讀端用write函數(shù)從緩存中讀取父進(jìn)程傳輸?shù)南?。?shù)據(jù)結(jié)構(gòu):定義一個字符數(shù)組string用于存放父進(jìn)程將要傳輸給子進(jìn)程的消息,使用read函數(shù)和write函數(shù)配對實(shí)現(xiàn)管道的運(yùn)行。關(guān)鍵代碼:#include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> int main(void) i
5、nt fd2, out; pid_t childpid; char string="abcdefghijklmnopqrstuvwxyz" char readbuffer27; pipe(fd); childpid=fork(); 實(shí)驗(yàn)三 動態(tài)分區(qū)管理方法一、實(shí)驗(yàn)?zāi)康谋緦?shí)驗(yàn)主要對操作系統(tǒng)中內(nèi)存管理方法及其應(yīng)用中的一些關(guān)鍵算法進(jìn)行模擬。學(xué)生通過設(shè)計(jì)與實(shí)現(xiàn)相關(guān)算法,能夠加強(qiáng)對相應(yīng)理論的理解,并對了解操作系統(tǒng)內(nèi)存管理子系統(tǒng)的相關(guān)處理原理與過程。二、實(shí)驗(yàn)要求基本要求:編碼實(shí)現(xiàn)動態(tài)分區(qū)管理的三種分配算法和回收算法(相鄰空閑區(qū)要合并)。1)初始化:輸入若干個空閑分區(qū)和已占用分區(qū)信息,建
6、立空閑區(qū)表和已分配表。2)分配功能:輸入一個作業(yè)請求,可選最先、最佳和最壞算法實(shí)現(xiàn)該作業(yè)的內(nèi)存分配;3)回收功能:輸入進(jìn)入完成態(tài)的作業(yè),回收其占用的分區(qū),并進(jìn)行檢查合并相鄰空閑分區(qū)。4)顯示當(dāng)前分區(qū)情況:顯示已占用分區(qū)、空閑區(qū)表的內(nèi)容。3、 實(shí)驗(yàn)內(nèi)容基本原理(1)動態(tài)分區(qū)時的分配方法有三種:最先適應(yīng)法(first fit algorithm)最佳適應(yīng)法(best fit algorithm)最壞適應(yīng)法(worst fit algoriathm)1) 最先適應(yīng)法 該法一般空閑區(qū)按起始地址遞增排列。 該算法的最大特點(diǎn)是查找簡單快速,但需要按地址排序。 即找到第一個滿足要求的低地址空閑區(qū),分割分配。
7、2) 最佳適應(yīng)算法 通常按照空間從小到大的次序排序。 當(dāng)用戶作業(yè)或進(jìn)程申請一個空閑區(qū)時,從表頭開始查找,找到第一個滿足要求的空閑區(qū)時,即停止查找。即找到那個滿足大小且是最小的空閑區(qū),分割分配。123) 最壞適應(yīng)算法通常要求空閑區(qū)按其空間大小遞減排序。當(dāng)用戶作業(yè)或進(jìn)程申請一個空閑區(qū)時,順序查找到第一個滿足要求的空閑區(qū)用來分配。即找到那個滿足大小且是最大的空閑區(qū),分割并分配。(2)動態(tài)分區(qū)在去配時,可能遇到4種情況: a) 該空閑區(qū)的上下兩相鄰分區(qū)都是空閑區(qū); b) 該空閑區(qū)的上相鄰區(qū)是空閑區(qū); c) 該空閑區(qū)的下相鄰區(qū)是空閑區(qū); d) 兩相鄰區(qū)都不是空閑區(qū)。1、 主要函數(shù)實(shí)現(xiàn)struct dat
8、a1 /*空閑區(qū)表*/int address;int length;int flag;struct data2 /*已分配區(qū)表*/int address;int length;char name20;struct data1 emptyMAX;struct data2 busyMAX;void initialize( );int read_data( ); /*從文件中讀如數(shù)據(jù)*/void display_empty_table(int); /*顯示空閑區(qū)表*/void display_busy_table(int); /*顯示已分配區(qū)表*/void badest_fit( int *,int
9、 *,char *name,int s );/*最壞適應(yīng)算法*/void first_fit( int *,int *,char *name,int s ); /*最先適應(yīng)算法*/void best_fit( int *,int *,char *name,int s ); /*最佳適應(yīng)算法*/void main( )int num1,num2,size; /*num1用于統(tǒng)計(jì)空閑表的,num2用于統(tǒng)計(jì)分配區(qū)表*/char name20;num2=0;initialize( ); /*初始花空閑區(qū)表和分配區(qū)表*/num1=read_data( ); if( num1=0 ) /*表示文件中沒有數(shù)
10、據(jù)*/printf("there has no data in empty tablen");printf("the initialial empty table is:n");display_empty_table( num1 ); /*顯示空閑區(qū)表*/while(1)printf("please input job's name and job's sizen");puts("input exit to exit");scanf("%s",name);if( strcmp(n
11、ame,"exit")=0 )getch( );break;scanf("%d",&size);badest_fit( &num1,&num2,name,size );/*這里可以改為最佳適應(yīng)和最先適應(yīng)*/first_fit( &num1,&num2,name,size );/*這里可以改為最佳適應(yīng)和最先適應(yīng)*/best_fit( &num1,&num2,name,size );/*這里可以改為最佳適應(yīng)和最先適應(yīng)*/puts("the empty table after assigning
12、");display_empty_table( num1 );puts("the busy table:");display_busy_table( num2 );void initialize( )int i;for( i=0;i<MAX;i+ )emptyi.address=0;emptyi.length=0;emptyi.flag=0;busyi.address=0;busyi.length=0;strcpy(,"");int read_data( )FILE *fp;int n=0;fp=fopen("
13、;A.txt","rb");if( fp=NULL )void display_empty_table( int num )int i;printf("addresstlengthtflagn");for( i=0;i<num;i+ )printf("%dt%dt%dn",emptyi.address,emptyi.length,emptyi.flag);printf("n");void display_busy_table( int num )int i;printf("addresst
14、lengthtnamen");for( i=0;i<num;i+ )printf("%dt%dt%sn",busyi.address,busyi.length,);printf("n");void badest_fit( int *n1,int *n2,char *name,int s )int i,temp;temp=0;for( i=0;i<*n1;i+ ) /*尋找最大的空閑區(qū)*/if( emptyi.length>emptytemp.length)temp=i;if( s>emptytemp.
15、length) /*申請的空間比最大的空閑區(qū)還大*/printf("the size of memory is not enoughn");return;busy*n2.address=emptytemp.address;/*修改分配區(qū)表*/busy*n2.length=s;strcpy( busy*,name );(*n2)+;if( s=emptytemp.length ) /*若申請的空間與空閑區(qū)恰好相等*/for( i=temp+1;i<*n1;i+ )emptyi-1=emptyi;(*n1)-;elseemptytemp.address+=s
16、;emptytemp.length-=s;/*最先適應(yīng)算法*/void first_fit( int *n1,int *n2,char *name,int s )int i,temp;temp=0;for( i=0;i<*n1;i+ ) /*尋找第一塊空閑區(qū)*/if( emptyi.length>=s )temp=i;break;if( i>=*n1)printf("the size of memory is not enoughn");return; /*最佳適應(yīng)算法*/void best_fit( int *n1,int *n2,char *name,
17、int s )int i,temp;temp=0;for( i=0;i<*n1;i+ ) /*尋找最小的空閑區(qū)*/if( emptyi.length<emptytemp.length)temp=i;if( s>emptytemp.length) /*申請的空間比最大的空閑區(qū)還大*/printf("the size of memory is not enoughn");return;busy*n2.address=emptytemp.address;/*修改分配區(qū)表*/busy*n2.length=s;strcpy( busy*,name );
18、(*n2)+;if( s=emptytemp.length ) /*若申請的空間與空閑區(qū)恰好相等*/for( i=temp+1;i<*n1;i+ )emptyi-1=emptyi;(*n1)-;elseemptytemp.address+=s;emptytemp.length-=s;2、 測試數(shù)據(jù)與結(jié)果分析最壞適應(yīng)法 badest_fit最佳適應(yīng)法 best_fit 四、實(shí)驗(yàn)總結(jié) 通過此次實(shí)驗(yàn),我實(shí)現(xiàn)了操作系統(tǒng)中內(nèi)存管理方法及其應(yīng)用中的一些關(guān)鍵算法進(jìn)行模擬,完成了實(shí)驗(yàn)?zāi)繕?biāo)。在設(shè)計(jì)與實(shí)現(xiàn)最先適應(yīng)法、最佳適應(yīng)法、最壞適應(yīng)法算法的過程中,加深了自己對這些算法如何進(jìn)行內(nèi)存的分配與回收的機(jī)制的相關(guān)理論的理解,并體會了操作系統(tǒng)內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽高中教科研聯(lián)盟2025年高一化學(xué)第二學(xué)期期末聯(lián)考模擬試題含解析
- 2025屆吉林省長春市汽車經(jīng)濟(jì)技術(shù)開發(fā)區(qū)第六中學(xué)化學(xué)高二下期末檢測試題含解析
- 2025屆江西省吉安市永豐中學(xué)高一下化學(xué)期末質(zhì)量檢測模擬試題含解析
- 醫(yī)院通訊費(fèi)用管理辦法
- 機(jī)構(gòu)工資薪酬管理辦法
- 2025年暑假八上古詩文默寫強(qiáng)化訓(xùn)練早背晚默21-36 素材
- 財政政策與市場信心-洞察及研究
- 全國現(xiàn)代農(nóng)業(yè)發(fā)展規(guī)劃與實(shí)施策略
- 智慧學(xué)校信息管理辦法
- 云資源訪問控制機(jī)制-洞察及研究
- 2024IPv6 技術(shù)要求 第2部分:基于 IPv6 段路由(SRv6)的 IP 承載網(wǎng)絡(luò)
- 新標(biāo)準(zhǔn)日本語初級上冊第七課課練
- 《扣件式鋼管腳手架安全技術(shù)規(guī)范》JGJ130-2023
- 部編初一語文閱讀理解最全答題模板與技巧+專項(xiàng)訓(xùn)練練習(xí)題
- 弟子規(guī)注音A4直接打印版
- 金融學(xué)原理重點(diǎn)總結(jié)彭興韻
- 譯林版三年級英語上冊《全冊課件》ppt
- 反恐C-TPAT程序文件整套(通用)
- ma600學(xué)員座艙圖冊用戶培訓(xùn)中心
- 液壓過濾器的設(shè)計(jì)和制造
- 《義務(wù)教育英語課程標(biāo)準(zhǔn)(2022年版)》自測題、綜合測試題、初中英語新課標(biāo)過關(guān)抽測試卷及優(yōu)秀答卷(共17套附答案)
評論
0/150
提交評論