操作系統(tǒng)實驗報告_第1頁
操作系統(tǒng)實驗報告_第2頁
操作系統(tǒng)實驗報告_第3頁
操作系統(tǒng)實驗報告_第4頁
操作系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

操作系統(tǒng)原理試驗匯報試驗一:顧客接口試驗試驗目的理解面向操作命令的接口Shell。學會簡樸的shell編碼。理解操作系統(tǒng)調(diào)用的運行機制。掌握創(chuàng)立系統(tǒng)調(diào)用的措施。試驗內(nèi)容1)控制臺命令接口試驗該試驗是通過“幾種操作系統(tǒng)的控制臺命令”、“終端處理程序”、“命令解釋程序”和“Linux操作系統(tǒng)的bash”來讓試驗者理解面向操作命令的接口shell和進行簡樸的shell編程。查看bash版本。編寫bash腳本,記錄/my目錄下c語言文獻的個數(shù)2)系統(tǒng)調(diào)用試驗該試驗是通過試驗者對“Linux操作系統(tǒng)的系統(tǒng)調(diào)用機制”的深入理解來理解操作系統(tǒng)調(diào)用的運行機制;同步通過“自己創(chuàng)立一種系統(tǒng)調(diào)用mycall()”和“編程調(diào)用自己創(chuàng)立的系統(tǒng)調(diào)用”深入掌握創(chuàng)立和調(diào)用系統(tǒng)調(diào)用的措施。編程調(diào)用一種系統(tǒng)調(diào)用fork(),觀測成果。編程調(diào)用創(chuàng)立的系統(tǒng)調(diào)用foo(),觀測成果。自己創(chuàng)立一種系統(tǒng)調(diào)用mycall(),實現(xiàn)功能:顯示字符串到屏幕上。編程調(diào)用自己創(chuàng)立的系統(tǒng)調(diào)用。試驗原理1.控制臺命令接口操作系統(tǒng)向顧客提供一組控制臺命令,顧客可以通過終端輸入命令的方式獲得操作系統(tǒng)的服務,并由此來控制自己作業(yè)的運行。一般來講,控制臺命令應當包括:一組命令、終端處理程序以及命令解釋程序。bash的由來當?shù)卿汱inux或者打開一種xterm時,目前默認的shell就是bash。Bash是GNUProject的shell。GNUProject是自由軟件基金會(FreeSoftwareFoundation)的一部分。它對Linux下的許多編程工具負責。Bash(BourneAgainShell)是自由軟件基金會公布的Bourneshell的兼容程序。它包括了其他有些shell的許多良好的特性,功能非常的全面。諸多Linux版本都供bash。bash的大體原理bash處理自己的腳本時,先找到需要處理的命令名稱,進而在目前顧客的默認命令目錄中找到對應的命令,這些默認目錄一般是/usr/bin、/bin或/sbin。在執(zhí)行這些命令時,先使用進程創(chuàng)立系統(tǒng)調(diào)用fork(),在使用exex()來執(zhí)行這些命令。2.系統(tǒng)調(diào)用系統(tǒng)調(diào)用是操作系統(tǒng)為程序員提供的接口服務。使用系統(tǒng)調(diào)用,程序員可以更充足的運用計算機資源,使編寫的程序愈加靈活,功能愈加強大。程序員在對系統(tǒng)充足理解的狀況下甚至可以訂做系統(tǒng)調(diào)用,實現(xiàn)那些非專業(yè)程序員所難以實現(xiàn)的功能。試驗環(huán)節(jié)1.控制臺命令接口試驗指導查看bash版本在shell提醒符下輸入:$echo$BASH_VERSION顯示如下成果:編寫bash腳本:記錄/my目錄下c語言文獻的個數(shù)通過bash腳本,可以有多種方式實現(xiàn)這個功能,而使用函數(shù)是其中個一種選擇。在使用函數(shù)之前,必須先定義函數(shù)。(1)進入自己的工作目錄,用vi編寫名為count的文獻cd/home/student#在home/student目錄下編程vicount下面是腳本程序:#!/bin/bashfunctioncount{echo–n"Numberofmatchesfor$1:"#接受程序的第一種參數(shù)ls$1|wc–l#對子程序的第一種參數(shù)所在的目錄進行操作}(2)執(zhí)行將count文獻復制到目前目錄下,然后在目前目錄下建立文獻夾my:mkdirmycdmyvi1.c#在my目錄下建立幾種c文獻,以便用來進行測試...cd...chmod+xcountcount./my/*.c2.系統(tǒng)調(diào)用試驗指導編程調(diào)用一種系統(tǒng)調(diào)用fork()在應用程序中調(diào)用系統(tǒng)調(diào)用fork()非常簡樸,下面的程序可以很清晰的顯示出有fork()系統(tǒng)調(diào)用生成了子進程,而產(chǎn)生的分叉作用:#include<stdio.h>intmain(){ intiUid; iUid=fork(); if(iUid==0) for(;;){printf("Thisisparent.\n");sleep(1); } if(iUid>0) for(;;){ printf("Thisischild.\n"); sleep(1); } if(iUid<0)printf("Cannotusesystemcall.\n"); return0;}下面是也許得到的一種成果:thisischild.thisisparent.thisischild.thisisparent.thisisparent.thisischild.thisischild.thisisparent.thisisparent.thisischild.thisischild.thisisparent.thisisparent.thisischild.執(zhí)行成果:試驗成果分析:學會了基本的文獻操作以及函數(shù)執(zhí)行,驗證了成果;父進程與子進程交替執(zhí)行系統(tǒng)調(diào)用,由于完畢系統(tǒng)調(diào)用后都會睡眠,因此其他進程可以執(zhí)行,得到上述成果。試驗總結:本次試驗通過內(nèi)核編譯的方式來理解操作系統(tǒng)的詳細調(diào)用方式。在此過程中重要是熟悉Linux系統(tǒng)的幾種終端命令上。通過本次操作系統(tǒng)試驗,我對Linux操作系統(tǒng)內(nèi)核有了初步的理解。試驗二:進程管理試驗試驗目的加深對進程概念的理解,明確進程和程序的區(qū)別。深入認識并發(fā)執(zhí)行的實質(zhì)。分析進程爭用資源的現(xiàn)象,學習處理進程互斥的措施。理解Linux系統(tǒng)中進程通信的基本原理。試驗內(nèi)容1.編制實現(xiàn)軟中斷通信的程序使用系統(tǒng)調(diào)用fork()創(chuàng)立兩個子進程,再用系統(tǒng)調(diào)用signal()讓父進程捕捉鍵盤上發(fā)出的中斷信號(即按delete鍵),當父進程接受到這兩個軟中斷的某一種后,父進程用系統(tǒng)調(diào)用kill()向兩個子進程分別發(fā)出整數(shù)值為16和17軟中斷信號,子進程獲得對應軟中斷信號,然后分別輸出下列信息后終止:Childprocess1iskilledbyparent!!Childprocess2iskilledbyparent!!父進程調(diào)用wait()函數(shù)等待兩個子進程終止后,輸入如下信息,結束進程執(zhí)行:Parentprocessiskilled!!多運行幾次編寫的程序,簡略分析出現(xiàn)不一樣成果的原因。2.編制實現(xiàn)進程的管道通信的程序使用系統(tǒng)調(diào)用pipe()建立一條管道線,兩個子進程分別向管道寫一句話:Childprocess1issendingamessage!Childprocess2issendingamessage!而父進程則從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。規(guī)定:父進程先接受子進程P1發(fā)來的消息,然后再接受子進程P2發(fā)來的消息。試驗原理進程的軟中斷通信算法流程圖(2)源程序如下(旁邊有加補充注釋):#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>intwait_flag;voidstop();main(){intpid1,pid2; //定義兩個進程號變量signal(3,stop); //或者signal(14,stop);while((pid1=fork())==-1); //若創(chuàng)立子進程1不成功,則空循環(huán)if(pid1>0){ //子進程創(chuàng)立成功,pid1為進程號while((pid2=fork())==-1); //創(chuàng)立子進程2if(pid2>0){wait_flag=1;sleep(5); //父進程等待5秒kill(pid1,16); //殺死進程1kill(pid2,17); //殺死進程2wait(0); //等待第1個子進程1結束的信號wait(0); //等待第2個子進程2結束的信號printf("\nParentprocessiskilled!!\n");exit(0); //父進程結束}else{wait_flag=1;signal(17,stop); //等待進程2被殺死的中斷號17printf("\nChildprocess2iskilledbyparent!!\n");exit(0);}}else{wait_flag=1;signal(16,stop); //等待進程1被殺死的中斷號16printf("\nChildprocess1iskilledbyparent!!\n");exit(0);}}voidstop(){wait_flag=0;}2、進程的管道通信算法流程圖(2)參照程序源代碼#include<unistd.h>#include<signal.h>#include<stdio.h>intpid1,pid2;//定義兩個進程變量main(){intfd[2];charOutPipe[100],InPipe[100]; //定義兩個字符數(shù)組pipe(fd); //創(chuàng)立管道while((pid1=fork())==-1); //假如進程1創(chuàng)立不成功,則空循環(huán)if(pid1==0){//假如子進程1創(chuàng)立成功,pid1為進程號lockf(fd[1],1,0); //鎖定管道sprintf(OutPipe,"\nChildprocess1issendingmessage!\n");//給Outpipe賦值write(fd[1],OutPipe,50); //向管道寫入數(shù)據(jù)sleep(5); //等待讀進程讀出數(shù)據(jù)lockf(fd[1],0,0); //解除管道的鎖定exit(0); //結束進程1}else{while((pid2=fork())==-1); //若進程2創(chuàng)立不成功,則空循環(huán)if(pid2==0){lockf(fd[1],1,0);sprintf(OutPipe,"\nChildprocess2issendingmessage!\n");write(fd[1],OutPipe,50);sleep(5);lockf(fd[1],0,0);exit(0);}else{wait(0); //等待子進程1結束read(fd[0],InPipe,50); //從管道中讀出數(shù)據(jù)printf("%s\n",InPipe); //顯示讀出的數(shù)據(jù)wait(0); //等待子進程2結束read(fd[0],InPipe,50);printf("%s\n",InPipe);exit(0); //父進程結束}}}試驗過程:編寫程序;執(zhí)行并分析成果五.試驗成果:1.進程的軟中斷通信:試驗成果:2.進程的管道通信:試驗成果:六

溫馨提示

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

評論

0/150

提交評論