版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《操作系統(tǒng)原理》實驗報告書班級:軟件1102學(xué)號:姓名:指導(dǎo)教師:徐向英2023-2023學(xué)年第二學(xué)期實驗名稱:LINUX用戶界面實驗時間:2023年4月9日第6周星期二一、實驗?zāi)康?,熟悉Linux字符操作界面,純熟掌握常用Shell命令。2,熟悉Linux文本編輯方法,學(xué)會編輯軟件VI的使用。3,了解Linux編譯器gcc的功能,掌握基于Linux平臺的C程序的開發(fā)實驗預(yù)習(xí)(預(yù)備知識的問題及回答)1.為什么在Linux系統(tǒng)中,諸如光盤、U盤等要先掛載而后才干使用?如何獲得U盤的設(shè)備名?裝載點在文獻系統(tǒng)中的位置是什么?由于文獻系統(tǒng)的差異,Linux在默認情況下并不支持軟盤,光盤,U盤,所以需要通過裝在相應(yīng)盤片才可以訪問其中的數(shù)據(jù)裝載點是掛載文獻系統(tǒng)的目錄位置2.從虛擬機界面退出進入WindowsOS界面的操作是Ctrl+Alt,從WindowsOS界面進入虛擬機界面的方法是鼠標點擊虛擬機界面。3.權(quán)限的含義是什么?如何使用數(shù)字法設(shè)定文獻的權(quán)限?Linux系統(tǒng)中的每個文獻和目錄都有相應(yīng)的訪問許可權(quán)限,訪問權(quán)限分為只讀(r),可寫(w)和可執(zhí)行三種,有三種不同類型的用戶可以對文獻或者目錄進行訪問,分別是文獻所有者(u),同組用戶(g)和其它用戶(o)。所有的文獻和目錄都被創(chuàng)建他們的人所擁有。只要你是這個文獻的所有者或者你登陸為用戶,你就擁有了改變所有者,群組和其別人權(quán)限的權(quán)利。使用數(shù)字法改變權(quán)限:?命令格式chmod權(quán)限數(shù)值文獻名說明給指定文獻賦予數(shù)值所規(guī)定的權(quán)限? 在數(shù)字設(shè)定法中,每種權(quán)限設(shè)立均可以用數(shù)值來代表,其中0表達沒有權(quán)限,1表達可執(zhí)行權(quán)限,2表達可寫權(quán)限,4表達可讀權(quán)限,這些值之和便可以用來設(shè)定特定權(quán)限。4.什么過濾操作?在Linux中如何實現(xiàn)? 過濾操作:將一個命令的輸出作為一個命令的輸入Linux實現(xiàn)的命令格式:命令|命令5.在Linux中掛載u盤并能顯示其文檔的中文信息,所使用的掛載命令是:Mount/dev/sdal/mnt/usb。6.什么是vi?其三種操作模式的含義是什么?給出三種工作模式間的轉(zhuǎn)換圖。命令模式:vi啟動后的默認模式,控制光標的移動,復(fù)制刪除文字,進入輸入模式和末行模式輸入模式:進行文字輸入末行模式:保存文獻,退出VI實驗內(nèi)容(包含實驗所用命令或相關(guān)程序源代碼)1.shell操作命令(給出每題所用的Shell命令或命令結(jié)果)(1)創(chuàng)建名為stu1、stu2的2個用戶,設(shè)立密碼分別為student1和student2,并將它們設(shè)為組group1中的成員。#groupaddgroup1#useraddstu1–ggroup1#sustu1Spasswdstu1回車后敲入密碼student1$exit#useraddstud2–ggroup1#sustu2$passwdstu2$exit(2)在每個用戶的主目錄下建立2個目錄,分別命名為dir1和dir2。#sustu1$cd~$mkdirdir1$exit#sustu2$cd~$mkdirdir2$exit(3)查找stu1用戶主目錄、下屬各子目錄的默認存取權(quán)限,并給出結(jié)論。#sustu1$cd..$ls-1用戶主目錄權(quán)限為:drwx,即目錄的用戶可讀,寫,執(zhí)行,同組和其它的用戶無任何權(quán)限#sustu`$cd~?$ls-1Dir1目錄權(quán)限為:drwxr-xr-x,即目錄的用戶可讀,寫,執(zhí)行(4)調(diào)試pwd和cd命令,回答下列關(guān)于Linux文獻系統(tǒng)中目錄的有關(guān)問題。=1\*GB3①用戶主目錄的絕對途徑如何表達?/home/stu1/home/stu2=2\*GB3②根目錄如何表達?/root=3\*GB3③.和..分別表達什么目錄?子目錄,父目錄=4\*GB3④~表達什么目錄?用戶主目錄⑤當前目錄如何表達?Cd~(5)新建用戶stu3,設(shè)立其密碼為student3,并將其設(shè)立為group2中成員。爾后,以stu3登錄,在其主目錄下建立名為text的目錄,在text目錄下再建立名為dir1的子目錄,并使其成為當前目錄。#groupaddgroup2#useraddstu3–ggroup2#sustu3$passwd回車后敲入密碼student3$cd~$mkdirtext$mkdirdir1$cdtext/dir1(6)使用cat>sneakers.txt命令,分析命令行catsneakers.txt的顯示結(jié)果。$cat>sneakers.txtbuysomesneakersthengotothecoffeeshopthenbuysomecoff^D$catsneakers.txt從鍵盤中創(chuàng)建一個名為sncakers.txt文獻,文獻內(nèi)容為:buysomesncakersThengotothecoffeeshopThenbuysomecoff(7)使用上題的方法,在dir1目錄中建立home.txt文獻,其內(nèi)容為:bringthecoffeehometakeoffshoesputonsneakersmakesomecoffeerelax!$cd/home/stu1/dir1$cat>home.txtBringthecoffeehomeTakeoffshoesPutonsneakersMakesomecoffeeRelax![ctrl+d](8)試寫出實現(xiàn)下列功能的shell命令:=1\*GB3①將home.txt文獻移至其上級目錄中(即text目錄下)。$mv/home.txt=2\*GB3②將home.txt添加到sneakers.txt尾部形成新的文獻saturday.txt。$catcneakers.txt>asturday.txt$cathome.txt>>Saturday.txt=3\*GB3③將text目錄樹從stu3用戶主目錄下移至stu2主目錄下。【使用特權(quán)用戶方法】sumv/home/stu3/text/home/stu2【修改目錄權(quán)限方法】#cp/home/stu3/text/home/stu2(9)試畫出上述命令后,用戶stu1、stu2和stu3主目錄中的目錄樹(3棵子樹)。2.LinuxC程序開發(fā)(1)編寫LinuxC程序,把一個文獻的內(nèi)容復(fù)制到另一個文獻中,即實現(xiàn)簡樸的copy功能。規(guī)定:程序輸入的第一個參數(shù)是源文獻,第二個參數(shù)是目的文獻?!驹闯绦颉?include<sys/types.h>#include<dirent.h>#include<stdio.h>#include<crrno.h>Intmain(intargc,char*argv[]){?FILE*in,*out;Charch;If(argc!=3){ Printf(“youforgottoenterafilename\n”);Exit(0);}If(in=fopen(argv[1],”r”))==NULL{?Printf(“cannitopenoutfile\n”);Exit(0);}If(out=fopen(argv[2],”w”))==NULL{?Prntf(“cannotopenoutfile”); Exit(0);}While(!feof(in))fputc(in),out);Fclose(in);Fclose(out);}【運營命令】#gcc–otestcopy.c#./testfile1.cfile2.c(2)編寫LinuxC程序,列出stu2主目錄中的文獻信息,并將其中sat(yī)urday.txt文獻的權(quán)限設(shè)立為文獻所有者可讀可寫、同組用戶只讀、其他用戶無權(quán)限?!驹闯绦颉浚nclude<sys/types.h>#include<dirent.h>#include<stdio.h>#include<crrno.h>Intmain(intargc,char*argv[]){ DIR*dp;?Structdirent*dirp;?Intn=0; If(arge!=2)?{ Printf(“asignleargementisrequired”); Exit(0);}If(dp=opendir(argv[1])==NULL){ Printf(“cannotopen%s”,args[1]);Exit(0);}While(((dirp=readdir(dp))!=NULL)&&(n<=50)){ If(n%1==0)printf(“”);?N++;?Printf(“%10s\n”,dirp->d_name);}System(“chmod640/home/stu2/text/dir1/Saturday.txt”)}【運營命令】#gcc–otestlist.c#./test.home/stu2
實驗名稱:SHELL程序設(shè)計實驗時間:2023年4月11日第6周星期4一、實驗?zāi)康氖煜HELL腳本編程的環(huán)節(jié),掌握基于Bash的Shell腳本開發(fā)。實驗預(yù)習(xí)(預(yù)備知識的問題及回答)1.Linux系統(tǒng)默認的shell語言是什么?欲查看該shell的版本,應(yīng)使用什么命令?Bashshell$echo$BASH_VERSION2.預(yù)習(xí)shell有關(guān)變量和參數(shù)的相關(guān)知識,回答下列問題。(1)假設(shè)用戶進行了如下的賦值操作:$person=jenny試給出下面命令的輸出結(jié)果。1)echopersonperson2)echo$personjenny3)echo‘$person’$person4)echo“$person”jenny(2)填充下列與環(huán)境變量、位置變量和預(yù)定義變量相關(guān)的表格。Shell變量定義HOME保存用戶注冊目錄的絕對途徑PATH保存用冒號分割的目錄途徑PWD當前工作目錄的據(jù)對途徑名PS1主提醒符,特權(quán)用戶為#,普通用戶為$$0當前shell程序的文獻名$#位置參數(shù)的個數(shù)$?前一個命令執(zhí)行后返回的狀態(tài)$$當前進程的PID3.寫出下列expr命令的輸出:exprindex“value”‘a’expr“value”:‘v.*u’expr“aaa”:‘a(chǎn)\+’expr“aaa”:‘a(chǎn)\?’expr2+3expr2+3expr2\*3expr5+`expr2+3`exprlength“operatingsystem”exprsubstrlinux2324312+356mon-numericargument16inu實驗內(nèi)容1.編寫Shell腳本,從命令行中接受一個二元算術(shù)表達式并計算其結(jié)果。【源程序】#!/bin/bashIftest$#=3ThenCases2in+)letz=$1+$3;;?-)letz=$1-$3;;?/)letz=$1/$3;;?x|x)letz=$1*$3;; *)echo”warning-$2invalidoperator!”exit;;?Esac Echo”answerissz”ElseEcho”usage-$0value1operat(yī)orvalue2”fi【運營】Chmoda+xjisuan./jisuan2+32.編寫一個以文獻列表作為輸入的過濾器程序,規(guī)定文獻名具有以句點“.”分隔的后綴,過濾器輸出每個文獻的不帶句點和后綴的文獻名。【源程序】ReadflagWhiletest“$flag”DoLocation=’expr$location=1’?Basename=’exprsubstr=”$flag”1$location’Echo$basecnameReadflagdone【運營】Chmoda+xletter./letter3.將下面的shell腳本命名為myscript,分析其功能:count=$#cmd=echowhile[$count–gt0]docmd="$cmd\$$count"count=`expr$count-1`doneeval$cmd【命令行輸入】chmoda+xmyscript./myscriptfirstsecondthird【運營結(jié)果】Thirdsecondfirst【腳本功能分析】將命令行輸入的參數(shù)倒敘顯示4.設(shè)計一個程序cuts,它從標準輸入讀入數(shù)據(jù),獲取由第一個參數(shù)n和第二個參數(shù)m所限定范圍的數(shù)據(jù)(涉及這兩個字符),n和m都是整數(shù)。例如:$cuts1114Thisisatestofcutsprogram(輸入)test(顯示結(jié)果)【源程序】#!/bin/bashReadblineEcho$aline|cut-c$1-$2實驗名稱:進程控制與通信實驗時間:2023年5月7日第10周星期2一、實驗?zāi)康?加深進程的概念理解,體會進程創(chuàng)建過程,經(jīng)一部結(jié)識進程的異步并發(fā)特性2,了解Linux進程通信原理3,掌握Linux進程控制和進程通信相關(guān)的系統(tǒng)調(diào)用二、實驗預(yù)習(xí)(預(yù)備知識的問題及回答)1.寫出下列系統(tǒng)調(diào)用功能:(1)fork()用于創(chuàng)建進程(2)getpid()用于獲取當前的進程ID號(3)wait()用于等待子進程結(jié)束(4)exit()用于進程自我終止(5)pipe()用于常見無名管道(6)signal()用于在信號和信號解決函數(shù)之間建相應(yīng)關(guān)系(7)kill()用于發(fā)送信號給指定進程2.閱讀fork系統(tǒng)調(diào)用,用偽碼寫出其實現(xiàn)流程。 Pid=fork()Ifpid為負??Print當前進程是子進程Elseifpid為0 Print當前進程是父進程3.圖示pipe系統(tǒng)調(diào)用生成無名管道時所涉及的數(shù)據(jù)結(jié)構(gòu)。4.在UNIX系統(tǒng)中運營下面程序,最多可以產(chǎn)生多少個進程?畫出進程家族樹。main(){fork();fork();fork();}8個5.下列程序運營后,a的值是多少?main(){inta,pid;a=55;pid=fork();if
(pid<
0)
{
printf("error
in
fork!");exit(0);}elseif(pid==0){sleep(5);a=99;printf(“a=%d\n”,a);sleep(5);exit(0);}else{sleep(7);printf(“a=%d\n”,a);wait(0);}}a=99a=55;最終a=55三、實驗內(nèi)容1.調(diào)試下面的程序,觀測也許的并發(fā)結(jié)果,給出簡要分析,并畫出進程家族樹。#include
<unistd.h>#include
<sys/types.h>#include<sys/wait.h>main
(){intstatus;
int
pid1=-1,pid2=-1,pid3=-1;?
pid1=fork();
if
(pid1
==
0)
printf("pid1=0,my
process
id
is
%d\n",getpid());
else
if
(pid1
>
0){printf("pid1>0,my
process
id
is
%d\n",getpid());pid2=fork();if
(pid2
==
0)printf("pid2=0,my
process
id
is
%d\n",getpid());
else
if
(pid2
>
0)printf("
pid2>0,my
process
id
is
%d\n",getpid());}pid3=fork();
if
(pid3
==
0)
printf("pid3=0,pid1=%d,pid2=%d,
my
process
id
is
%d\n",pid1,pid2,getpid());?
else
if
(pid3
>
0)
printf("pid3>0,pid1=%d,pid2=%d,my
process
id
is%d\n",pid1,pid2,getpid());wait(&status);exit(0);
}2.編程實現(xiàn)進程間管道通信。規(guī)定:父子進程共享一無名管道,兩個子進程作為發(fā)送方分別向管道發(fā)送一行信息,父進程先讀出子進程P1發(fā)來的信息行,將其轉(zhuǎn)換為大寫字母輸出;再讀出子進程P2發(fā)來的信息行,將其轉(zhuǎn)換為小寫字母輸出。【源程序】Intfiledes[2];Charbuffer[80];Main(){?Pipe(filedes);Charstr1[80];Charstr2[80];Intpid1,pid2,I;While((pid=fork())==-1);If(pid1==0){?Lockf(filedes[1],1,0);Printf(“child1inputString1\n”);Scanf(“%s”,str1);Write(filedes[1],str,sizeof(str1));Lockf(filedes[1],0,0);Exit(0);?}Else{?While((pid=fork())==-1)?If(pid2==0){?Lockf(filedes[1],1,0)Printf(“child2inputstring2\n”);Scanf(“%s”,str2);Write(filedes[1],str2,sizeof(stru2));Lockf(fildes[1],0,0);Exit(0);}Else{ If(waitpid(pid1,null,0)==pid1){ Read(filedes[0],buffer,80);?For(i=0;i<sizeof(str1);i++)buffer[i]=toupper(buffer[i]);Printf(“parent==child1:%s\n”,buffer);}ElsePrintf(“waitpid1error!”);If(waitpid(pid2,NULL,0)==pid2){ Read(filees[0],bufferm80); For(i=0;i<sizeof(str2);i++)? Buffer[i]=tolower(buffer[i]);??Printf(“parent==child2:%s\n”,buffer);}ElsePrintf(“waitpid2error!”);}}}【運營與測試】
附加題3.學(xué)習(xí)下面共享存儲區(qū)的內(nèi)容,并用共享存儲區(qū)的方式實現(xiàn)“觀測者——報告者”問題(共享的count變量存于共享存儲區(qū)),并驗證“與時間有關(guān)的錯誤”。共享存儲操作使得兩個或兩個以上的進程可以共用一段物理內(nèi)存(一般情況下,兩個進程的數(shù)據(jù)區(qū)是完全獨立的,父進程用fork創(chuàng)建子進程后,子進程會復(fù)制父進程數(shù)據(jù)到自己的數(shù)據(jù)區(qū))。(1)創(chuàng)建共享內(nèi)存#include<sys/shm.h>intshmget(key_tkey,size_tsize,intpermflags);參數(shù)key是共享內(nèi)存的標記,size是共享內(nèi)存段的最小字節(jié)數(shù),permflags是訪問權(quán)限,值的設(shè)立同semget同樣。(2)共享內(nèi)存的控制#include<sys/shm.h>intshmctl(intshmid,intcommand,structshmid_ds*shm_stat);command可設(shè)為IPC_STAT,IPC_SET,IPC_RMID。參數(shù)shm_stat指向存放屬性的結(jié)構(gòu)體,具體內(nèi)容請參考手冊。(3)共享內(nèi)存的附接和斷開#include<sys/shm.h>void*shmat(intshmid,constvoid*addr,intshmflags);intshmdt(constvoid*addr);由于兩個函數(shù)需指出進程地址空間中的地址,因此比較復(fù)雜。簡化的方法是將shmat中的地址設(shè)為NULL?!驹闯绦颉俊具\營與測試】
實驗名稱:虛擬存儲實驗時間:2023年5月21日第12周星期2一、實驗?zāi)康?,掌握虛擬存儲器的概念,理解實現(xiàn)虛擬存儲器的基本方法2,體會分頁存儲器管理中,頁面置換的過程3,進一步結(jié)識多種頁面置換算法的實現(xiàn)機制二、實驗預(yù)習(xí)(預(yù)備知識的問題及回答)1.描述請求分頁的地址轉(zhuǎn)換過程。2.解釋FIFO頁面置換算法所產(chǎn)生的Belady現(xiàn)象。Belady現(xiàn)象是指當進程分派的內(nèi)存塊數(shù)增長時,進程缺頁率反而上升的現(xiàn)象。FIFO算法在頁面置換時,總是淘汰先進入主存的頁面,而先進入主存的頁面并不一定是以后用不到的頁面,假如這些頁面以后需要訪問,則將產(chǎn)生缺頁,因此即使分派的內(nèi)存塊數(shù)增長,缺頁率仍然有也許上升,這是由于使用的頁面置換算法不合理導(dǎo)致的三、實驗內(nèi)容1.計算并輸出下列頁面置換算法在不同內(nèi)存容量(4頁至32頁)下的命中率.(1)最佳置換算法(OPT)(2)先進先出算法(FIFO)(3)最近最久未用頁面置換算法(LRU)具體規(guī)定如下:(1)通過隨機函數(shù)產(chǎn)生一個指令序列,共320條指令.指令地址的生成原則如下:1)50%的指令是順序執(zhí)行的;2)25%的指令是均勻分布在前地址部分;3)25%的指令是均勻分布在后地址部分;程序中的具體實行方法是:1)在[0,319]的指令地址之間隨機選取一起點地址m;2)順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令;3)在前地址[0,m+1]中隨機執(zhí)行一條指令,該指令的地址為m’;4)順序執(zhí)行一條指令,即執(zhí)行地址為m’+1的指令;5)在后地址[m’+2,319]中隨機執(zhí)行一條指令;反復(fù)上述環(huán)節(jié)(1)(5),直到執(zhí)行320條指令為止.將指令序列變換成為頁地址流:設(shè):頁面大小為1k,用戶內(nèi)存容量為4頁逐步增長到32頁,用戶虛存容量為32k.假定在用戶虛存中,每頁存放10條指令,即320條指令在虛存中的存放方法為:第0條第9條指令在第0頁;第10條第19條指令在第1頁;……第310條第319條指令在第31頁.按以上方式用戶指令共組成32頁.據(jù)此可得出指令地址m和頁面號page以及頁內(nèi)位移量offset之間的計算公式為:page=m/10,offset=m%10.頁地址流長度為320?!驹闯绦颉縄ntpage_stream[320];Intb[32];Voidran(){?Intinstruct[320];IntI,j,m,m1,m2;Srand(getpid());I=0;While(i<320){?M=rand()%320; Instruct[i]=m; I++;If(m+1)<320{ Instruct[i]=m+1;I++;}M1=read()%(m+1);Instruct[i]=m1;I++;If((m1+1)<320){ Instruct[i]=m1+1;?I++;}M1=read()%(m+1);Instruct[i]=m1;I++;If((m1+1)<320){ Instruc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025機器買賣合同
- 2025資金托管合同范本資金托管協(xié)議書
- 2025進料加工貿(mào)易合同
- 二零二五年度企業(yè)法人股東退出合同3篇
- 二零二五年度景區(qū)保潔員勞動合同3篇
- 2025年度兼職協(xié)議書-企業(yè)數(shù)據(jù)分析師兼職服務(wù)協(xié)議3篇
- 2025年度養(yǎng)牛產(chǎn)業(yè)養(yǎng)殖廢棄物綜合利用合作合同3篇
- 二零二五年度綠色建筑經(jīng)營權(quán)承包管理協(xié)議書3篇
- 2025年度退股投資者關(guān)系維護協(xié)議3篇
- 二零二五年度農(nóng)村自建房農(nóng)村自建房施工安全責任合同
- 法律職業(yè)倫理考試題庫匯總含答案
- 呆滯品管理制度范本(3篇)
- 海底撈-新員工培訓(xùn)
- Cinema 4D從入門到精通PPT完整版全套教學(xué)課件
- T-SHSPTA 002-2023 藥品上市許可持有人委托銷售管理規(guī)范
- 我國雙語教育發(fā)展現(xiàn)狀以及建議
- 保研推免個人簡歷
- 《計算機組成原理》武漢大學(xué)2023級期末考試試題答案
- 廣東廣州白云區(qū)2021學(xué)年第二學(xué)期期末學(xué)生學(xué)業(yè)質(zhì)量診斷調(diào)研六年級語文(含答案)
- 公安院校公安專業(yè)招生體檢表
- 2023-2024學(xué)年四川省瀘州市小學(xué)數(shù)學(xué)四年級上冊期末評估測試題
評論
0/150
提交評論