版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)驗(yàn)三、進(jìn)程調(diào)度算調(diào)度策略的使用方法。練習(xí)進(jìn)程調(diào)度算法的編程和調(diào)試技術(shù)。SCHED_OTHER默認(rèn)的分時(shí)調(diào)度策略( 后兩種于對(duì)響應(yīng)時(shí)間有特殊要求的進(jìn)程,并且會(huì)搶先于SCHED_OTHERSCHED_FIFO調(diào)度策略的進(jìn)程只能被更高優(yōu)先高。具有SCHED_OTHER0。動(dòng)態(tài)優(yōu)先數(shù)與進(jìn)程的執(zhí)行狀態(tài)有關(guān),但可以使用nice命令或系統(tǒng)調(diào)用加大進(jìn)程優(yōu)先數(shù)使其優(yōu)先級(jí)降低,或setpriority分別按進(jìn)程或進(jìn)程組或用戶號(hào)設(shè)置介于-20到+20之間的動(dòng)態(tài)#include<sched.h>#include<sys/time.h>intsched_setscheduler(pid_tpid,int,conststructsched_param*sp); structsched_paramint: 返回值:intgetpriority(intwhich,int 進(jìn)程進(jìn)程組用 intsetpriority(intwhich,intwho,intprio); 進(jìn)程進(jìn)程組用 返回值 在新建文件夾中建立以下名為psched.cC : :(C)2006by :#include<stdio.h>#include<stdlib.h>#include<sched.h>#include<sys/time.h>intmain(intargc,char{intfor(i=0;if((pid[i]=fork())p[i].sched_priorityargv[i+1]NULL)atoi(argv[i+1]):10;sched_setscheduler(pid[i],(argv[i+4]!=NULL)?atoi(argv[i+4]):setpriority(PRIO_PROCESS,pid[i],(argv[i+1]!=NULL)?}for(i=0;i<10;printf("ChildPID=%dpriority}exit(}}printf("Mychild%d is%d\n",pid[0],sched_getscheduler(pid[0]));printf("Mychild%d is%d\n",pid[1],sched_getscheduler(pid[1]));printf("Mychild%d is%d\n",pid[2],sched_getscheduler(pid[2]));returnEXIT_SUCCESS;}在當(dāng) 中建立以下Makefile文件srcs=psched.cobjs=psched.oopts=-g-c psched:gcc$(objs)-opschedpsched.o:$(srcs)gcc$(opts)rmpsched使用make命令編譯連接生成可執(zhí)行文件$makegcc-cgccpsched.o-or$#./psched 5- 00child ischild ischild isChildPID=10773priority=-10ChildPID=10772priority=5ChildPID=10771priority=10ChildPID=10773priority=-10ChildPID=10772priority=5ChildPID=10771priority=10#./psched1051800Mychild isMychild isMychild11308 is1ChildPID=11308priority=18ChildPID=11307priority=5ChildPID=11306priority=10ChildPID=11308priority=18ChildPID=11307priority=5ChildPID=11306priority=可以看出雖然進(jìn)程其優(yōu)先數(shù)最大,但由于其調(diào)度策略為先進(jìn)先出,因此#$SIGINT實(shí)驗(yàn)四、進(jìn)程同步實(shí)Linux系1)共享內(nèi)存是OS內(nèi)核為并發(fā)進(jìn)程間交換數(shù)據(jù)而提供的一塊內(nèi)存區(qū)(段)。如果段的權(quán)限設(shè)置恰當(dāng),每個(gè)要該段內(nèi)存的進(jìn)程都可以把它映射到自己私有的地址空$ipcs-222keyshmid 共享內(nèi)存所由者( 共享內(nèi)存使用權(quán)限(本例為student可讀可寫byte共享內(nèi)存字節(jié)數(shù) linuxipcss$ipcs-------SemaphoreArrays------- 0x4d00f259 beagleind 上例說明當(dāng)前系統(tǒng)中已經(jīng)建立多個(gè)信號(hào)燈。其中最后一個(gè)標(biāo)號(hào)為425996用命令ipcs-q觀察消息隊(duì)列的情況。$ipcs- 0x000001c80 msgmid消息隊(duì)列的標(biāo)used-bytes 6448在權(quán)限允許的情況下您可以使用ip -m -s )linuxproc3ipcs命令顯示的當(dāng)前IPC對(duì)象的信息,它們分別是:/proc/sysvipc/shm/proc/sysvipc/sem/proc/sysvipc/msg6)IPC對(duì)象有關(guān)的系統(tǒng)調(diào)用函數(shù)原型都在以下的頭文件中#include<sys/ipc.h>#includeintshmget(key_tkey,intsize,intsize共享內(nèi)存字節(jié)長度flagshmgetkeyflagsIPC_CREATkeykey關(guān)聯(lián)的標(biāo)識(shí)符。不成功返回-1#includechar*shmat(intshmid,char*shmaddr,intflags) shmaddr0,表示用調(diào)用者指定的指針指向共享段flags共享內(nèi)存權(quán)限位#includeintshmdt(char shmdt調(diào)用成功將遞減附加計(jì)數(shù),當(dāng)計(jì)數(shù)為0,將刪除共享內(nèi)存。調(diào)用不成功#includeintsemget(key_tkey,intnsems,intnsems信號(hào)燈數(shù)組中信號(hào)燈的個(gè)數(shù)semget調(diào)用成功,如果key用新整數(shù)指定flags中設(shè)置IPC_CREAT位,則key已存在則返回與key關(guān)聯(lián)的標(biāo)識(shí)符。不成功返回-1#include<sys/sem.h>intsemop(intsemid,structsembuf*semop,unsignednops); 由semget創(chuàng)建的信號(hào)燈數(shù)組的標(biāo)識(shí)符 指向sembuf數(shù)據(jù)結(jié)構(gòu)的指針 #include<sys/sem.h>intsemctl(intsemid,intsemnum,intcmd,unionsemunarg); 由semget創(chuàng)建的信號(hào)燈數(shù)組的標(biāo)識(shí)符semnum該信號(hào)燈數(shù)組中的第幾個(gè)信號(hào)燈 GETVAL返回當(dāng)前信號(hào)燈狀態(tài)SETVAL設(shè)置信號(hào)燈狀態(tài) unionsemunint /*valueforSETVALsemctl執(zhí)行不成功返回-1,否則返回指定的cmdintmsgget(key_tkey,intflags消息隊(duì)列權(quán)限位。msgget調(diào)用成key用新整數(shù)flagsIPC_CREAT位,則返回一個(gè)新建立的消息隊(duì)列標(biāo)識(shí)符。如果指定的整數(shù)key已存在則返回與key關(guān)聯(lián)的標(biāo)識(shí)符。成功返回-1。追加一條新消息到消息隊(duì)列的系統(tǒng)調(diào)用語法#includeintmsgsnd(intmsqid,structmsgbuf*msgp,size_tmsgsz,intmsg); structmsgbuflong /*char /*消息數(shù)據(jù),長度應(yīng)于msgsz的一致}msgszmsgsnd0,不成功返回-1#includeintmsgrcv(intmsqid,structmsgbuf*msgp,size_tmsgsz, longmsgtype,intmsg); structmsgbuflong /*char /*消息數(shù)據(jù),長度應(yīng)于msgsz的一致} =0>0mtype<0返 #includeintmsgctl(intmsqid,intcmdstructmsqid_ds*buf); msgctl調(diào)用成功返回0,不成功返回-1產(chǎn)者/消費(fèi)者共用的IPC函數(shù)的原型和變量: :(C)2006by* :IPC機(jī)制的函數(shù)原型和全局變#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include<sys/shm.h>#include<sys/sem.h>#include<sys/msg.h>#define intget_ipc_id(char*proc_file,key_tintset_msq(key_tmsq_key,intmsq_flag);intdown(intsem_id);intup(inttypedefunionsemuns{int}/*消息結(jié)構(gòu)體*/typedefstructmsgbuflongmtype;}key_tbuff_key;intbuff_num;key_tpput_key;intkey_tcget_key;intkey_tprod_key;key_tpmtx_key;intprod_sem;intkey_tcons_key;key_tcmtx_key;intcons_sem;intintsem_val;int int 者共用的IPC函數(shù): :(C)2006by* :#includeget_ipc_id從/proc/sysvipc/IPCidpfile:對(duì)應(yīng) msg-消息隊(duì)列,sem-信號(hào)量,shm-共享內(nèi) intget_ipc_id(char*proc_file,key_t{inti,j;charif((pf=fopen(proc_file,"r"))==NULL){perror("Procfilenotopen");}i=j=fgets(line,BUFSZ,pf);while(line[i]=='')i++;while(line[i]!='')colum[j++]=line[i++];colum[j]='\0';while(line[i]=='')while(line[i]!='')colum[j++]=line[i++];colum[j]='\0';returni;}return-1;}信號(hào)燈上的down/upsemid:semnum:intdown(int{buf.sem_op=-1;buf.sem_num=0;buf.sem_=SEM_UNDO;{perror("downerror");}return}intup(int{buf.sem_op=1;buf.sem_num=0;buf.sem_=SEM_UNDO;{perror("uperror");}return}sem_keysem_valsem_flag{intsem_id;//sem_key{if((sem_id=semget(sem_key,1,sem_))<0){}{}}return}shm_keyshm_valshm_flag{inti,shm_id;//shm_keyif((shm_id=get_ipc_id("/proc/sysvipc/shm",shm_key))<0{if((shm_id=shmget(shm_key,shm_num,shm_))<0){}if((shm_buf=(char*)shmat(shm_id,0,0))<(char*)0){}}//shm_key標(biāo)識(shí)的共享內(nèi)存區(qū)已經(jīng)建立,shm_id標(biāo)識(shí)的共享內(nèi)存附加給指shm_bufif((shm_buf=(char*)shmat(shm_id,0,0))<(char{perror("getshareMemory}return}msq_keymsq_flag{int//msq_key{if((msq_id=msgget(msq_key,msq_))<0){}}return}在當(dāng)前新文件夾中建立生產(chǎn)者程序 : :(C)2006by :#includeintmain(intargc,char{intif(argv[1]!=NULL) rate=atoi(argv[1]);elserate buff_key=101;//緩沖區(qū) buff_num=8;//緩沖區(qū) pput_num=1;//指針數(shù)buff_ptr=(char*)set_shm(buff_key,buff_num,shm_prod_key=201;//生產(chǎn)者同步信號(hào)燈鍵值pmtx_key202;//生產(chǎn)者互斥信號(hào)燈鍵值cons_key=301;//消費(fèi)者同步信號(hào)燈鍵值cmtx_key302;//消費(fèi)者互斥信號(hào)燈鍵值sem_=IPC_CREAT|0644;sem_val=buff_num;prod_sem=set_sem(prod_key,sem_val,sem_);sem_val=cons_sem=set_sem(cons_key,sem_val,sem_);sem_val=pmtx_sem=set_sem(pmtx_key,sem_val,sem_);printf("%dproducerput:%cto*pput_ptr=(*pput_ptr+1)%}return}在當(dāng)前新文件夾中建立消費(fèi)者程序 : :(C)by :#includeintmain(intargc,char{intif(argv[1]!=NULL) rate=atoi(argv[1]);elserate buff_key=101;//緩沖區(qū)的鍵值buff_num=8; cget_key=103;//消費(fèi)者取產(chǎn)品指針的鍵值cget_num=1; shm_=IPC_CREAT|0644;//共享內(nèi)存讀寫權(quán)buff_ptr=(char*)set_shm(buff_key,buff_num,shm_//獲取消費(fèi)者取產(chǎn)品指針,cget_ptrcget_ptr=(int*)set_shm(cget_key,cget_num,shm_prod_key=201; pmtx_key=202; cons_key=301; cmtx_key=302; sem_=IPC_CREAT|0644;//信號(hào)燈操作權(quán)限sem_val=buff_num;prod_sem=set_sem(prod_key,sem_val,sem_);sem_val=cons_sem=set_sem(cons_key,sem_val,sem_sem_val=cmtx_sem=set_sem(cmtx_key,sem_val,sem_); *cget_ptr=(*cget_ptr+1)%}return}opts=-g-c_src=consumer.cipc.cp_src=producer.cipc.cp_obj=producer.oipc.o producer $(c_src)$(hdrs)gcc$(opts)gcc$(p_obj)-oproducer $(p_src)$(hdrs)gcc$(opts)rmconsumerproducermgcc-g-cproducer.cgccproducer.oipc.o-oproducergcc-g-cconsumer.cipc.cgccconsumer.oipc.o-o$./producer12263producerput:AtoBuffer[0]12263producerput:BtoBuffer[1]12263producerput:CtoBuffer[2]12263producerput:DtoBuffer[3]12263producerput:EtoBuffer[4]12263producerput:FtoBuffer[5]12263producerput:GtoB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 展會(huì)宣傳推廣合同(2篇)
- 小賣鋪?zhàn)赓U合同(2篇)
- 2025年度建筑密封硅酮膠招標(biāo)采購合同3篇
- 二零二五年度智慧城市物聯(lián)網(wǎng)設(shè)備采購合同2篇
- 二零二五版果園果樹種植技術(shù)指導(dǎo)與承包合同3篇
- 2024版短期貸款合同范例3篇
- 二零二五年度消防工程監(jiān)理合同2篇
- 二零二五年度建筑工程項(xiàng)目招投標(biāo)與合同履約擔(dān)保服務(wù)合同3篇
- 二零二五版股權(quán)代持糾紛調(diào)解與風(fēng)險(xiǎn)防范合同5篇
- 二零二五年度不動(dòng)產(chǎn)權(quán)屬轉(zhuǎn)移擔(dān)保合同3篇
- 無人機(jī)航拍技術(shù)教案(完整版)
- 人教PEP版(2024)三年級(jí)上冊(cè)英語Unit 4《Plants around us》單元作業(yè)設(shè)計(jì)
- 《保密法》培訓(xùn)課件
- 醫(yī)院項(xiàng)目竣工驗(yàn)收和工程收尾階段的管理措施專項(xiàng)方案
- 2024年涉密人員考試試題庫保密基本知識(shí)試題附答案(考試直接用)
- 2024年桂林中考物理試卷
- DL∕T 5362-2018 水工瀝青混凝土試驗(yàn)規(guī)程
- (正式版)JC∕T 60023-2024 石膏條板應(yīng)用技術(shù)規(guī)程
- DL-T5054-2016火力發(fā)電廠汽水管道設(shè)計(jì)規(guī)范
- (權(quán)變)領(lǐng)導(dǎo)行為理論
- 家用電器可靠性與壽命預(yù)測(cè)研究
評(píng)論
0/150
提交評(píng)論