版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目 錄實(shí)驗(yàn)一 熟悉Linux環(huán)境1實(shí)驗(yàn)二 shell腳本10實(shí)驗(yàn)三 進(jìn)程控制14實(shí)驗(yàn)四 進(jìn)程間通信-信號(hào)量機(jī)制實(shí)驗(yàn)18實(shí)驗(yàn)五 進(jìn)程間通信-進(jìn)程的管道通信實(shí)驗(yàn)24實(shí)驗(yàn)六 進(jìn)程間通信-消息的發(fā)送與接收實(shí)驗(yàn)28實(shí)驗(yàn)七 進(jìn)程通信-共享存儲(chǔ)區(qū)通信34實(shí)驗(yàn)六 死鎖避免的算法40實(shí)驗(yàn)七 存儲(chǔ)管理42一、常用頁(yè)面置換算法42二、動(dòng)態(tài)分區(qū)分配算法(選做)51實(shí)驗(yàn)八 模擬進(jìn)程調(diào)度算法53實(shí)驗(yàn)九 文件操作540 / 68實(shí)驗(yàn)一 熟悉Linux環(huán)境【實(shí)驗(yàn)?zāi)康摹?了解Linux系統(tǒng)基本操作方法,學(xué)會(huì)獨(dú)立使用該系統(tǒng)。2熟悉Linux下如何編輯、編譯和運(yùn)行一個(gè)C語(yǔ)言程序。3學(xué)會(huì)利用gcc、gdb編譯、調(diào)試C程序。【預(yù)習(xí)內(nèi)容
2、】1預(yù)習(xí)Linux下各種應(yīng)用程序的使用。2預(yù)習(xí)常用的SHELL命令。3預(yù)習(xí)vi編輯器和emacs編輯器使用方法。4預(yù)習(xí)Linux下C程序編輯、編譯和運(yùn)行過(guò)程?!緦?shí)驗(yàn)內(nèi)容】一、登陸LinuxLinux開(kāi)機(jī),選擇 進(jìn)入,再選擇Linux登陸窗口,輸入用戶(hù)名: students ,輸入密碼: 111111 ,進(jìn)入Linux圖形桌面環(huán)境。二、熟悉Linux圖形桌面環(huán)境桌面包含上方的菜單欄和下方的任務(wù)欄。菜單欄包含“應(yīng)用程序菜單”、“位置”、“系統(tǒng)”。通過(guò)主菜單可訪(fǎng)問(wèn)應(yīng)用程序。(1) “應(yīng)用程序”菜單“應(yīng)用程序”菜單包含“辦公”、“附件”、“互聯(lián)網(wǎng)”、“圖形”、“游戲”等?!稗k公”包含了文字處理及電子表
3、格等應(yīng)用程序。“附件”下包含了“搜索工具”、“計(jì)算器”、“文本編輯器”和“終端”等應(yīng)用程序。(2)“位置”菜單“位置”菜單包含“主文件夾”、“桌面”等信息。(3)“系統(tǒng)”菜單“系統(tǒng)”菜單包含“首選項(xiàng)”和“系統(tǒng)管理”等信息。(4)啟動(dòng)終端模擬器GNOME終端模擬器用一個(gè)窗口來(lái)模擬字符終端的行為。終端常常被稱(chēng)為命令行或者 shell,Linux 中絕大部分工作都可以用命令行完成。要啟動(dòng)一個(gè)終端,可以選擇 應(yīng)用程序 附件 終端。 三、目錄和文件系統(tǒng)1 / 68Linux 和 Unix 文件系統(tǒng)被組織成一個(gè)有層次的樹(shù)形結(jié)構(gòu)。文件系統(tǒng)的最上層是 /,或稱(chēng)為 根目錄。在 Unix 和 Linux 的設(shè)計(jì)理
4、念中,一切皆為文件包括硬盤(pán)、分區(qū)和可插拔介質(zhì)。這就意味著所有其它文件和目錄(包括其它硬盤(pán)和分區(qū))都位于根目錄中。 例如:/home/student/sy1.c 給出了正確的完整路徑,它指向 sy1.c 文件,而該文件位于 student 目錄下,該目錄又位于 home 目錄,最後,home 目錄又位于根(/) 目錄下。 在根 (/) 目錄下,有一組重要的系統(tǒng)目錄,在大部分 Linux 發(fā)行版里都通用。直接位于根 (/) 目錄下的常見(jiàn)目錄列表如下: /bin - 重要的二進(jìn)制 (binary) 應(yīng)用程序 /boot - 啟動(dòng) (boot) 配置文件 /dev - 設(shè)備 (device) 文件 /
5、etc - 配置文件、啟動(dòng)腳本等 (etc) /home - 本地用戶(hù)主 (home) 目錄 /lib - 系統(tǒng)庫(kù) (libraries) 文件 /lost+found - 在根 (/) 目錄下提供一個(gè)遺失+查找(lost+found) 系統(tǒng) /media - 掛載可移動(dòng)介質(zhì) (media),諸如 CD、數(shù)碼相機(jī)等 /mnt - 掛載 (mounted) 文件系統(tǒng) /opt - 提供一個(gè)供可選的 (optional) 應(yīng)用程序安裝目錄 /proc - 特殊的動(dòng)態(tài)目錄,用以維護(hù)系統(tǒng)信息和狀態(tài),包括當(dāng)前運(yùn)行中進(jìn)程 (processes) 信息。 /root - root (root) 用戶(hù)主文件夾
6、,讀作“slash-root” /sbin - 重要的系統(tǒng)二進(jìn)制 (system binaries) 文件 /sys - 系統(tǒng) (system) 文件 /tmp - 臨時(shí)(temporary)文件 /usr - 包含絕大部分所有用戶(hù)(users)都能訪(fǎng)問(wèn)的應(yīng)用程序和文件 /var - 經(jīng)常變化的(variable)文件,諸如日志或數(shù)據(jù)庫(kù)等 四、打開(kāi)PROC目錄了解系統(tǒng)配置把/proc作為當(dāng)前目錄,就可使用ls命令列出它的內(nèi)容。 /proc 文件系統(tǒng)是一種內(nèi)核和內(nèi)核模塊用來(lái)向進(jìn)程 (process) 發(fā)送信息的機(jī)制 。這個(gè)偽文件系統(tǒng)讓你可以和內(nèi)核內(nèi)部數(shù)據(jù)結(jié)構(gòu)進(jìn)行交互,獲取有關(guān)進(jìn)程的有用信息,在運(yùn)
7、行中改變?cè)O(shè)置 (通過(guò)改變內(nèi)核參數(shù))。 與其他文件系統(tǒng)不同,/proc 存在于內(nèi)存之中而不是硬盤(pán)上。1察看 /proc 的文件/proc 的文件可以用于訪(fǎng)問(wèn)有關(guān)內(nèi)核的狀態(tài)、計(jì)算機(jī)的屬性、正在運(yùn)行的進(jìn)程的狀態(tài)等信息。大部分 /proc 中的文件和目錄提供系統(tǒng)物理環(huán)境最新的信息。盡管 /proc 中的文件是虛擬的,但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳駇ore, less或 cat這樣的程序來(lái)查看。2得到有用的系統(tǒng)/內(nèi)核信息2 / 68/proc 文件系統(tǒng)可以被用于收集有用的關(guān)于系統(tǒng)和運(yùn)行中的內(nèi)核的信息。下面是一些重要的文件: /proc/cpuinfo - CPU 的信息 (型號(hào), 家族, 緩存大小等
8、) /proc/meminfo - 物理內(nèi)存、交換空間等的信息 /proc/mounts - 已加載的文件系統(tǒng)的列表 /proc/devices - 可用設(shè)備的列表 /proc/filesystems - 被支持的文件系統(tǒng) /proc/modules - 已加載的模塊 /proc/version - 內(nèi)核版本 /proc/cmdline - 系統(tǒng)啟動(dòng)時(shí)輸入的內(nèi)核命令行參數(shù) proc 中的文件遠(yuǎn)不止上面列出的這么多。想要進(jìn)一步了解的讀者可以對(duì) /proc 的每一個(gè)文件都more一下 。3有關(guān)運(yùn)行中的進(jìn)程的信息/proc 文件系統(tǒng)可以用于獲取運(yùn)行中的進(jìn)程的信息。在 /proc 中有一些編號(hào)的子目錄
9、。每個(gè)編號(hào)的目錄對(duì)應(yīng)一個(gè)進(jìn)程 id (PID)。這樣,每一個(gè)運(yùn)行中的進(jìn)程 /proc 中都有一個(gè)用它的 PID 命名的目錄。這些子目錄中包含可以提供有關(guān)進(jìn)程的狀態(tài)和環(huán)境的重要細(xì)節(jié)信息的文件。/proc 文件系統(tǒng)提供了一個(gè)基于文件的 Linux 內(nèi)部接口。它可以用于確定系統(tǒng)的各種不同設(shè)備和進(jìn)程的狀態(tài)。對(duì)他們進(jìn)行配置。因而,理解和應(yīng)用有關(guān)這個(gè)文件系統(tǒng)的知識(shí)是理解你的 Linux 系統(tǒng)的關(guān)鍵。五、文件權(quán)限Linux 系統(tǒng)上的所有文件都有權(quán)限,以允許或者阻止其它用戶(hù)查閱、修改或者執(zhí)行。超級(jí)用戶(hù)“root”則可以訪(fǎng)問(wèn)系統(tǒng)上的任意文件。每個(gè)文件都有訪(fǎng)問(wèn)限制、用戶(hù)限制以及隸屬于某個(gè)用戶(hù)/組(owner/gr
10、oup)。 所有文件皆有如下三組權(quán)限加以保護(hù),按重要性依次排列: 用戶(hù)(user) :適用于該文件的所有者 組(group) :適用于該文件所屬的組 其他(other) :適用于所有其他用戶(hù) 上述三組權(quán)限信息的每一組都包含了實(shí)際權(quán)限。這些權(quán)限信息,連同它們對(duì)文件和目錄具有的不同含義,概述如下: 讀(read) :允許顯示/打開(kāi)該文件 可以顯示目錄內(nèi)容 寫(xiě)(write) :可以編輯或刪除該文件 可以更改目錄內(nèi)容 可執(zhí)行(execute) :可執(zhí)行文件可以作為程序運(yùn)行 可以進(jìn)入該目錄 例如:ls l普通文件:-rw-r-r- 1 bin bin 2208 May 28 1987 /etc/rc 目
11、錄文件:drwxr-xr-x 2 bin bin 240 Nov 13 1987 dos 特殊文件:brw-r-xr-x 3 bin bin 2,7 Jan 12 15:07 /dev/fd0 c-w-w-w- 2 bin bin 6,0,Jan 11 13:37 /dev/Lp存取權(quán) 所 同 其 有 組 他 者 用 用 戶(hù) 3 / 68注:對(duì)于普通文件,類(lèi)型為-;對(duì)于目錄文件,類(lèi)型為d;在系統(tǒng)目錄/dev下的文件都是特殊文件,如類(lèi)型b代表塊設(shè)備,c代表字符設(shè)備,p代表有名管道文件,s代表套接字文件。用chmod改變文件或目錄的存取權(quán)限:格式:chmod 誰(shuí) 操作符 許可權(quán) 文件名(或目錄名)
12、 a + r g w - x o s u = t u g o其中,a:代表all,即所有的用戶(hù); g:代表group,即小組用戶(hù); o:代表others,即一般用戶(hù); u:代表user,即文件的所有者;+:代表增加許可權(quán);-:代表刪除許可權(quán);=:代表賦予指定的許可權(quán)。例如:$chmod u+w display 完成對(duì)u用戶(hù)增加對(duì)文件display的寫(xiě)權(quán)限。注:上述命令是由文件所有者或超級(jí)用戶(hù)進(jìn)行修改。六、練習(xí)常用的Shell命令。(重點(diǎn))當(dāng)用戶(hù)登錄到字符界面系統(tǒng)或使用終端模擬窗口時(shí),就是在和稱(chēng)為shell的命令解釋程序進(jìn)行通信。當(dāng)用戶(hù)在鍵盤(pán)上輸入一條命令時(shí),shell程序?qū)?duì)命令進(jìn)行解釋并完成
13、相應(yīng)的動(dòng)作。這種動(dòng)作可能是執(zhí)行用戶(hù)的應(yīng)用程序,或者是調(diào)用一個(gè)編輯器、GNU/Linux實(shí)用程序或其他標(biāo)準(zhǔn)程序,或者是一條錯(cuò)誤信息,告訴用戶(hù)輸入了錯(cuò)誤的命令。1目錄操作mkdir abc 創(chuàng)建一個(gè)目錄abccd abc 將工作目錄改變到abccd 改變當(dāng)前目錄到主目錄ls 列出當(dāng)前目錄的內(nèi)容ls -l 輸出當(dāng)前目錄內(nèi)容的長(zhǎng)列表,每個(gè)目錄或文件占一行pwd 顯示當(dāng)前目錄的全路徑2文件顯示實(shí)用程序cat mx.c 顯示mx.c文件內(nèi)容more mx.c 分屏顯示mx.c內(nèi)容tail mx.c 顯示文件后幾行cat file1 file2 連接file1 和file24 / 68head filena
14、me 顯示文件filename的開(kāi)始10行wc filename 統(tǒng)計(jì)文件filename中的行數(shù)、單詞數(shù)和字符數(shù)od 文件 查看非文本文件3文件管理實(shí)用程序cp file1 file2 將文件1復(fù)制到文件2mv file1 file2 將文件重命名為file2rm filename 刪除文件filenamerm -i filename 請(qǐng)求用戶(hù)確認(rèn)刪除4數(shù)據(jù)操作實(shí)用程序 tty 顯示當(dāng)前終端的路徑和文件名 who 顯示當(dāng)前登錄用戶(hù)的列表 sort filename 顯示文件filename中的行的排序結(jié)果 spell filename 檢查文件filename中的拼寫(xiě)錯(cuò)誤5其他實(shí)用程序 da
15、te 輸出系統(tǒng)日期和時(shí)間 cal 顯示本月的日歷。cal 2002 顯示2002年的日歷 clear 清除終端屏幕 history 顯示你以前執(zhí)行過(guò)的命令的列表 man 顯示實(shí)用程序的有用信息,并提供該實(shí)用程序的基本用法 echo 讀取參數(shù)并把它寫(xiě)到輸出七、熟悉vim編輯器在編寫(xiě)文本或計(jì)算機(jī)程序時(shí),需要?jiǎng)?chuàng)建文件、插入新行、重新排列行、修改內(nèi)容等,計(jì)算機(jī)文本編輯器就是用來(lái)完成這些工作的。Vim編輯器的兩種操作模式是命令模式和輸入模式(如圖2所示)。當(dāng)vim處于命令模式時(shí),可以輸入vim命令。例如,可以刪除文本并從vim中退出。在輸入模式下,vim將把用戶(hù)所輸入的任何內(nèi)容都當(dāng)作文本信息,并將它們顯
16、示在屏幕上。vi的工作模式見(jiàn)圖2所示。插入、添加、打開(kāi)、替換或更改命令模式輸入模式最后一行模式ESC冒號(hào)(:)回車(chē)圖2 vi編輯器下的模式命令模式在輸入模式下,按ESC可切換到命令模式。命令模式下,可選用下列指令離開(kāi)vi:5 / 68命令作 用:q!離開(kāi)vi,并放棄剛在緩沖區(qū)內(nèi)編輯的內(nèi)容:wq將緩沖區(qū)內(nèi)的資料寫(xiě)入當(dāng)前文件中,并離開(kāi)vi:ZZ同wq:x同wq:w將緩沖區(qū)內(nèi)的資料寫(xiě)入當(dāng)前文件中,但并不離開(kāi)vi:q離開(kāi)vi,若文件被修改過(guò),則要被要求確認(rèn)是否放棄修改的內(nèi)容,此指令可與:w配合使用命令模式下光標(biāo)的移動(dòng) :命 令作 用h或左箭頭左移一個(gè)字符J下移一個(gè)字符k上移一個(gè)字符l右移一個(gè)字符0移至
17、該行的首$移至該行的末移至該行的第一個(gè)字符處H移至窗口的第一列M移至窗口中間那一列L移至窗口的最后一列G移至該文件的最后一列W, W下一個(gè)單詞 (W 忽略標(biāo)點(diǎn))b, B上一個(gè)單詞 (B 忽略標(biāo)點(diǎn))+移至下一列的第一個(gè)字符處-移至上一列的第一個(gè)字符處(移至該句首)移至該句末移至該段首移至該段末nG移至該文件的第n列輸入模式輸入以下命令即可進(jìn)入vi輸入模式:命 令作 用a(append) 在光標(biāo)之后加入資料A 在該行之末加入資料i(insert)在光標(biāo)之前加入資料I 在該行之首加入資料o(open)新增一行于該行之下,供輸入資料用O新增一行于該行之上,供輸入資料用Dd刪除當(dāng)前光標(biāo)所在行X刪除當(dāng)前光
18、標(biāo)字符X刪除當(dāng)前光標(biāo)之前字符U撤消6 / 68重做F查找s 替換,例如:將文件中的所有FOX換成duck,用:%s/FOX/duck/gESC離開(kāi)輸入模式啟動(dòng)vim命令:命令作用vim filename從第一行開(kāi)始編輯filename文件vim +filename從最后一行開(kāi)始編輯filename文件vim -r filename在系統(tǒng)崩潰之后恢復(fù)filename文件vim -R filename以只讀方式編輯filename文件更多用法見(jiàn) info vi。vim 下程序錄入過(guò)程:$ vim aaa.c 進(jìn)入vim命令模式 i 進(jìn)入輸入模式輸入 C源程序(或文本) ESC 回到命令模式 ZZ
19、保存文件并推出vim CAT aaa.c 顯示aaa.c 文件內(nèi)容八、熟悉gcc編譯器(重點(diǎn))GNU/Linux中通常使用的C編譯器是GNU gcc。編譯器把源程序編譯生成目標(biāo)代碼的任務(wù)分為以下4步: a. 預(yù)處理,把預(yù)處理命令掃描處理完畢; b. 編譯,把預(yù)處理后的結(jié)果編譯成匯編或者目標(biāo)模塊; c. 匯編,把編譯出來(lái)的結(jié)果匯編成具體CPU上的目標(biāo)代碼模塊; d. 連接,把多個(gè)目標(biāo)代碼模塊連接生成一個(gè)大的目標(biāo)模塊; 1使用語(yǔ)法:gcc option | filename . 其中 option 為 gcc 使用時(shí)的選項(xiàng),而 filename 為 gcc要處理的文件。 2GCC選項(xiàng) GCC的選項(xiàng)
20、有很多類(lèi),這類(lèi)選項(xiàng)控制著GCC程序的運(yùn)行,以達(dá)到特定的編譯目的。 全局選項(xiàng)(OVERALL OPTIONS) 全局開(kāi)關(guān)用來(lái)控制在“GCC功能介紹”中的GCC的4個(gè)步驟的運(yùn)行,在缺省的情況下,這4個(gè)步驟都是要執(zhí)行的,但是當(dāng)給定一些全局開(kāi)關(guān)后,這些步驟就會(huì)在 某一步停止執(zhí)行,這產(chǎn)生中間結(jié)果,例如可能你只是需要中間生成的預(yù)處理的結(jié)果或者是匯編文件(比如你的目的是為了看某個(gè)CPU上的匯編語(yǔ)言怎么寫(xiě))。 x language 對(duì)于源文件是用什么語(yǔ)言編寫(xiě)的,可以通過(guò)文件名的后綴來(lái)標(biāo)示,也可以用這開(kāi)關(guān)。指定輸入文件是什么語(yǔ)言編寫(xiě)的,language 可以是如下的內(nèi)容 a. c b. objective-c
21、c. c-header 7 / 68d. c+ e.cpp-output f.assembler g.assembler-with-cpp x none 把-x開(kāi)關(guān)都給關(guān)掉了。 c 編譯成把源文件目標(biāo)代碼,不做連接的動(dòng)作。 S 把源文件編譯成匯編代碼,不做匯編和連接的動(dòng)作。 E 只把源文件進(jìn)行預(yù)處理之后的結(jié)果輸出來(lái)。不做編譯,匯編,連接的動(dòng)作。 o file (常用)指明輸出文件名是file。 v 把整個(gè)編譯過(guò)程的輸出信息都給打印出來(lái)。 pipe 由于gcc的工作分為好幾步才完成,所以需要在過(guò)程中生成臨時(shí)文件,使用-pipe就是用管道替換臨時(shí)文件。 語(yǔ)言相關(guān)選項(xiàng)(Language Option
22、s) 用來(lái)處理和語(yǔ)言相關(guān)的選項(xiàng)。 ansi 這個(gè)開(kāi)關(guān)讓GCC編譯器把所有的GNU的編譯器特性都給關(guān)掉,讓你的程序可以和ansi標(biāo)準(zhǔn)兼容。 include file 在編譯之前,把file包含進(jìn)去,相當(dāng)于在所有編譯的源文件最前面加入了一個(gè)#include 語(yǔ)句, C 同-E參數(shù)配合使用。讓預(yù)處理后的結(jié)果,把注釋保留,讓人能夠比較好讀它。 連接開(kāi)關(guān)(Linker Options) 用來(lái)控制連接過(guò)程的開(kāi)關(guān)選項(xiàng)。 llibrary 連接庫(kù)文件開(kāi)關(guān)。例如-lugl,則是把程序同libugl.a文件進(jìn)行連接。 lobjc 這個(gè)開(kāi)關(guān)用在面向?qū)ο蟮腃語(yǔ)言文件的庫(kù)文件處理中。 nostartfiles 在連接的
23、時(shí)候不把系統(tǒng)相關(guān)的啟動(dòng)代碼連接進(jìn)來(lái)。 nostdlib 在連接的時(shí)候不把系統(tǒng)相關(guān)的啟動(dòng)文件和系統(tǒng)相關(guān)的庫(kù)連接進(jìn)來(lái)。 static 在一些系統(tǒng)上支持動(dòng)態(tài)連接,這個(gè)開(kāi)關(guān)則不允許動(dòng)態(tài)連接。 shared 生成可共享的被其他程序連接的目標(biāo)模塊。 目錄相關(guān)開(kāi)關(guān)(Directory Options) 用于定義與目錄操作相關(guān)的開(kāi)關(guān)。 8 / 68Ldir 搜尋庫(kù)文件(*.a)的路徑。 調(diào)試開(kāi)關(guān)(Debugging Options) g 把調(diào)試開(kāi)關(guān)打開(kāi),讓編譯的目標(biāo)文件有調(diào)試信息。 V version 用來(lái)告訴編譯器使用它的多少版本的功能,version參數(shù)用來(lái)表示版本。 九、掌握Linux下C程序編輯運(yùn)行過(guò)
24、程(重點(diǎn))Linux下編寫(xiě)C程序要經(jīng)過(guò)以下幾個(gè)步驟:?jiǎn)?dòng)常用的編輯器,鍵入C源程序代碼。例如,點(diǎn)擊應(yīng)用程序/附件/文本編輯器,進(jìn)入編輯環(huán)境,輸入C源程序,保存并命名為hello.c# include void main(void)Printf(“Hello world!n”);編譯源程序點(diǎn)擊應(yīng)用程序/附件/終端,進(jìn)入命令行。用gcc編譯器對(duì)C源程序進(jìn)行編譯,以生成一個(gè)可執(zhí)行文件。方法:gcc -o hello.out hello.c 運(yùn)行可執(zhí)行文件 /hello.out 注:命令行中 -o選項(xiàng)表示要求編譯器輸出可執(zhí)行文件名為hello.out文件,hello.c是源程序文件?!緦?shí)驗(yàn)報(bào)告】1舉例
25、列出常用的shell命令使用方法。2通過(guò)實(shí)例總結(jié)上機(jī)調(diào)試C語(yǔ)言程序的過(guò)程及此次上機(jī)的感想。9 / 68實(shí)驗(yàn)二 shell腳本【實(shí)驗(yàn)?zāi)康摹?、了解和熟悉創(chuàng)建并使用腳本的步驟。2、熟悉bash的控制結(jié)構(gòu)。3、學(xué)會(huì)簡(jiǎn)單的shell編程?!緦?shí)驗(yàn)內(nèi)容】1、 創(chuàng)建一個(gè)簡(jiǎn)單的列目錄和日期的shell腳本并運(yùn)行之。步驟:輸入下列命令,創(chuàng)建一個(gè)新文件: cat new_scrip輸入下列行: echo “Your files are” ls echo “today is” date按回車(chē)鍵將光標(biāo)移到一個(gè)新行,按Ctrl+D鍵保存并退出。檢查文件內(nèi)容,確保它是正確的: cat new_script運(yùn)行腳本,輸入它
26、的文件名: new_script該腳本不運(yùn)行。輸入下列命令,顯示文件的權(quán)限:ls l new _script權(quán)限表明該文件不是可執(zhí)行。要通過(guò)簡(jiǎn)單調(diào)用文件名來(lái)運(yùn)行腳本,必須有權(quán)限。輸入下列命令,使new_script變成可執(zhí)行文件。 chmod +x new_script要查看新的權(quán)限,輸入: ls l現(xiàn)在擁有文件的讀、寫(xiě)和執(zhí)行權(quán)限。輸入新腳本的名字以執(zhí)行它: new_script所有輸入到文件的命令都執(zhí)行,并輸出到屏幕上。如果接收到錯(cuò)誤信息,比如: command not found輸入下列命令:./new_script該命令行通知shell到哪里尋找shell腳本new_script,即您的
27、當(dāng)前目錄“.”。2、 用Shell語(yǔ)言編制一Shell程序,該程序在用戶(hù)輸入年、月之后,自動(dòng)打印數(shù)出該年該月的日歷。10 / 68echo “Please input the month:”read monthecho “Please input the year:”read yearcal $month $year3、 編程提示用戶(hù)輸入兩個(gè)單詞,并將其讀入,然后比較這兩個(gè)單詞,如果兩個(gè)單詞相同則顯示“Match”,并顯示“End of program”,如果不同則顯示“End of program”。Iftest-commandthencommandTurefiFalse $ cat if1
28、echo n “word 1:”read word1echo n “word 2:”read word2if test “$word1” = “$word2” then echo “Match”fiecho “End of program.”ifthen控制結(jié)構(gòu)的語(yǔ)法是:if test_command圖3.1 ifthen流程圖 then commandsfi其中test_command為test “$word1” = “$word2”, test是一個(gè)內(nèi)置命令,如果它的第一個(gè)參數(shù)和第三個(gè)參數(shù)存在第二個(gè)參數(shù)所指定的關(guān)系,那么test將返回ture。Shell將執(zhí)行then和fi之間的命令。否則
29、執(zhí)行fi后面語(yǔ)句。、修改上述程序,編程提示用戶(hù)輸入兩個(gè)單詞,并將其讀入,然后比較這兩個(gè)單詞,如果兩個(gè)單詞相同顯示“Match”,不同則顯示“Not match”,最后顯示“End of program”。請(qǐng)使用ifthenelse控制結(jié)構(gòu)。、編程使用case結(jié)構(gòu)創(chuàng)建一個(gè)簡(jiǎn)單的菜單,屏幕顯示菜單:a. Current date and timeb. User currently logged inc. Name of the working directoryd. Contents of the working directoryEnter a,b,c or d:根據(jù)用戶(hù)輸入選項(xiàng)做相應(yīng)操作。ec
30、ho e “nCOMMAND MENUn”11 / 68echo “ a. Current date and time”echo “ b. User currently logged in”echo “ c. Name of the working directory”echo “ d. Contents of the working directoryn”echo n “Enter a,b,c or d:”read answerechocase “$answer” ina)date;b)who;c)pwd;d)ls;*)Echo “There is no selection : $answe
31、r”;esac6、修改上題,使用戶(hù)可以連續(xù)選擇直到想退出時(shí)才退出。7、編程使用select結(jié)構(gòu)生成一個(gè)菜單如下:1)apple3)blueberry5)orange 7)STOP2) banana4)kiwi6)watermelonChoose your favorite fruit from these possibilities: 用戶(hù)輸入所選項(xiàng),如 1 顯示:You chose apple as you favorite.That is choice number 1. #!/bin/bashps3=“Chose your favorite fruit from these possib
32、ilities:”select FRUIT in apple banana blueberry kiwi orange watermelon STOP doif $FRUIT = STOP then echo “Thanks for playing!”breakfiecho “You chose $FRUIT as you favorite.”echo “That is choice number $REPLY.”echo12 / 68doneselect 結(jié)構(gòu)的語(yǔ)法如下:select varnamein argdo commandsdoneREPLY是鍵盤(pán)變量?!舅伎碱}】1、什么選項(xiàng)通知rm
33、、cp和mv在刪除或覆蓋文件前得到用戶(hù)的確認(rèn)?2、如何確認(rèn)自己在主目錄中?然后再主目錄中創(chuàng)建一個(gè)名為Dannty的目錄,再進(jìn)入到Danny目錄,并確認(rèn)你的位置?3、命令echo$PATH的輸出是什么?4、下列命令的運(yùn)行結(jié)果是什么?who | grep $USERgrep $HOME file1【實(shí)驗(yàn)報(bào)告】1列出調(diào)試通過(guò)程序的清單,并加注釋。2回答思考題。3總結(jié)上機(jī)調(diào)試過(guò)程中所遇到的問(wèn)題和解決方法及感想。【實(shí)驗(yàn)相關(guān)資料】創(chuàng)建并使用腳本的步驟:創(chuàng)建shell命令文件。使用chmod命令使文件可執(zhí)行。通過(guò)輸入腳本文件名執(zhí)行文件。 在執(zhí)行腳本時(shí),shell讀取腳本并按其指示執(zhí)行。它逐行執(zhí)行腳本,就像這
34、些行是從鍵盤(pán)輸入的一樣。腳本中所有的實(shí)用程序都執(zhí)行。13 / 68實(shí)驗(yàn)三 進(jìn)程控制【實(shí)驗(yàn)?zāi)康摹?、掌握進(jìn)程的概念,明確進(jìn)程和程序的區(qū)別。2、認(rèn)識(shí)和了解并發(fā)執(zhí)行的實(shí)質(zhì)。3、分析進(jìn)程爭(zhēng)用資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法?!緦?shí)驗(yàn)內(nèi)容】1、進(jìn)程的創(chuàng)建(必做題) 編寫(xiě)一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程,在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每個(gè)進(jìn)程在屏幕上顯示一個(gè)字符;父進(jìn)程顯示字符“a”,子進(jìn)程分別顯示字符“b” 和“c”。試觀(guān)察記錄屏幕上的顯示結(jié)果,并分析原因。 # include main() int p1, p2; while(p1=fork()= = -1); if(p1=
35、 =0) putchar(b); else while(p2=fork()= =-1); if(p2= =0) putchar(c); else putchar( a); 2、 修改已編寫(xiě)的程序,將每個(gè)進(jìn)程的輸出由單個(gè)字符改為一句話(huà),再觀(guān)察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。(必做題)# includemain() int p1, p2, i; while(p1=fork()= = -1); if(p1= =0) for(i=0;i500;i+) printf(“child%dn”,i); else while(p2=fork()= =-1); If(p2= =0)14 / 68 for
36、(i=0;i500;i+) printf(“son%dn”,i); else for(i=0;i500;i+) printf(“daughter%dn”,i); 3、編寫(xiě)程序創(chuàng)建進(jìn)程樹(shù)如圖1和圖2所示,在每個(gè)進(jìn)程中顯示當(dāng)前進(jìn)程識(shí)別碼和父進(jìn)程識(shí)別碼。(必做題)a父進(jìn)程子進(jìn)程圖1 進(jìn)程樹(shù)bcdadbce圖2 進(jìn)程樹(shù)【思考題】1、系統(tǒng)是怎樣創(chuàng)建進(jìn)程的?2、當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里?3、當(dāng)前運(yùn)行的程序(主進(jìn)程)的父進(jìn)程是什么?【實(shí)驗(yàn)報(bào)告】1、列出調(diào)試通過(guò)程序的清單,分析運(yùn)行結(jié)果。2、給出必要的程序設(shè)計(jì)思路和方法(或列出流程圖)。3、回答思考題。4、總結(jié)上機(jī)調(diào)試過(guò)程中所遇到的問(wèn)題和解決方法及
37、感想?!緦?shí)驗(yàn)相關(guān)資料】一、進(jìn)程概念1進(jìn)程 UNIX中,進(jìn)程既是一個(gè)獨(dú)立擁有資源的基本單位,又是一個(gè)獨(dú)立調(diào)度的基本單位。一個(gè)進(jìn)程實(shí)體由若干個(gè)區(qū)(段)組成,包括程序區(qū)、數(shù)據(jù)區(qū)、棧區(qū)、共享存儲(chǔ)區(qū)等。每個(gè)區(qū)又分為若干頁(yè),每個(gè)進(jìn)程配置有唯一的進(jìn)程控制塊PCB,用于控制和管理進(jìn)程。PCB的數(shù)據(jù)結(jié)構(gòu)如下: 進(jìn)程表項(xiàng)(Process Table Entry)。 包括一些最常用的核心數(shù)據(jù),如: 進(jìn)程標(biāo)識(shí)符PID、用戶(hù)標(biāo)識(shí)符UID、進(jìn)程狀態(tài)、事件描述符、進(jìn)程和U區(qū)在內(nèi)存或外存的地址、軟中斷信號(hào)、計(jì)時(shí)域、進(jìn)程的大小、偏置值nice、指向就緒隊(duì)列中下一個(gè)PCB的指針P_Link、指向U區(qū)進(jìn)程正文、數(shù)據(jù)及棧在內(nèi)存區(qū)域的
38、指針。 U區(qū)(U Area)。15 / 68 用于存放進(jìn)程表項(xiàng)的一些擴(kuò)充信息。每一個(gè)進(jìn)程都有一個(gè)私用的U區(qū),其中含有:進(jìn)程表項(xiàng)指針、真正用戶(hù)標(biāo)識(shí)符u-ruid(read user ID)、有效用戶(hù)標(biāo)識(shí)符u-euid(effective user ID)、用戶(hù)文件描述符表、計(jì)時(shí)器、內(nèi)部I/O參數(shù)、限制字段、差錯(cuò)字段、返回值、信號(hào)處理數(shù)組。 由于UNIX系統(tǒng)采用段頁(yè)式存儲(chǔ)管理,為了把段的起始虛地址變換為段在系統(tǒng)中的物理地址,便于實(shí)現(xiàn)區(qū)的共享,所以還有: 系統(tǒng)區(qū)表項(xiàng)。 以存放各個(gè)段在物理存儲(chǔ)器中的位置等信息。系統(tǒng)把一個(gè)進(jìn)程的虛地址空間劃分為若干個(gè)連續(xù)的邏輯區(qū),有正文區(qū)、數(shù)據(jù)區(qū)、棧區(qū)等。這些區(qū)是可被共
39、享和保護(hù)的獨(dú)立實(shí)體,多個(gè)進(jìn)程可共享一個(gè)區(qū)。為了對(duì)區(qū)進(jìn)行管理,核心中設(shè)置一個(gè)系統(tǒng)區(qū)表,各表項(xiàng)中記錄了以下有關(guān)描述活動(dòng)區(qū)的信息:區(qū)的類(lèi)型和大小、區(qū)的狀態(tài)、區(qū)在物理存儲(chǔ)器中的位置、引用計(jì)數(shù)、指向文件索引結(jié)點(diǎn)的指針。 進(jìn)程區(qū)表 系統(tǒng)為每個(gè)進(jìn)程配置了一張進(jìn)程區(qū)表。表中,每一項(xiàng)記錄一個(gè)區(qū)的起始虛地址及指向系統(tǒng)區(qū)表中對(duì)應(yīng)的區(qū)表項(xiàng)。核心通過(guò)查找進(jìn)程區(qū)表和系統(tǒng)區(qū)表,便可將區(qū)的邏輯地址變換為物理地址。2 進(jìn)程映像 UNIX系統(tǒng)中,進(jìn)程是進(jìn)程映像的執(zhí)行過(guò)程,也就是正在執(zhí)行的進(jìn)程實(shí)體。它由三部分組成: 用戶(hù)級(jí)上、下文。主要成分是用戶(hù)程序; 寄存器上、下文。由CPU中的一些寄存器的內(nèi)容組成,如PC,PSW,SP及通用寄
40、存器等; 系統(tǒng)級(jí)上、下文。包括OS為管理進(jìn)程所用的信息,有靜態(tài)和動(dòng)態(tài)之分。3進(jìn)程樹(shù) 在UNIX系統(tǒng)中,只有0進(jìn)程是在系統(tǒng)引導(dǎo)時(shí)被創(chuàng)建的,在系統(tǒng)初啟時(shí)由0進(jìn)程創(chuàng)建1進(jìn)程,以后0進(jìn)程變成對(duì)換進(jìn)程,1進(jìn)程成為系統(tǒng)中的始祖進(jìn)程。UNIX利用fork( )為每個(gè)終端創(chuàng)建一個(gè)子進(jìn)程為用戶(hù)服務(wù),如等待用戶(hù)登錄、執(zhí)行SHELL命令解釋程序等,每個(gè)終端進(jìn)程又可利用fork( )來(lái)創(chuàng)建其子進(jìn)程,從而形成一棵進(jìn)程樹(shù)。可以說(shuō),系統(tǒng)中除0進(jìn)程外的所有進(jìn)程都是用fork( )創(chuàng)建的。二、所涉及的中斷調(diào)用1、fork( ) 創(chuàng)建一個(gè)新的子進(jìn)程。其子進(jìn)程會(huì)復(fù)制父進(jìn)程的數(shù)據(jù)與堆??臻g,并繼承父進(jìn)程的用戶(hù)代碼、組代碼、環(huán)境變量、
41、已打開(kāi)的文件代碼、工作目錄和資源限制。系統(tǒng)調(diào)用格式: int fork() 如果Fork成功則在父進(jìn)程會(huì)返回新建立的子進(jìn)程代碼(PID),而在新建立的子進(jìn)程中則返回0。如果fork失敗則直接返回-1。2、wait( ) 等待子進(jìn)程運(yùn)行結(jié)束。如果子進(jìn)程沒(méi)有完成,父進(jìn)程一直等待。wait( )將調(diào)用進(jìn)程掛起,直至其子進(jìn)程因暫?;蚪K止而發(fā)來(lái)軟中斷信號(hào)為止。如果在wait( )前已有子進(jìn)程暫停或終止,則調(diào)用進(jìn)程做適當(dāng)處理后便返回。系統(tǒng)調(diào)用格式:int wait(status)16 / 68int *status; 其中,status是用戶(hù)空間的地址。它的低8位反應(yīng)子進(jìn)程狀態(tài),為0表示子進(jìn)程正常結(jié)束,非
42、0則表示出現(xiàn)了各種各樣的問(wèn)題;高8位則帶回了exit( )的返回值。exit( )返回值由系統(tǒng)給出。核心對(duì)wait( )作以下處理:(1)首先查找調(diào)用進(jìn)程是否有子進(jìn)程,若無(wú),則返回出錯(cuò)碼;(2)若找到一處于“僵死狀態(tài)”的子進(jìn)程,則將子進(jìn)程的執(zhí)行時(shí)間加到父進(jìn)程的執(zhí)行時(shí)間上,并釋放子進(jìn)程的進(jìn)程表項(xiàng);(3)若未找到處于“僵死狀態(tài)”的子進(jìn)程,則調(diào)用進(jìn)程便在可被中斷的優(yōu)先級(jí)上睡眠,等待其子進(jìn)程發(fā)來(lái)軟中斷信號(hào)時(shí)被喚醒。3、exit( )終止進(jìn)程的執(zhí)行。系統(tǒng)調(diào)用格式: void exit(status) int status; 其中,status是返回給父進(jìn)程的一個(gè)整數(shù),以備查考。為了及時(shí)回收進(jìn)程所占用的資
43、源并減少父進(jìn)程的干預(yù),UNIX/LINUX利用exit( )來(lái)實(shí)現(xiàn)進(jìn)程的自我終止,通常父進(jìn)程在創(chuàng)建子進(jìn)程時(shí),應(yīng)在進(jìn)程的末尾安排一條exit( ),使子進(jìn)程自我終止。exit(0)表示進(jìn)程正常終止,exit(1)表示進(jìn)程運(yùn)行有錯(cuò),異常終止。 如果調(diào)用進(jìn)程在執(zhí)行exit( )時(shí),其父進(jìn)程正在等待它的終止,則父進(jìn)程可立即得到其返回的整數(shù)。核心須為exit( )完成以下操作:(1)關(guān)閉軟中斷(2)回收資源(3)寫(xiě)記帳信息(4)置進(jìn)程為“僵死狀態(tài)”17 / 68實(shí)驗(yàn)四 進(jìn)程間通信-信號(hào)量機(jī)制實(shí)驗(yàn) UNIX/LINUX系統(tǒng)的進(jìn)程間通信機(jī)構(gòu)(IPC)允許在任意進(jìn)程間大批量地交換數(shù)據(jù)。本實(shí)驗(yàn)的目的是了解和熟悉
44、LINUX支持的信號(hào)量機(jī)制、管道機(jī)制、消息通信機(jī)制及共享存儲(chǔ)區(qū)機(jī)制?!緦?shí)驗(yàn)?zāi)康摹?、了解什么是信號(hào)。2、熟悉LINUX系統(tǒng)中進(jìn)程之間軟中斷通信的基本原理?!緦?shí)驗(yàn)內(nèi)容】1、編寫(xiě)一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal( )讓父進(jìn) 程捕捉鍵盤(pán)上來(lái)的中斷信號(hào)(即按ctrl+c鍵),當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill( )向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后,分別輸出下列信息后終止: Child process 1 is killed by parent!Child process 2 is killed by parent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后
45、,輸出以下信息后終止: Parent process is killed! #include#include#include#include#includeint wait_mark;void waiting(),stop();void main()int p1, p2;signal(SIGINT,stop);while(p1=fork()=-1);if(p10)/*在父進(jìn)程中*/while(p2=fork()=-1); If(p20)/*在父進(jìn)程中*/ wait_mark=1; waiting(0); kill(p1,10); kill(p2,12); wait( ); wait( ); p
46、rintf(parent process is killed!n); exit(0);18 / 68 else/*在子進(jìn)程2中*/ wait_mark=1;signal(12,stop);waiting();lockf(1,1,0);printf(child process 2 is killed by parent!n);lockf(1,0,0);exit(0); else/*在子進(jìn)程1中*/ wait_mark=1; signal(10,stop); waiting(); lockf(1,1,0); printf(child process 1 is killed by parent!n)
47、; lockf(1,0,0); exit(0);void waiting() while(wait_mark!=0);void stop() wait_mark=0;實(shí)驗(yàn)要求:、運(yùn)行程序并分析結(jié)果。、如果把signal(SIGINT,stop)放在號(hào)和號(hào)位置,結(jié)果會(huì)怎樣并分析原因。、該程序段前面部分用了兩個(gè)wait(0),為什么?、該程序段中每個(gè)進(jìn)程退出時(shí)都用了語(yǔ)句exit(0),為什么?2、修改上面的程序,增加語(yǔ)句signal(SIGINT,SIG_IGN)和語(yǔ)句signal(SIGQUIT,SIG_IGN),再觀(guān)察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。# include# includ
48、e# includemain()19 / 68 int pid1, pid2;int EndFlag=0; Pf1=0; Pf2=0;void IntDelete() kill(pid1,10); kill(pid2,12);EndFlag=1;void Int1() printf(“child process 1 is killed by parent !n”); exit(0);void Int2() printf(“child process 2 is killed by parent !n”); exit(0);main() int exitcode; signal(SIGINT,SIG_IGN); signal(SIGQUIT,SIG_IGN);while(pid1=fork()=-1); if(pid=0) signal(SIGUSER1,Int1);signal(SIGQUIT,SIG_IGN);pause();exit(0); else while(pid2=fork()= =-1); if(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個(gè)人藝術(shù)培訓(xùn)分期付款協(xié)議書(shū)4篇
- 2025年度環(huán)保型建筑渣土處理承包協(xié)議12篇
- 二零二五年度物流貨車(chē)承包管理合同4篇
- 二零二五年度藝術(shù)裝飾欄桿定制與安裝服務(wù)協(xié)議3篇
- 2025年度打字員與影視制作公司勞動(dòng)合同范本4篇
- 2025年度智能門(mén)禁系統(tǒng)工程承包合同4篇
- 二零二五年度美容美發(fā)店員工培訓(xùn)合作協(xié)議4篇
- 二零二五版門(mén)禁系統(tǒng)與無(wú)線(xiàn)網(wǎng)絡(luò)覆蓋合同4篇
- 二零二五版水利工程建設(shè)項(xiàng)目施工合同范本6篇
- 二零二五版互聯(lián)網(wǎng)行業(yè)非全日制員工合作協(xié)議3篇
- 安徽省合肥市包河區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題
- 《酸堿罐區(qū)設(shè)計(jì)規(guī)范》編制說(shuō)明
- PMC主管年終總結(jié)報(bào)告
- 售樓部保安管理培訓(xùn)
- 倉(cāng)儲(chǔ)培訓(xùn)課件模板
- 2025屆高考地理一輪復(fù)習(xí)第七講水循環(huán)與洋流自主練含解析
- GB/T 44914-2024和田玉分級(jí)
- 2024年度企業(yè)入駐跨境電商孵化基地合作協(xié)議3篇
- 《形勢(shì)與政策》課程標(biāo)準(zhǔn)
- 2023年海南省公務(wù)員錄用考試《行測(cè)》真題卷及答案解析
- 橋梁監(jiān)測(cè)監(jiān)控實(shí)施方案
評(píng)論
0/150
提交評(píng)論