久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

操作系統(tǒng)命令接口設(shè)計(jì)課程設(shè)計(jì)說明書

時(shí)間:2019-05-14 03:02:16下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《操作系統(tǒng)命令接口設(shè)計(jì)課程設(shè)計(jì)說明書》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《操作系統(tǒng)命令接口設(shè)計(jì)課程設(shè)計(jì)說明書》。

第一篇:操作系統(tǒng)命令接口設(shè)計(jì)課程設(shè)計(jì)說明書

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

課程設(shè)計(jì)說明書

設(shè)計(jì)名稱:操作系統(tǒng)課程設(shè)計(jì)

題目:操作系統(tǒng)命令接口設(shè)計(jì)

學(xué)生姓名: 專業(yè): 班級(jí): 學(xué)號(hào): 指導(dǎo)教師:

日期: 2016 年 6 月 28 日 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

課程設(shè)計(jì)任務(wù)書

網(wǎng)絡(luò)工程專業(yè)年級(jí)班一、二、主要內(nèi)容

利用C語言、DOS中斷中21H與屏幕顯示相關(guān)的中斷調(diào)用完成設(shè)計(jì),具體包括:

1、命令解釋器

2、列目錄命令

3、顯示時(shí)間命令

4、顯示日期命令

5、回顯字符串命令

6、創(chuàng)建目錄命令

7、刪除目錄命令

8、更改路徑命令

9、顯示當(dāng)前工作目錄命令

10、刪除文件命令

11、打印文本命令

12、文件重新命名

13、顯示文本命令

14、顯示版本命令

15、顯示目錄結(jié)構(gòu)命令

16、清除當(dāng)前顯示內(nèi)容命令

上述內(nèi)容中,所有命令通過命令解釋器能夠執(zhí)行,即啟動(dòng)命令解釋器以后,輸入相應(yīng)命令,按照輸入指令執(zhí)行相應(yīng)功能,并在屏幕上顯示相應(yīng)結(jié)果。設(shè)計(jì)題目

操作系統(tǒng)命令接口設(shè)計(jì)

三、具體要求

本設(shè)計(jì)的目的是通過設(shè)計(jì)一些簡(jiǎn)單的操作系統(tǒng)的命令接口,使學(xué)生掌握操作系統(tǒng)接口的設(shè)計(jì)方法。要求學(xué)生在熟悉操作系統(tǒng)的命令接口及程序接口的基礎(chǔ)上,利用C語言設(shè)計(jì)簡(jiǎn)單的命令接口。命令接口基于DOS的命令行接口。

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

四、進(jìn)度安排

1.要求講解、資料查找、系統(tǒng)分析,概要設(shè)計(jì)(2天)2.系統(tǒng)詳細(xì)設(shè)計(jì)、功能設(shè)計(jì)(2天)3.算法實(shí)現(xiàn)、編程調(diào)試(5天)

4.功能演示、資料整理、課程設(shè)計(jì)說明書編寫。(1天)依照教學(xué)計(jì)劃,課程設(shè)計(jì)時(shí)間為:2周。五、六、指導(dǎo)教師

簽名日期 年 月 日

系主任

審核日期 年 月 日 完成后應(yīng)上交的材料

課程設(shè)計(jì)說明書紙質(zhì)文檔

總評(píng)成績(jī) 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

目 錄

一、程序概述...........................................................................................................................................................1 1.1完成的任務(wù)...............................................................................................................................................1 1.2解決的問題.............................................................................................................錯(cuò)誤!未定義書簽。

二、概念原理...........................................................................................................................................................1 2.1基本概念...................................................................................................................................................1 2.2基本原理...................................................................................................................................................1

三、總體設(shè)計(jì)...........................................................................................................................................................2

四、詳細(xì)設(shè)計(jì)...........................................................................................................................................................3 4.1主要調(diào)用DOS的功能號(hào)...........................................................................................................................3 4.2主要函數(shù)...................................................................................................................................................3

五、完成情況...........................................................................................................................................................3

六、使用說明...........................................................................................................................................................4

七、設(shè)計(jì)總結(jié)...........................................................................................................................................................7 7.1系統(tǒng)特色...................................................................................................................................................7 7.2實(shí)踐感受...................................................................................................................................................4 參考資料...................................................................................................................................................................5 附錄(程序源代碼)...............................................................................................................................................9

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

一、程序概述

1.1完成的任務(wù)

本設(shè)計(jì)是要求編寫一個(gè)簡(jiǎn)單的命令解釋器,利用C語言、DOS中斷中21H與屏幕顯示相關(guān)的中斷調(diào)用進(jìn)行設(shè)計(jì)的,主要完成要求中所提到的功能如:可打開提示符,并獲取用戶輸入的指令、可解析指令、可尋找命令文件、可執(zhí)行基本的命令。在本設(shè)計(jì)中,設(shè)計(jì)了一個(gè)dos命令提示行,主要完成的功能有:顯示系統(tǒng)時(shí)間和日期,顯示系統(tǒng)版本號(hào),刪除文件,創(chuàng)建目錄,刪除目錄,重命名目錄或文件名,回顯字符串,打印文件,清屏等功能。

1.2解決的問題

在設(shè)計(jì)過程中主要遇到了兩個(gè)難題,一是如何理解和設(shè)計(jì)中斷,對(duì)匯編和c語言的結(jié)合,如引入#include,#include;二是如何使用中斷函數(shù)如int86(),int86x(),int dos(),int 等。里面主要的是結(jié)構(gòu)體SREGS,聯(lián)合體REGS,以及匯編語言int 21H系統(tǒng)調(diào)用中斷,以及調(diào)用功能號(hào)的查詢和設(shè)置。

二、概念原理

2.1基本概念

中斷

當(dāng)CPU(中央處理器)執(zhí)行一條現(xiàn)行指令的時(shí)候,出現(xiàn)必須CPU立即執(zhí)行處理的情況,CPU暫時(shí)停止當(dāng)前程序的執(zhí)行轉(zhuǎn)而而執(zhí)行新情況叫中斷,此時(shí)如果外設(shè)向CPU發(fā)出中斷請(qǐng)求,那么CPU在滿足響應(yīng)的情況下,將發(fā)出中斷響應(yīng)信號(hào),與此同時(shí)關(guān)閉中斷,表示CPU不在受理另外一個(gè)設(shè)備的中斷。此次課程設(shè)計(jì)涉及有DOS中斷和BIOS中斷。

命令接口處理器

命令處理器是一個(gè)讀入并解釋你輸入的命令的程序,它是介于使用者和操作系統(tǒng)之核心程序(kernel)間的一個(gè)接口。它是一個(gè)交互性命令解釋器。命令處理器獨(dú)立于操作系統(tǒng),這種設(shè)計(jì)讓用戶可以靈活選擇適合自己的命令處理器。命令處理器讓你在命令行鍵入命令,經(jīng)過命令處理器解釋后傳送給操作系統(tǒng)(內(nèi)核)執(zhí)行。

命令提示符

“命令提示符”也就是Windows 95/98 下的“MS-DOS方式”,雖然隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展,Windows 操作系統(tǒng)的應(yīng)用越來越廣泛,DOS 面臨著被淘汰的命運(yùn),但是因?yàn)樗\(yùn)行安全、穩(wěn)定,有的用戶還在使用,所以一般Windows 的各種版本都與其兼容,用戶可以在Windows系統(tǒng)下運(yùn)行DOS,中文版Windows XP 中的命令提示符進(jìn)一步提高了與DOS下操作命令的兼容性,用戶可以在命令提示符直接輸入中文調(diào)用文件。

消息循環(huán)

通過這個(gè)循環(huán)機(jī)制應(yīng)用程序從消息隊(duì)列中檢索消息,再把它分派給適當(dāng)?shù)拇翱冢缓罄^續(xù)從消息隊(duì)列中檢索下一條消息,再分派給適當(dāng)?shù)拇翱冢来芜M(jìn)行。

系統(tǒng)調(diào)用

系統(tǒng)調(diào)用,顧名思義,說的是操作系統(tǒng)提供給用戶程序調(diào)用的一組“特殊”接口。用戶程序可以通過這組“特殊”接口來獲得操作系統(tǒng)內(nèi)核提供的服務(wù),比如用戶可以通過文件系統(tǒng)相關(guān)的調(diào)用請(qǐng)求系統(tǒng)打開文件、關(guān)閉文件或讀寫文件,可以通過時(shí)鐘相關(guān)的系統(tǒng)調(diào)用獲得系統(tǒng)時(shí)間或設(shè)置定時(shí)器等。

從邏輯上來說,系統(tǒng)調(diào)用可被看成是一個(gè)內(nèi)核與用戶空間程序交互的接口,它好比一個(gè)中間人,把用戶進(jìn)程的請(qǐng)求傳達(dá)給內(nèi)核,待內(nèi)核把請(qǐng)求處理完畢后再將處理結(jié)果送回給用戶空間。

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

2.2基本原理

首先進(jìn)入一個(gè)消息循環(huán),不斷地接收消息,根據(jù)輸入的命令進(jìn)行解析,然后執(zhí)行命令,遇exit命令退出。

基本流程圖:

開始輸入指令否判斷指令是否存在或者輸入正確?是命令解釋器顯示系統(tǒng)時(shí)間顯示系統(tǒng)日期顯示版本號(hào)刪除文件創(chuàng)建目錄刪除目錄重命名目錄重命名文件回顯字符串打印文件內(nèi)容清除屏幕內(nèi)容否退出?是結(jié)束

三、總體設(shè)計(jì)

程序主要通過文件來存儲(chǔ)帳戶信息。進(jìn)入提示符后,在消息循環(huán)中運(yùn)用了一個(gè)do while循環(huán),2 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

switch?case將dos條用編寫的函數(shù)組合起來供用戶選擇使用。連續(xù)的獲取用戶輸入,直到用戶輸入0退出循環(huán),結(jié)束程序。在處理文件或文件夾過程中,沒有使用系統(tǒng)當(dāng)前文件夾變量,只是在程序中單獨(dú)設(shè)定了一個(gè)變量作為系統(tǒng)當(dāng)前目錄,每次獲得的目錄路徑,如果是相對(duì)路徑,則自動(dòng)在前面加上當(dāng)前目錄路徑。整個(gè)程序的設(shè)計(jì)流程,圍繞著消息循環(huán)這一主線,根據(jù)消息判斷調(diào)用不同的功能函數(shù)來完成相應(yīng)的功能,主要使用了一些函數(shù)和匯編調(diào)用DOS接口和21號(hào)中斷。

四、詳細(xì)設(shè)計(jì)

4.1、主要調(diào)用DOS的功能號(hào)

2AH 讀取日期

2CH 讀取時(shí)間

30H 讀取MS-DOS版本號(hào) 39H 創(chuàng)建目錄 41H

刪除文件

3AH 表示刪除目錄 56H 重命名文件 3DH 打開文件 47H 讀取當(dāng)前目錄 3FH 讀文件或目錄

4.2、主要函數(shù) void time()通過定義該函數(shù)實(shí)現(xiàn)調(diào)用dos的2C號(hào)功能讀取系統(tǒng)時(shí)間的功能 void day()

通過定義該函數(shù)實(shí)現(xiàn)調(diào)用dos的2A功能讀取系統(tǒng)日期的功能 void dos()通過定義該函數(shù)調(diào)用dos的30H功能讀取系統(tǒng)的版本號(hào)功能 void DeleteFile(char filename[80])定義該函數(shù)用于刪除文件或目錄如果刪除成功顯示“success”,刪除失敗表示找不到該文件 void Createfile(char filename[80])

定義該函數(shù)調(diào)用dos的39H號(hào)功能用于創(chuàng)建一個(gè)目錄 void file(char filename1[80],char filename2[80])定于該函數(shù)調(diào)用dos系統(tǒng)的56號(hào)功能用于重命名目錄名和文件名的 void showlist()

定于該函數(shù)調(diào)用dos系統(tǒng)的47號(hào)功能讀取當(dāng)前的工作目錄 void rewords()定于該函數(shù)用于調(diào)用dos的9號(hào)功能實(shí)現(xiàn)回顯字符串功能 void ReadFromFile(char filename[80])定于該函數(shù)用于調(diào)用dos的3F功能用于讀取文件或目錄的內(nèi)容。clrscr();引用該函數(shù)實(shí)現(xiàn)清除屏幕內(nèi)容的功能。

五、完成情況

本程序完成了要求中的13項(xiàng)列目錄,包括獲取系統(tǒng)時(shí)間,獲取系統(tǒng)日期,創(chuàng)建目錄,刪除目錄,創(chuàng)建文件并寫內(nèi)容到文件中,打印文本,刪除文件,更改目錄或文件名,顯示版本,清屏操作,獲得當(dāng)前的工 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙 作目錄等13個(gè)要求

六、使用說明

運(yùn)行程序首先回出現(xiàn)下圖的界面,顯示的是各項(xiàng)操作的命令,根據(jù)相關(guān)命令可以執(zhí)行相關(guān)的操作

功能1:顯示系統(tǒng)時(shí)間 功能2:系統(tǒng)日期:

功能3:顯示版本

功能4:刪除文件:

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

功能5:創(chuàng)建目錄

功能6:刪除目錄 刪除new文件夾:

功能7:重命名目錄或文件

修改目錄(重命名目錄):將上面目錄123修改為101

修改文件(重命名文件):將文件名1.txt改為new1.txt 5 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

功能8:顯示當(dāng)前工作目錄

功能9:回顯字符串

功能10:打印文件內(nèi)容(讀文件)

已知new1.txt文件里面的內(nèi)容如下,通過該系統(tǒng)讀出文件的內(nèi)容

功能11:清除屏幕所有內(nèi)容

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

清屏后:

直至輸入指令為0(代表exit)時(shí)退出系統(tǒng)。

七、設(shè)計(jì)總結(jié)

7.1系統(tǒng)特色

本系統(tǒng)基本實(shí)現(xiàn)命令訪問接口的設(shè)計(jì),能正常解釋命令并執(zhí)行,在命令的解釋和執(zhí)行直接采用DOS系統(tǒng)的中斷調(diào)用以及功能類型號(hào)碼的選擇和設(shè)置,能夠符合操作系統(tǒng)命令接口設(shè)計(jì)的要求。

7.2實(shí)踐感受

課程設(shè)計(jì)是理論知識(shí)和實(shí)際操作的一種結(jié)合,對(duì)所學(xué)的知識(shí)進(jìn)行強(qiáng)化。從確立課題到遇到問題查找資料,直到做出基本的結(jié)果,在這個(gè)過程中學(xué)到了之前所沒有接觸的知識(shí)點(diǎn)。例如在編程過程中要多使用庫函數(shù)中自帶的內(nèi)容,不必另外再去編寫已有的功能,這樣不僅能節(jié)省時(shí)間,也能提高程序的可靠性。要多了解庫函數(shù),可以閱讀相應(yīng)的幫助文件來獲得有用的信息。遇到問題多與老師同學(xué)討論,可以幫助自己跳出定向思維。

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

參考資料

《c程序設(shè)計(jì)》(第三版)譚浩強(qiáng)著清華大學(xué)出版社

《80x86匯編語言程序設(shè)計(jì)》沈美明,溫冬嬋 著清華大學(xué)出版社 《c與c++標(biāo)準(zhǔn)類庫及函數(shù).chm》

《Windows API for 2000/XP實(shí)例精解》王強(qiáng)周明李定國等編著電子工業(yè)出版社 《數(shù)據(jù)結(jié)構(gòu)(c語言版)》嚴(yán)蔚敏,吳偉民等編著清華大學(xué)出版社

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

附錄

源代碼(Torbo C 3.0環(huán)境下)

#include #include #include #include #include #define INTER 0x21

void menu(){

printf(“----------n”);

} void time(){

}

void day(){

} void dos(){ union REGS inregs,outregs;//定義中斷信息結(jié)構(gòu)體 union REGS inregs,outregs;//定義中斷信息結(jié)構(gòu)體 struct SREGS segregs;inregs.h.ah=0x2a;//讀取日期

int86x(INTER,&inregs,&outregs,&segregs);

printf(“Now the day is:%d,%d,%dn”,outregs.x.cx,outregs.h.dh,outregs.h.dl);getchar();union REGS inregs,outregs;//定義中斷信息結(jié)構(gòu)體 struct SREGS segregs;inregs.h.ah=0x2C;//讀取時(shí)間

int86x(INTER,&inregs,&outregs,&segregs);printf(“Now the time is:%d:%d:%dn”,outregs.h.ch,outregs.h.cl,outregs.h.dh);getchar();printf(“0.exitn”);printf(“1.Display system timen”);printf(“2.Display system dayn”);printf(“3.Display Mos-dos versionn”);printf(“4.Deletefilen”);printf(“5.Createcontentn”);printf(“6.Deletecontentsn”);printf(“7.Filenamen”);printf(“8.Display currrent listn”);printf(“9.Echo stringn”);printf(“10.ReadingFilen”);printf(“11.Clear screenn”);printf(“----------n”);9 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

}

void DeleteFile(char filename[80]){

}

void Createfile(char filename[80]){

{ }

}

void Deletefile(char filename[80]){

int result;union REGS inregs,outregs;printf(“success!n”);union REGS inregs,outregs;struct SREGS segregs;inregs.h.ah=0x39;

inregs.x.dx=FP_OFF(filename);segregs.ds=FP_SEG(filename);

int86x(INTER,&inregs,&outregs,&segregs);

printf(“nFILE %s is not exist!n”,filename);int result;union REGS inregs,outregs;struct SREGS segregs;

inregs.h.ah=0x41;//DOS 中斷號(hào) 41 是刪除文件 inregs.x.dx=FP_OFF(filename);segregs.ds=FP_SEG(filename);

int86x(INTER,&inregs,&outregs,&segregs);if(result==2||result==5){ } else { } printf(“nThe file:%s has been delete successfully!n”,filename);printf(“nCan't delete the file:%s

The file may not be exist!n”,filename);struct SREGS segregs;

inregs.h.ah=0x30;//DOS 30號(hào)功能讀取MS-DOS版本號(hào) int86x(INTER,&inregs,&outregs,&segregs);printf(“The DOS

version

of

this

machine is:%d,%d,%d,%d:%dn”,outregs.h.al,outregs.h.ah,outregs.h.bh,outregs.h.ah,outregs.x.cx);getchar();if(02==outregs.x.ax)//02 表示文件未找到

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

}

void file(char filename1[80],char filename2[80]){

}

} void rewords()void showlist(){ char list[80];union REGS reg;struct SREGS segreg;reg.h.ah = 0x47;//47H 讀取當(dāng)前目錄 reg.h.dl = 0;reg.x.si = FP_OFF(list);segreg.ds = FP_SEG(list);intdosx(®, ®, &segreg);

printf(“The current working directory is:%sn”, list);union REGS inregs,outregs;struct SREGS segregs;

inregs.h.ah=0x56;//DOS 中斷號(hào) 56 是重命名文件 inregs.x.dx=FP_OFF(filename1);segregs.ds=FP_SEG(filename1);inregs.x.di=FP_OFF(filename2);segregs.es=FP_SEG(filename2);

int86x(INTER,&inregs,&outregs,&segregs);if(outregs.x.ax==02){

} printf(“success!n”);printf(“nFILE %s is not exist!n”,filename1);struct SREGS segregs;inregs.h.ah=0x3A;//3A 表示刪除目錄 inregs.x.dx=FP_OFF(filename);segregs.ds=FP_SEG(filename);

int86x(INTER,&inregs,&outregs,&segregs);result=outregs.x.ax;if(result==2||result==5){ } else { } printf(“nThe file:%s has been delete successfully!n”,filename);printf(“nCan't delete the file:%s

The file may not be exist!n”,filename);11 佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

{

}

{

union REGS inregs,outregs;struct SREGS segregs;int result;char ReadContents[9*1024];inregs.h.ah=0x3D;//3D 打開文件 inregs.x.dx=FP_OFF(filename);segregs.ds=FP_SEG(filename);inregs.h.al=2;int86x(0x21,&inregs,&outregs,&segregs);result=outregs.x.ax;if(2==result){ } else {

inregs.x.bx=result;inregs.h.ah=0x3F;//讀文件或者目錄 inregs.x.dx=FP_OFF(ReadContents);segregs.ds=FP_SEG(ReadContents);inregs.x.cx=1024;int86x(0x21,&inregs,&outregs,&segregs);printf(“n Real Number of read characters in file:%s:%dn”,filename,outregs);printf(“nThe contents of file:%s!n”,filename);for(int i=0;i

void ReadFromFile(char filename[80])union REGS reg,reg1;struct SREGS sreg;char word[200];

for(int i=0;i<200;i++)word[i]='$';scanf(“%s”,&word);reg1.x.dx = FP_OFF(word);sreg.ds = FP_SEG(word);reg1.h.ah=0x09;

int86x(INTER,®1,®1,&sreg);printf(“n”);

佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

} }

int main(){

char DeleteFileName[80];

char ReadingFileName[80];char file1[80],file2[80];

int a;

menu();do

{ printf(“Please input the number:”);

scanf(“%d”,&a);

switch(a){

case 1: time();

break;

case 2: day();

break;

case 3: dos();

break;

case 4:

printf(“nInput the name of existing file to delete: ”);scanf(“%s”,DeleteFileName);

DeleteFile(DeleteFileName);break;

case 5:

printf(“n Input createcontent: ”);

scanf(“%s”,&DeleteFileName);Createfile(DeleteFileName);break;

case 6:

printf(“n Input deletecontents: ”);scanf(“%s”,&DeleteFileName);Deletefile(DeleteFileName);break;

case 7: printf(“name:”);

scanf(“%s”,&file1);

printf(“new name:”);scanf(“%s”,&file2);file(file1,file2);break;佛山科學(xué)技術(shù)學(xué)院課程設(shè)計(jì)用紙

case 8: showlist();break;case 9: rewords();break;case 10:

printf(“nInput the name of existing file to ReadingFileName: ”);

scanf(“%s”,ReadingFileName);

ReadFromFile(ReadingFileName);break;case 11: clrscr();

menu();break;

default: break;

} }

while(a!=0);

return 0;}

第二篇:UNIX操作系統(tǒng)命令

UNIX系統(tǒng)操作命令大全

UNIX系統(tǒng)操作命令 第一章 登錄和退出

用戶在登錄前,首先要向系統(tǒng)管理員申請(qǐng)一個(gè)用戶注冊(cè)名,不論用戶從哪臺(tái)計(jì)

算機(jī)登錄到ITPNET上都將訪問相同的文件系統(tǒng)。

1.1 登錄

當(dāng)屏幕上出現(xiàn)Login提示符時(shí),用戶可以輸入自己的用戶注冊(cè)名,并按回車鍵。

若有口令,系統(tǒng)將提示用戶輸入密碼,并按回車鍵,口令輸入正確后,用戶登錄成

功。這時(shí),屏幕上會(huì)顯示出一些信息和命令提示符。如:

Login: guest [Enter]

passwd: ****** [Enter]

sun%

注: 用戶名要用小寫字母輸入,UNIX系統(tǒng)區(qū)分大小寫字母。

[hide]

1.2 退出

當(dāng)用戶準(zhǔn)備退出自己的計(jì)算機(jī)帳號(hào)時(shí),可在系統(tǒng)示符下輸入logout或exit或按

[Ctrl-D]。當(dāng)屏幕出現(xiàn)Login時(shí),用戶可以安全地離開計(jì)算機(jī)了。如:

sun% logout [Enter]

Login:

1.3 修改口令 為了防止他人使用自己的帳號(hào),在你首次登錄后,請(qǐng)用passwd命令修改只有本

人知道的保密口令,口令通常由此可6到8個(gè)字母數(shù)字組成。如:

sun% passwd[Enter]

Old Passwd: ******

New Passwd: ******

update 更新磁盤 val SCCS實(shí)用程序 vc SCCS實(shí)用程序 vi 全屏幕編輯器 volcopy 文件系統(tǒng)的文字拷貝 wait 等待所有字進(jìn)程結(jié)束 while 循環(huán)語句 who 顯示誰在使用系統(tǒng) whodo 顯示哪些用戶在做什么 write 和另一用戶直接對(duì)話 xargs 建立參數(shù)表并執(zhí)行命令 yacc 語法分析程序生成器;)cl

注:當(dāng)你退出系統(tǒng)再次登錄時(shí),就要使用新的口令。

第二章 目錄操作命令

2.1 顯示目錄

命令:pwd(print working directory)

格式:pwd

功能:顯示出用戶當(dāng)前工作目錄的全路徑名。

例如:% pwd

2.2 建立目錄

命令:mkdir(make directory)

格式:mkdir directory_name

功能:建立新目錄

例如:% mkdir directory

2.3 改變目錄

命令:cd(change directory)

格式:cd directory_name

功能:改變當(dāng)前工作目錄

注釋:目錄名選項(xiàng)有:

(1)目錄名,轉(zhuǎn)到當(dāng)前目錄下的子目錄。

(2)..表示轉(zhuǎn)到當(dāng)前目錄的父目錄。

(3)/ 表示轉(zhuǎn)到根目錄。

(4)沒有選項(xiàng)時(shí),轉(zhuǎn)到用戶的主目錄。

例如:% cd directory

2.4 刪除目錄

命令:rmdir(remove directory)

格式:rmdir directory_name

功能:刪除不存在文件的子目錄名。

注釋:

(1)刪除子目錄時(shí),要求被刪除的目錄中不存在文件或子目錄,否則無法刪除。

(2)若被刪除的目錄中有文件或子目錄,請(qǐng)參考命令rm-r directory_name。

例如:% rmdir directory

第三章 文件操作命令

3.1 列出文件目錄

命令:ls(list)

格式:ls [option] directory_name

功能:列出指定目錄中的文件名和子目錄名。當(dāng)無子目錄名時(shí),列出當(dāng)前目錄

中的文件名和子目錄名。

選項(xiàng):-a列出所有文件,包括以點(diǎn)開頭的隱含文件。

-l按長(zhǎng)格式列出文件名,包括文件類型標(biāo)識(shí),權(quán)限,鏈接數(shù),文件主名,文件組名,字節(jié)數(shù),日期。

-r列出包括子目錄下所有文件

-g在長(zhǎng)格式中給出用戶組的標(biāo)識(shí)。

-t安文件生成日期排序。

例如:% ls-la

3.2 顯示文件內(nèi)容

命令:cat(catenae)全屏滾動(dòng)顯示

格式:cat filename

功能:顯示出文件的內(nèi)容。

注釋:當(dāng)文件內(nèi)容在屏幕上滾動(dòng)顯示時(shí),可按Ctrl+S鍵屏幕滾暫停,按Ctrl+Q

鍵繼續(xù)顯示。

例如:% cat filename

3.3 按屏幕顯示文件內(nèi)容

命令:more

格式:more filename

功能:按屏幕一屏一屏顯示出文件內(nèi)容

選項(xiàng):

注釋:在屏幕顯示過程中有功能鍵。空格鍵 繼續(xù)下一屏的輸出;回車鍵 看下

一行的輸出;q鍵 跳出more狀態(tài);/字符串 查旬字符串所在處;a鍵 返

回到上一屏。

例如:% more filename

3.4 分頁顯示文件內(nèi)容

命令:pg(page)

格式:pg [option] filename

功能:分頁顯示指定文件的內(nèi)容。在顯示一頁文件時(shí),最后一行將顯示等待用

戶輸入指令。可輸入的指令有如下選項(xiàng)。

選項(xiàng):h

顯示pg命令中可使用的幫助(help)命令。

q

退出pg命令。

[return] 顯示下一頁正文。

顯示正文的下一行

[Space] 顯示下一頁

d/[Ctrl-D] 將屏幕滾動(dòng)半屏。

n

顯示pg命令行中說明的下一個(gè)文件。

p

顯示pg命令行中說明的前一個(gè)文件。

%

顯示正文當(dāng)前頁的前面一頁。

/pattern 在文件中向前搜索指定的字符模式。

?pattern 在文件中向后搜索指定的字符模式。

注釋:當(dāng)pg命令顯示到文件的末尾時(shí),顯示一個(gè)文件結(jié)束信息EOF(end of file)。

例如:% pg filename

3.5 讀文件

命令:view

格式:view filename

功能:只能讀出文件內(nèi)容。

注釋:此命令不能對(duì)讀出的原文件進(jìn)行寫操作。若對(duì)原文件進(jìn)行了修改,可利

用命令“:w newfilename”將修改后的文件寫到新文件中。

例如:% view filename

3.6 顯示文件頭部

命令:head

格式:head [option] filename

功能:顯示文件的頭部

選項(xiàng):缺省 顯示文件的頭10行。

-i 顯示文件的開始 i行。

例如:% head filename

3.7 顯示文件尾部

命令:tail

格式:tail [option] filename

功能:顯示文件的尾部

選項(xiàng):缺省 顯示文件的末10行。

-i 顯示文件最后 i行。

+i 從文件的第i行開始顯示。

例如:% tail filename

3.8 顯示格式化的文件內(nèi)容

命令:pr(print)

格式:pr filename

功能:在屏幕上顯示格式化的文件內(nèi)容,即印出每頁66行的文本文件,包括5

行頁頭和5行頁尾。頁頭包括兩行空行,一行含有文件的時(shí)間、文件名

和頁號(hào),另外兩行為空行。頁尾為5行空行。

例如:% pr filename

3.9 拷貝文件

命令:cp(copy)

格式:cp [option] filename1 filename2

cp [option] filename...directory

cp-r directory1 directon2

功能:把一個(gè)文件的全部?jī)?nèi)容拷貝到另一個(gè)文件,也可將一個(gè)或多個(gè)文件拷貝

到另一個(gè)目錄中。

選項(xiàng):-i 按提示進(jìn)行拷貝文件。

-p 按原文件日期進(jìn)行拷貝。

-r 對(duì)子目錄下所有文件進(jìn)行拷貝。

注釋:當(dāng)filename1拷貝到filename2時(shí),若filename2已經(jīng)存在,則filename2 的內(nèi)容將被filename1覆蓋。

例如:% cp filename1 filename2

3.10移動(dòng)文件或文件改名

命令:mv(move)

格式:mv filename1 filename2

mv filename...direction

mv direction1 direction2

功能:改變文件或目錄的名子,或把一些文件移到另一目錄下。

注釋:當(dāng)filename1更名為filename2時(shí),若filename2已經(jīng)存在,則filename2 的內(nèi)容將被filename1覆蓋

例如:% mv filename1 filename2

3.11刪除文件

命令:rm(remove)

格式:rm filename

rm-r direction

功能:刪除指定的文件或一個(gè)目錄中的文件。

注釋:用-r選項(xiàng)時(shí),將刪除指定目錄的所用文件,包括目錄名。

例如:% rm filename

3.12鏈接文件

命令:ln(link)

格式:ln [option] filename linkname

ln [option] directory pathname

功能:為文件或目錄建立一個(gè)鏈。其中,filename和directory是源文件名和

源目錄名;linkname和pathname分別表示與源文件或源目錄名相鏈接的

文件或目錄。

選項(xiàng):-s 為文件或目錄建立符號(hào)鏈接。

注釋:鏈接的目地在于,對(duì)一個(gè)文件或目錄賦予兩個(gè)以上的名字,使其可以出

現(xiàn)在不同的目錄中,既可以使文件或目錄共享,又可以節(jié)省磁盤空間。

例如:% ln-s filename linkname

3.13改變文件讀取權(quán)限

命令:chmod(change mode)

格式:chmod {u|g|o|a}{+|-|=}{r|w|x} filename

chmod [who][op][mode] directory

功能:改變文件的讀寫和執(zhí)行權(quán)限。有符號(hào)法和八進(jìn)制數(shù)字法。

選項(xiàng):(1)符號(hào)法:

u(user)表示用戶本人。

g(group)表示同組用戶。

o(oher)表示其他用戶。

a(all)表示所有用戶。

+

用于給予指定用戶的許可權(quán)限。

用于取消指定用戶的許可權(quán)限。

=

將所許可的權(quán)限賦給文件。

r(read)讀許可,表示可以拷貝該文件或目錄的內(nèi)容。

w(write)寫許可,表示可以修改該文件或目錄的內(nèi)容。

x(execute)執(zhí)行許可,表示可以執(zhí)行該文件或進(jìn)入目錄。

(2)八進(jìn)制數(shù)字法:

此方法用三位八進(jìn)制數(shù)作任選項(xiàng),每位數(shù)字分別表示用戶本人、同組用

戶、其他用戶的權(quán)限,其中:(100)表示可讀。(010)表示可寫。(001)表示可執(zhí)行。

注釋:

例如:% chmod a+rx filename

讓所有用戶可以讀和執(zhí)行文件filename。

% chmod go-rx filename

取消同組和其他用戶的讀和執(zhí)行文件filename的權(quán)限。

% chmod 741 filename

讓本人可讀寫執(zhí)行、同組用戶可讀、其他用戶可執(zhí)行文件filename。

3.14改變文件所有權(quán)

命令:chown(change owner)

格式:chown username filename

chown-R username directory

功能:改變文件或目錄的所有權(quán)。

選項(xiàng):-R 將改變目錄中所有文件及目錄的擁有者。

注釋:只有文件的主人和超級(jí)用戶才能改變文件的所有權(quán)。

例如:% chown username filename

3.15尋找文件

命令:find

格式:find pathname [option] expression

功能:在所給的路經(jīng)名下尋找符合表達(dá)式相匹配的文件。

選項(xiàng):-name 表示文件名

-user 用戶名,選取該用戶所屬的文件

-group 組名,選取該用戶組屬的文件

-mtime n 選取n天內(nèi)被修改的文件

-newer fn 選取比文件名為fn更晚修改的文件

注釋:

例如:% find.-name '*abc*'-print

3.16搜索文件中匹配符

命令:grep

格式:grep [option] pattern filenames

功能:逐行搜索所指定的文件或標(biāo)準(zhǔn)輸入,并顯示匹配模式的每一行。

選項(xiàng):-v找出模式失配的行

-c統(tǒng)計(jì)匹配行的數(shù)量

-n顯示匹配模式的每一行

注釋:

例如:% ps-aux | grep R

3.17比較文件不同

命令:diff(difference)

格式:diff filename1 filename2

功能:顯示兩文件的不同之處。

選項(xiàng):

注釋:

例如:% diff file1 file2

3.18比較文件

命令:cmp(compare)

格式:cmp [-l] [-s] filename1 filename2

功能:顯示比較兩文件不同處的信息

選項(xiàng):-l 給出兩文件不同的字節(jié)數(shù)

-s 不顯示兩文件的不同處,給出比較結(jié)果

注釋:

例如:% cmp file1 file2

3.19比較文件共同處

命令:comm(common)

格式:comm [-123] filename1 filename2

功能:選擇或拒絕比較兩文件出現(xiàn)的共同行

選項(xiàng):-1 不顯示第1列

-2 不顯示第2列

-3 不顯示第3列

注釋:輸出三列,第一列表示在file1中出現(xiàn)的行,第二列表示在file2中出現(xiàn) 的行,第三列表示在file1和file2中共同出現(xiàn)的行。

例如:% comm file1 file2

3.20排序文件

命令:sort

格式:sort [option] filename

功能:將制定的文件按要求排序

選項(xiàng):-r 按字母倒排序

-n 按數(shù)字的值從小到大排序

-r 按當(dāng)前排序規(guī)則逆序排序

-f 不區(qū)分大小寫排序

-d 按典型順序排序

注釋:選項(xiàng)缺省時(shí)按ascii碼順序排序

例如:% sort-nr file

3.21壓縮文件

命令:compress

格式:compress [option] filename 功能:壓縮文件。

選項(xiàng):-f 強(qiáng)制壓縮

-v 壓縮時(shí)顯示壓縮百分比

注釋:

例如:% comproess files

3.22解縮文件

命令:uncompress

zcat

格式:compress [option] filename

zcat filename

功能:展開或顯示壓縮文件。

選項(xiàng):-c 不改變文件寫到標(biāo)準(zhǔn)輸出

注釋:zcat命令相當(dāng)于uncompress-c

例如:% uncomproess files.Z

3.23顯示文件類型

命令:file

格式:file filename...功能:按文件內(nèi)容來推測(cè)文件類型,如text,ascii,C,executable,core。

選項(xiàng):

注釋:

例如:% file *

3.24建立檔案文件

命令:tar(tape archive)

格式:tar [option] tarfile filename

功能:建立文件的存檔或讀存檔文件。

選項(xiàng):-c 建立一個(gè)新的檔案文件

-x 從檔案文件中讀取文件

-v 顯示處理文件的信息

-f 指定檔案文件名,缺省時(shí)為磁帶機(jī)即/dev/rmt/0

-t 列出存檔文件的信息

注釋:

例如:% tar cvf tarfile.% tar xvf tarfile

% tar tvf tarfile

3.25磁帶拷貝文件

命令:dd

格式:dd [option=value] 功能:用磁帶機(jī)轉(zhuǎn)換或拷貝文件。

選項(xiàng):if=name 指定輸入文件名

of=name 指定輸出文件名

ibs=n 指定輸入文件塊大小為n字節(jié)(缺省為512字節(jié))

obs=n 指定輸出文件塊大小為n字節(jié)(缺省為512字節(jié))

注釋:

例如:% dd if=filename of=/dev/rmt/0

% dd if=/dev/rmt/0 of=filename ibs=1024

3.26修改文件日期

命令:touch

格式:touch filenae

功能:改變文件的日期,不對(duì)文件的內(nèi)容做改動(dòng),若文件不存在則建立新文件。

選項(xiàng):

注釋:

例如:% touch file

3.27統(tǒng)計(jì)文件字?jǐn)?shù)

命令:wc(word characters)

格式:wc [option] filename

功能:統(tǒng)計(jì)文件中的文件行數(shù)、字?jǐn)?shù)和字符數(shù)。

選項(xiàng):-l 統(tǒng)計(jì)文件的行數(shù)

-w 統(tǒng)計(jì)文件的字?jǐn)?shù)

-c 統(tǒng)計(jì)文件的字符數(shù)

注釋:若缺省文件名則指標(biāo)準(zhǔn)輸入

例如:% wc file

3.28檢查拼寫

命令:spell(spelling)

格式:spell [option] filename...功能:檢查文件中的拼寫錯(cuò)誤

選項(xiàng):-b 按英國拼法檢查

-v 顯示字面上不在拼法字典上的詞

-x 顯示每一個(gè)可能合理的詞根

注釋:

例如:% spell file

第四章 有關(guān)狀態(tài)信息命令

4.1顯示當(dāng)前注冊(cè)的用戶

命令:w

格式:w [option] [username]

功能:顯示當(dāng)前正在使用系統(tǒng)的用戶名、注冊(cè)時(shí)間和當(dāng)前執(zhí)行的命令。

選項(xiàng):-h 不顯示起始行

-s 按短格式顯示

-l 按長(zhǎng)格式顯示(缺省設(shè)置)

注釋:

例如:% w

4.2 顯示都誰登錄到機(jī)器上

命令:who

格式:who

功能:顯示當(dāng)前正在系統(tǒng)中的所有用戶名字,使用終端設(shè)備號(hào),注冊(cè)時(shí)間。

例如:% who

4.3 顯示當(dāng)前終端上的用戶名

命令:whoami

格式:whoami

功能:顯示出當(dāng)前終端上使用的用戶。

例如:% whoami

4.4 確定命令位置

命令:whereis

格式:whereis command

功能:確定一個(gè)命令的二進(jìn)制行碼、源碼及聯(lián)機(jī)手冊(cè)所在的位置。

選項(xiàng):

注釋:

例如:% whereis ls

4.5 查找非標(biāo)準(zhǔn)命令

命令:which

格式:which command

功能:查找非標(biāo)準(zhǔn)命令,即使用別名或系統(tǒng)中標(biāo)準(zhǔn)命令集之外的命令。

選項(xiàng):

注釋:

例如:% which ls

4.6 顯示日期

命令:date

格式:date

功能:顯示或設(shè)置日期和時(shí)間。

選項(xiàng):

注釋:只有超級(jí)用戶有權(quán)設(shè)置日期。

例如:% date

4.7 顯示日歷

命令:cal(calendar)

格式:cal [month] year

功能:顯示某年內(nèi)指定的日歷

選項(xiàng):

注釋:

例如:% cal 1998

4.8 計(jì)算命令執(zhí)行時(shí)間

命令:time

格式:time [command]

功能:計(jì)算程序或命令在執(zhí)行其間所用的時(shí)間。

選項(xiàng):

注釋:計(jì)算出的時(shí)間為:real是命令在系統(tǒng)駐留的總時(shí)間,user是命令消耗CPU 的時(shí)間,sys是命令I(lǐng)/O所開銷的時(shí)間。

例如:% time myprog

4.9 查詢帳目

命令:acseek(account seek)

格式:acseek [-d n] [-m usersname]

功能:查詢本月的用戶帳目。

選項(xiàng):-d n

-m username

注釋:若沒有選項(xiàng),則顯示本人當(dāng)月的帳單。

例如:% acseek

4.10顯示用戶標(biāo)識(shí)

命令:id 格式:id [option] [user]

功能:顯示用戶標(biāo)識(shí)及用戶所屬的所有組。

選項(xiàng):-a 顯示用戶名、用戶標(biāo)識(shí)及用戶所屬的所有組

注釋:

例如:% id username

4.11顯示主機(jī)標(biāo)識(shí)

命令:hostid

格式:hostid

功能:顯示主機(jī)的唯一標(biāo)識(shí),是被用來限時(shí)軟件的使用權(quán)限,不可改變。

選項(xiàng):

注釋:

例如:% hostid

4.12顯示主機(jī)名

命令:hostname

格式:hostname

功能:顯示或設(shè)置主機(jī)名。

選項(xiàng):

注釋:只有超級(jí)用戶才能設(shè)置主機(jī)名。

例如:% hostname

4.13顯示進(jìn)程

命令:ps 格式:ps [option]

功能:顯示系統(tǒng)中進(jìn)程的信息。包括進(jìn)程ID、控制進(jìn)程終端、執(zhí)行時(shí)間和命令。

選項(xiàng):-a 列出當(dāng)前系統(tǒng)中所有進(jìn)程的信息

-l 顯示一個(gè)長(zhǎng)列表

-e 顯示當(dāng)前運(yùn)行的每一個(gè)進(jìn)程信息

-f 顯示一個(gè)完整的列表

注釋:

例如:% ps-ef

4.14顯示磁盤空間

命令:df(disk free)

格式:df [option]

功能:顯示磁盤空間的使用情況,包括文件系統(tǒng)安裝的目錄名、塊設(shè)備名、總

字節(jié)數(shù)、已用字節(jié)數(shù)、剩余字節(jié)數(shù)占用百分比。

選項(xiàng):-i 顯示已用和未用的字節(jié)數(shù)

-k 顯示磁盤空間的使用信息

注釋:

例如:% df-k

4.15顯示文件盤空間

命令:du(disk usage)

格式:du [option] [filename]

功能:顯示目錄或文件所占磁盤空間大小

選項(xiàng):-a 顯示所有文件的大小

-s 顯示制定目錄所占磁盤大小

注釋:

例如:% du

4.16顯示盤空間限制

命令:quota

格式:quota-v [username]

功能:顯示用戶的磁盤空間限制和使用情況。包擴(kuò)盤空間的限額和已使用數(shù),允許建立的節(jié)點(diǎn)數(shù)限額和使用節(jié)點(diǎn)數(shù)。

選項(xiàng):-v 查看用戶在系統(tǒng)中的盤空間

注釋:只有超級(jí)用戶可以顯示任何用戶的使用情況,用edquota命令可修改。

例如:% quota-v

4.17顯示終端選項(xiàng)

命令:stty

格式:stty [option]

功能:顯示或設(shè)置終端的任選項(xiàng)。

選項(xiàng):-a 顯示所有設(shè)置情況

-g 顯示當(dāng)前設(shè)置

注釋:

例如:% stty-a

4.18顯示終端名

命令:tty

格式:tty

功能:顯示終端名

選項(xiàng):

注釋:

例如:% tty

4.19回憶命令

命令:history

格式:history

功能:幫助用戶回憶執(zhí)行過的命令。

選項(xiàng):

注釋:

例如:% history

4.20聯(lián)機(jī)幫助手冊(cè)

命令:man(manual)

格式:man command_name

功能:顯示參考手冊(cè),提供聯(lián)機(jī)幫助信息。

選項(xiàng):

注釋:-k 按制定關(guān)鍵字查詢有關(guān)命令

例如:% man tar

4.21建立別名

命令:alias

格式:alias newname name

功能:用戶可以將常用的命令用自己習(xí)慣的名稱來重新命名。

選項(xiàng):

注釋:

例如:% alias dir 'ls-F'

第五章 網(wǎng)絡(luò)命令

5.1顯示網(wǎng)絡(luò)地址

命令:arp

格式:arp hostname

功能:顯示系統(tǒng)當(dāng)前訪問的遠(yuǎn)程主機(jī)名、IP地址和硬件地址。

選項(xiàng):-a

注釋:

例如:% arp-a

5.2 顯示用戶信息

命令:finger

格式:finger username

功能:顯示網(wǎng)上用戶使用機(jī)器的情況,包括用戶何時(shí)登錄和最后一次注冊(cè)記錄。

選項(xiàng):

注釋:

例如:% finger username

5.3 網(wǎng)上對(duì)話

命令:talk

格式:talk username

功能:在網(wǎng)上與另一用戶進(jìn)行對(duì)話。

選項(xiàng):

注釋:對(duì)話時(shí)系統(tǒng)把終端分為上下兩部分,上半部顯示自己鍵入信息,下半部

顯示對(duì)方用戶鍵入的信息。鍵入delete或Ctrl+C則結(jié)束對(duì)話。

例如:% talk username

5.4 允許或拒絕接受信息

命令:mesg(message)

格式:mesg [n/y]

功能:允許或拒絕其它用戶向自己所用的終端發(fā)送信息。

選項(xiàng):n 拒絕其它用戶向自己所用的終端寫信息

y 允許其它用戶向自己所用的終端寫信息(缺省值)

注釋:

例如:% mesg n

5.5 給其他用戶寫信息

命令:write

格式:write username [ttyname]

功能:給其他用戶的終端寫信息。

選項(xiàng):

注釋:若對(duì)方?jīng)]有拒絕,兩用戶可進(jìn)行交談,鍵入EOF或Ctrl+C則結(jié)束對(duì)話。

例如:write username

5.6 測(cè)試網(wǎng)路

命令:ping

格式:ping hostname

功能:向網(wǎng)絡(luò)上的主機(jī)發(fā)送ICMP ECHO REQUEST信息包,檢測(cè)網(wǎng)絡(luò)是否暢通。

選項(xiàng):

注釋:被測(cè)試的主機(jī)名可用IP地址。當(dāng)丟包率為(100% packet loss)則說明

當(dāng)前網(wǎng)絡(luò)不通。

例如:% ping hostsname

5.7 遠(yuǎn)程shell命令

命令:rsh(remote shell)

格式:rsh hostsname command

功能:在本地機(jī)執(zhí)行遠(yuǎn)程主機(jī)的shell命令。

選項(xiàng):

注釋:

例如:% rsh hostname who

5.8 遠(yuǎn)程拷貝文件

命令:rcp(remote copy)

格式:rcp [-r] file newfile

功能:拷貝遠(yuǎn)程主機(jī)上的文件。

選項(xiàng):-r 拷貝目錄

注釋:

例如:% rcp hostname:/tmp/file.5.9 遠(yuǎn)程注冊(cè)

命令:rlogin(remote login)

格式:rlogin hostname [-l username]

功能:注冊(cè)到遠(yuǎn)程主機(jī)上。

選項(xiàng):-l username 注冊(cè)到另一用戶

注釋:要有用戶口令才能注冊(cè)。

例如:% rlogin hostname

5.10 遠(yuǎn)程登錄

命令:telnet

格式:telnet hostname

功能:遠(yuǎn)程登錄到網(wǎng)上其它主機(jī)。

選項(xiàng):

注釋:支持不同的操作系統(tǒng)。

例如:% telnet bbs.tsinghua.edu.cn

5.11文件傳輸

命令:ftp(file transfer program)

格式:ftp hostname

功能:網(wǎng)絡(luò)文件傳輸及遠(yuǎn)程操作。

選項(xiàng):ftp命令:

?/help ftp的聯(lián)機(jī)幫助

open hostname 打開制定的遠(yuǎn)程機(jī)

cd [dirname] 進(jìn)入遠(yuǎn)程機(jī)的目錄

lcd [dirname] 設(shè)置本地機(jī)的目錄

binary 以二進(jìn)制方式進(jìn)行傳輸

dir/ls 顯示遠(yuǎn)程的目錄文件

get/mget 從遠(yuǎn)程機(jī)取一個(gè)或多個(gè)文件

put/mput 向遠(yuǎn)程機(jī)送一個(gè)或多個(gè)文件

prompt 打開或關(guān)閉多個(gè)文件傳送時(shí)的交互提示

close

關(guān)閉與遠(yuǎn)程機(jī)的連接

quit

退出ftp

注釋:

例如:% ftp hostname

5.12顯示到網(wǎng)絡(luò)主機(jī)的路徑

命令:traceroute

格式:traceroute hostname

功能:顯示本機(jī)到達(dá)某一網(wǎng)絡(luò)主機(jī)所經(jīng)的路經(jīng)和使用的時(shí)間。

選項(xiàng):

注釋:

例如:% traceroute hostname

第六章 Mail命令

6.1 發(fā)送或接受電子郵件

命令:mail/Mail/mailx

格式:mail username(發(fā)送)

mail [option](接受)

功能:向網(wǎng)上用戶發(fā)送或接受電子郵件。

選項(xiàng):-r 郵件按先進(jìn)先出順序排序。缺省時(shí)為后進(jìn)先出順序排序

-q 中斷mail后不改變信箱內(nèi)容

-p 顯示mail每份郵件,不顯示提示信息

-f 從郵件格式文件中讀郵件

注釋:mail命令:

? 顯示mail幫助命令

h 郵件標(biāo)題列表

p 顯示當(dāng)前郵件

n 顯示下一郵件

r [uers] 給發(fā)信人或用戶回信

s [file] 將郵件保存到文件中,保存標(biāo)題信息

w [file] 將郵件寫到文件中,不保存標(biāo)題信息

d [n] 刪除當(dāng)前郵件或第n封郵件

q 將未刪除的郵件存入mbox文件,并退出mail

x 所有郵件不作修改,退出mail

例如:% mail-s “Subjet...” username < messages

6.2 顯示郵件隊(duì)列

命令:mailq

格式:mailq

功能:查看正在發(fā)送或接收郵件的排隊(duì)情況。選項(xiàng):

注釋:此命令一般在系統(tǒng)或網(wǎng)絡(luò)不同時(shí)使用。

例如:% mailq

6.3 郵件操作命令

命令:pine

格式:pine

功能:對(duì)自己郵件操作的程序。

選項(xiàng):

注釋:此操作是在菜單提示下進(jìn)行。

例如:% pine

第七章 運(yùn)行程序命令

7.1 按時(shí)間執(zhí)行命令

命令:at/batch

格式:at [option] [time] [data] [file]

功能:在制定的時(shí)間執(zhí)行命令或命令文件。

選項(xiàng):-r 取消以前用at命令提交的作業(yè)

-l 顯示用at命令提交的所有作業(yè)狀態(tài)和作業(yè)號(hào)

注釋:

例如:at 0030 Jan 20 myfile

7.2 參數(shù)回至標(biāo)準(zhǔn)輸出

命令:echo

格式:echo [-n] [arguments]

功能:將參數(shù)即字符串至標(biāo)準(zhǔn)輸出即顯示器

選項(xiàng):-n 不向標(biāo)準(zhǔn)輸出回送換行符

注釋:

例如:echo *

7.3 復(fù)制至文件

命令:tee

格式:tee [option] filename

功能:至標(biāo)準(zhǔn)輸出的同時(shí)復(fù)制至文件

選項(xiàng):-a 輸出時(shí)附加到文件中

-i 不理采中斷

注釋:

例如:% who | tee file

7.4 給程序優(yōu)先級(jí)

命令:nice

格式:nice [-n] command

功能:以低的優(yōu)先級(jí)運(yùn)行程序或命令。選項(xiàng):-n 為優(yōu)先級(jí)0-20從高到低

注釋:

例如:nice-5 progame

7.5 終止進(jìn)程

命令:kill

格式:kill [option] pid

功能:向指定的進(jìn)程送信號(hào)或終止進(jìn)程。

選項(xiàng):-9 強(qiáng)行終止進(jìn)程

-17 將進(jìn)程掛起

-19 將掛起的進(jìn)程激活

注釋:pid標(biāo)示進(jìn)程號(hào),可由ps命令得到。

例如:% kill-9 pid

7.6 進(jìn)程睡眠

命令:sleep

格式:sleep time

功能:使當(dāng)前正在執(zhí)行的進(jìn)程在規(guī)定的時(shí)間內(nèi)處于睡眠。

選項(xiàng):

注釋:time為進(jìn)程將睡眠的時(shí)間,以秒為單位。

例如:% sleep time

7.7 顯示作業(yè)狀態(tài)

命令:jobs

格式:jobs [-l]

功能:顯示當(dāng)前作業(yè)的狀態(tài)

選項(xiàng):-l 長(zhǎng)列表顯示作業(yè)狀態(tài),包括所有者、作業(yè)號(hào)、終端和狀態(tài)。

注釋:作業(yè)狀態(tài)為 +表示最近被停止的作業(yè),-表示先前的作業(yè),exit 1表示

退出的作業(yè),job# done表示已完成的作業(yè)。

例如:% jobs

7.8 前臺(tái)作業(yè)

命令:fg

格式:fg job#

功能:將指定作業(yè)號(hào)的作業(yè)轉(zhuǎn)入前臺(tái)運(yùn)行。job#表示作業(yè)號(hào)。

選項(xiàng):

注釋:

例如:% fg job#

7.9 后臺(tái)作業(yè)

命令:bg/&

格式:bg job#

command &

功能:將指定作業(yè)號(hào)的作業(yè)或命令推到后臺(tái)運(yùn)行。選項(xiàng):

注釋:

例如:% bg job#

7.10掛起作業(yè)

命令:stop

格式:stop job#

功能:將指定作業(yè)號(hào)的后臺(tái)作業(yè)掛起.選項(xiàng):

注釋:

例如:% stop job#

第八章 程序編譯執(zhí)行命令

8.1 C程序編譯

命令:cc

格式:cc [option] filename

功能:編譯或鏈接指定的C文件。

選項(xiàng):-o 指定輸出文件名,缺省時(shí)為a.out

-c 只編譯,產(chǎn)生.o的目標(biāo)文件

-g 產(chǎn)生用于符號(hào)測(cè)試的執(zhí)行文件

-lm 進(jìn)行連接cc數(shù)學(xué)庫

-O 進(jìn)行代碼的一般優(yōu)化

-O2 二級(jí)優(yōu)化

注釋:C編譯器參考手冊(cè)可用命令man cc查看。

例如:% cc-o test test.c

8.2 C++程序編譯

命令:CC

格式:CC [option] filename

功能:編譯或鏈接指定的C++文件。

選項(xiàng):同C編譯選項(xiàng)

注釋:C++編譯器參考手冊(cè)可用命令man CC查看。

例如:% CC-O2 test.cc

8.3 FORTRAN77程序編譯

命令:f77

格式:f77 [option] filename

功能:編譯或鏈接指定的Fortran文件

選項(xiàng):-o 指定輸出文件名,缺省時(shí)為a.out

-c 只編譯,產(chǎn)生.o的目標(biāo)文件

-g 產(chǎn)生用于符號(hào)測(cè)試的執(zhí)行文件

-O0 不進(jìn)行代碼優(yōu)化

-O1 盡快進(jìn)行代碼優(yōu)化

-O2 二級(jí)優(yōu)化

-O3 三級(jí)優(yōu)化

注釋:FORTRAN77編譯器參考手冊(cè)可用命令man f77查看

例如:% f77-c test.f

8.4 FORTRAN90程序編譯

命令:f90

格式:f90 [option] filename

功能:編譯或鏈接指定的Fortran90文件

選項(xiàng):同F(xiàn)ORTRAN77編譯選項(xiàng)

注釋:FORTRAN90編譯器參考手冊(cè)可用命令man f90查看

例如:% f90-O-o test test.f

8.5 GNU程序編譯

命令:gcc(GNU C)

g++/c++(GNU C++)

g77(GNU FORTRAN77)

格式:gcc [option] filename

g++ [option] filename

g77 [option] filename

功能:編譯或鏈接指定的編譯文件。

選項(xiàng):-o 指定輸出文件名,缺省時(shí)為a.out

-c 只編譯,產(chǎn)生.o的目標(biāo)文件

-O 進(jìn)行代碼的一般優(yōu)化

-O2 二級(jí)優(yōu)化

注釋:GNU編譯器參考手冊(cè)可進(jìn)入emacs中info菜單下查看。

例如:% gcc-o test test.c

8.6 運(yùn)行文件

格式:a.out

filename

功能:源程序經(jīng)編譯后產(chǎn)生目標(biāo)代碼文件,放在a.out文件或指定輸出文件名。

補(bǔ)充常用配置文件

1./etc/hosts

主機(jī)名字解析文件,提供主機(jī)名和IP地址的對(duì)應(yīng)。

2./etc/passwd

口令文件,內(nèi)容為:

登錄用戶名:加密口令:用戶ID:組ID:保留:初始工作目錄:shell路徑

3. /etc/group

內(nèi)容為:

組名:加密密碼:組ID:所有屬于該組的用戶。

4. /etc/profile

如果該文件存在,則每個(gè)用戶登錄時(shí)將執(zhí)行該文件。該文件一般用于設(shè)置一些通用環(huán)境變量,如果用戶的home目錄中存在.profile文件,則在執(zhí)行/etc/profile之后,再執(zhí)行用戶的.profile文件。

5. /etc/inittab

內(nèi)部初始化之后,系統(tǒng)將啟動(dòng)/etc/init這個(gè)deamon進(jìn)程,使/etc/init進(jìn)程取得引導(dǎo)序列的控制權(quán)。而init進(jìn)程從文件 /etc/inittab(init table,初始化表)取得指示,該文件 的內(nèi)容控制所有init狀態(tài),同時(shí)也控制那些已消亡進(jìn)程的再生。

6. /etc/fstab

系統(tǒng)中可以mount的文件系統(tǒng)的信息。

7. /etc/lvmtab

使用命令:

# strings /etc/lvmtab;查看系統(tǒng)VG和磁盤信息。

8. /etc/rc.config.d/netconf

包含系統(tǒng)名稱和網(wǎng)絡(luò)配置信息,如IP地址、子網(wǎng)掩碼和路由信息等。

9. /stand/system

包含系統(tǒng)的驅(qū)動(dòng)程序和子系統(tǒng)信息,內(nèi)核設(shè)備信息和一些系統(tǒng)可調(diào)參數(shù)信息。

附錄 UNIX 常用命令簡(jiǎn)單說明

UNIX 命令大多數(shù)可用聯(lián)機(jī)幫助手冊(cè) man 獲得幫助,下面是常用命令及簡(jiǎn)單說明,可供用戶快速查找使用。命令 功能簡(jiǎn)述

cctcom 等于進(jìn)程記帳文件 accton 啟動(dòng)或中止記帳進(jìn)程

adb 匯編語言調(diào)試工具

admin 創(chuàng)建和管理SCCS文件 ar 檔案文件和庫文件管理程序 as 匯編器 asa 回車控制 at 在指定時(shí)間執(zhí)行程序 awk 模式搜索和處理語言 banner 制作標(biāo)題 basename 生成文件基本名(無前。后綴)batch 命令的延遲執(zhí)行

bc 計(jì)算器 bdiff 大型文件比較 bfs 大文件搜索 break 退出循環(huán)

cal 打印日歷表

calendar 打印日歷表 cancel 取消打印任務(wù) case 分支語句 cb C語言整理程序 cd 改變當(dāng)前目錄 cc C語言編譯器 cdc SCCS實(shí)用程序 cflow 生成C語言流程圖 checkeq 數(shù)學(xué)公式排版命令 chgrp 改變文件組 chmod 改變文件存取模式 chown 改變文件主 chroot 改變根目錄 cksum 顯示校驗(yàn)和 clri 清除指定的I節(jié)點(diǎn) cmp 文件比較 col 過濾反向換行 comb SCCS實(shí)用程序 comm 顯示兩個(gè)排序文件的公共行

command 執(zhí)行簡(jiǎn)單命令 continue 進(jìn)入下一循環(huán) cp 復(fù)制文件 cpio 復(fù)制文件檔案 cpp C語言預(yù)處理程序 crash 檢查系統(tǒng)內(nèi)存映象 create 建立臨時(shí)文件 cref 生成交叉引用表

cron 在指定時(shí)間執(zhí)行一組命令 crontab 為命令cron 準(zhǔn)備crontab文件 crypt 加密/解密 csplit 將一個(gè)文件分解 ct 遠(yuǎn)程終端注冊(cè)

ctags 創(chuàng)建供vi使用的標(biāo)識(shí)符 cu 呼叫另一UNIX系統(tǒng) cut 斷開一文件中所選擇的字段 cxref 生成C程序交叉訪問表 date 打印和設(shè)置時(shí)間

dc 桌面計(jì)算器 dd 轉(zhuǎn)換和復(fù)制文件 delta SCCS實(shí)用程序

deroff 去掉排版格式 devnm 標(biāo)識(shí)設(shè)備名 df 顯示可用磁盤空間 diff 顯示兩個(gè)文件的差異 diff3 顯示三個(gè)文件的差異 dircmp 目錄比較 dis 反匯編程序 du 顯示對(duì)磁盤的占用情況 dump 對(duì)指定文件備份 echo 回顯指定參數(shù) ed 行編輯器 edit 文本編輯器 egrep 在文件中查找指定模式 env 設(shè)置命令執(zhí)行環(huán)境 eqn 數(shù)學(xué)公式排版命令 eval 執(zhí)行指定命令 ex 行編輯器 exec 執(zhí)行指定命令 exit 進(jìn)程中止 expand 使表格占滿行寬 export 將變量傳遞給子程序 expr 計(jì)算表達(dá)式值 factor 因式分解 false 返回FALSE fgrep 在文件中查找指定模式 file 確定文件類型 find 查找符號(hào)條件的文件 fmt 安排簡(jiǎn)單的文本格式 fold 折行 for 循環(huán)語句

fsck 文件系統(tǒng)檢查和修復(fù) fsdb 文件系統(tǒng)調(diào)試程序

fumount 強(qiáng)制性拆協(xié)指定資源 function 函數(shù)說明 fuser 列出使用文件的進(jìn)程 fwtmp 產(chǎn)生記帳記錄 get SCCS實(shí)用程序 getconf 查找配置參數(shù)

getopt 獲得命令中的選擇項(xiàng)

getopts 獲得命令中的選擇項(xiàng)

getty 設(shè)置終端類型、模式、行律等 grep 在文件中查找指定模式 head 打印文件的頭若干行

hexdump 按十六進(jìn)制轉(zhuǎn)儲(chǔ)文件 id 顯示用戶號(hào) if 條件語句 init UNIX 初啟進(jìn)程 install 安裝一個(gè)文件到文件系統(tǒng)

ipcrm 刪除IPC隊(duì)列 ipcs 顯示IPC狀態(tài) join 連接兩個(gè)文件(關(guān)系操作〕

kill 中止指定進(jìn)程 killall 中止所有活動(dòng)進(jìn)程 labelit 給文件系統(tǒng)提供標(biāo)號(hào) ld 目標(biāo)文件鏈接編輯器 lex 詞法分析程序 line 讀一行 link 連接文件 lint C程序檢查程序 ln 鏈接文件 local 建立局部變量 logger 顯示注冊(cè)信息

login 注冊(cè)

logname 獲取注冊(cè)名 look 在排序文件中查找某行

lorder 查找目標(biāo)庫的次序關(guān)系

lp 打印文件

lpr 打印文件

lpstat 顯示打印隊(duì)列狀態(tài)

ls 目錄列表 mail 發(fā)送或接收電子郵件

mailx 發(fā)送、接收或處理電子郵件

make 執(zhí)行有選擇的編譯

makekey 生成加密碼 man 顯示命令用法

mesg 接收或取消對(duì)話方式

mkdir 建立目錄 mkfifo 建立FIFO文件

mkfs 建立文件系統(tǒng) mknod 建立文件系統(tǒng)的I節(jié)點(diǎn) mount 安裝文件系統(tǒng) mv 移動(dòng)文件 mvdir 移動(dòng)目錄 ncheck 按節(jié)點(diǎn)號(hào)生成節(jié)點(diǎn)名清單

neqn 數(shù)學(xué)公式排版命令

newgrp 把用戶加入到新組 news 打印消息 nice 改變命令執(zhí)行優(yōu)先級(jí) nl 給文件加行號(hào) nm 顯示目標(biāo)文件符號(hào)表

nohup 忽略掛起或退出執(zhí)行命令 nroff 文本文件排版 od 按八進(jìn)制轉(zhuǎn)儲(chǔ)文件 pack 壓縮文件 passwd 改變口令

paste 文件合并 pax 可移植檔案管理程序

pcat 顯示壓縮格式文件 pg 分屏顯示 pr 按打印格式顯示文件

pstat 報(bào)告系統(tǒng)信息 pwck 口令文件校驗(yàn)程序

pwd 顯示當(dāng)前工作目錄

quot 檢查文件系統(tǒng)所有權(quán) ratfor 轉(zhuǎn)換成標(biāo)準(zhǔn)FORTRANC程序

read 從標(biāo)準(zhǔn)輸入讀一行 readonly 標(biāo)記變量為只讀 red 文本編輯器 regcmp 正規(guī)表達(dá)式編輯 restor 文件系統(tǒng)恢復(fù)程序 restore 文件系統(tǒng)恢復(fù)程序 return 返回語句 rev 顛倒文件中每行字符次序 rm 刪除文件

rmdel SCCS使用程序 rmdir 刪除目錄 rsh(net)遠(yuǎn)程SHELL rsh(sec)受限SHELL runacct 運(yùn)行日常記帳程序 sact SCCS實(shí)用程序 sag 打印系統(tǒng)活動(dòng)圖

sar 報(bào)告系統(tǒng)活動(dòng) sccsdiff SCCS實(shí)用程序 sdb 符號(hào)調(diào)試器 sdiff 并列顯示兩個(gè)文件的差別 sed 流編輯器 sendto 發(fā)送郵件

set 設(shè)置選項(xiàng)或參數(shù)

setmnt 建立文件系統(tǒng)安裝表

sh SHELL解釋器 shift 命令行參數(shù)移位

shl SHELL層(layer)管理程序 shutdown 關(guān)機(jī) size 顯示目標(biāo)文件長(zhǎng)度 sleep 掛起進(jìn)程一段時(shí)間

sort 文件排序和合并 spell 拼寫錯(cuò)誤檢查程序 spellin 拼寫錯(cuò)誤檢查 spellout 拼寫錯(cuò)誤檢查 spline 按平滑曲線輸出數(shù)據(jù) split 分解一個(gè)文件 strings 在目標(biāo)文件中尋找可打印字符

strip 刪除符號(hào)表 stty 設(shè)置終端模式 su 改變用戶 sum 顯示文件校驗(yàn)和及塊數(shù) sync 更新磁盤 tabs 設(shè)置制表符

tbl 表格排版 tee 在管道上建立多通路 tic 終端數(shù)據(jù)庫編譯程序 time 打印執(zhí)行命令所花時(shí)間 tiemx 報(bào)告命令所花時(shí)間及活動(dòng)

touch 更新文件時(shí)間 tput 恢復(fù)終端或查詢數(shù)據(jù)庫 tr 轉(zhuǎn)換字符 trap 捕獲信號(hào)

troff 文本文件排版

true 返回TRUE tsort 拓?fù)渑判?tty 顯示終端設(shè)備名 umask 設(shè)置文件掩碼 umount 拆卸文件系統(tǒng) uname 顯示系統(tǒng)名 unget SCCS實(shí)用程序 uniq 刪除文件中重復(fù)行 units 度量單位轉(zhuǎn)換 unlink 刪除文件 unpack 將壓縮文件還原

until 循環(huán)語句 update 更新磁盤 val SCCS實(shí)用程序 vc SCCS實(shí)用程序 vi 全屏幕編輯器 volcopy 文件系統(tǒng)的文字拷貝 wait 等待所有字進(jìn)程結(jié)束 while 循環(huán)語句 who 顯示誰在使用系統(tǒng) whodo 顯示哪些用戶在做什么 write 和另一用戶直接對(duì)話 xargs 建立參數(shù)表并執(zhí)行命令 yacc 語法分析程序生成器;

#!/bin/csh

#Scriptname: test.csh goto main usage: echo “(EXAMPLE):test.csh 1(A number in [0-3])” echo “Please input the ARGV!”

main:

if($#argv == 0)then

goto usage

exit();endif

if($argv[1] >= 0 && $argv[1] <= 3)then

switch($argv[1])case 1:

foreach file(1 2 3 4 5 6 7 8 9 10)touch file_$file end

mkdir dir1 dir2 foreach dir_file(file*)switch($dir_file)case “file1”: mv $dir_file

dir1 case “file2”: mv $dir_file

dir1 case “file3”: mv $dir_file

dir1 case “file4”: mv $dir_file

dir1 case “file5”: mv $dir_file

dir1 case “file6”: mv $dir_file

dir2 case “file7”: mv $dir_file

dir2 case “file8”: mv $dir_file

dir2 case “file9”: mv $dir_file

dir2 case “file10”: mv $dir_file

dir2

endsw end

touch 'history.his' foreach cur_dir(dir*)if(-d $cur_dir)then echo directory $cur_dir ls $cur_dir >>'history.his' endif end breaksw

case 2: foreach file(1 2 3 4 5 6 7 8 9 10)touch file_$file end

mkdir dir1 dir2 foreach dir_file(file*)switch($dir_file)case “file1”: mv $dir_file

dir1 case “file2”: mv $dir_file

dir2 case “file3”: mv $dir_file

dir1 case “file4”: mv $dir_file

dir2 case “file5”: mv $dir_file

dir1 case “file6”: mv $dir_file

dir2 case “file7”: mv $dir_file

dir1 case “file8”: mv $dir_file

dir2 case “file9”: mv $dir_file

dir1 case “file10”: mv $dir_file

dir2

endsw end

touch 'history.his' foreach cur_dir(dir*)if(-d $cur_dir)then echo directory $cur_dir ls $cur_dir >>'history.his' endif end breaksw

case 3: foreach file(1 2 3 4 5 6 7 8 9 10)touch file_$file end

`mkdir./dir1/dir2` foreach dir_file(file*)`mv $dir_file./dir1/dir2` end

touch 'history.his' `ls./dir1/dir2 >>history.his` breaksw

case 0: if(!-z `pwd`)then echo “I do not know why you want to do this!” else rm-r * touch 'history.his' echo “You have deleted all the files.” >>'history.his' endif breaksw

default:

echo “You had input the wrong number!” endsw else echo “Input num exceed restriction!!” endif

第三篇:操作系統(tǒng)課程設(shè)計(jì)

操作系統(tǒng)課程設(shè)計(jì)

注意事項(xiàng):

0.請(qǐng)每位同學(xué)必須按時(shí)提交課程設(shè)計(jì)報(bào)告(包括電子版和紙質(zhì)版),算入期末成績(jī)

1.在三個(gè)題目中選擇一個(gè)

2.如果選擇題目

(一)進(jìn)程調(diào)度算法,要求實(shí)現(xiàn)其中2個(gè)以上(包括2個(gè))進(jìn)程調(diào)度算法 3.如果選擇題目

(二)銀行家算法,要求能夠判斷系統(tǒng)的安全狀態(tài)

4.如果選擇題目

(三)頁面調(diào)度算法,要求實(shí)現(xiàn)其中2個(gè)以上(包含2個(gè))進(jìn)程調(diào)度算法 5.報(bào)告應(yīng)包含算法分析、實(shí)驗(yàn)截圖、核心算法源代碼,請(qǐng)各位同學(xué)認(rèn)真對(duì)待,獨(dú)立完成 6.提交要求:電子版(包括實(shí)驗(yàn)程序)請(qǐng)發(fā)至ropeal@163.com,紙質(zhì)版請(qǐng)班長(zhǎng)收齊,由班長(zhǎng)統(tǒng)一在課堂上提交(并提交未交人員名單),截止時(shí)間第16周周三(2014.1.31)7.格式要求:

7.1 A4紙10頁左右

7.2 封面請(qǐng)注明班級(jí)、姓名、學(xué)號(hào)、所選題目

7.3 電子版發(fā)送時(shí),請(qǐng)打包成一個(gè)文件,將文件名設(shè)置為:學(xué)號(hào)+姓名+題目名稱(如20130000張三進(jìn)程調(diào)度算法課程設(shè)計(jì)),郵件主題同文件名

一、進(jìn)程調(diào)度算法

1.1 實(shí)驗(yàn)?zāi)康模? a、設(shè)計(jì)進(jìn)程控制塊PCB表結(jié)構(gòu),模擬實(shí)現(xiàn)進(jìn)程調(diào)度算法:FIFO,靜態(tài)優(yōu)先級(jí)調(diào)度,時(shí)間片輪轉(zhuǎn)調(diào)度,多級(jí)反饋隊(duì)列調(diào)度。(實(shí)現(xiàn)其中之二)。* b、建立進(jìn)程就緒隊(duì)列。對(duì)不同算法編制入鏈子程序。c、編寫一進(jìn)程調(diào)度程序模擬程序。模擬程序只對(duì)PCB進(jìn)行相應(yīng)的調(diào)度模擬操作,不需要實(shí)際程序。* 由用戶輸入進(jìn)程名和進(jìn)程長(zhǎng)度,然后按照短進(jìn)程優(yōu)先的進(jìn)程處理順序給出進(jìn)程的排序。

1.2 實(shí)驗(yàn)原理 調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。1.2.1 先來先服務(wù)和短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法

1.先來先服務(wù)調(diào)度算法。先來先服務(wù)(FCFS)調(diào)度算法是一種最簡(jiǎn)單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。FCFS算法比較有利于長(zhǎng)作業(yè)(進(jìn)程),而不利于短作業(yè)(進(jìn)程)。由此可知,本算法適合于CPU繁忙型作業(yè),而不利于I/O繁忙型的作業(yè)(進(jìn)程)。

2.短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法。短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法(SJ/PF)是指對(duì)短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。但其對(duì)長(zhǎng)作業(yè)不利;不能保證緊迫性作業(yè)(進(jìn)程)被及時(shí)處理;作業(yè)的長(zhǎng)短只是被估算出來的。1.2.2 高優(yōu)先權(quán)優(yōu)先調(diào)度算法

1.優(yōu)先權(quán)調(diào)度算法的類型。為了照顧緊迫性作業(yè),使之進(jìn)入系統(tǒng)后便獲得優(yōu)先處理,引入了最高優(yōu)先權(quán)優(yōu)先(FPF)調(diào)度算法。此算法常被用在批處理系統(tǒng)中,作為作業(yè)調(diào)度算法,也作為多種操作系統(tǒng)中的進(jìn)程調(diào)度,還可以用于實(shí)時(shí)系統(tǒng)中。當(dāng)其用于作業(yè)調(diào)度,將后備隊(duì)列中若干個(gè)優(yōu)先權(quán)最高的作業(yè)裝入內(nèi)存。當(dāng)其用于進(jìn)程調(diào)度時(shí),把處理機(jī)分配給就緒隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程,此時(shí),又可以進(jìn)一步把該算法分成以下兩種: 1)非搶占式優(yōu)先權(quán)算法

2)搶占式優(yōu)先權(quán)調(diào)度算法(高性能計(jì)算機(jī)操作系統(tǒng))

2.優(yōu)先權(quán)類型。對(duì)于最高優(yōu)先權(quán)優(yōu)先調(diào)度算法,其核心在于:它是使用靜態(tài)優(yōu)先權(quán)還是動(dòng)態(tài)優(yōu)先權(quán),以及如何確定進(jìn)程的優(yōu)先權(quán)。3.高響應(yīng)比優(yōu)先調(diào)度算法

為了彌補(bǔ)短作業(yè)優(yōu)先算法的不足,我們引入動(dòng)態(tài)優(yōu)先權(quán),使作業(yè)的優(yōu)先等級(jí)隨著等待時(shí)間的增加而以速率a提高。該優(yōu)先權(quán)變化規(guī)律可描述為:優(yōu)先權(quán)=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間;即 =(響應(yīng)時(shí)間)/要求服務(wù)時(shí)間 1.2.3 基于時(shí)間片的輪轉(zhuǎn)調(diào)度算法

1.時(shí)間片輪轉(zhuǎn)法。時(shí)間片輪轉(zhuǎn)法一般用于進(jìn)程調(diào)度,每次調(diào)度,把CPU分配隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)記時(shí)器發(fā)出一個(gè)時(shí)鐘中斷請(qǐng)求,該進(jìn)程被停止,并被送往就緒隊(duì)列末尾;依次循環(huán)。2.多級(jí)反饋隊(duì)列調(diào)度算法 多級(jí)反饋隊(duì)列調(diào)度算法多級(jí)反饋隊(duì)列調(diào)度算法,不必事先知道各種進(jìn)程所需要執(zhí)行的時(shí)間,它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。其實(shí)施過程如下:

1)設(shè)置多個(gè)就緒隊(duì)列,并為各個(gè)隊(duì)列賦予不同的優(yōu)先級(jí)。在優(yōu)先權(quán)越高的隊(duì)列中,為每個(gè)進(jìn)程所規(guī)定的執(zhí)行時(shí)間片就越小。

2)當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先放入第一隊(duì)列的末尾,按FCFS原則排隊(duì)等候調(diào)度。如果他能在一個(gè)時(shí)間片中完成,便可撤離;如果未完成,就轉(zhuǎn)入第二隊(duì)列的末尾,在同樣等待調(diào)度?? 如此下去,當(dāng)一個(gè)長(zhǎng)作業(yè)(進(jìn)程)從第一隊(duì)列依次將到第n隊(duì)列(最后隊(duì)列)后,便按第n隊(duì)列時(shí)間片輪轉(zhuǎn)運(yùn)行。3)僅當(dāng)?shù)谝魂?duì)列空閑時(shí),調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)?到第(i-1)隊(duì)列空時(shí),才會(huì)調(diào)度第i隊(duì)列中的進(jìn)程運(yùn)行,并執(zhí)行相應(yīng)的時(shí)間片輪轉(zhuǎn)。4)如果處理機(jī)正在處理第i隊(duì)列中某進(jìn)程,又有新進(jìn)程進(jìn)入優(yōu)先權(quán)較高的隊(duì)列,則此新隊(duì)列搶占正在運(yùn)行的處理機(jī),并把正在運(yùn)行的進(jìn)程放在第i隊(duì)列的隊(duì)尾。

1.3 實(shí)驗(yàn)要求

a、使用模塊化設(shè)計(jì)思想來設(shè)計(jì); b、給出算法的流程圖或偽碼說明。c、學(xué)生可按照自身?xiàng)l件,隨意選擇采用的算法,(例如:采用冒泡法編寫程序,實(shí)現(xiàn)短進(jìn)程優(yōu)先調(diào)度的算法)

d、進(jìn)程調(diào)度程序模擬程序只對(duì)PCB進(jìn)行相應(yīng)的調(diào)度模擬操作,不需要實(shí)際程序。

1.4 算法簡(jiǎn)析 a、每個(gè)進(jìn)程可有三個(gè)狀態(tài),并假設(shè)初始狀態(tài)為就緒狀態(tài)。b、為了便于處理,程序中的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的優(yōu)先數(shù)或輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶給定。c、在優(yōu)先數(shù)算法中,優(yōu)先數(shù)可以先取值為(50-該進(jìn)程所需時(shí)間),進(jìn)程每執(zhí)行一次,優(yōu)先數(shù)減3,CPU時(shí)間片數(shù)(CPUtime)加1,* 進(jìn)程還需要的時(shí)間片數(shù)(needtime)減1。在時(shí)間片輪轉(zhuǎn)算法中,采用固定時(shí)間片

(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了2個(gè)單位),這時(shí),CPU時(shí)間片(CPUtime)數(shù)加2,* 進(jìn)程還需要的時(shí)間片數(shù)(needtime)減2,并排列到就緒隊(duì)列的尾上。

d、對(duì)于遇到優(yōu)先數(shù)一致的情況,采用FIFO策略解決。

二、銀行家算法

2.1 概述

2.1.1 設(shè)計(jì)目的1、了解多道程序系統(tǒng)中,多個(gè)進(jìn)程并發(fā)執(zhí)行的資源分配。

2、掌握死鎖的產(chǎn)生的原因、產(chǎn)生死鎖的必要條件和處理死鎖的基本方法。

3、掌握預(yù)防死鎖的方法,系統(tǒng)安全狀態(tài)的基本概念。

4、掌握銀行家算法,了解資源在進(jìn)程并發(fā)執(zhí)行中的資源分配策略。

5、理解死鎖避免在當(dāng)前計(jì)算機(jī)系統(tǒng)不常使用的原因

2.2 關(guān)于死鎖

2.2.1 死鎖概念:

在多道程序系統(tǒng)中,雖可借助于多個(gè)進(jìn)程的并發(fā)執(zhí)行,來改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險(xiǎn)━━死鎖。所謂死鎖(Deadlock),是指多個(gè)進(jìn)程在運(yùn)行中因爭(zhēng)奪資源而造成的一種僵局(Deadly_Embrace),當(dāng)進(jìn)程處于這種僵持狀態(tài)時(shí),若無外力作用,它們都將無法再向前推進(jìn)。一組進(jìn)程中,每個(gè)進(jìn)程都無限等待被該組進(jìn)程中另一進(jìn)程所占有的資源,因而永遠(yuǎn)無法得到的資源,這種現(xiàn)象稱為進(jìn)程死鎖,這一組進(jìn)程就稱為死鎖進(jìn)程。

2.2.2 關(guān)于死鎖的一些結(jié)論:

參與死鎖的進(jìn)程最少是兩個(gè)(兩個(gè)以上進(jìn)程才會(huì)出現(xiàn)死鎖)

參與死鎖的進(jìn)程至少有兩個(gè)已經(jīng)占有資源

參與死鎖的所有進(jìn)程都在等待資源

參與死鎖的進(jìn)程是當(dāng)前系統(tǒng)中所有進(jìn)程的子集

注:如果死鎖發(fā)生,會(huì)浪費(fèi)大量系統(tǒng)資源,甚至導(dǎo)致系統(tǒng)崩潰。

2.2.3 資源分類:

永久性資源: 可以被多個(gè)進(jìn)程多次使用(可再用資源),分為:可搶占資源與不可搶占資源

臨時(shí)性資源:只可使用一次的資源;如信號(hào)量,中斷信號(hào),同步信號(hào)等(可消耗性資源)

“申請(qǐng)--分配--使用--釋放”模式

2.2.4 產(chǎn)生死鎖的四個(gè)必要條件:

1、互斥使用(資源獨(dú)占)

一個(gè)資源每次只能給一個(gè)進(jìn)程使用

2、不可強(qiáng)占(不可剝奪)

資源申請(qǐng)者不能強(qiáng)行的從資源占有者手中奪取資源,資源只能由占有者自愿釋放

3、請(qǐng)求和保持(部分分配,占有申請(qǐng))

一個(gè)進(jìn)程在申請(qǐng)新的資源的同時(shí)保持對(duì)原有資源的占有(只有這樣才是動(dòng)態(tài)申請(qǐng),動(dòng)態(tài)分配)

4、循環(huán)等待

存在一個(gè)進(jìn)程等待隊(duì)列

{P1 , P2 , ? , Pn},其中P1等待P2占有的資源,P2等待P3占有的資源,?,Pn等待P1占有的資源,形成一個(gè)進(jìn)程等待環(huán)路

2.2.5 死鎖的解決方案 1 產(chǎn)生死鎖的例子

申請(qǐng)不同類型資源產(chǎn)生死鎖

P1: ?

申請(qǐng)打印機(jī) 申請(qǐng)掃描儀 使用

釋放打印機(jī) 釋放掃描儀 ? P2: ?

申請(qǐng)掃描儀 申請(qǐng)打印機(jī) 使用

釋放打印機(jī) 釋放掃描儀 ?

申請(qǐng)同類資源產(chǎn)生死鎖(如內(nèi)存)

設(shè)有資源R,R有m個(gè)分配單位,由n個(gè)進(jìn)程P1,P2,?,Pn(n > m)共享。假設(shè)每個(gè)進(jìn)程對(duì)R的申請(qǐng)和釋放符合下列原則: * 一次只能申請(qǐng)一個(gè)單位 * 滿足總申請(qǐng)后才能使用 * 使用完后一次性釋放

m=2,n=3 資源分配不當(dāng)導(dǎo)致死鎖產(chǎn)生

2死鎖預(yù)防: 定義:在系統(tǒng)設(shè)計(jì)時(shí)確定資源分配算法,保證不發(fā)生死鎖。具體的做法是破壞產(chǎn)生死鎖的四個(gè)必要條件之一

①破壞“不可剝奪”條件

在允許進(jìn)程動(dòng)態(tài)申請(qǐng)資源前提下規(guī)定,一個(gè)進(jìn)程在申請(qǐng)新的資源不能立即得到滿足而變?yōu)榈却隣顟B(tài)之前,必須釋放已占有的全部資源,若需要再重新申請(qǐng) ②破壞“請(qǐng)求和保持”條件

要求每個(gè)進(jìn)程在運(yùn)行前必須一次性申請(qǐng)它所要求的所有資源,且僅當(dāng)該進(jìn)程所要資源均可滿足時(shí)才給予一次性分配 ③破壞“循環(huán)等待”條件 采用資源有序分配法:

把系統(tǒng)中所有資源編號(hào),進(jìn)程在申請(qǐng)資源時(shí)必須嚴(yán)格按資源編號(hào)的遞增次序進(jìn)行,否則操作系統(tǒng)不予分配。

2.2.6 安全狀態(tài)與不安全狀態(tài)

安全狀態(tài): 如果存在一個(gè)由系統(tǒng)中所有進(jìn)程構(gòu)成的安全序列P1,?Pn,則系統(tǒng)處于安全狀態(tài)。一個(gè)進(jìn)程序列{P1,?,Pn}是安全的,如果對(duì)于每一個(gè)進(jìn)程Pi(1≤i≤n),它以后尚需要的資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj(j < i)當(dāng)前占有資源量之和,系統(tǒng)處于安全狀態(tài)(安全狀態(tài)一定是沒有死鎖發(fā)生的)。

不安全狀態(tài):不存在一個(gè)安全序列,不安全狀態(tài)一定導(dǎo)致死鎖。

2.3 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

1.可利用資源向量矩陣AVAILABLE。這是一個(gè)含有m個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)地改變。如果AVAILABLE [j]= K,則表示系統(tǒng)中現(xiàn)有R類資源K個(gè)

2.最大需求矩陣MAX。這是一個(gè)n*m的矩陣,用以表示每一個(gè)進(jìn)程對(duì)m類資源的最大需求。如果MAX [i,j]=K,則表示進(jìn)程i需要R類資源的數(shù)目為K。

3.分配矩陣ALLOCATION。這也是一個(gè)n*m的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。如果ALLOCATION [i,j]=K,則表示進(jìn)程i當(dāng)前已分得R類資源的數(shù)目為K。

4.需求矩陣NEED。這也是一個(gè)n*m的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類資源數(shù)。如果NEED [i,j]=K,則表示進(jìn)程i還需要R類資源K個(gè),才能完成其任務(wù)。上述矩陣存在下述關(guān)系:

NEED [i,j]= MAX[i,j]﹣ ALLOCATION[i,j]

2.4 算法的實(shí)現(xiàn) 2.4.1 初始化 由用戶輸入數(shù)據(jù),分別對(duì)可利用資源向量矩陣AVAILABLE、最大需求矩陣MAX、分配矩陣ALLOCATION、需求矩陣NEED賦值。2.4.2 銀行家算法

在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。

銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。

設(shè)進(jìn)程cusneed提出請(qǐng)求REQUEST [i],則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果REQUEST [cusneed] [i]<= NEED[cusneed][i],則轉(zhuǎn)(2);否則,出錯(cuò)。

(2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],則轉(zhuǎn)(3);否則,出錯(cuò)。(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): AVAILABLE[i]-=REQUEST[cusneed][i];ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];NEED[cusneed][i]-=REQUEST[cusneed][i];(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。

2.4.3 安全性檢查算法

(1)設(shè)置兩個(gè)工作向量Work=AVAILABLE;FINISH(2)從進(jìn)程集合中找到一個(gè)滿足下述條件的進(jìn)程,F(xiàn)INISH==false;NEED<=Work;如找到,執(zhí)行(3);否則,執(zhí)行(4)(3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。

Work+=ALLOCATION;Finish=true;GOTO 2(4)如所有的進(jìn)程Finish= true,則表示安全;否則系統(tǒng)不安全。

三、頁面調(diào)度算法 3.1 實(shí)驗(yàn)名稱

頁式虛擬存儲(chǔ)管理:頁面調(diào)度算法 3.2 實(shí)驗(yàn)?zāi)康?/p>

頁式虛擬存儲(chǔ)器實(shí)現(xiàn)的一個(gè)難點(diǎn)是設(shè)計(jì)頁面調(diào)度(置換)算法,即將新頁面調(diào)入內(nèi)存時(shí),如果內(nèi)存中所有的物理頁都已經(jīng)分配出去,就要按某種策略來廢棄某個(gè)頁面,將其所占據(jù)的物理頁釋放出來,供新頁面使用。本實(shí)驗(yàn)的目的是通過編程實(shí)現(xiàn)幾種常見的頁面調(diào)度(置換)算法,加深讀者對(duì)頁面思想的理解。3.3 實(shí)驗(yàn)原理

頁面調(diào)度算法

目前有許多頁面調(diào)度算法,本實(shí)驗(yàn)主要涉及先進(jìn)先出調(diào)度算法、最近最少調(diào)度算法、最近最不常用調(diào)度算法。本實(shí)驗(yàn)使用頁面調(diào)度算法時(shí)作如下假設(shè),進(jìn)程在創(chuàng)建時(shí)由操作系統(tǒng)為之分配一個(gè)固定數(shù)目物理頁,執(zhí)行過程中物理頁的數(shù)目和位置不會(huì)改變。也即進(jìn)程進(jìn)行頁面調(diào)度時(shí)只能在分到的幾個(gè)物理頁中進(jìn)行。

下面對(duì)各調(diào)度算法的思想作一介紹。

<1> 先進(jìn)先出調(diào)度算法

先進(jìn)先出調(diào)度算法根據(jù)頁面進(jìn)入內(nèi)存的時(shí)間先后選擇淘汰頁面,先進(jìn)入內(nèi)存的頁面先淘汰,后進(jìn)入內(nèi)存的后淘汰。本算法實(shí)現(xiàn)時(shí)需要將頁面按進(jìn)入內(nèi)存的時(shí)間先后組成一個(gè)隊(duì)列,每次調(diào)度隊(duì)首頁面予以淘汰。

<2>最近最少調(diào)度算法

先進(jìn)先出調(diào)度算法沒有考慮頁面的使用情況,大多數(shù)情況下性能不佳。根據(jù)程序執(zhí)行的局部性特點(diǎn),程序一旦訪問了某些代碼和數(shù)據(jù),則在一段時(shí)間內(nèi)會(huì)經(jīng)常訪問他們,因此最近最少用調(diào)度在選擇淘汰頁面時(shí)會(huì)考慮頁面最近的使用,總是選擇在最近一段時(shí)間以來最少使用的頁面予以淘汰。算法實(shí)現(xiàn)時(shí)需要為每個(gè)頁面設(shè)置數(shù)據(jù)結(jié)構(gòu)記錄頁面自上次訪問以來所經(jīng)歷的時(shí)間。

<3>最近最不常用調(diào)度算法

由于程序設(shè)計(jì)中經(jīng)常使用循環(huán)結(jié)構(gòu),根據(jù)程序執(zhí)行的局部性特點(diǎn),可以設(shè)想在一段時(shí)間內(nèi)經(jīng)常被訪問的代碼和數(shù)據(jù)在將來也會(huì)經(jīng)常被訪問,顯然這樣的頁面不應(yīng)該被淘汰。最近最不常用調(diào)度算法總是根據(jù)一段時(shí)間內(nèi)頁面的訪問次數(shù)來選擇淘汰頁面,每次淘汰訪問次數(shù)最少的頁面。算法實(shí)現(xiàn)時(shí)需要為每個(gè)頁面設(shè)置計(jì)數(shù)器,記錄訪問次數(shù)。計(jì)數(shù)器由硬件或操作系統(tǒng)自動(dòng)定時(shí)清零。

缺頁調(diào)度次數(shù)和缺頁中斷率、缺頁置換率計(jì)算

缺頁中斷次數(shù)是缺頁時(shí)發(fā)出缺頁中斷的次數(shù)。

缺頁中斷率=缺頁中斷次數(shù)/總的頁面引用次數(shù)*100%

缺頁調(diào)度次數(shù)是調(diào)入新頁時(shí)需要進(jìn)行頁面調(diào)度的次數(shù)

缺頁置換率=缺頁調(diào)度次數(shù)/總的頁面引用次數(shù)*100% 3.4 實(shí)驗(yàn)內(nèi)容

(1)設(shè)計(jì)程序?qū)崿F(xiàn)以上三種頁面調(diào)度算法,要求:

①.可以選擇頁面調(diào)度算法類型;

②.可以為進(jìn)程設(shè)置分到物理頁的數(shù)目,設(shè)置進(jìn)程的頁面引用情況,可以從鍵盤輸入頁面序列,也可從文件中讀取;

③.隨時(shí)計(jì)算當(dāng)前的頁面調(diào)度次數(shù)的缺頁中斷率;

④.使用敲鍵盤或響應(yīng)WM-TIMER的形式模仿時(shí)間的流逝;

⑤.以直觀的的形式將程序的執(zhí)行情況顯示在計(jì)算機(jī)屏幕上;

⑥.存盤及讀盤功能,可以隨時(shí)將數(shù)據(jù)存入磁盤文件,供以后重復(fù)實(shí)驗(yàn)時(shí)使用。

(2)假定進(jìn)程分配到3個(gè)物理塊,對(duì)于下面的頁面引用序列:(test.txt)

7-0-1-2-0-3-0-4-2-3-0-3-2-1-2-0-1-7-0-1

請(qǐng)分別用先進(jìn)和先出調(diào)度算法,最近最少用調(diào)度算法,最近最不常用調(diào)度算法計(jì)算缺頁中斷次數(shù),缺頁中斷率和缺頁調(diào)度次數(shù)、缺頁置換率。

再假定進(jìn)程分配到4、5個(gè)物理塊,重復(fù)本實(shí)驗(yàn)。

(3)假定進(jìn)程分配到3個(gè)物理塊,對(duì)于下面的頁面引用序列:(test2.txt)

4-3-2-1-4-3-5-4-3-2-1-5-0-7-3-8-9-0-2-1-4-7-3-9

請(qǐng)分別用先進(jìn)先出調(diào)度算法、最近最少用調(diào)度算法,最近最不常用調(diào)度算法計(jì)算缺頁中斷次數(shù),缺頁中斷率和缺頁調(diào)度次數(shù)、缺頁置換率。

再假定進(jìn)程分配到4、5個(gè)物理塊,重復(fù)本實(shí)驗(yàn)。

(4)假定進(jìn)程分配到3個(gè)物理塊,使用程序的動(dòng)態(tài)頁面序列生成算法,生成一個(gè)頁面序列,將此序列存入磁盤文件。再從磁盤文件讀入該序列,用程序分別計(jì)算三種算法下的缺頁中斷次數(shù)、缺頁中斷率和缺頁調(diào)度次數(shù)、缺頁置換率。

第四篇:操作系統(tǒng)課程設(shè)計(jì)

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

(操作系統(tǒng)課程設(shè)計(jì))

連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存

管理模擬實(shí)現(xiàn)

學(xué)生姓名: 韓 慧 學(xué)生學(xué)號(hào): 031140312 班 級(jí): 031140--3 0311401、02、03、04班制

二〇一三年十二月 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

目錄

《操作系統(tǒng)》課程設(shè)計(jì).......................................................1 引言......................................................................3 課程設(shè)計(jì)目的和內(nèi)容......................................................3 需求分析.........................................................................3 概要設(shè)計(jì)...................................................................3 開發(fā)環(huán)境........................................................................4 系統(tǒng)分析設(shè)計(jì).....................................................................4 有關(guān)了解內(nèi)存管理的相關(guān)理論..................................................4 內(nèi)存管理概念........................................................................4 內(nèi)存管理的必要性..............................................................4 內(nèi)存的物理組織.............................................................4 什么是虛擬內(nèi)存.................................................................5 連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理方式...................................................5 單一連續(xù)分配(單個(gè)分區(qū))...................................................5

固定分區(qū)存儲(chǔ)管理...............................................................5 可變分區(qū)存儲(chǔ)管理(動(dòng)態(tài)分區(qū))..............................................5 可重定位分區(qū)存儲(chǔ)管理........................................................5 問題描述和分析....................................................................6 程序流程圖........................................................................6 數(shù)據(jù)結(jié)構(gòu)體分析..................................................................8 主要程序代碼分析...............................................................9 分析并實(shí)現(xiàn)四種內(nèi)存分配算法.................................................11 最先適應(yīng)算.....................................................................11 下次適應(yīng)分配算法..........................................................13 最優(yōu)適應(yīng)算法...............................................................16 最壞適應(yīng)算法...............................................................18 回收內(nèi)存算法................................................................20 調(diào)試與操作說明.................................................................22

初始界面.......................................................................22 模擬內(nèi)存分配...............................................................23

已分配分區(qū)說明表面............................................................24 空閑區(qū)說明表界面.............................................................24 回收內(nèi)存界面.....................................................................25 重新申請(qǐng)內(nèi)存界面..........................................................26.總結(jié)與體會(huì)......................................................................28 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

參考文獻(xiàn).........................................................................28

引言

操作系統(tǒng)是最重要的系統(tǒng)軟件,同時(shí)也是最活躍的學(xué)科之一。我們通過操作系統(tǒng)可以理解計(jì)算機(jī)系統(tǒng)的資源如何組織,操作系統(tǒng)如何有效地管理這些系統(tǒng)資源,用戶如何通過操作系統(tǒng)與計(jì)算機(jī)系統(tǒng)打交道。

存儲(chǔ)器是計(jì)算機(jī)系統(tǒng)的重要組成部分,近年來,存儲(chǔ)器容量雖然一直在不斷擴(kuò)大,但仍不能滿足現(xiàn)代軟件發(fā)展的需要,因此,存儲(chǔ)器仍然是一種寶貴而又緊俏的資源。如何對(duì)它加以有效的管理,不僅直接影響到存儲(chǔ)器的利用率,而且還對(duì)系統(tǒng)性能有重大影響。而動(dòng)態(tài)分區(qū)分配屬于連續(xù)分配的一種方式,它至今仍在內(nèi)存分配方式中占有一席之地。

課程設(shè)計(jì)目的和內(nèi)容:

理解內(nèi)存管理的相關(guān)理論,掌握連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理的理論;通過對(duì)實(shí)際問題的編程實(shí)現(xiàn),獲得實(shí)際應(yīng)用和編程能力。

編寫程序?qū)崿F(xiàn)連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理方式,該程序管理一塊虛擬內(nèi)存,實(shí)現(xiàn)內(nèi)存分配和回收功能。分析并實(shí)現(xiàn)四種內(nèi)存分配算法,即最先適應(yīng)算法,下次最先適應(yīng)算法,最優(yōu)適應(yīng)算法,最壞適應(yīng)算法。內(nèi)存分配算法和回收算法的實(shí)現(xiàn)。

需求分析

動(dòng)態(tài)分區(qū)分配是根據(jù)進(jìn)程的實(shí)際需要,動(dòng)態(tài)地為之分配內(nèi)存空間。在實(shí)現(xiàn)動(dòng)態(tài)分區(qū)分配時(shí),將涉及到分區(qū)分配中所用的數(shù)據(jù)結(jié)構(gòu)、分區(qū)分配算法和分區(qū)的分配和回收操作這樣三個(gè)問題。常用的數(shù)據(jù)結(jié)構(gòu)有動(dòng)態(tài)分區(qū)表和動(dòng)態(tài)分區(qū)鏈。在對(duì)數(shù)據(jù)結(jié)構(gòu)有一定掌握程度的情況下設(shè)計(jì)合理的數(shù)據(jù)結(jié)構(gòu)來描述存儲(chǔ)空間,實(shí)現(xiàn)分區(qū)存儲(chǔ)管理的內(nèi)存分配功能,應(yīng)該選擇最合適的適應(yīng)算法(首次適應(yīng)算法,最佳適應(yīng)算法,最后適應(yīng)算法,最壞適應(yīng)算法),在動(dòng)態(tài)分區(qū)存儲(chǔ)管理方式中主要實(shí)現(xiàn)內(nèi)存分配和內(nèi)存回收算法,在這些存儲(chǔ)管理中間必然會(huì)有碎片的產(chǎn)生,當(dāng)碎片產(chǎn)生時(shí),進(jìn)行碎片的拼接等相關(guān)的內(nèi)容

概要設(shè)計(jì)

本程序采用機(jī)構(gòu)化模塊化的設(shè)計(jì)方法,共分為四大模塊。⑴最先適應(yīng)算法實(shí)現(xiàn)

從空閑分區(qū)表的第一個(gè)表目起查找該表,把最先能夠滿足要求的空閑區(qū)分配給作業(yè),這種方法目的在于減少查找時(shí)間。為適應(yīng)這種算法,空閑分區(qū)表(空閑區(qū)鏈)中的空閑分區(qū)要按地址由低到高進(jìn)行排序。該算法優(yōu)先使用低址部分空閑區(qū),在低址空間造成許多小的空閑區(qū),在高地址空間保留大的空閑區(qū)。⑵下次適應(yīng)分配算法實(shí)現(xiàn) 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

該算法是最先適應(yīng)算法的變種。在分配內(nèi)存空間時(shí),不再每次從表頭(鏈?zhǔn)祝╅_始查找,而是從上次找到空閑區(qū)的下一個(gè)空閑開始查找,直到找到第一個(gè)能滿足要求的的空閑區(qū)為止,并從中劃出一塊與請(qǐng)求大小相等的內(nèi)存空間分配給作業(yè)。該算法能使內(nèi)存中的空閑區(qū)分布得較均勻。⑶最優(yōu)適應(yīng)算法實(shí)現(xiàn)

它從全部空閑區(qū)中找出能滿足作業(yè)要求的、且大小最小的空閑分區(qū),這種方法能使碎片盡量小。為適應(yīng)此算法,空閑分區(qū)表(空閑區(qū)鏈)中的空閑分區(qū)要按從小到大進(jìn)行排序,自表頭開始查找到第一個(gè)滿足要求的自由分區(qū)分配。⑷最壞算法實(shí)現(xiàn)

最壞適應(yīng)分配算法要掃描整個(gè)空閑分區(qū)或鏈表,總是挑選一個(gè)最大的空閑分區(qū)分割給作業(yè)使用。該算法要求將所有的空閑分區(qū)按其容量從大到小的順序形成一空閑分區(qū)鏈,查找時(shí)只要看第一個(gè)分區(qū)能否滿足作業(yè)要求。

開發(fā)環(huán)境:

win7 下 VC++6.0 系統(tǒng)分析設(shè)計(jì):

相關(guān)算法原理,算法流程圖,涉及的數(shù)據(jù)結(jié)構(gòu)內(nèi)容都相應(yīng)包含在各章節(jié)中

有關(guān)了解內(nèi)存管理的相關(guān)理論

內(nèi)存管理概念:

內(nèi)存管理,是指軟件運(yùn)行時(shí)對(duì)計(jì)算機(jī)內(nèi)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效,快速的分配,并且在適當(dāng)?shù)臅r(shí)候釋放和回收內(nèi)存資源。內(nèi)存不是預(yù)先劃分好的,而是在系統(tǒng)運(yùn)行的過程中建立分區(qū).當(dāng)作業(yè)裝入主存時(shí),根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,若有則按需要分割一個(gè)分區(qū)給該作業(yè);否則令該作業(yè)等待.分區(qū)長(zhǎng)度不固定分區(qū)個(gè)數(shù)不固定。這種存儲(chǔ)管理的方法克服了固定分區(qū)嚴(yán)重浪費(fèi)主存的問題,提高了主存資源的利用率。

內(nèi)存管理的必要性:

內(nèi)存管理對(duì)于編寫出高效率的 Windows 程序是非常重要的,這是因?yàn)閃indows 是多任務(wù)系統(tǒng),它的內(nèi)存管理和單任務(wù)的 DOS 相比有很大的差異。DOS是單任務(wù)操作系統(tǒng),應(yīng)用程序分配到內(nèi)存后,如果它不主動(dòng)釋放,系統(tǒng)是不會(huì)對(duì)它作任何改變的;但 Windows 卻不然,它在同一時(shí)刻可能有多個(gè)應(yīng)用程序共享內(nèi)存,有時(shí)為了使某個(gè)任務(wù)更好地執(zhí)行,Windows 系統(tǒng)可能會(huì)對(duì)其它任務(wù)分配的內(nèi)存進(jìn)行移動(dòng),甚至刪除。因此,我們?cè)?Windows 應(yīng)用程序中使用內(nèi)存時(shí),要遵循Windows 內(nèi)存管理的一些約定,以盡量提高 Windows 內(nèi)存的利用率。湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

1.3 內(nèi)存的物理組織:

物理地址:

把內(nèi)存分成若干個(gè)大小相等的存儲(chǔ)單元,每個(gè)存儲(chǔ)單元占 8 位,稱作字節(jié)(byte)。每個(gè)單元給一個(gè)編號(hào),這個(gè)編號(hào)稱為物理地址(內(nèi)存地址、絕對(duì)地址、實(shí)地址)。

二、物理地址空間: 物理地址的集合稱為物理地址空間(主存地址空間),它是一個(gè)一維空間。

什么是虛擬內(nèi)存:

虛擬內(nèi)存是內(nèi)存管理技術(shù)的一個(gè)極其實(shí)用的創(chuàng)新。它是一段程序(由操作系統(tǒng)調(diào)度),持續(xù)監(jiān)控著所有物理內(nèi)存中的代碼段、數(shù)據(jù)段,并保證他們?cè)谶\(yùn)行中的效率以及可靠性,對(duì)于每個(gè)用戶層(user-level)的進(jìn)程分配一段虛擬內(nèi)存空間。當(dāng)進(jìn)程建立時(shí),不需要在物理內(nèi)存件之間搬移數(shù)據(jù),數(shù)據(jù)儲(chǔ)存于磁盤內(nèi)的虛擬內(nèi)存空間,也不需要為該進(jìn)程去配置主內(nèi)存空間,只有當(dāng)該進(jìn)程被被調(diào)用的時(shí)候才會(huì)被加載到主內(nèi)存。

連續(xù)動(dòng)態(tài)分區(qū)內(nèi)存管理方式的實(shí)現(xiàn)

在早期的操作系統(tǒng)中,主存分配廣泛采用連續(xù)分配方式。連續(xù)分配方式,是指為一個(gè)用戶程序分配一個(gè)連續(xù)的內(nèi)存空間,該連續(xù)內(nèi)存空間指的的是物理內(nèi)存。下面介紹連續(xù)分配的四種方式。

單一連續(xù)分配(單個(gè)分區(qū))

最簡(jiǎn)單的存儲(chǔ)管理方式,用于多道程序設(shè)計(jì)技術(shù)之前。內(nèi)存分為系統(tǒng)區(qū)和用戶區(qū),系統(tǒng)區(qū)由操作系統(tǒng)使用。用戶區(qū)作為一個(gè)連續(xù)的分區(qū)分配給一個(gè)作業(yè)。分區(qū)存儲(chǔ)管理是滿足多道程序設(shè)計(jì)的最簡(jiǎn)單的一種存儲(chǔ)管理方法,它允許多 4個(gè)用戶程序同時(shí)存在系統(tǒng)內(nèi)存中,即共享內(nèi)存空間。按分區(qū)劃分方式可分為固定分區(qū)和可變分區(qū)。

固定分區(qū)存儲(chǔ)管理

把內(nèi)存的用戶區(qū)預(yù)先劃分成多個(gè)分區(qū),每個(gè)分區(qū)大小可以相同,也可以不同。(分區(qū)的劃分由計(jì)算機(jī)的操作員或者由操作系統(tǒng)給出,并給出主存分配表)分區(qū)個(gè)數(shù)固定,分區(qū)的大小固定。一個(gè)分區(qū)中可裝入一個(gè)作業(yè),作業(yè)執(zhí)行過程中不會(huì)改變存放區(qū)域。早期的 IBM 的 OS/MFT(具有固定任務(wù)數(shù)的多道程序系統(tǒng))采用了這種固定分區(qū)的方法。

可變分區(qū)存儲(chǔ)管理(動(dòng)態(tài)分區(qū))

內(nèi)存不是預(yù)先劃分好的,而是在系統(tǒng)運(yùn)行的過程中建立分區(qū).當(dāng)作業(yè)裝入主存時(shí),根據(jù)作業(yè)所需要的主存容量查看是否有足夠的主存空間,若有則按需要分割一個(gè)分區(qū)給該作業(yè);否則令該作業(yè)等待。分區(qū)長(zhǎng)度不固定分區(qū)個(gè)數(shù)不固定。這種存儲(chǔ)管理的方法克服了固定分區(qū)嚴(yán)重浪費(fèi)主存的問題,提高了主存資源的利用率。IBM操作系統(tǒng)OS/MVT采用可變分區(qū)存儲(chǔ)管理。湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

可重定位分區(qū)存儲(chǔ)管理

解決碎片問題的一種簡(jiǎn)單方法是采用可重定位分區(qū)分配.。其中心思想是,把不同程序,且在內(nèi)存中地址不連續(xù)的想法讓他們連續(xù)。

例:內(nèi)存中現(xiàn)有 3 個(gè)空閑區(qū),現(xiàn)有一作業(yè)到達(dá),要求獲得 30k 內(nèi)存空間,沒有分區(qū)滿足容量要求,若想把作業(yè)裝入,可將內(nèi)存中所有作業(yè)進(jìn)行移動(dòng),這樣把原來分散的空閑區(qū)匯集成一個(gè)大的空閑區(qū)。將內(nèi)存中的作業(yè)進(jìn)行移動(dòng)使它們連接在一起把原來分散的多個(gè)小分區(qū)拼接成一個(gè)大的空閑區(qū).這個(gè)過程稱為”緊湊”或”移動(dòng)”。需解決的問題:每次”緊湊”后程序或數(shù)據(jù)裝入的物理地址變化采用動(dòng)態(tài)重定位。

問題描述和分析

系統(tǒng)應(yīng)利用某種分配算法,從空閑分區(qū)鏈表中找到所需大小的分區(qū),如果空閑分區(qū)大小大于請(qǐng)求分區(qū)大小,則從該分區(qū)中按改請(qǐng)求的大小劃分出一塊內(nèi)存空間大小劃分出一塊內(nèi)存空間分配出去,余下的部分仍留在空閑鏈表中。然后,將分配區(qū)的首址返回給調(diào)用者。

當(dāng)進(jìn)程運(yùn)行完畢師范內(nèi)存時(shí),系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)中找到相應(yīng)的插入點(diǎn),此時(shí)可能出現(xiàn)以下四種情況之一:

⑴該空閑區(qū)的上下兩相鄰分區(qū)都是空閑區(qū):將三個(gè)空閑區(qū)合并為一個(gè)空閑區(qū)。新空閑區(qū)的起始地址為上空閑區(qū)的起始地址,大小為三個(gè)空閑區(qū)之和。空閑區(qū)合并后,取消可用表或自由鏈中下空閑區(qū)的表目項(xiàng)或鏈指針,修改上空閑區(qū)的對(duì)應(yīng)項(xiàng)。

⑵該空閑區(qū)的上相鄰區(qū)是空閑區(qū):將釋放區(qū)與上空閑區(qū)合并為一個(gè)空閑區(qū),其起始地址為上空閑區(qū)的起始地址,大小為上空閑區(qū)與釋放區(qū)之和。合并后,修改上空閑區(qū)對(duì)應(yīng)的可用表的表目項(xiàng)或自由鏈指針。

⑶該空閑區(qū)的下相鄰區(qū)是空閑區(qū):將釋放區(qū)與下空閑區(qū)合并,并將釋放區(qū)的起始地址作為合并區(qū)的起始地址。合并區(qū)的長(zhǎng)度為釋放區(qū)與下空閑區(qū)之和。同理,合并后修改可用表或自由鏈中相應(yīng)的表目項(xiàng)或鏈指針。

⑷兩相鄰區(qū)都不是空閑區(qū):釋放區(qū)作為一個(gè)新空閑可用區(qū)插入可用表或自由鏈。

程序流程圖

內(nèi)存分配流程圖,如圖

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

從頭開始查表檢索完否?NY返回分區(qū)大小>所需大小N繼續(xù)檢索下一個(gè)表項(xiàng)Y分區(qū)大小-所需大小<=不可再分割大小N從該分區(qū)中劃出所需大小的新分區(qū)Y將該分區(qū)從鏈中移出將該分區(qū)分配給請(qǐng)求者修改有關(guān)數(shù)據(jù)結(jié)構(gòu)返回

內(nèi)存回收流程圖,如圖

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

開始判斷空閑區(qū)上下內(nèi)存情況上為空下為空上下都為空上下都不為空將上面的空閑區(qū)合并,并回收將下面的空閑區(qū)合并,并回收將上下的空閑區(qū)合并,并回收直接將其回收結(jié)束 數(shù)據(jù)結(jié)構(gòu)體分析

⑴進(jìn)程屬性結(jié)構(gòu)體 typedef struct readyque { char name[10];int size;}readyque,*readyqueue;⑵空閑鏈表結(jié)構(gòu)體 typedef struct idlyspace { int from;int size;idlyspace * next;}idlyspace,*idly;⑶已分配鏈表結(jié)構(gòu)體 typedef struct busyspace { int from;readyque r;湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

busyspace * next;}busyspace,*busy

主要程序代碼分析

⑴主函數(shù)//代碼請(qǐng)?zhí)砑舆m當(dāng)?shù)淖⑨尅nt main(){ Is=(idly)malloc(sizeof(idlyspace));Is->from=0;Is->size=256;Is->next=NULL;Is2=Is;Bs=(busy)malloc(sizeof(busyspace));Bs->next=NULL;int t,t1;printf(“n.......................歡迎來到動(dòng)態(tài)分區(qū)存儲(chǔ)管理系統(tǒng)..................nn”);printf(“...........................請(qǐng)選擇要執(zhí)行的算法:...........................n”);printf(“.........................1.最先適應(yīng)算法

...............................n”);printf(“.........................2.下次適應(yīng)算法............................n”);printf(“..........................3.最優(yōu)適應(yīng)算法

...............................n”);printf(“.........................4.最壞適應(yīng)算法................................n”);printf(“........................................................................n”);printf(“請(qǐng)輸入您的選擇:”);scanf(“%d”,&t);int i;while(i!=5){

printf(“........................................................................n”);

printf(“.........................操作菜單如下:(請(qǐng)選擇).......................n”);

printf(“..........................1.輸入進(jìn)程分配空間...........................n”);

printf(“.........................2.進(jìn)程撤銷回收空間...........................n”);

printf(“.........................3.輸出所有空閑分區(qū)

..........................n”);

printf(“..........................4.輸出所有已分配分區(qū)..........................n”);

printf(“..........................5.退

出..........................n”);

printf(“........................................................................n”);

scanf(“%d”,&i);

switch(i)

{

case 1:

switch(t)

{

case 1:

t1=FF();湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

break;

case 2:

t1=NF();

break;

case 3:

t1=BF();

break;

case 4:

t1=WF();

break;

default:

printf(“選擇算法錯(cuò)誤n”);

return 1;

}

if(t1)

printf(“分配空間成功n”);

else

printf(“分配空間失敗n”);

break;

case 2:

t1=recover();

if(t1)

printf(“回收成功n”);

else

printf(“回收失敗n”);

break;

case 3:

Isprint();

break;

case 4:

Bsprint();

break;

} } return 0;}

第三章 :分析并實(shí)現(xiàn)四種內(nèi)存分配算法

最先適應(yīng)算法

空閑區(qū)按地址從小到大的次序排列。

分配:當(dāng)進(jìn)程申請(qǐng)大小為 SIZE 的內(nèi)存時(shí),系統(tǒng)順序查找空閑區(qū)表(鏈),直到找到容量滿足要求(≥SIZE)的空閑區(qū)為止。從該空閑區(qū)中劃出大小為 SIZE的分區(qū)分配給進(jìn)程,余下的部分仍作為一個(gè)空閑區(qū),但要修改其首址和大小。湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

優(yōu)點(diǎn):這種算法是盡可能地利用低地址部分的空閑區(qū),而盡量地保證高地址 6部分的大空閑區(qū),有利于大作業(yè)的裝入。

缺點(diǎn):主存低地址和高地址分區(qū)利用不均衡。在低地址部分集中了許多非常小的空閑區(qū)碎片降低了主存的利用率。最先適應(yīng)算法 int FF(){ int t=0;readyque D;printf““請(qǐng)輸入進(jìn)程名:””);scanf““%””,D.name);

printf““輸入進(jìn)程申請(qǐng)空間大小:””);scanf““%””,&D.size);

idly l=Is;int mt=256;busy b=Bs;idly min=NULL;while(l)

//尋找空閑表中大小滿足申請(qǐng)進(jìn)程所需大小并且起址最小的空閑結(jié)點(diǎn)

{

if(D.size<=l->size)

{

if(l->from

{ mt=l->from;min=l;t=1;

}

}

l=l->next;} if(mt!=256)

{

busy j;

j=(busy)malloc(sizeof(busyspace));

//如果找到則為進(jìn)程分配空間

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

j->from=min->from;

for(int i=0;i<10;i++)

{

j->r.name[i]=D.name[i];

}

j->r.size=D.size;

while(b->next)

{ if(b->next->fromfrom)

b=b->next;else

break;

}

j->next=b->next;

b->next=j;

min->from=min->from+D.size;

min->size=min->size-D.size;} return t;}

下次適應(yīng)分配算法

最先適應(yīng)算法的變種。

總是從空閑區(qū)上次掃描結(jié)束處順序查找空閑區(qū)表(鏈),直到找到第一個(gè)滿足容量要求的空閑區(qū)為止,分割一部分給作業(yè),剩余部分仍作為空閑區(qū)。下次適應(yīng)分配算法 int NF(){ int t=0;readyque D;printf““請(qǐng)輸入進(jìn)程名:””);scanf““%””,D.name);

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

printf““輸入進(jìn)程申請(qǐng)空間大小:””);scanf““%””,&D.size);

int mt=256;idly l=Is2;idly min=NULL;busy b=Bs;while(l)//尋找空閑表中大小滿足申請(qǐng)進(jìn)程所需大小并且起址最小的空閑結(jié)點(diǎn)

{

if(D.size<=l->size)

{

if(l->from

{ mt=l->from;min=l;t=1;

}

}

l=l->next;} if(mt!=256)

{

busy j;

j=(busy)malloc(sizeof(busyspace));

j->from=min->from;

for(int i=0;i<10;i++)

{

j->r.name[i]=D.name[i];

}

j->r.size=D.size;

while(b->next)

{ if(b->next->fromfrom)

b=b->next;else

break;

//如果找到則為進(jìn)程分配空間

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

}

//將申請(qǐng)空間進(jìn)程插入到已分配鏈表中

j->next=b->next;

b->next=j;

//修改相應(yīng)空閑節(jié)點(diǎn)的起址和大小

min->from=min->from+D.size;

min->size=min->size-D.size;

Is2=min->next;

結(jié)點(diǎn)

t=1;

return t;}

l=Is;//l指向空閑表的頭

while(l!=Is2)

{

if(D.size<=l->size)

{

if(l->from

{ mt=l->from;min=l;t=1;

}

}

l=l->next;} if(mt!=256){

busy j;

j=(busy)malloc(sizeof(busyspace));

j->from=min->from;

for(int i=0;i<10;i++)

{

//ls2指向修改結(jié)點(diǎn)的下一個(gè)

//循環(huán)查找 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

j->r.name[i]=D.name[i];

}

j->r.size=D.size;

while(b->next)

{ if(b->next->fromfrom)

b=b->next;else

break;

}

j->next=b->next;

b->next=j;

min->from=min->from+D.size;

min->size=min->size-D.size;

Is2=min->next;

t=1;

return t;} return t;}

最優(yōu)適應(yīng)算法

空閑區(qū)按容量遞增的次序排列。

分配:當(dāng)進(jìn)程申請(qǐng)存儲(chǔ)空間,系統(tǒng)順序查找空閑區(qū)表(鏈),直到找到第一個(gè)滿足容量要求的空閑區(qū)為止。采用最優(yōu)適應(yīng)算法選中的空閑區(qū)是滿足容量要求的最小空閑區(qū)。優(yōu)點(diǎn):選中的空閑區(qū)是滿足容量要求的最小空閑區(qū),而不致于毀掉較大的空閑區(qū)。

缺點(diǎn):空閑區(qū)的大小一般與申請(qǐng)分區(qū)大小不相等,因此將其一分為二,留下來的空閑區(qū)一般情況下是很小的,以致無法使用。隨著時(shí)間的推移,系統(tǒng)中的小空閑區(qū)會(huì)越來越多,從而造成存儲(chǔ)空間的浪費(fèi)。最優(yōu)適應(yīng)算法 int BF(){ int t=0;湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

readyque D;printf““請(qǐng)輸入進(jìn)程名:””);scanf““%””,D.name);

printf““輸入進(jìn)程申請(qǐng)空間大小:””);scanf““%””,&D.size);

idly l=Is;idly min=NULL;int mt=256;busy b=Bs;while(l)//在空閑鏈中尋找第一個(gè)大于所輸入的進(jìn)程大小的空閑塊

{

if(D.size<=l->size)

{

if(l->size

{

mt=l->size;min=l;t=1;

}

}

l=l->next;} if(mt!=256)

{

busy j;

j=(busy)malloc(sizeof(busyspace));空間

j->from=min->from;

//申請(qǐng)分配用于存放進(jìn)程的內(nèi)存

//找到第一個(gè)滿足要求的空閑塊

//將第一個(gè)滿足要求的空閑塊(min)的首地址賦給j

for(int i=0;i<10;i++)

{

j->r.name[i]=D.name[i];16 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

}

j->r.size=D.size;

while(b->next)

//按從小到大的順序查找新進(jìn)程在已分配區(qū)中的位置

{ if(b->next->fromfrom)

b=b->next;else

break;

}

j->next=b->next;

b->next=j;

min->from=min->from+D.size;

min->size=min->size-D.size;

} return t;}

最壞適應(yīng)算法

為了克服最佳適應(yīng)算法把空閑區(qū)切割得太小的缺點(diǎn),人們提出了一種最壞適應(yīng)算法,即每次分配時(shí),總是將最大的空閑區(qū)切去一部分分配給請(qǐng)求者,剩余的部分仍是一個(gè)較大的空閑區(qū)。避免了空閑區(qū)越分越小的問題。要求空閑區(qū)按容量遞減的順序排列。

分配:進(jìn)程申請(qǐng)存儲(chǔ)區(qū)時(shí),檢查空閑區(qū)表(鏈)的第一個(gè)空閑區(qū)的大小是否滿足要求,若不滿足則令進(jìn)程等待;若滿足則從該空閑區(qū)中分配一部分存儲(chǔ)區(qū)給用戶,剩下的部分仍作為空閑區(qū)。最壞適應(yīng)算法 int WF(){ int t=0;readyque D;printf““請(qǐng)輸入進(jìn)程名:””);scanf““%””,D.name);

printf““輸入進(jìn)程申請(qǐng)空間大小:””);

//將所輸入的進(jìn)程插入進(jìn)程鏈

//改變?cè)摽臻e塊的起始地址 //改變?cè)摽臻e塊的剩余大小 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

scanf““%””,&D.size);

//輸入進(jìn)程申請(qǐng)的空間大小

idly l=Is;//l指向空閑鏈表ls頭

idly min=NULL;int mt=0;busy b=Bs;

//b指向已分配鏈表Bs頭

//找到空閑分區(qū)中大小滿足進(jìn)程的請(qǐng)求且尺寸最大的結(jié)點(diǎn)

while(l){

if(D.size<=l->size)//判斷進(jìn)程所申請(qǐng)的大小是否小于空閑區(qū)的各結(jié)點(diǎn)大小

{

if(l->size>mt)

{ mt=l->size;min=l;//min指向空閑區(qū)中尺寸最大的結(jié)點(diǎn)

t=1;

}

}

l=l->next;} if(mt!=0)點(diǎn)

{

busy j;

j=(busy)malloc(sizeof(busyspace));

j->from=min->from;

for(int i=0;i<10;i++)

{

j->r.name[i]=D.name[i];

}

j->r.size=D.size;

//判斷是否找到了空閑區(qū)的滿足結(jié)

//l指向空閑鏈表下一個(gè)結(jié)點(diǎn)

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

while(b->next)置

//尋找插入到已分配鏈表中的位

{ if(b->next->fromfrom)

b=b->next;else

break;

}

//把此進(jìn)程結(jié)點(diǎn)j插入到已分配鏈表中

j->next=b->next;

b->next=j;

//修改空閑鏈表的相應(yīng)結(jié)點(diǎn)的參數(shù)

min->from=min->from+D.size;

min->size=min->size-D.size;} return t;}

可變分區(qū)的回收

當(dāng)某個(gè)進(jìn)程釋放某存儲(chǔ)區(qū)時(shí),系統(tǒng)首先檢查釋放區(qū)是否與系統(tǒng)中的空閑區(qū)相鄰若相鄰則把釋放區(qū)合并到相鄰的空閑區(qū)去,否則把釋放區(qū)作為一個(gè)空閑區(qū)插入到空閑表的適當(dāng)位置。

釋放區(qū)與空閑區(qū)相鄰的四種情況。

(1)釋放區(qū)與前空閑區(qū)相鄰:把釋放區(qū)與前空閑區(qū)合并到一個(gè)空閑區(qū)。其首址仍為前空閑區(qū)首址,大小為釋放區(qū)大小與空閑區(qū)大小之和。

(2)釋放區(qū)與后空閑區(qū)相鄰:則把釋放區(qū)合并到后空閑區(qū),其首地址為釋放區(qū)首地址,大小為二者之和。

(3)釋放區(qū)與前后兩空閑區(qū)相鄰:這三個(gè)區(qū)合為一個(gè)空閑區(qū),首地址為前空閑區(qū)首址,大小為這三個(gè)空閑區(qū)之和,并取消后空閑區(qū)表目。

(4)釋放區(qū)不與任何空閑區(qū)相鄰:將釋放區(qū)作為一個(gè)空閑區(qū),將其大小和首址插入到空閑區(qū)表的適當(dāng)位置。

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

回收內(nèi)存算法

int recover(){ readyque D;printf““請(qǐng)輸入想要回收的進(jìn)程名””);

scanf““%””,D.name);

busy b=Bs;idly l=Is;while(b->next)鏈表中

{

bool yo=1;

for(int i=0;i<10;i++)

{

if(b->next->r.name[i]==D.name[i])yo=yo*1;

else yo=0;

}

//如果在已分配鏈表中則釋放該結(jié)點(diǎn)所占空間

if(yo)

{

int t=b->next->from;

int ts=b->next->r.size;

//查找輸入的進(jìn)程名是否在已分配湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

while(l)

{ if(l->from>t+ts)不鄰接

{ idly tl;tl=(idly)malloc(sizeof(idlyspace));tl->from=t;tl->size=ts;tl->next=l;Is=tl;break;} if(l->from==t+ts)

l->from=t;

l->size=l->size+ts;

busy tb=b->next;

b->next=b->next->next;

free(tb);

return 1;}

if(l->from+l->size

idly tl;

tl=(idly)malloc(sizeof(idlyspace));

tl->from=t;

tl->size=ts;

tl->next=l->next;

l->next=tl;

break;}

else if(l->from+l->size==t)

//所回收進(jìn)程與空閑結(jié)點(diǎn)上鄰接 {

//所回收進(jìn)程與空閑結(jié)點(diǎn)上下都不鄰接

//所回收進(jìn)程與空閑結(jié)點(diǎn)下鄰接 {

//所回收進(jìn)程與空閑結(jié)點(diǎn)上下都 21 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

l->size=l->size+ts;

if(l->from+l->size==l->next->from)接

{

l->size=l->size+l->next->size;

idly tm=l->next;

l->next=l->next->next;

freI);

}

br

l=l->next;

}

//從已分配鏈表中釋放所回收進(jìn)程

busy tb=b->next;

b->next=b->next->next;

free(tb);

return 1;

}

b=b->next;} printf(“沒找到這”進(jìn)程n”);return 0;}

//所回收進(jìn)程與空閑結(jié)點(diǎn)上下都鄰調(diào)試與操作說明

初始界面

程序初始界面,有四個(gè)塊選擇,選擇要執(zhí)行的算法,調(diào)試以最壞算法為例,如圖

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

選擇最壞適應(yīng)算法,如圖

模擬內(nèi)存分配

給進(jìn)程a分配內(nèi)存20,如圖

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

已分配分區(qū)說明表界面

同理,給進(jìn)程b分配內(nèi)存30,給進(jìn)程c分配內(nèi)存40,給進(jìn)程d分配50,給進(jìn)程e分配60,如圖

空閑分區(qū)說明表界面 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

查看空閑分區(qū),如圖

回收內(nèi)存界面

回收進(jìn)程b和d所占內(nèi)存,如圖

已分配分區(qū)說明表和空閑分區(qū)說明表 如圖 湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

重新申請(qǐng)內(nèi)存界面

再為新進(jìn)程i分配內(nèi)存30,如圖

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

根據(jù)最壞適應(yīng)算法結(jié)合圖所示可知,該算法將會(huì)從空閑分區(qū)表中選擇一塊最大的內(nèi)存空間分配給進(jìn)程i,從圖也可看出該模擬算法實(shí)現(xiàn)了最壞適應(yīng)算法

湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

總結(jié)與體會(huì)

本次做的課題是動(dòng)態(tài)分區(qū)分配算法實(shí)現(xiàn),此次課程設(shè)計(jì)成功實(shí)現(xiàn)了內(nèi)存分配和內(nèi)存回收,內(nèi)存分配中包含了四種算法,分別是首次適應(yīng)算法,循環(huán)首次適應(yīng)算法,最佳適應(yīng)算法和最壞適應(yīng)算法。經(jīng)編碼調(diào)試,表明該程序模塊是有效可行的。

通過這門課程的學(xué)習(xí)讓我充分了解了內(nèi)存管理的機(jī)制實(shí)現(xiàn),從而更深一步的的對(duì)計(jì)算機(jī)

有了很多了解,這對(duì)于以后我們的研究和學(xué)習(xí)計(jì)算機(jī)系統(tǒng)起到了很重要的作用。

對(duì)于本次論文制作,自己的編程能力有所提高,對(duì)操作系統(tǒng)內(nèi)存分配,存儲(chǔ)空間的回收都有全新的認(rèn)識(shí)。

在這次操作系統(tǒng)課程設(shè)計(jì)中,我使用了c++編寫系統(tǒng)軟件,對(duì)os中可變分區(qū)存儲(chǔ)管理有了深刻的理解,但是過程中遇到了很多困難,一邊做一邊學(xué),對(duì)c++有了比較多的理解。

實(shí)驗(yàn)中遇到很多問題,浪費(fèi)了很多時(shí)間,總而言之是自己學(xué)習(xí)還不夠好,不扎實(shí),希望在以后學(xué)習(xí)中加以改善,學(xué)到更多知識(shí)。

參考文獻(xiàn)

【1】 湯子瀛,哲鳳屏,湯小丹.計(jì)算機(jī)操作系統(tǒng).西安:西安電子科技大學(xué)出版社,2001.。湖北民族學(xué)院信息工程學(xué)院11級(jí)計(jì)算機(jī)專業(yè)操作系統(tǒng)課程設(shè)計(jì)

【2】 任愛華.操作系統(tǒng)實(shí)用教程.北京:清華大學(xué)出版社,2001。

第五篇:操作系統(tǒng)課程設(shè)計(jì)

長(zhǎng)春理工大學(xué) 軟件學(xué)院 0813111班 27號(hào)

姓名:丁為勝 一. 概述

1、課程設(shè)計(jì)目的及任務(wù)課程設(shè)計(jì)地點(diǎn)及要求

每個(gè)學(xué)生一臺(tái)微機(jī),需要安裝windows98或windows2000操作系統(tǒng),配備VC、VB、java或C編程語言,每個(gè)學(xué)生上機(jī)時(shí)間不少于24個(gè)小時(shí)。

操作系統(tǒng)是計(jì)算機(jī)專業(yè)的核心專業(yè)課,“操作系統(tǒng)課程設(shè)計(jì)”是理解和鞏固操作系統(tǒng)基本理論、原理和方法的重要的實(shí)踐環(huán)節(jié)。

操作系統(tǒng)課程主要講述的內(nèi)容是多道操作系統(tǒng)的原理與技術(shù),與其它計(jì)算機(jī)原理、編譯原理、匯編語言、計(jì)算機(jī)網(wǎng)絡(luò)、程序設(shè)計(jì)等專業(yè)課程關(guān)系十分密切。本課程設(shè)計(jì)的目的綜合應(yīng)用學(xué)生所學(xué)知識(shí),建立系統(tǒng)和完整的計(jì)算機(jī)系統(tǒng)概念,理解和鞏固操作系統(tǒng)基本理論、原理和方法,掌握操作系統(tǒng)基本理論與管理方式。在算法基礎(chǔ)上,解決實(shí)際的管理功能的問題,提高學(xué)生實(shí)際應(yīng)用、編程的能力。

主要任務(wù)是實(shí)現(xiàn)操作系統(tǒng)和相關(guān)系統(tǒng)軟件的設(shè)計(jì),其中涉及進(jìn)程創(chuàng)建,同步,進(jìn)程間的通信,存儲(chǔ)管理,文件系統(tǒng)等操作系統(tǒng)概念。

2.課程設(shè)計(jì)地點(diǎn)及要求

每個(gè)學(xué)生一臺(tái)微機(jī),需要安裝windows98或windows2000操作系統(tǒng),配備VC、VB、java或C編程語言,每個(gè)學(xué)生上機(jī)時(shí)間不少于24個(gè)小時(shí)。

3.課程設(shè)計(jì)的內(nèi)容

設(shè)計(jì)二: 設(shè)計(jì)任務(wù):

掌握進(jìn)程的管道通訊機(jī)制和信號(hào)量同步互斥機(jī)制。1. 進(jìn)程的管道通訊

編制一個(gè)程序,程序中創(chuàng)建一個(gè)子進(jìn)程。然后父子進(jìn)程各自獨(dú)立運(yùn)行,父進(jìn)程不斷地在標(biāo)準(zhǔn)輸入設(shè)備上讀入小寫字母,寫入管道。子進(jìn)程不斷地從管道中讀取字符,轉(zhuǎn)換為大寫字母后輸出到標(biāo)準(zhǔn)輸出設(shè)備上。當(dāng)讀到x時(shí),結(jié)束。

2. 信號(hào)量實(shí)現(xiàn)的同步互斥機(jī)制

編制一個(gè)程序,程序中創(chuàng)建5個(gè)子進(jìn)程,代表五位哲學(xué)家,然后父進(jìn)程結(jié)束。使用信號(hào)量機(jī)制解決哲學(xué)家進(jìn)餐問題。當(dāng)哲學(xué)家進(jìn)餐時(shí),屏幕輸出:

[進(jìn)程號(hào)] eating!當(dāng)哲學(xué)家思考時(shí),屏幕輸出: [進(jìn)程號(hào)] thinging!相關(guān)的系統(tǒng)調(diào)用和函數(shù):pipe();write();read();semget();sepop();semctl();要求:查找并閱讀上述系統(tǒng)調(diào)用的相關(guān)資料,將上述相關(guān)的函數(shù)封裝為P()、V()操作,使用你封裝的P()、V()操作實(shí)現(xiàn)5位哲學(xué)家的同步和互斥。

二. 設(shè)計(jì)的基本概念和原理

1.進(jìn)程的管道通訊

管道(Pipe)實(shí)際是用于進(jìn)程間通信的一段共享內(nèi)存,創(chuàng)建管道的進(jìn)程稱為管道服務(wù)器,連接到一個(gè)管道的進(jìn)程為管道客戶機(jī)。命名管道(Named Pipes)是在管道服務(wù)器和一臺(tái)或多臺(tái)管道客戶機(jī)之間進(jìn)行單向或雙向通信的一種命名的管道。一個(gè)命名管道的所有實(shí)例共享同一個(gè)管道名,但是每一個(gè)實(shí)例均擁有獨(dú)立的緩存與句柄,并且為客戶——服務(wù)通信提供有一個(gè)分離的管道。實(shí)例的使用保證了多個(gè)管道客戶能夠在同一時(shí)間使用同一個(gè)命名管道。

2.信號(hào)量實(shí)現(xiàn)的同步互斥機(jī)制

規(guī)定奇數(shù)號(hào)的哲學(xué)家先拿起他左邊的筷子,然后再去拿他右邊的筷子;而偶數(shù)號(hào) 的哲學(xué)家則相反.按此規(guī)定,將是1,2號(hào)哲學(xué)家競(jìng)爭(zhēng)1號(hào)筷子,3,4號(hào)哲學(xué)家競(jìng)爭(zhēng)3號(hào)筷子.即 五個(gè)哲學(xué)家都競(jìng)爭(zhēng)奇數(shù)號(hào)筷子,獲得后,再去競(jìng)爭(zhēng)偶數(shù)號(hào)筷子,最后總會(huì)有一個(gè)哲學(xué)家能獲 得兩支筷子而進(jìn)餐。而申請(qǐng)不到的哲學(xué)家進(jìn)入阻塞等待隊(duì)列,根FIFO原則,則先申請(qǐng)的哲 學(xué)家會(huì)較先可以吃飯,因此不會(huì)出現(xiàn)餓死的哲學(xué)家。

三. 總體設(shè)計(jì)

1.實(shí)現(xiàn)的方法和主要技術(shù)路線

1.無名管道

無名管道用于具有親緣關(guān)系的父子進(jìn)程,子子進(jìn)程之間的通訊。它的實(shí)現(xiàn)函數(shù)有 int pipe(int fd[2]);

//fd[2] 為描述符數(shù)組,包含一個(gè)讀描述符與一個(gè)寫描述符,在使用管道通信時(shí),關(guān)閉某些不需要的讀或?qū)懨枋龇⑵饐蜗虻淖x或?qū)懝艿溃缓笥胷ead 和write 像操作文件一樣去操作它即可。

如圖便是進(jìn)程1 到進(jìn)程2 的一個(gè)讀管道。

分別在父進(jìn)程和父子進(jìn)程里向管道寫數(shù)據(jù),然后在子進(jìn)程和子子進(jìn)程里讀數(shù)據(jù)。2.哲學(xué)家進(jìn)餐偽碼:

semaphore chopstick[5]={1,1,1,1,1};void philosopher(int i){

while(true){

think();

if(i%2 == 0)//偶數(shù)哲學(xué)家,先右后左。

{

wait(chopstick[ i + 1 ] mod 5);wait(chopstick[ i]);eat();

signal(chopstick[ i + 1 ] mod 5);signal(chopstick[ i]);}

Else //奇數(shù)哲學(xué)家,先左后右。

{

wait(chopstick[ i]);

wait(chopstick[ i + 1 ] mod 5);eat();

signal(chopstick[ i]);

signal(chopstick[ i + 1 ] mod 5);} } 四. 詳細(xì)設(shè)計(jì)

進(jìn)程的管道通信代碼: import java.io.IOException;import java.io.PipedReader;

public class ReceiverThread1 extends Thread { PipedReader pipedReader;

public ReceiverThread1(SenderThread1 sender)throws IOException

{

pipedReader=new PipedReader(sender.getPipedWriter());

}

public void run()

{ char[] ch=new char[100];StringBuffer sb=null;String str=null;int i=0;try {

while((i=pipedReader.read(ch))!=-1)

{

sb=new StringBuffer();

for(int j=0;j

{

sb.append(ch[j]);

}

str=sb.toString();

System.out.println(“子進(jìn)程讀取的字符為:”+str.toUpperCase());

if(!str.endsWith(“x”))

{

System.out.print(“父進(jìn)程讀入字符為:”);

}else if(str.endsWith(“x”))

{

System.out.println(“結(jié)束無法再次輸入字符”);

}

} } catch(IOException e){

e.printStackTrace();}finally{

try {

pipedReader.close();

} catch(IOException e){

e.printStackTrace();

} }

}

}

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PipedWriter;

public class SenderThread1 extends Thread { PipedWriter pipedWriter;

public SenderThread1(){

pipedWriter=new PipedWriter();}

public PipedWriter getPipedWriter(){

return pipedWriter;}

public void run()

{ BufferedReader ir=new BufferedReader(new InputStreamReader(System.in));char[] ch=new char[100];StringBuffer sb=null;String str=null;int i=0;System.out.print(“父進(jìn)程讀入字符為:”);try {

while((i=ir.read(ch))!=-1)

{

sb=new StringBuffer();

for(int j=0;j

{

if(ch[j]>='a' && ch[j]<='z')

{

sb.append(ch[j]);

if(ch[j]=='x')

{

break;

}

}

}

str=sb.toString();

pipedWriter.write(str);

if(str.startsWith(“x”)||str.endsWith(“x”))

{

break;

// this.stop();

}

}

} catch(IOException e){

e.printStackTrace();}finally{

try {

ir.close();

pipedWriter.close();

} catch(IOException e){

e.printStackTrace();

}

}

} }

public class ThreadComm1 { public static void main(String[] args)throws Exception{ SenderThread1 sender=new SenderThread1();ReceiverThread1 receiver=new ReceiverThread1(sender);sender.start();receiver.start();} } 哲學(xué)家進(jìn)餐問題代碼: #include “stdafx.h” using namespace std;bool chop[100];//定義筷子 class ph { protected: bool * left,* right;//哲學(xué)家的左右手指向的筷子

int eattime;//哲學(xué)家的吃飯時(shí)間 public: bool check()//用于檢查哲學(xué)家左右手的筷子是不是被占用

{

if(*left && *right)

return true;

else

return false;} void eat(int ineattime)//哲學(xué)家開始進(jìn)餐

{

eattime=ineattime;

*left=false;

*right=false;} bool finish()//檢查哲學(xué)家是否完成進(jìn)餐

{

if(eattime>0)//沒完成的話剩余時(shí)間減少

{

eattime--;

if(eattime==0)//完成的話歸還筷子

{

*left=true;

*right=true;

return true;

}

else

return false;

}

else

return false;} void init(int num,int max)//初始化哲學(xué)家,指定他們使用的筷子

{

eattime=0;

left=&chop[num];

if(num

right=&chop[num+1];

else

right=&chop[0];} };void main(){ system(“title 哲學(xué)家進(jìn)餐問題”);int in,i,temp,time,j=1;queue Q;ph P[100];

for(int i=0;i<5;i++){

chop[i]=1;

} for(int i=0;i<5;i++){ P[i].init(i,5);} cout<<“輸入哲學(xué)家進(jìn)餐隊(duì)列:”<>in;if(in==0)

break;else

if(in>5)

{

cout<<“一共只有”<<5<<“個(gè)人!”<

}

else

{

Q.push(in-1);

} } cout<<“每個(gè)人吃飯時(shí)間:”<>time;system(“CLS”);system(“color 0a”);while(!Q.empty()){ temp=Q.front();Q.pop();if(P[temp].check()){

P[temp].eat(time);

cout<

if(temp+2>5)

cout<<1<

else

cout<

Q.push(temp);} for(i=0;i<5;i++)

{

if(P[i].finish())

cout<

}

//Q.push(-1);

for(i=0;i

{

temp=Q.front();

Q.pop();

//if(temp!=-1)

{

cout<

Q.push(temp);

}

//else

{

// Q.pop();

break;

}

} } for(int j=0;j

if(P[i].finish())

{

cout<

} getch();}

下載操作系統(tǒng)命令接口設(shè)計(jì)課程設(shè)計(jì)說明書word格式文檔
下載操作系統(tǒng)命令接口設(shè)計(jì)課程設(shè)計(jì)說明書.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    操作系統(tǒng)課程設(shè)計(jì)

    1 引言 操作系統(tǒng)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的主要專業(yè)基礎(chǔ)課和主干課。操作系統(tǒng)對(duì)計(jì)算機(jī)系統(tǒng)資源實(shí)施管理,是所有其他軟件與計(jì)算機(jī)硬件的唯一接口,所有用戶在使用計(jì)算機(jī)時(shí)都要得......

    操作系統(tǒng)課程設(shè)計(jì)報(bào)告

    課程設(shè)計(jì)報(bào)告 題 目: 模擬請(qǐng)求頁式管理 課程名稱: 計(jì)算機(jī)操作系統(tǒng) 學(xué) 院: 信息工程學(xué)院專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí): 14計(jì)本(1) 學(xué)生姓名: * * * 學(xué) 號(hào): 201403031** 指導(dǎo)教......

    操作系統(tǒng)課程設(shè)計(jì)報(bào)告(★)

    操 作 系 統(tǒng) 課 程 設(shè) 計(jì) 實(shí) 驗(yàn) 報(bào) 告 學(xué)院:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 班級(jí):計(jì)112 學(xué)號(hào):1113022032 姓名: 一、 實(shí)驗(yàn)名稱: 用C++實(shí)現(xiàn)驅(qū)動(dòng)調(diào)度算法、頁面替換算法、銀行家算法、處理......

    操作系統(tǒng)課程設(shè)計(jì)題目

    遼寧科技大學(xué)操作系統(tǒng)課程設(shè)計(jì)指導(dǎo)書 一、課程設(shè)計(jì)目的和要求 本設(shè)計(jì)是專業(yè)基礎(chǔ)課《操作系統(tǒng)》的課程設(shè)計(jì)。由于操作系統(tǒng)課的學(xué)時(shí)有限,安排實(shí)驗(yàn)的次數(shù)不多。為了進(jìn)一步鞏固實(shí)......

    操作系統(tǒng)課程設(shè)計(jì)[合集五篇]

    《操作系統(tǒng)》/《操作系統(tǒng)課程設(shè)計(jì)》課設(shè)指導(dǎo)書 《操作系統(tǒng)》 《操作系統(tǒng)課程設(shè)計(jì)》 指導(dǎo) 信息技術(shù)學(xué)院課設(shè)書 《操作系統(tǒng)》/《操作系統(tǒng)課程設(shè)計(jì)》課設(shè)指導(dǎo)書 《操作系統(tǒng)》/......

    操作系統(tǒng)課程設(shè)計(jì)報(bào)告

    操作系統(tǒng)課程設(shè)計(jì)報(bào)告 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 號(hào): 姓 名: 提交日期: 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 【設(shè)計(jì)目的】 (1)本實(shí)驗(yàn)的目的是通過一個(gè)簡(jiǎn)單多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系......

    操作系統(tǒng)課程設(shè)計(jì)3

    操作系統(tǒng)課程設(shè)計(jì)3 一. 銀行家算法代碼 package sheji; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.TextField; im......

    操作系統(tǒng)課程設(shè)計(jì)教學(xué)大綱

    《操作系統(tǒng)課程設(shè)計(jì)》教學(xué)大綱 一、 課程設(shè)計(jì)基本信息 課程設(shè)計(jì)環(huán)節(jié)代碼:230027 課程設(shè)計(jì)環(huán)節(jié)名稱:操作系統(tǒng)課程設(shè)計(jì) 英文名稱:Course Design of Operating System 課程設(shè)計(jì)周......

主站蜘蛛池模板: 亚洲a∨精品一区二区三区| 国产精品一二三区久久狼| 欧美自拍亚洲综合图区| 中文字幕人妻伦伦精品| 欧美高清大屁股xxxxx| 中文字幕网伦射乱中文| 不卡无码人妻一区二区三区| 精品无码一区二区三区爱欲| 欧美成人一区二免费视频软件| 美女久久| 久久丁香五月天综合网| 国产在线观看www污污污| 亚洲在线国产日韩欧美| 超碰97久久国产精品牛牛| 国产999精品成人网站| 性色av无码中文av有码vr| 国产精品jizz在线观看老狼| 97久人人做人人妻人人玩精品| 四虎影视4hu4虎成人| 日本肥老妇色xxxxx日本老妇| 九九热久久只有精品2| 国产l精品国产亚洲区久久| 久久r999热精品国产首页| 色噜噜久久综合伊人一本| 最新亚洲人成无码网站| 国产日产欧洲无码视频| 肉体裸交137日本大胆摄影| 国产自国产自愉自愉免费24区| 国产午夜精品理论片小yo奈| 热re99久久精品国99热| 欧美日韩亚洲精品瑜伽裤| 色综合久久久无码中文字幕波多| 国产av国片精品一区二区| 人妻丰满熟妇aⅴ无码区| 无码成人精品区在线观看| 久久精品亚洲中文字幕无码麻豆| 国产成年无码久久久久毛片| 国产免费又爽又色又粗视频| 波多野结衣高清一区二区三区| 色婷婷综合久久久久中文一区二区| 亚洲人成无码www久久久|