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

下載本文檔

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

文檔簡介

課程實(shí)驗(yàn)報(bào)告課程名稱:操作系統(tǒng)原理專業(yè)班級(jí):學(xué)號(hào):姓名:指導(dǎo)教師:匯報(bào)曰期:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院目錄TOC\o"1-2"\h\u23300目錄 22093試驗(yàn)一:線程的同步 31432一、試驗(yàn)?zāi)康?315829二、試驗(yàn)內(nèi)容 31556三、試驗(yàn)心得 64899試驗(yàn)二:謄抄試驗(yàn)的進(jìn)程實(shí)現(xiàn) 720608一、試驗(yàn)?zāi)康?726877二、試驗(yàn)內(nèi)容 729501三、試驗(yàn)心得 1018692試驗(yàn)三:Linux文獻(xiàn)目錄操作 1223305一、試驗(yàn)?zāi)康?1222559二、試驗(yàn)內(nèi)容 1216354三、試驗(yàn)心得 14試驗(yàn)一:線程的同步一、試驗(yàn)?zāi)康?、掌握Linux系統(tǒng)顧客界面中鍵盤命令的使用。2、學(xué)會(huì)一種Linux下的編程環(huán)境。3、掌握Linux下進(jìn)(線)程的概念。4、理解Linux進(jìn)程同步與通信的重要機(jī)制,并通過信號(hào)燈操作實(shí)現(xiàn)進(jìn)程間的同步與互斥。二、試驗(yàn)內(nèi)容1、程序規(guī)定兩個(gè)線程,共享公共變量a線程1負(fù)責(zé)計(jì)算(+1)線程2負(fù)責(zé)打印2、運(yùn)行環(huán)境軟件配置(含操作系統(tǒng)版本):ubuntu-14.10硬件:PC3、源程序源程序:#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<sys/types.h>#include<sys/sem.h>#include<sys/ipc.h>intsemid;inta=0;typedefunionsenum{ intval; structsemid_ds*buf; unsignedshort*array; structseminfo*_buf;}SEM_CTL_UN;voidP(intsemid,intindex){structsembufsem;sem.sem_num=index;sem.sem_op=-1;//Psem.sem_flg=0;//biaojisemop(semid,&sem,1);}voidV(intsemid,intindex){structsembufsem;sem.sem_num=index;sem.sem_op=1;sem.sem_flg=0;semop(semid,&sem,1);}void*thread1(void*arg){ inti=0; for(i;i<8;i++) { P(semid,0); printf("add:\n"); a=a+1; printf("a=%d\n",a); V(semid,1); }}void*thread2(void*arg){ inti=0; for(i;i<8;i++){ P(semid,1); printf("print:\n"); printf("a=%d\n",a); V(semid,0); }}intmain(){ pthread_tid1,id2; intret1,ret2; key_tkey; SEM_CTL_UNsemctlarg1; SEM_CTL_UNsemctlarg2;key=1; semid=semget(key,2,IPC_CREAT|0666);//創(chuàng)立 semctlarg1.val=1; semctlarg2.val=0;semctl(semid,0,SETVAL,semctlarg1);//初始化 semctl(semid,1,SETVAL,semctlarg2); ret1=pthread_create(&id1,NULL,thread1,NULL); ret2=pthread_create(&id2,NULL,thread2,NULL); pthread_join(id1,NULL); pthread_join(id2,NULL); }4、試驗(yàn)成果 試驗(yàn)成果截圖如下:圖1-1線程同步三、試驗(yàn)心得通過本次試驗(yàn),我掌握了Linux系統(tǒng)顧客界面中鍵盤命令的使用,熟悉了Linux下的編程環(huán)境,深入理解并掌握了線程的概念,理解了線程同步與通信的重要機(jī)制,并能通過信號(hào)燈操作實(shí)現(xiàn)線程間的同步和互斥。由于本次試驗(yàn)較為簡樸,重要目的是熟悉Linux編程環(huán)境,因此代碼量較小,難度不大,試驗(yàn)過程中沒有碰到太大問題。通過試驗(yàn)熟悉了線程的創(chuàng)立和信號(hào)燈的設(shè)置,為後來的試驗(yàn)打下了基礎(chǔ)。試驗(yàn)二:謄抄試驗(yàn)的進(jìn)程實(shí)現(xiàn)一、試驗(yàn)?zāi)康脑贚inux下編程實(shí)現(xiàn)謄抄問題,通過多種進(jìn)(線)程合作將源文獻(xiàn)復(fù)制到目的文獻(xiàn)中。二、試驗(yàn)內(nèi)容1、程序規(guī)定main、get、copy、put四個(gè)可執(zhí)行程序(或線程)。main:初始化信號(hào)燈、緩沖區(qū),創(chuàng)立三個(gè)子進(jìn)程,等待子進(jìn)程運(yùn)行結(jié)束後做 善後處理;get:讀源文獻(xiàn),送入緩沖區(qū)S;copy:從S復(fù)制信息到T;put:將T中信息寫入目的文獻(xiàn)。2、運(yùn)行環(huán)境軟件配置(含操作系統(tǒng)版本):ubuntu-14.10硬件:PC3、源程序源程序:Get:#include"touwenjian.h"intmain(void){inti=0;intshmid1;char*s,*t,str[]="wangzihao!";semid=semget(IPCKEY,4,IPC_CREAT|0666);shmid1=shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666);s=(char*)shmat(shmid1,NULL,NULL);do{P(semid,1);*s=str[i];printf("get\n");i++;V(semid,0);}while(s[0]!='\0');}copy:#include"touwenjian.h"intmain(void){intj=0;intshmid1,shmid2;char*s,*t;semid=semget(IPCKEY,4,IPC_CREAT|0666);shmid1=shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666);s=(char*)shmat(shmid1,NULL,NULL);shmid2=shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666);t=(char*)shmat(shmid2,NULL,NULL);do{P(semid,0);P(semid,3);strcpy(t,s);printf("copy\n");V(semid,2);V(semid,1);}while(t[0]!='\0');}Put:#include"touwenjian.h"intmain(void){intk=0;intshmid1,shmid2;char*s,*t;semid=semget(IPCKEY,4,IPC_CREAT|0666);shmid2=shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666);t=(char*)shmat(shmid2,NULL,NULL);do{/*if(t[0]=='\0')break;*/P(semid,2);if(t[0]!='\0')printf("put>%c\n",*t);elseprintf("put>\\0\n");V(semid,3);}while(t[0]!='\0');}頭文獻(xiàn):#include<sys/types.h>#include<sys/sem.h>#include<semaphore.h>#include<stdio.h>#include<stdlib.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/shm.h>#defineLOOPS10#defineIPCKEY(key_t)0x11#defineSHMKEY1(key_t)0x222#defineSHMKEY2(key_t)0x333voidP(intsemid,intindex);voidV(intsemid,intindex);intsemid;voidP(intsemid,intindex)//對(duì)標(biāo)識(shí)符為semid的信號(hào)量集中的第index個(gè)//元素進(jìn)行P操作(信號(hào)量操作要用到semop()函數(shù)){structsembufsem; //此數(shù)據(jù)類型在sys/sem.h中定義sem.sem_num=index;//對(duì)信號(hào)量集中的第index個(gè)元素進(jìn)行P操作sem.sem_op=-1; //表達(dá)P操作sem.sem_flg=0; //操作標(biāo)識(shí):0或IPC_NOWAIT等semop(semid,&sem,1); //1:要操作1個(gè)信號(hào)量 }voidV(intsemid,intindex){structsembufsem;sem.sem_num=index;sem.sem_op=1;sem.sem_flg=0;semop(semid,&sem,1);return;}4、試驗(yàn)成果 試驗(yàn)成果截圖如下:圖2-1謄抄問題進(jìn)程實(shí)現(xiàn)三、試驗(yàn)心得本次試驗(yàn)實(shí)現(xiàn)了謄抄問題的進(jìn)程實(shí)現(xiàn),這是一種經(jīng)典的進(jìn)程問題,通過進(jìn)程合作將源文獻(xiàn)復(fù)制到目的文獻(xiàn)中。本次試驗(yàn)相較于第一次試驗(yàn)較為復(fù)雜,波及到了文獻(xiàn)操作的有關(guān)系統(tǒng)調(diào)用等操作。試驗(yàn)中共享內(nèi)存的設(shè)置是重點(diǎn)。通過本次試驗(yàn),我對(duì)進(jìn)程的合作有了更深的理解和認(rèn)識(shí),掌握了常用文獻(xiàn)操作有關(guān)系統(tǒng)調(diào)用,熟悉了進(jìn)程的同步于互斥,理解了exec函數(shù)組的使用方法。綜上所述,通過本次試驗(yàn)我收獲頗豐。試驗(yàn)三:Linux文獻(xiàn)目錄操作一、試驗(yàn)?zāi)康睦斫獠⒄莆誏inux文獻(xiàn)目錄構(gòu)造。二、試驗(yàn)內(nèi)容1、程序規(guī)定1)、熟悉Linux文獻(xiàn)系統(tǒng)的使用;2)、理解Linux文獻(xiàn)系統(tǒng)目錄構(gòu)造;3)、編程實(shí)現(xiàn)目錄查詢命令;功能類似ls-l;查詢指定目錄下的文獻(xiàn)及子目錄信息;顯示文獻(xiàn)的類型、大小、時(shí)間等信息;遞歸顯示子目錄中的文獻(xiàn)信息;2、運(yùn)行環(huán)境軟件配置(含操作系統(tǒng)版本):ubuntu-14.10硬件:PC3、源程序源程序:#include<unistd.h>#include<sys/stat.h>#include<stdio.h>#include<string.h>#include<stdlib.h>#include<dirent.h>voidprintdir(char*dir,intdepth){ DIR*dp; structdirent*entry; structstatstatbuf; if((dp=opendir(dir))==NULL){//打開目錄不成功 printf("openthefileerror!\n"); return; } chdir(dir); chars[1000]; while((entry=readdir(dp))!=NULL){//讀到一種目錄項(xiàng)if(strcmp(entry->d_name,"..")==0||strcmp(entry->d_name,".")==0){continue;}//跳過 strcpy(s,"./"); strcat(s,entry->d_name); lstat(s,&statbuf);//讀取到了符號(hào)鏈接,lstat讀取符號(hào)鏈接自身的狀態(tài)信息 if(S_ISDIR(statbuf.st_mode)){//權(quán)限&類型 inti=0; for(i=0;i<depth;i++)printf(""); printf("|--%s\n",entry->d_name);//文獻(xiàn)名 printdir(entry->d_name,depth+1); } else{inti=0; for(;i<depth;i++)printf("");printf("|--%s%ld%ld\n",entry->d_name,statbuf.st_size,statbuf.st_ino);} } chdir("../"); closedir(dp);}voidmain(void){chardir[1000];intdepth=0;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論