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

下載本文檔

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

文檔簡介

1、通信與信息工程學院2015 / 2016學年第 二 學期實驗報告課程名稱:操作系統(tǒng)實驗名稱:1、LINUX及其使用環(huán)境2、進程管理3、進程間通信4、文件的操作和使用班級學號專 業(yè) 電子信息工程 學生姓名 指導教師 趙 建 立 實驗名稱試驗一 LINUX及其使用環(huán)境實驗類型驗證實驗學時1實驗時間2016.6.2一、 實驗目的和要求1、 了解UNIX的命令及使用格式。2、 熟悉UNIX/LINUX的常用基本命令。3、練習并掌握UNIX提供的vi編輯器來編譯C程序。4、學會利用gcc、gdb編譯、調(diào)試C程序。二、實驗環(huán)境Windows XP + VMWare + RedHat Enterprise

2、Linux(RHEL) 4三、 實驗原理及內(nèi)容1、熟悉LINUX的常用基本命令。如ls、mkdir、grep等,學會使用man、help等其它命令,掌握vi編輯器的使用。(1)顯示目錄文件 ls例:ls-al顯示當前目錄下的所有文件(2)建新目錄 mkdir例:mkdirtest新建一個test目錄(3)刪除目錄rmdir(4) 改變工作目錄位置 cd例:cdtest更改工作目錄至test目錄下(5)顯示當前所在目錄pwd(6)查看目錄大小du(7)文件屬性的設置 chmod (8)命令在線幫助 man2、設計一個實現(xiàn)文件拷貝功能的shell程序。(1)在文本編輯器里輸入shell程序:#!/

3、bin/shecho “please enter source file:”read soucecho please enter destination file:”read destcp $souc $destls $dest將程序保存在主目錄下,命名為shell.(2)打開終端,輸入ls-l,顯示目錄下所有文件的許可權、擁有者、文件大小、修改時間及名稱。輸入 ./shell,運行shell程序。輸入源文件hello.c,目標文件B13011206.c。(3)輸入ls-l,當前目錄中包含B13011206.c目標文件。即完成從源文件拷貝至目標文件過程。3、 LINUX 下C語言程序的編譯與調(diào)

4、試實驗。(1)調(diào)試編譯代碼為了使gdb正常工作,必須使程序在編譯時包含調(diào)試信息。調(diào)試信息里包含程序里的每個變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號。gdb利用這些信息使源代碼和機器碼相關聯(lián),在編譯時用 g 選項打開調(diào)試選項。(2)gdb基本命令命 令描 述file裝入欲調(diào)試的可執(zhí)行文件kill終止正在調(diào)試的程序list列出產(chǎn)生執(zhí)行文件的源代碼部分next執(zhí)行一行源代碼但不進入函數(shù)內(nèi)部step執(zhí)行一行源代碼并進入函數(shù)內(nèi)部run執(zhí)行當前被調(diào)試的程序quit終止gdbwatch監(jiān)視一個變量的值而不管它何時被改變break在代碼里設置斷點,使程序執(zhí)行到這里時被掛起make不退出gdb就可以

5、重新產(chǎn)生可執(zhí)行文件shell不離開gdb就執(zhí)行UNIX shell 命令(3)打開終端,輸入gcchello.c,編譯c程序。(4)編譯無錯后,輸入 ./a.out ,運行程序hello.c,顯示運行結果“hello”。四、 實驗小結之前沒有接觸過Linux操作系統(tǒng),剛開始用有點不習慣。雖然用起來磕磕絆絆,通過本次實驗反而受益匪淺。通過這個實驗我了解了UNIX的命令及使用格式,熟悉了UNIX/LINUX的常用基本命令,同時也了解了在LINUX系統(tǒng)下運行C語言程序的方法,掌握了C語言程序的編譯與調(diào)試方法。實驗名稱試驗二進程管理實驗類型驗證實驗學時1實驗時間2016.6.2一、 實驗目的和要求1、

6、掌握進程的概念,明確進程的含義2、認識并了解并發(fā)執(zhí)行的實質(zhì)二、實驗環(huán)境Windows XP + VMWare + RedHat Enterprise Linux(RHEL) 4三、實驗原理及內(nèi)容1.實驗內(nèi)容使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有兩個父進程和兩個子進程活動。每一個進程在屏幕上顯示為:父進程1顯示“(1)parent pid say:A”,父進程2顯示“(2)parent pid say:A”,子進程(1.1)顯示(1.1)pid1 say:B,子進程(2.1)顯示“(2.1)pid2 say:C”。2、 實驗原理fork( ):創(chuàng)建一個新進程。 系統(tǒng)調(diào)

7、用格式: pid=fork( )參數(shù)定義:int fork( )fork()返回值意義如下:0:在子進程中,pid變量保存的fork()返回值為0,表示當前進程是子進程。>0:在父進程中,pid變量保存的fork()返回值為子進程的id值(進程唯一標識符)。-1:創(chuàng)建失敗。如果fork( )調(diào)用成功,它向父進程返回子進程的PID,并向子進程返回0,即fork()被調(diào)用了一次,但返回了兩次。此時OS在內(nèi)存中建立一個新進程,所建的新進程是調(diào)用fork( )父進程的副本,稱為子進程。子進程繼承了父進程的許多特性,并具有與父進程完全相同的用戶級上下文。父進程與子進程并發(fā)執(zhí)行。核心為fork( )

8、完成以下操作:(1)為新進程分配一進程表項和進程標識符進入fork( )后,核心檢查系統(tǒng)是否有足夠的資源來建立一個新進程。若資源不足,則fork( )系統(tǒng)調(diào)用失??;否則,核心為新進程分配一進程表項和唯一的進程標識符。(2)檢查同時運行的進程數(shù)目超過預先規(guī)定的最大數(shù)目時,fork( )系統(tǒng)調(diào)用失敗。(3)拷貝進程表項中的數(shù)據(jù)將父進程的當前目錄和所有已打開的數(shù)據(jù)拷貝到子進程表項中,并置進程的狀態(tài)為“創(chuàng)建”狀態(tài)。(4)子進程繼承父進程的所有文件對父進程當前目錄和所有已打開的文件表項中的引用計數(shù)加1。(5)為子進程創(chuàng)建進程上、下文進程創(chuàng)建結束,設子進程狀態(tài)為“內(nèi)存中就緒”并返回子進程的標識符。(6)子

9、進程執(zhí)行雖然父進程與子進程程序完全相同,但每個進程都有自己的程序計數(shù)器PC,然后根據(jù)pid變量保存的fork()返回值的不同,執(zhí)行不同的分支語句。3. 實驗步驟 (1)在文本編輯器輸入程序:#include<stdio.h>#include<unistd.h>int main()int temp1,temp2;int pid1,pid2;pid1=fork();temp1=pid1;if (pid1>0)printf(“n(1)parent pid %d say:A”,temp1);elseprintf(“n(1.1)pid1 say:B”);pid2=fork(

10、);temp2=pid2;if (pid2>0)printf(“n(2)parent pid %d say:A”,temp2);elseprintf(“n(2.1)pid2 say:C”);將程序保存在主目錄下。(2)打開終端,使用gcc編譯程序,如果出錯,使用vi編輯器編輯程序。編輯無錯后再次編譯。(3)運行程序,輸入./a.out,運行多次后得到下圖結果。四、實驗小結通過這次實驗,掌握了進程的概念,明確了進程的含義,認識并了解了并發(fā)執(zhí)行的實質(zhì)。這次實驗學會了用fork()函數(shù)創(chuàng)建實驗,了解到進程與子進程的創(chuàng)建過程。另外還掌握了LINUX系統(tǒng)中輸出流重定向的使用,將程序的輸出結果輸出到

11、文件中,而不是直接顯示在屏幕上。實驗名稱試驗三 進程間通信實驗類型綜合實驗學時3實驗時間2016.6.2,2016.6.9一、 實驗目的和要求1、掌握進程另外的創(chuàng)建方法。2、熟悉進程的睡眠、同步、撤消等進程控制方法。3、了解什么是管道。4、熟悉UNIX/LINUX支持的管道通信方式。二、實驗環(huán)境Windows XP + VMWare + RedHat Enterprise Linux(RHEL) 4三、實驗原理及內(nèi)容1.實驗原理編寫程序?qū)崿F(xiàn)進程的管道通信。用系統(tǒng)調(diào)用pipe( )建立一管道,二個子進程P1和P2分別向管道各寫一句話: Child 1 is sending a message!

12、Child 2 is sending a message!父進程從管道中讀出二個來自子進程的信息并顯示(要求先接收P1,后P2)。2.實驗步驟 (1)在文本編輯器輸入程序:#include <unistd.h>#include <signal.h>#include <stdio.h>int pid1,pid2;main( ) int fd2;char outpipe100,inpipe100;pipe(fd); /*創(chuàng)建一個管道*/while (pid1=fork( )= =-1);if(pid1= =0) lockf(fd1,1,0); sprintf(o

13、utpipe,"child 1 process is sending message!");/*把串放入數(shù)組outpipe中*/ write(fd1,outpipe,50); /*向管道寫長為50字節(jié)的串*/ sleep(5); /*自我阻塞5秒*/ lockf(fd1,0,0); exit(0);elsewhile(pid2=fork( )= =-1); if(pid2= =0) lockf(fd1,1,0); /*互斥*/ sprintf(outpipe,"child 2 process is sending message!");write(fd1

14、,outpipe,50);sleep(5); lockf(fd1,0,0); exit(0);else wait(0); /*同步*/ read(fd0,inpipe,50); /*從管道中讀長為50字節(jié)的串*/printf("%sn",inpipe); wait(0); read(fd0,inpipe,50); printf("%sn",inpipe);exit(0);(2)在終端中,編譯程序。(3)輸入./a.out執(zhí)行程序3、實驗結果實驗輸出結果如下延遲5秒后顯示child 1 process is sending message!再延遲5秒 ch

15、ild 2 process is sending message!四、實驗小結(包括問題和解決方法、心得體會、意見與建議等)通過這次實驗,熟悉了進程的睡眠、同步、撤消等進程控制方法,了解什么是管道,了解了UNIX/LINUX支持的管道通信方式。實驗名稱實驗四 文件的操作和使用實驗類型驗證實驗學時1實驗時間2016.6.9一、 實驗目的和要求熟悉文件系統(tǒng)的操作和使用方法。二、實驗環(huán)境Windows XP + VMWare + RedHat Enterprise Linux(RHEL) 4三、實驗原理及內(nèi)容1、實驗內(nèi)容設計一個程序,通過用密碼字符串對文件內(nèi)容進行逐字符異或操作的方法,實現(xiàn)對一個文件

16、的加/解密。2、實驗步驟(1)實驗程序:#include<stdio.h>int main(int argc,char *argv)FILE *fd1, *fd2, *fd3;int n;char jiami4;jiami0=1;jiami1=2;jiami2=3;jiami3=4; int k=0;char temp;fd1=fopen(“hello.c”,”r”); /源文件hello.cfd2=fopen(“B13011206”,”w”); /加密后文件B13011206while (n=fgetc(fd1)>0)n=njiamik;k+;if (k>=4)k=0;fputc(n,fd2);fclose(fd1);fclose(fd2); (2)打開終端,使用gcc編譯,vi編譯程序。生成可執(zhí)行文件4。 (3)輸入 ./4 hello.c aaa,對hello.c程序加密并保存至aaa (4)使用vi指令進入hello.c和aaa ,前者為加密前,后者為加密后程序。3、實驗結果:B13011206中的內(nèi)容_WGWQ_AGPX_8_Q_AUW_GEV_S_;_R_>J8CFXGR_Q_m_8AQEGAZ_>L8四、實驗小結(包括問題和解決方法、心得體會、意見與建議等

溫馨提示

  • 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

提交評論