




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
...........專業(yè)..交通大學(xué)實(shí)驗(yàn)報(bào)告操作系統(tǒng)實(shí)驗(yàn)報(bào)告21305051332130505133計(jì)算機(jī)36班操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)一:用戶接口實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康睦斫饷嫦虿僮髅畹慕涌赟hell。學(xué)會(huì)簡(jiǎn)單的shell編碼。理解操作系統(tǒng)調(diào)用的運(yùn)行機(jī)制。掌握創(chuàng)立系統(tǒng)調(diào)用的方法。操作系統(tǒng)給用戶提供了命令接口和程序接口〔系統(tǒng)調(diào)用〕兩種操作方式。用戶接口實(shí)驗(yàn)也因此而分為兩大局部。首先要熟悉Linux的根本操作命令,并在此根底上學(xué)會(huì)簡(jiǎn)單的shell編程方法。然后通過想Linux核添加一個(gè)自己設(shè)計(jì)的系統(tǒng)調(diào)用,來理解系統(tǒng)調(diào)用的實(shí)現(xiàn)方法和運(yùn)行機(jī)制。在本次實(shí)驗(yàn)中,最具有吸引力的地方是:通過核編譯,將一組源代碼變成操作系統(tǒng)的核,并由此重新引導(dǎo)系統(tǒng),這對(duì)我們初步了解操作系統(tǒng)的生成過程極為有利。實(shí)驗(yàn)容控制臺(tái)命令接口實(shí)驗(yàn)該實(shí)驗(yàn)是通過"幾種操作系統(tǒng)的控制臺(tái)命令〞、"終端處理程序〞、"命令解釋程序〞和"Linux操作系統(tǒng)的bash〞來讓實(shí)驗(yàn)者理解面向操作命令的接口shell和進(jìn)展簡(jiǎn)單的shell編程。查看bash版本。在shell提示符下輸入:$echo$BASH_VERSION我們的版本是4.3.42(1)-release〔2〕建立bash腳本,輸出Helloword在編輯器中輸入以下容#!/bin/bashechoHelloWorld!執(zhí)行腳本使用指令:$./script編寫bash腳本,統(tǒng)計(jì)/my目錄下c語言文件的個(gè)數(shù)通過bash腳本,可以有多種方式實(shí)現(xiàn)這個(gè)功能,而使用函數(shù)是其中個(gè)一個(gè)選擇。在使用函數(shù)之前,必須先定義函數(shù)。進(jìn)入自己的工作目錄,編寫名為count的文件腳本程序:#!/bin/bashfunction count{echo –n "Numberofmatchesfor$1:" #接收程序的第一個(gè)參數(shù)ls $1|wc–l #對(duì)子程序的第一個(gè)參數(shù)所在的目錄進(jìn)展操作}將count文件復(fù)制到當(dāng)前目錄下,然后在當(dāng)前目錄下建立文件夾,在my目錄下建立幾個(gè)c文件,以便用來進(jìn)展測(cè)試系統(tǒng)調(diào)用實(shí)驗(yàn)該實(shí)驗(yàn)是通過實(shí)驗(yàn)者對(duì)"Linux操作系統(tǒng)的系統(tǒng)調(diào)用機(jī)制〞的進(jìn)一步了解來理解操作系統(tǒng)調(diào)用的運(yùn)行機(jī)制;同時(shí)通過"自己創(chuàng)立一個(gè)系統(tǒng)調(diào)用mycall〔〕〞和"編程調(diào)用自己創(chuàng)立的系統(tǒng)調(diào)用〞進(jìn)一步掌握創(chuàng)立和調(diào)用系統(tǒng)調(diào)用的方法。編程調(diào)用一個(gè)系統(tǒng)調(diào)用fork〔〕,觀察結(jié)果。在應(yīng)用程序中調(diào)用系統(tǒng)調(diào)用fork〔〕非常簡(jiǎn)單,下面的程序可以很清楚的顯示出有fork〔〕系統(tǒng)調(diào)用生成了子進(jìn)程,而產(chǎn)生的分叉作用:#include<stdio.h>intmain(){ intiUid; iUid=fork(); if(iUid==0) for(;;){printf("Thisischildprocess.\n");sleep(1); } if(iUid>0) for(;;){ printf("Thisisparentprocess.\n"); sleep(1); } if(iUid<0)printf("Cannotusesystemcall.\n"); return0;}程序運(yùn)行結(jié)果:編程調(diào)用創(chuàng)立的系統(tǒng)調(diào)用foo〔〕,觀察結(jié)果。在核源碼中添加如下代碼:asmlinkageintsys_foo〔intx〕{ printf〔"%d\n〞,x〕;}編程調(diào)用創(chuàng)立的系統(tǒng)調(diào)用foo〔〕,觀察結(jié)果。#include<stdio.h>#include<linux/unistd.h>_syscall1(char*,foo,int,ret)main(){intI,J;I=100;J=0;J=foo(I);printf("Thisistheresultofnewkernel\n");printf("%d",j);}重新編譯核,編譯成功后的核版本如下:自己創(chuàng)立一個(gè)系統(tǒng)調(diào)用mycall〔〕,實(shí)現(xiàn)功能:顯示字符串到屏幕上。在核源碼中添加如下代碼:#include<linux/linkage.h>asmlinkagelongsys_newcall(inti){//printk("thisisasystemcallmadebyyourself\n");return(i*10);}測(cè)試新的System_callCODE: vitest.c編程調(diào)用自己創(chuàng)立的系統(tǒng)調(diào)用。測(cè)試:CODE:./test實(shí)驗(yàn)體會(huì):通過本次實(shí)驗(yàn),我們理解了面向操作命令的接口Shell,學(xué)會(huì)了簡(jiǎn)單的shell編碼,理解了操作系統(tǒng)調(diào)用的運(yùn)行機(jī)制,掌握了創(chuàng)立系統(tǒng)調(diào)用的方法。本次實(shí)驗(yàn)通過核編譯,將一組源代碼變成操作系統(tǒng)的核,并由此重新引導(dǎo)系統(tǒng),這讓我們初步了解了操作系統(tǒng)的生成過程。實(shí)驗(yàn)二:進(jìn)程管理實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康募由顚?duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。了解Linux系統(tǒng)中進(jìn)程通信的根本原理。進(jìn)程是操作系統(tǒng)中最重要的概念,貫穿始終,也是學(xué)習(xí)現(xiàn)代操作系統(tǒng)的關(guān)鍵。通過本次實(shí)驗(yàn),要求理解進(jìn)程的實(shí)質(zhì)和進(jìn)程管理的機(jī)制。在Linux系統(tǒng)下實(shí)現(xiàn)進(jìn)程從創(chuàng)立到終止的全過程,從中體會(huì)進(jìn)程的創(chuàng)立過程、父進(jìn)程和子進(jìn)程的關(guān)系、進(jìn)程狀態(tài)的變化、進(jìn)程之間的同步機(jī)制、進(jìn)程調(diào)度的原理和以信號(hào)和管道為代表的進(jìn)程間通信方式的實(shí)現(xiàn)。實(shí)驗(yàn)容編制實(shí)現(xiàn)軟中斷通信的程序1.實(shí)驗(yàn)原理:使用系統(tǒng)調(diào)用fork()創(chuàng)立兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上發(fā)出的中斷信號(hào)〔即按delete鍵〕,當(dāng)父進(jìn)程接收到這兩個(gè)軟中斷的某一個(gè)后,父進(jìn)程用系統(tǒng)調(diào)用kill()向兩個(gè)子進(jìn)程分別發(fā)出整數(shù)值為16和17軟中斷信號(hào),子進(jìn)程獲得對(duì)應(yīng)軟中斷信號(hào),然后分別輸出以下信息后終止:Childprocess1iskilledbyparent!!Childprocess2iskilledbyparent!!父進(jìn)程調(diào)用wait()函數(shù)等待兩個(gè)子進(jìn)程終止后,輸入以下信息,完畢進(jìn)程執(zhí)行:Parentprocessiskilled!!2.實(shí)驗(yàn)源碼:#include<stdio.h>#include<signal.h>#include<unistd.h>#include<sys/types.h>intwait_flag;voidstop();main(){intpid1,pid2; //定義兩個(gè)進(jìn)程號(hào)變量signal(3,stop); //或者signal(14,stop);while((pid1=fork())==-1); //假設(shè)創(chuàng)立子進(jìn)程1不成功,那么空循環(huán)if(pid1>0){ //子進(jìn)程創(chuàng)立成功,pid1為進(jìn)程號(hào)while((pid2=fork())==-1); //創(chuàng)立子進(jìn)程2if(pid2>0){wait_flag=1;sleep(5); //父進(jìn)程等待5秒kill(pid1,16); //殺死進(jìn)程1kill(pid2,17); //殺死進(jìn)程2wait(0); //等待第1個(gè)子進(jìn)程1完畢的信號(hào)wait(0); //等待第2個(gè)子進(jìn)程2完畢的信號(hào)printf("\nParentprocessiskilled!!\n");exit(0); //父進(jìn)程完畢}else{wait_flag=1;signal(17,stop); //等待進(jìn)程2被殺死的中斷號(hào)17printf("\nChildprocess2iskilledbyparent!!\n");exit(0);}}else{wait_flag=1;signal(16,stop); //等待進(jìn)程1被殺死的中斷號(hào)16printf("\nChildprocess1iskilledbyparent!!\n");exit(0);}}voidstop(){wait_flag=0;}3.程序運(yùn)行結(jié)果:或者屢次運(yùn)行,并且Delete鍵后,會(huì)出現(xiàn)如下結(jié)果:4.簡(jiǎn)要原因分析:上述結(jié)果中"Childprocess1iskilledbyparent!!〞和"Childprocess2iskilledbyparent!!〞相繼出現(xiàn),當(dāng)運(yùn)行幾次后,誰在前誰在后是隨機(jī)的。這是因?yàn)椋簭倪M(jìn)程調(diào)度的角度看,子進(jìn)程被創(chuàng)立后處于就緒態(tài)。此時(shí),父進(jìn)程和子進(jìn)程作為兩個(gè)獨(dú)立的進(jìn)程,共享同一個(gè)代碼段,分別參加調(diào)度、執(zhí)行,直至進(jìn)程完畢。但是誰會(huì)先被調(diào)度程序選中執(zhí)行,那么與系統(tǒng)的調(diào)度策略和系統(tǒng)當(dāng)前的資源狀態(tài)有關(guān),是不確定的。因此,誰先從fork()函數(shù)中返回繼續(xù)執(zhí)行后面的語句也是不確定的。編制實(shí)現(xiàn)進(jìn)程的管道通信的程序1.實(shí)驗(yàn)原理:使用系統(tǒng)調(diào)用pipe()建立一條管道線,兩個(gè)子進(jìn)程分別向管道寫一句話:Childprocess1issendingamessage!Childprocess2issendingamessage!而父進(jìn)程那么從管道中讀出來自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上。要求:父進(jìn)程先接收子進(jìn)程P1發(fā)來的消息,然后再接收子進(jìn)程P2發(fā)來的消息。2.程序源碼:#include<unistd.h>#include<signal.h>#include<stdio.h>intpid1,pid2;//定義兩個(gè)進(jìn)程變量main(){intfd[2];charOutPipe[100],InPipe[100]; //定義兩個(gè)字符數(shù)組pipe(fd); //創(chuàng)立管道while((pid1=fork())==-1); //如果進(jìn)程1創(chuàng)立不成功,那么空循環(huán)if(pid1==0){//如果子進(jìn)程1創(chuàng)立成功,pid1為進(jìn)程號(hào)lockf(fd[1],1,0); //鎖定管道sprintf(OutPipe,"\nChildprocess1issendingmessage!\n");//給Outpipe賦值write(fd[1],OutPipe,50); //向管道寫入數(shù)據(jù)sleep(5); //等待讀進(jìn)程讀出數(shù)據(jù)lockf(fd[1],0,0); //解除管道的鎖定exit(0); //完畢進(jìn)程1}else{while((pid2=fork())==-1); //假設(shè)進(jìn)程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); //等待子進(jìn)程1完畢read(fd[0],InPipe,50); //從管道中讀出數(shù)據(jù)printf("%s\n",InPipe); //顯示讀出的數(shù)據(jù)wait(0); //等待子進(jìn)程2完畢read(fd[0],InPipe,50);printf("%s\n",InPipe);exit(0); //父進(jìn)程完畢}}}3.運(yùn)行結(jié)果截圖:4.簡(jiǎn)要分析管道,是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫進(jìn)程,以實(shí)現(xiàn)它們之間信息的共享文件又稱pipe文件。向管道〔共享文件〕提供輸入的發(fā)送進(jìn)程〔即寫進(jìn)程〕,以字符流形式將大量的數(shù)據(jù)送入管道;而接收管道輸送的接收進(jìn)程〔讀進(jìn)程〕,可以從管道中接收數(shù)據(jù)。為了協(xié)調(diào)雙方的通信,管道通信機(jī)制必須提供以下3方面的協(xié)調(diào)能力:互斥。當(dāng)一個(gè)進(jìn)程正在對(duì)pipe進(jìn)程讀/寫操作時(shí),另一進(jìn)程必須等待,程序中使用lock(fd[1],1,0)函數(shù)實(shí)現(xiàn)對(duì)管道的加鎖操作,用lock(fd[1],0,0)解除管道的鎖定。同步。當(dāng)寫進(jìn)程把一定數(shù)量的數(shù)據(jù)寫入pipe后,便去睡眠等待,直到讀進(jìn)程取走數(shù)據(jù)后,再把它喚醒。當(dāng)讀進(jìn)程試圖從一空管道中讀取數(shù)據(jù)時(shí),也應(yīng)睡眠等待,直至寫進(jìn)程將數(shù)據(jù)寫入管道后,才將其喚醒。判斷對(duì)方是否存在。只有確定寫進(jìn)程和讀進(jìn)程都存在的情況下,才能通過管道進(jìn)展通信。5〕實(shí)驗(yàn)體會(huì):通過次驗(yàn)我理了進(jìn)的質(zhì)進(jìn)管的機(jī)程操系中最要的概念是代作統(tǒng)鍵驗(yàn)我在nux系統(tǒng)下現(xiàn)程創(chuàng)立到止的過體會(huì)進(jìn)的程父進(jìn)和進(jìn)的系進(jìn)程態(tài)變、程間的步進(jìn)程度原和信和管為表進(jìn)間信方的現(xiàn)。實(shí)驗(yàn)三存儲(chǔ)器管理實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康睦斫獯骓撁嬲{(diào)度的機(jī)理掌握幾種理論頁面置換算法的實(shí)現(xiàn)方法了解HASH數(shù)據(jù)構(gòu)造的使用通過實(shí)驗(yàn)比擬幾種調(diào)度算法的性能優(yōu)劣頁面置換算法是虛擬存儲(chǔ)管理實(shí)現(xiàn)的關(guān)鍵,通過本次實(shí)驗(yàn)理解存頁面調(diào)度的機(jī)制,在模擬實(shí)現(xiàn)FIFO、LRU、NRU和OPT幾種經(jīng)典頁面置換算法的根底上,比擬各種頁面置換算法的效率及優(yōu)缺點(diǎn),從而了解虛擬存儲(chǔ)實(shí)現(xiàn)的過程。準(zhǔn)備知識(shí)C++、指針、構(gòu)造
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)種植技術(shù)發(fā)展進(jìn)度記錄表
- 電子商務(wù)領(lǐng)域創(chuàng)業(yè)投資證明(5篇)
- 小動(dòng)物們的新年派對(duì)童話作文(4篇)
- 食品行業(yè)分類表(包含各類食品企業(yè)、品牌等)
- 小學(xué)英語文化教學(xué)的創(chuàng)新方法
- 《修辭立其誠:高中語文作文技巧教學(xué)教案》
- 兒童心理發(fā)展與課堂管理
- DB14-T 3374-2025 黃桃栽培技術(shù)規(guī)程
- 電子發(fā)票管理統(tǒng)計(jì)表
- 詩仙李白的詩意人生:古詩文人物背景課教案
- 幼兒園大班心理健康《我勇敢了》課件
- 去小學(xué)化家長培訓(xùn)講座課件
- 單光纖光鑷數(shù)值仿真和光阱力計(jì)算的中期報(bào)告
- 有害物質(zhì)管理程序
- 動(dòng)火作業(yè)培訓(xùn)課件
- 法學(xué)專業(yè)實(shí)習(xí)手冊(cè)
- 中印邊境自衛(wèi)反擊戰(zhàn)
- 2023-2024學(xué)年河南省濮陽市小學(xué)語文五年級(jí)期末通關(guān)考試題附參考答案和詳細(xì)解析
- 地鐵工程竣工報(bào)告及施工總結(jié)
- 介入手術(shù)室專科護(hù)士護(hù)理理論考試
- 2021年暖通工程師專業(yè)基礎(chǔ)考試真題及答案
評(píng)論
0/150
提交評(píng)論