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

下載本文檔

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

文檔簡介

...........專業(yè)..交通大學實驗報告操作系統(tǒng)實驗報告21305051332130505133計算機36班操作系統(tǒng)實驗實驗一:用戶接口實驗實驗目的理解面向操作命令的接口Shell。學會簡單的shell編碼。理解操作系統(tǒng)調用的運行機制。掌握創(chuàng)立系統(tǒng)調用的方法。操作系統(tǒng)給用戶提供了命令接口和程序接口〔系統(tǒng)調用〕兩種操作方式。用戶接口實驗也因此而分為兩大局部。首先要熟悉Linux的根本操作命令,并在此根底上學會簡單的shell編程方法。然后通過想Linux核添加一個自己設計的系統(tǒng)調用,來理解系統(tǒng)調用的實現(xiàn)方法和運行機制。在本次實驗中,最具有吸引力的地方是:通過核編譯,將一組源代碼變成操作系統(tǒng)的核,并由此重新引導系統(tǒng),這對我們初步了解操作系統(tǒng)的生成過程極為有利。實驗容控制臺命令接口實驗該實驗是通過"幾種操作系統(tǒng)的控制臺命令〞、"終端處理程序〞、"命令解釋程序〞和"Linux操作系統(tǒng)的bash〞來讓實驗者理解面向操作命令的接口shell和進展簡單的shell編程。查看bash版本。在shell提示符下輸入:$echo$BASH_VERSION我們的版本是4.3.42(1)-release〔2〕建立bash腳本,輸出Helloword在編輯器中輸入以下容#!/bin/bashechoHelloWorld!執(zhí)行腳本使用指令:$./script編寫bash腳本,統(tǒng)計/my目錄下c語言文件的個數通過bash腳本,可以有多種方式實現(xiàn)這個功能,而使用函數是其中個一個選擇。在使用函數之前,必須先定義函數。進入自己的工作目錄,編寫名為count的文件腳本程序:#!/bin/bashfunction count{echo –n "Numberofmatchesfor$1:" #接收程序的第一個參數ls $1|wc–l #對子程序的第一個參數所在的目錄進展操作}將count文件復制到當前目錄下,然后在當前目錄下建立文件夾,在my目錄下建立幾個c文件,以便用來進展測試系統(tǒng)調用實驗該實驗是通過實驗者對"Linux操作系統(tǒng)的系統(tǒng)調用機制〞的進一步了解來理解操作系統(tǒng)調用的運行機制;同時通過"自己創(chuàng)立一個系統(tǒng)調用mycall〔〕〞和"編程調用自己創(chuàng)立的系統(tǒng)調用〞進一步掌握創(chuàng)立和調用系統(tǒng)調用的方法。編程調用一個系統(tǒng)調用fork〔〕,觀察結果。在應用程序中調用系統(tǒng)調用fork〔〕非常簡單,下面的程序可以很清楚的顯示出有fork〔〕系統(tǒng)調用生成了子進程,而產生的分叉作用:#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;}程序運行結果:編程調用創(chuàng)立的系統(tǒng)調用foo〔〕,觀察結果。在核源碼中添加如下代碼:asmlinkageintsys_foo〔intx〕{ printf〔"%d\n〞,x〕;}編程調用創(chuàng)立的系統(tǒng)調用foo〔〕,觀察結果。#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)立一個系統(tǒng)調用mycall〔〕,實現(xiàn)功能:顯示字符串到屏幕上。在核源碼中添加如下代碼:#include<linux/linkage.h>asmlinkagelongsys_newcall(inti){//printk("thisisasystemcallmadebyyourself\n");return(i*10);}測試新的System_callCODE: vitest.c編程調用自己創(chuàng)立的系統(tǒng)調用。測試:CODE:./test實驗體會:通過本次實驗,我們理解了面向操作命令的接口Shell,學會了簡單的shell編碼,理解了操作系統(tǒng)調用的運行機制,掌握了創(chuàng)立系統(tǒng)調用的方法。本次實驗通過核編譯,將一組源代碼變成操作系統(tǒng)的核,并由此重新引導系統(tǒng),這讓我們初步了解了操作系統(tǒng)的生成過程。實驗二:進程管理實驗實驗目的加深對進程概念的理解,明確進程和程序的區(qū)別。進一步認識并發(fā)執(zhí)行的實質。分析進程爭用資源的現(xiàn)象,學習解決進程互斥的方法。了解Linux系統(tǒng)中進程通信的根本原理。進程是操作系統(tǒng)中最重要的概念,貫穿始終,也是學習現(xiàn)代操作系統(tǒng)的關鍵。通過本次實驗,要求理解進程的實質和進程管理的機制。在Linux系統(tǒng)下實現(xiàn)進程從創(chuàng)立到終止的全過程,從中體會進程的創(chuàng)立過程、父進程和子進程的關系、進程狀態(tài)的變化、進程之間的同步機制、進程調度的原理和以信號和管道為代表的進程間通信方式的實現(xiàn)。實驗容編制實現(xiàn)軟中斷通信的程序1.實驗原理:使用系統(tǒng)調用fork()創(chuàng)立兩個子進程,再用系統(tǒng)調用signal()讓父進程捕捉鍵盤上發(fā)出的中斷信號〔即按delete鍵〕,當父進程接收到這兩個軟中斷的某一個后,父進程用系統(tǒng)調用kill()向兩個子進程分別發(fā)出整數值為16和17軟中斷信號,子進程獲得對應軟中斷信號,然后分別輸出以下信息后終止:Childprocess1iskilledbyparent!!Childprocess2iskilledbyparent!!父進程調用wait()函數等待兩個子進程終止后,輸入以下信息,完畢進程執(zhí)行:Parentprocessiskilled!!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;}3.程序運行結果:或者屢次運行,并且Delete鍵后,會出現(xiàn)如下結果:4.簡要原因分析:上述結果中"Childprocess1iskilledbyparent!!〞和"Childprocess2iskilledbyparent!!〞相繼出現(xiàn),當運行幾次后,誰在前誰在后是隨機的。這是因為:從進程調度的角度看,子進程被創(chuàng)立后處于就緒態(tài)。此時,父進程和子進程作為兩個獨立的進程,共享同一個代碼段,分別參加調度、執(zhí)行,直至進程完畢。但是誰會先被調度程序選中執(zhí)行,那么與系統(tǒng)的調度策略和系統(tǒng)當前的資源狀態(tài)有關,是不確定的。因此,誰先從fork()函數中返回繼續(xù)執(zhí)行后面的語句也是不確定的。編制實現(xiàn)進程的管道通信的程序1.實驗原理:使用系統(tǒng)調用pipe()建立一條管道線,兩個子進程分別向管道寫一句話:Childprocess1issendingamessage!Childprocess2issendingamessage!而父進程那么從管道中讀出來自于兩個子進程的信息,顯示在屏幕上。要求:父進程先接收子進程P1發(fā)來的消息,然后再接收子進程P2發(fā)來的消息。2.程序源碼:#include<unistd.h>#include<signal.h>#include<stdio.h>intpid1,pid2;//定義兩個進程變量main(){intfd[2];charOutPipe[100],InPipe[100]; //定義兩個字符數組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); //向管道寫入數據sleep(5); //等待讀進程讀出數據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); //從管道中讀出數據printf("%s\n",InPipe); //顯示讀出的數據wait(0); //等待子進程2完畢read(fd[0],InPipe,50);printf("%s\n",InPipe);exit(0); //父進程完畢}}}3.運行結果截圖:4.簡要分析管道,是指用于連接一個讀進程和一個寫進程,以實現(xiàn)它們之間信息的共享文件又稱pipe文件。向管道〔共享文件〕提供輸入的發(fā)送進程〔即寫進程〕,以字符流形式將大量的數據送入管道;而接收管道輸送的接收進程〔讀進程〕,可以從管道中接收數據。為了協(xié)調雙方的通信,管道通信機制必須提供以下3方面的協(xié)調能力:互斥。當一個進程正在對pipe進程讀/寫操作時,另一進程必須等待,程序中使用lock(fd[1],1,0)函數實現(xiàn)對管道的加鎖操作,用lock(fd[1],0,0)解除管道的鎖定。同步。當寫進程把一定數量的數據寫入pipe后,便去睡眠等待,直到讀進程取走數據后,再把它喚醒。當讀進程試圖從一空管道中讀取數據時,也應睡眠等待,直至寫進程將數據寫入管道后,才將其喚醒。判斷對方是否存在。只有確定寫進程和讀進程都存在的情況下,才能通過管道進展通信。5〕實驗體會:通過次驗我理了進的質進管的機程操系中最要的概念是代作統(tǒng)鍵驗我在nux系統(tǒng)下現(xiàn)程創(chuàng)立到止的過體會進的程父進和進的系進程態(tài)變、程間的步進程度原和信和管為表進間信方的現(xiàn)。實驗三存儲器管理實驗實驗目的理解存頁面調度的機理掌握幾種理論頁面置換算法的實現(xiàn)方法了解HASH數據構造的使用通過實驗比擬幾種調度算法的性能優(yōu)劣頁面置換算法是虛擬存儲管理實現(xiàn)的關鍵,通過本次實驗理解存頁面調度的機制,在模擬實現(xiàn)FIFO、LRU、NRU和OPT幾種經典頁面置換算法的根底上,比擬各種頁面置換算法的效率及優(yōu)缺點,從而了解虛擬存儲實現(xiàn)的過程。準備知識C++、指針、構造

溫馨提示

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

評論

0/150

提交評論