第一篇:報(bào)告2 Linux操作系統(tǒng)
Linux操作系統(tǒng)
Linux是一套免費(fèi)使用和自由傳播的類(lèi)Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶(hù)、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶(hù)網(wǎng)絡(luò)操作系統(tǒng)。Linux 和 UNIX 的最大的區(qū)別是,前者是開(kāi)發(fā)源代碼的自由軟件,而后者是對(duì)源代碼實(shí)行知 識(shí)產(chǎn)權(quán)保護(hù)的傳統(tǒng)商業(yè)軟件。
目前,中國(guó)Linux的發(fā)展呈現(xiàn)以下趨勢(shì):
1、行業(yè)應(yīng)用逐漸擴(kuò)展,差異化解決方案需求增長(zhǎng)
經(jīng)過(guò)幾年的技術(shù)磨礪與市場(chǎng)培育,Linux行業(yè)應(yīng)用市場(chǎng)逐步細(xì)化,在金融、電信、郵政、傳媒、煙草等行業(yè)的應(yīng)用也不斷增多。成功應(yīng)用案例的不斷增加,企業(yè)級(jí)用戶(hù)在Linux平臺(tái)上部署解決方案時(shí),對(duì)系統(tǒng)穩(wěn)定性、可靠性、高性能和安全性等問(wèn)題也逐步打消疑慮,樹(shù)立了信心。因此,在商用市場(chǎng)中,市場(chǎng)需要成熟的基于Linux的、針對(duì)行業(yè)的應(yīng)用解決方案,解決方案提供商在Linux應(yīng)用開(kāi)發(fā)過(guò)程中能夠從廠商獲得足夠的技術(shù)支持,并提供滿足用戶(hù)需求基礎(chǔ)之上的安全性、高效性、可移植性最好,以及成本最低的解決方案是趨勢(shì)所在。
2、單一產(chǎn)品價(jià)格競(jìng)爭(zhēng)向整體解決方案TCO競(jìng)爭(zhēng)過(guò)渡
Linux向市場(chǎng)之初,采取的是低價(jià)策略。但是,僅僅靠低價(jià)在競(jìng)爭(zhēng)中不一定能獲取足夠的競(jìng)爭(zhēng)優(yōu)勢(shì)彌補(bǔ)產(chǎn)品研發(fā)等巨大成本;而且用戶(hù)的消費(fèi)心理越來(lái)越理性,其選擇產(chǎn)品所關(guān)注的因素并不僅是單一產(chǎn)品的采購(gòu)價(jià)格,用戶(hù)的需求已經(jīng)從原來(lái)購(gòu)買(mǎi)多家廠商的多種產(chǎn)品轉(zhuǎn)變?yōu)閺膯我惶峁┥藤?gòu)買(mǎi)整體解決方案和一站式服務(wù)。針對(duì)用戶(hù)需求的轉(zhuǎn)變,Linux產(chǎn)品提供商也逐漸由單一產(chǎn)品價(jià)格競(jìng)爭(zhēng)向整體解決方案TCO競(jìng)爭(zhēng)過(guò)渡。這個(gè)過(guò)程中,Linux廠商需要與其它相關(guān)IT廠商如硬件、軟件廠商和ISV等建立很好的合作關(guān)系,提高產(chǎn)品互相兼容性、互操作性及結(jié)合度,最終提高用戶(hù)業(yè)務(wù)系統(tǒng)的效率,降低整個(gè)業(yè)務(wù)系統(tǒng)的TCO。
3、渠道體系趨向?qū)哟位?、多樣?/p>
當(dāng)前,中國(guó)Linux廠商的渠道體系開(kāi)始建立并逐步完善,但目前渠道銷(xiāo)售對(duì)Linux市場(chǎng)的貢獻(xiàn)還有待提高。未來(lái)Linux渠道發(fā)展趨勢(shì)將是構(gòu)建多環(huán)節(jié)合作的層次化渠道體系,并使之?dāng)U展為更廣泛的合作伙伴體系。在產(chǎn)品研發(fā)上,加強(qiáng)與行
業(yè)獨(dú)立軟件開(kāi)發(fā)商的合作,提供更具適用性、更豐富的行業(yè)解決方案;在產(chǎn)品銷(xiāo)售上,除了代理商、分銷(xiāo)商、經(jīng)銷(xiāo)商之外,會(huì)有更多的具有成功的行業(yè)推廣經(jīng)驗(yàn)的增值解決方案提供商加入;在產(chǎn)品服務(wù)上,Linux廠商為渠道及系統(tǒng)集成商提供更多的培訓(xùn)和技術(shù)支持,提高渠道及系統(tǒng)集成商的服務(wù)能力;在市場(chǎng)推廣上,Linux廠商與相關(guān)軟硬件廠商的合作關(guān)系進(jìn)一步深入,面向共同的目標(biāo)客戶(hù)群提高產(chǎn)品的兼容性或提供捆綁的產(chǎn)品包共同拓展市場(chǎng);Linux培訓(xùn)或教育合作伙伴的加入從更深的層次上培育市場(chǎng),拓寬市場(chǎng)??傊?,未來(lái)Linux渠道發(fā)展的趨勢(shì)是形成多種方式多種層次的合作伙伴,構(gòu)建立體式渠道。
4、服務(wù)在Linux收入結(jié)構(gòu)中的比重逐漸增大
隨著Linux應(yīng)用的逐漸深入,Linux本土廠商和應(yīng)用企業(yè)正逐步接受以服務(wù)來(lái)獲取收入的銷(xiāo)售方式,而國(guó)外廠商N(yùn)ovell和紅帽的進(jìn)入,更將它們?cè)趪?guó)外采用的成熟的銷(xiāo)售方式帶入了中國(guó),加速了中國(guó)客戶(hù)對(duì)這一銷(xiāo)售方式的認(rèn)可。中國(guó)的Linux廠商也逐漸對(duì)以服務(wù)獲取收入的銷(xiāo)售方式達(dá)成了共識(shí),并正在努力調(diào)整自己的銷(xiāo)售策略和開(kāi)發(fā)策略,越來(lái)越多的收入來(lái)自Linux的技術(shù)服務(wù),而不是Linux產(chǎn)品的銷(xiāo)售
而推廣Linux的重要意義在于:
1.Linux是我國(guó)在系統(tǒng)軟件產(chǎn)業(yè)發(fā)展方面取得重大突破的一次歷史機(jī)遇:我國(guó)軟件產(chǎn)業(yè)規(guī)模小,實(shí)力弱,尤其是在系統(tǒng)軟件這樣的關(guān)鍵產(chǎn)品上,我們至今還沒(méi)能開(kāi)發(fā)出具有較強(qiáng)市場(chǎng)競(jìng)爭(zhēng)能力的產(chǎn)品。這是我們不得不面對(duì)的客觀現(xiàn)實(shí)。沒(méi)有自主的操作系統(tǒng),不僅信息產(chǎn)業(yè)發(fā)展受制于人,而且信息安全也難以保證。中國(guó)作為世界政治,經(jīng)濟(jì)大國(guó),不能沒(méi)有操作系統(tǒng)這樣的關(guān)鍵軟件產(chǎn)品。Linux是我們可能在系統(tǒng)軟件上取得重大突破的一個(gè)不容錯(cuò)過(guò)的良機(jī)。
2.Linux已成主流平臺(tái):Linux誕生于1991年,以其開(kāi)放源碼技術(shù)先進(jìn)等特性,得到了廣泛認(rèn)可,并以每年30%的增長(zhǎng)率(操作系統(tǒng)產(chǎn)品第一位)飛速發(fā)展,以24%市場(chǎng)份額在服務(wù)器市場(chǎng)成為第二大服務(wù)器操作系統(tǒng)平臺(tái)。Linux是支持平臺(tái)最多的操作系統(tǒng),從PDA,信息家電、信息終端到桌面操作系統(tǒng),PC服務(wù)器,小型機(jī)乃至大型主機(jī),都可以運(yùn)行Linux操作系統(tǒng)。而且穩(wěn)定性和性能非常優(yōu)秀?,F(xiàn)在Linux已經(jīng)成為強(qiáng)大的企業(yè)級(jí)操作系統(tǒng),應(yīng)用的深度和廣度也在飛速地發(fā)展,已在政府、教育、軍隊(duì)、金融、商業(yè)、ISP/ICP,電信等
領(lǐng)域都得到了廣泛發(fā)應(yīng)用,成功案例非常之多。
Linux的發(fā)展的前景之廣闊已毋庸置疑,但Linux方面發(fā)技術(shù)人才匱乏,已成為其發(fā)展的瓶頸。因此,在教育領(lǐng)域?qū)W習(xí)和使用Linux具有現(xiàn)實(shí)性和長(zhǎng)遠(yuǎn)意義。當(dāng)然Linux操作系統(tǒng)和Windows操作系統(tǒng)相比較有很多的特點(diǎn)。比如:1.可完全免費(fèi)得到2.可以運(yùn)行在386以上及各種RISC體系結(jié)構(gòu)機(jī)器上3.Linux是UNIX的完整實(shí)現(xiàn)4.真正的多任務(wù)多用戶(hù)5.完全符合POSIX標(biāo)準(zhǔn)6.具有圖形用戶(hù)界面7.具有強(qiáng)大的網(wǎng)絡(luò)功能8.是完整的UNIX開(kāi)發(fā)平臺(tái)
目前應(yīng)用在手機(jī)上的操作系統(tǒng)主要有PalmOS、Symbian、Windows CE和Linux四種。與Windows操作系統(tǒng)、Linux操作系統(tǒng)有關(guān)系的只是系統(tǒng)的內(nèi)核架構(gòu),表層的軟件平臺(tái)是獨(dú)立的。
隨著技術(shù)的進(jìn)步,移動(dòng)通信終端引入開(kāi)源手機(jī)操作系統(tǒng)得以實(shí)現(xiàn),由于Linux系統(tǒng)是免費(fèi)開(kāi)放的,所以其在通信終端的應(yīng)用為用戶(hù)帶來(lái)了更便宜的價(jià)格和更豐富的功能擴(kuò)展:Google開(kāi)發(fā)的Android手機(jī)操作系統(tǒng)可謂是其中的代表。其Android系統(tǒng)的組成模塊,核心系統(tǒng)就是采用Linux內(nèi)核。Linux存在著許多不同的Linux版本,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,比如手機(jī)、平板電腦、路由器、視頻游戲控制臺(tái)、臺(tái)式計(jì)算機(jī)、大型機(jī)和超級(jí)計(jì)算機(jī)。嚴(yán)格來(lái)講,Linux這個(gè)詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來(lái)形容整個(gè)基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫(kù)的操作系統(tǒng)。
第二篇:實(shí)時(shí)操作系統(tǒng)報(bào)告
實(shí)時(shí)操作系統(tǒng)課程實(shí)驗(yàn)報(bào)告
專(zhuān)業(yè):通信1001 學(xué)號(hào):3100601025 姓名:陳治州
完成時(shí)間:2013年6月11日
實(shí)驗(yàn) 簡(jiǎn)易電飯煲的模擬
一.實(shí)驗(yàn)?zāi)康模?/p>
掌握在基于嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II的應(yīng)用中,基于多任務(wù)的模式的編程方法。鍛煉綜合應(yīng)用多任務(wù)機(jī)制,任務(wù)間的通信機(jī)制,內(nèi)存管理等的能力。
二.實(shí)驗(yàn)要求:
1.按“S”開(kāi)機(jī),系統(tǒng)進(jìn)入待機(jī)狀態(tài),時(shí)間區(qū)域顯示當(dāng)前北京時(shí)間,默認(rèn)模式“煮飯”;2.按“C”選擇模式,即在“煮飯”、“煮粥”和“煮面”模式中循環(huán)選擇;
3.按“B”開(kāi)始執(zhí)行模式命令,“開(kāi)始”狀態(tài)選中,時(shí)間區(qū)域開(kāi)始倒計(jì)時(shí),倒計(jì)時(shí)完成后進(jìn)入“保溫”狀態(tài),同時(shí)該狀態(tài)顯示選中,時(shí)間區(qū)域顯示保溫時(shí)間;
4.按“Q”取消當(dāng)前工作狀態(tài),系統(tǒng)進(jìn)入待機(jī)狀態(tài),時(shí)間區(qū)域顯示北京時(shí)間,模式為當(dāng)前模式;
5.按“X”退出系統(tǒng),時(shí)間區(qū)域不顯示。
6.煮飯時(shí)長(zhǎng)為30,煮粥時(shí)長(zhǎng)為50,煮面時(shí)長(zhǎng)為40.三.實(shí)驗(yàn)設(shè)計(jì):
1.設(shè)計(jì)思路:
以老師所給的五個(gè)程序?yàn)榛A(chǔ),看懂每個(gè)實(shí)驗(yàn)之后,對(duì)borlandc的操作有了大概的認(rèn)識(shí),重點(diǎn)以第五個(gè)實(shí)驗(yàn)Task_EX為框架,利用其中界面顯示與按鍵掃描以及做出相應(yīng)的響應(yīng),對(duì)應(yīng)實(shí)現(xiàn)此次實(shí)驗(yàn)所需要的功能。
本次實(shí)驗(yàn)分為界面顯示、按鍵查詢(xún)與響應(yīng)、切換功能、時(shí)鐘顯示與倒計(jì)時(shí)模塊,綜合在一起實(shí)驗(yàn)所需功能。2.模塊劃分圖:(1)界面顯示:
Main()Taskstart()Taskstartdispinit()在TaskStartDispInit()函數(shù)中,使用PC_DispStr()函數(shù)畫(huà)出界面。(2)按鍵查詢(xún)與響應(yīng):
Main()Taskstart()在TaskStart()函數(shù)中,用if(PC_GetKey(&key)== TRUE)判斷是否有按鍵輸入。然后根據(jù)key的值,判斷輸入的按鍵是哪一個(gè);在響應(yīng)中用switch語(yǔ)句來(lái)執(zhí)行對(duì)應(yīng)按鍵的響應(yīng)。(3)切換功能:
l計(jì)數(shù)“C”按鍵的次數(shù)M=l%3Switch(m)M=0,1,2對(duì)應(yīng)于煮飯,煮粥,煮面,然后使用PC_DispStr()函數(shù)在選擇的選項(xiàng)前畫(huà)上“@”指示,同時(shí),在其余兩項(xiàng)錢(qián)畫(huà)上“ ”以“擦出”之前畫(huà)下的“@”,注意l自增。
四.主要代碼:
#include “stdio.h” #include “includes.h” #include “time.h” #include “dos.h” #include “sys/types.h” #include “stdlib.h” #define TASK_STK_SIZE
512
#define N_TASKS
OS_STK
TaskStk[N_TASKS][TASK_STK_SIZE];
OS_STK
TaskStartStk[TASK_STK_SIZE];
INT8U
TaskData[N_TASKS];
void Task0(void *pdata);
void TaskStart(void *pdata);
static void TaskStartDispInit(void);
void main(void){
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS, OSCtxSw);
OSTaskCreate(TaskStart,(void *)0, &TaskStartStk[TASK_STK_SIZE-1], 4);
OSStart();
} void TaskStart(void *pdata){ #if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;#endif
INT8U l,m;
INT16S key;
l=0;
pdata = pdata;
TaskStartDispInit();
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit();
for(;;){
if(PC_GetKey(&key)== TRUE)
{
switch(key)
{
case 0x1B:
PC_DOSReturn();
break;
case 0x43:
{ m=(l%3);
switch(m)
{ case 0: {
PC_DispStr(26,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(40,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(55,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);} break;
case 1: { PC_DispStr(26,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(40,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(55,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);} break;case 2: { PC_DispStr(26,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(40,6, “ ”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(55,6, “@”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);}
break;}
l++;} break;
} } OSCtxSwCtr = 0;
OSTimeDlyHMSM(0, 0, 1, 0);
} } static void TaskStartDispInit(void){ PC_DispStr(0, 0, “
uC/OS-II, The Real-Time Kernel
”, DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr(0, 1, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 2, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 3, “
dianfanbao shiyan
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 4, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 5, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 6, “
kai shi.zhu fan.zhu zhou.zhu mian.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 7, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 8, “
bao wen.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 9, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 10, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 11, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 12, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 13, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 14, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 15, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 16, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 17, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 18, “
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(0, 19, “ 'S':kai ji.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 20, “ 'C':mo shi qie huan.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 21, “ 'B':kai shi zhi xin.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 22, “ 'Q':qu xiao dang qian gong zuo zhuang tai.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr(0, 23, “ 'X':tui chu xi tong.”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
PC_DispStr(0, 24, “
<-PRESS 'ESC' TO QUIT->
”, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}
五.運(yùn)行界面:
(1)主界面:
(2)顯示北京時(shí)間:
(3)模式切換:
(4)倒計(jì)時(shí):
(5)保溫執(zhí)行時(shí)間:
六.總結(jié):
本次實(shí)驗(yàn)主要以老師所給的實(shí)驗(yàn)事例為基礎(chǔ),并結(jié)合老師課堂講的內(nèi)容,理解編寫(xiě)程序。做實(shí)驗(yàn)本實(shí)驗(yàn)前,先執(zhí)行了一下事例程序,以此了解borlandc的一些基本操作;然后就是看懂每個(gè)實(shí)驗(yàn)的框架和主要部分;接著,將事例程序中的部分思想運(yùn)用到本次實(shí)驗(yàn)中,其中以顯示界面的思想運(yùn)用的最多;除此以外,在模式切換上花了最大的精力,最終的解決方法是以變量l作為一個(gè)計(jì)數(shù)值,并運(yùn)用switch語(yǔ)句在選擇的模式上畫(huà)上“@”,同時(shí)還得注意在未選擇的模式上畫(huà)上空格來(lái)“擦除”之前畫(huà)上的@;在查詢(xún)按鍵上,同樣運(yùn)用switch語(yǔ)句......這次實(shí)驗(yàn)收獲不少,不僅對(duì)之前學(xué)的C語(yǔ)言有了更進(jìn)一步的鞏固,而且還強(qiáng)化了ucos里面的多任務(wù)的一些認(rèn)識(shí);同時(shí),以前對(duì)DOS界面很陌生,但本次實(shí)驗(yàn)使用的正是DOS界面,通過(guò)幾天的經(jīng)歷,對(duì)DOS中的編譯、“help”等各個(gè)方面有了更深入的認(rèn)識(shí),不再害怕使用DOS了。
對(duì)本課程有很大的興趣,在以后的課余時(shí)間里我會(huì)不斷學(xué)習(xí)這些知識(shí)。
第三篇:操作系統(tǒng)課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)報(bào)告
題 目: 模擬請(qǐng)求頁(yè)式管理
課程名稱(chēng): 計(jì)算機(jī)操作系統(tǒng) 學(xué) 院: 信息工程學(xué)院
專(zhuān) 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)
班 級(jí): 14計(jì)本(1)學(xué)生姓名: * * * 學(xué) 號(hào): 201403031** 指導(dǎo)教師: * * 成 績(jī):
開(kāi)課時(shí)間: 2016-2017 學(xué)年 一 學(xué)期
模擬請(qǐng)求頁(yè)式管理
第1章 需求分析
1.1設(shè)計(jì)要求
請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。本設(shè)計(jì)通過(guò)請(qǐng)求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式管理的頁(yè)面置換算法。本實(shí)驗(yàn)要求用Vc++或其他高級(jí)語(yǔ)言編寫(xiě)和調(diào)試。
編寫(xiě)程序?qū)崿F(xiàn):
(1)先進(jìn)先出頁(yè)面置換算法(FIFO)(2)最近最久未使用頁(yè)面置換算法(LRU)最佳置換頁(yè)面置換算法(OPT)設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),編程序演示以上三種算法的具體實(shí)現(xiàn)過(guò)程,并計(jì)算訪問(wèn)命中率。
1.2解決方案
首先確定實(shí)現(xiàn)語(yǔ)言使用c#實(shí)現(xiàn)圖形化界面,后確定要實(shí)現(xiàn)哪些功能,比如算法選擇,頁(yè)面添加,模擬控制。然后確定輸出結(jié)構(gòu)以便于程序的測(cè)試和驗(yàn)證。將基本框架建立后再進(jìn)行編程。編程前進(jìn)行算法結(jié)構(gòu)分析最后編程實(shí)現(xiàn)。
1.3算法實(shí)現(xiàn)原理
1、先進(jìn)先出置換算法(FIFO):
發(fā)生缺頁(yè)中斷時(shí)按照頁(yè)面進(jìn)入內(nèi)存順序總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面。
2、最近最久未使用置換算法(LRU):
發(fā)生缺頁(yè)中斷時(shí)總是淘汰存在內(nèi)存中最長(zhǎng)時(shí)間未被使用的頁(yè)面。
3、最佳置換算法(OPT):
發(fā)生缺頁(yè)中斷時(shí)若一個(gè)或幾個(gè)頁(yè)面將來(lái)將不會(huì)被調(diào)用則按先進(jìn)先出原則淘汰頁(yè)面,若將來(lái)都有調(diào)用則比較調(diào)用時(shí)刻選擇最遠(yuǎn)時(shí)刻頁(yè)面淘汰。
4、缺頁(yè)率:缺頁(yè)次數(shù)占頁(yè)面調(diào)用次數(shù)的百分比。
第2章 概要設(shè)計(jì)
2.1數(shù)據(jù)設(shè)計(jì)
常變量:調(diào)用頁(yè)面最大數(shù)量(MaxN),內(nèi)存最大頁(yè)面數(shù)(MaxM)待調(diào)用頁(yè)面數(shù)組:page_dd[MaxN]存放等待調(diào)用的頁(yè)面號(hào)
頁(yè)面數(shù)組專(zhuān)用指針 page_p,用于指向page_dd數(shù)組中正需調(diào)入內(nèi)存的頁(yè)號(hào) 內(nèi)存塊數(shù)組:Memery[MaxM],存放內(nèi)存當(dāng)前存放的頁(yè)號(hào) 缺頁(yè)計(jì)數(shù)器:count,記錄缺頁(yè)次數(shù)
內(nèi)存塊狀態(tài)數(shù)組:M1[MaxN],M2[MaxN],M3[MaxN],記錄每次頁(yè)面調(diào)用結(jié)束后內(nèi)存各塊的狀態(tài)
缺頁(yè)記錄數(shù)組s[MaxN],用于記錄頁(yè)面調(diào)用時(shí)是否產(chǎn)生缺頁(yè)中斷,初始化為是
2.2函數(shù)設(shè)計(jì)
1、頁(yè)面添加函數(shù):void btnAdd_Click(object sender, EventArgs e)用于實(shí)現(xiàn)通過(guò)點(diǎn)擊按鈕實(shí)現(xiàn)數(shù)據(jù)輸入。
2、內(nèi)存初始化函數(shù):init(int[] a, int[] b,int []m1,int[]m2,int[]m3)參數(shù)有頁(yè)面數(shù)組、內(nèi)存數(shù)組、狀態(tài)數(shù)組,采用先進(jìn)先出算法對(duì)內(nèi)存先進(jìn)行裝滿 服務(wù)于先進(jìn)先出頁(yè)面置換函數(shù)和最佳置換函數(shù)。
3、輸出函數(shù):void display(int[]a,int[]m1,int[]m2,int[]m3,char[]c)用于輸出模擬結(jié)果,參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組,狀態(tài)數(shù)組,缺頁(yè)記錄數(shù)組。再模擬之后調(diào)用。
4、模擬控制函數(shù):void btnmo_Click(object sender, EventArgs e)用于實(shí)現(xiàn)通過(guò)單擊模擬按鈕,根據(jù)用戶(hù)所選算法進(jìn)行模擬并顯示結(jié)果。
5、先進(jìn)先出算法模擬函數(shù):
void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s)用于實(shí)現(xiàn)先進(jìn)先出算法模擬,參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組、內(nèi)存狀態(tài)記錄數(shù)組,缺頁(yè)記錄數(shù)組。在模擬函數(shù)中調(diào)用。
6、最近最久未使用算法模擬函數(shù):
void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于 3 實(shí)現(xiàn)最近最久未使用算法模擬,參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組,內(nèi)存狀態(tài)記錄數(shù)組,缺頁(yè)記錄數(shù)組。在模擬函數(shù)中被調(diào)用。
7、最近最久未使用函數(shù)輔助函數(shù):void LUR_I(int[] a,int e)用于對(duì)最近最久未使用算法中所用輔助數(shù)組(記錄頁(yè)面存在時(shí)長(zhǎng))進(jìn)行調(diào)整,參數(shù)有輔助數(shù)組及需調(diào)整的數(shù)據(jù)下標(biāo)。在最近最久未使用函數(shù)中調(diào)用。
8、最佳置換算法模擬函數(shù):
void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s)用于模擬最佳置換算法。參數(shù)有頁(yè)面數(shù)組,內(nèi)存數(shù)組,內(nèi)存狀態(tài)記錄數(shù)組,缺頁(yè)記錄數(shù)組。在模擬函數(shù)中被調(diào)用。
9、最佳置換算法輔助函數(shù):void OPT_F(int[] a, int e)用于對(duì)最佳置換算法中的輔助數(shù)組進(jìn)行調(diào)整。參數(shù)有輔助數(shù)組,需調(diào)整數(shù)據(jù)下標(biāo)。在最佳置換算法中被調(diào)用。
10、重置函數(shù):void btncz_Click(object sender, EventArgs e)用于重新選擇算法進(jìn)行新的模擬。
2.3主要算法設(shè)計(jì)
1、初始化函數(shù)算法:
第一步:將第一個(gè)頁(yè)面調(diào)入內(nèi)存,調(diào)整最佳置換算法輔助數(shù)組,缺頁(yè)計(jì)數(shù)器加一,保存內(nèi)存數(shù)組狀態(tài)。
第二步:調(diào)用下一個(gè)頁(yè)面并判斷內(nèi)存中是否有本頁(yè)面有轉(zhuǎn)第三步,無(wú)轉(zhuǎn)第四步。第三步:更改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)值,記錄當(dāng)前內(nèi)存狀態(tài),調(diào)整最佳置換算法輔助數(shù)組,頁(yè)面指針指向下一頁(yè)。
第四步:將頁(yè)面調(diào)入內(nèi)存,調(diào)整最佳置換算法輔助函數(shù),缺頁(yè)計(jì)數(shù)器加一,保存內(nèi)存數(shù)組狀態(tài)。若內(nèi)存尚不滿轉(zhuǎn)第一步。具體見(jiàn)圖1初始化算法流程圖。
開(kāi)始頁(yè)面調(diào)入內(nèi)存缺頁(yè)計(jì)數(shù)器加一記錄內(nèi)存狀態(tài)調(diào)用下一頁(yè)否否內(nèi)存是否有該頁(yè)面是記錄內(nèi)存狀態(tài)修改缺頁(yè)數(shù)組內(nèi)存已滿是結(jié)束
圖1 初始化算法流程圖
2、先進(jìn)先出頁(yè)面置換算法:
第一步:檢查內(nèi)存中是否已有需調(diào)用頁(yè)面,有則轉(zhuǎn)第二步,無(wú)則轉(zhuǎn)第三步。第二步:記錄當(dāng)前內(nèi)存狀態(tài),修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)值。
第三步:內(nèi)存中無(wú)需要調(diào)用的頁(yè)面,進(jìn)行出隊(duì)操作,然后進(jìn)行入隊(duì)操作,記錄內(nèi)存塊狀態(tài),缺頁(yè)計(jì)數(shù)器加一。
第四步:若頁(yè)面數(shù)組未被調(diào)用結(jié)束轉(zhuǎn)第一步。具體見(jiàn)圖2先進(jìn)先出算法流程圖。
開(kāi)始頁(yè)面調(diào)入內(nèi)存該頁(yè)在內(nèi)存中是否已存在是否否先出隊(duì)操作后入隊(duì)操作記錄內(nèi)存狀態(tài)修改缺頁(yè)數(shù)組值記錄內(nèi)存狀態(tài)缺頁(yè)計(jì)數(shù)器加一頁(yè)面調(diào)用結(jié)束是結(jié)束
圖2 先進(jìn)先出算法流程圖
3、最近最久未使用置換算法:
第一步:將頁(yè)面調(diào)入內(nèi)存,記錄內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一,調(diào)整輔助數(shù)組,頁(yè)面指針加一。
第二步:檢查內(nèi)存中是否已有所需頁(yè)面,有轉(zhuǎn)第三步,無(wú)轉(zhuǎn)第一步。
第三步:修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)記錄,記錄內(nèi)存狀態(tài),調(diào)整輔助數(shù)組,頁(yè)面指針加一。第四步:內(nèi)存是否已滿,無(wú)則轉(zhuǎn)第一步,是則轉(zhuǎn)第五步。
第五步:檢查內(nèi)存中是否有所需頁(yè)面,有則記錄當(dāng)前內(nèi)存狀態(tài),修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)值。無(wú)則轉(zhuǎn)第六步。
第六步:檢查輔助數(shù)組找出最大值并記錄其下標(biāo),置換內(nèi)存中對(duì)應(yīng)下標(biāo)的數(shù)據(jù),調(diào)整輔助數(shù)組,缺頁(yè)計(jì)數(shù)器加一。
第七步:頁(yè)面是否調(diào)用結(jié)束未結(jié)束則轉(zhuǎn)第五步。具體見(jiàn)圖3最近最久未使用算法流程圖。
開(kāi)始調(diào)入頁(yè)面至內(nèi)存記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一否調(diào)整輔助數(shù)組調(diào)用下一頁(yè)內(nèi)存中是否已有該頁(yè)否內(nèi)存已滿是通過(guò)輔助數(shù)組確定淘汰頁(yè)面是修改缺頁(yè)數(shù)組記錄內(nèi)存狀態(tài)調(diào)整輔助數(shù)組否頁(yè)面置換記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一調(diào)用結(jié)束是結(jié)束
圖3 最近最久未使用算法
4、最佳置換算法:
第一步:檢查內(nèi)存中是否已有所需頁(yè)面,有則記錄內(nèi)存狀態(tài),修改缺頁(yè)數(shù)組對(duì)應(yīng)下標(biāo)數(shù)值。無(wú)則轉(zhuǎn)第二步。
第二步:判斷內(nèi)存中各頁(yè)面的未來(lái)調(diào)用情況,記錄是否還有調(diào)用,若有則記錄調(diào)用時(shí)刻。
第三步:分析調(diào)用情況,內(nèi)存中頁(yè)面都在將來(lái)不會(huì)被調(diào)用轉(zhuǎn)第四步,有一個(gè)被調(diào)用轉(zhuǎn)第五步,有兩個(gè)被調(diào)用轉(zhuǎn)第六步,全被調(diào)用轉(zhuǎn)第七步。
第四步:查找輔助數(shù)組找到內(nèi)存中存在時(shí)間最長(zhǎng)的頁(yè)面進(jìn)行置換,修改內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一,修改輔助數(shù)組。
第五步:查找到不會(huì)被調(diào)用的頁(yè)面,并根據(jù)輔助數(shù)組選擇最早進(jìn)入內(nèi)存的頁(yè)面將其置換。修改內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一,修改輔助數(shù)組。
第六步:查找輔助數(shù)組找到將來(lái)不需要在調(diào)用的頁(yè)面將其置換,修改輔助數(shù)組,記錄內(nèi)存狀態(tài),缺頁(yè)計(jì)數(shù)器加一。
第七步:查找輔助數(shù)組,找尋最晚被調(diào)用的頁(yè)面,將其置換。記錄內(nèi)存狀態(tài),修改輔助數(shù)組,缺頁(yè)計(jì)數(shù)器加一。
第八步:頁(yè)面是否調(diào)用完成,否則轉(zhuǎn)第一步。具體見(jiàn)圖4最佳置換算法流程圖
開(kāi)始調(diào)入頁(yè)面記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一更新輔助函數(shù)是頁(yè)面已存在否向后檢查內(nèi)存當(dāng)前頁(yè)面調(diào)用情況所有頁(yè)面都不會(huì)再度調(diào)用否是一個(gè)頁(yè)面會(huì)調(diào)用否否是兩個(gè)頁(yè)面會(huì)調(diào)用是否查找輔助數(shù)組得到最先進(jìn)入頁(yè)面通過(guò)輔助數(shù)組得到不會(huì)再調(diào)用的頁(yè)面通過(guò)輔助數(shù)組獲取最晚調(diào)用的頁(yè)面通過(guò)輔助數(shù)組得到另外兩個(gè)頁(yè)面中最先進(jìn)入的頁(yè)面置換頁(yè)面記錄內(nèi)存狀態(tài)計(jì)數(shù)器加一更新輔助函數(shù)頁(yè)面調(diào)用結(jié)束是結(jié)束
圖4 最佳置換算法流程圖 2.4界面設(shè)計(jì)
采用c# 設(shè)計(jì)windows窗體應(yīng)用程序,使用下拉列表框選擇算法,通過(guò)按鈕添加待調(diào)用的頁(yè)面。通過(guò)文本控件顯示模擬結(jié)果。顯示樣式:第一行:算法名稱(chēng);
第二行:調(diào)用頁(yè)面順序;
第三行至第五行顯示內(nèi)存在每調(diào)用一次頁(yè)面后的狀態(tài);
第六行:是否缺頁(yè);
最后一行顯示缺頁(yè)率;
第3章 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
3.1函數(shù)設(shè)計(jì)
1、添加按鈕功能實(shí)現(xiàn)代碼
主要功能:實(shí)現(xiàn)單擊一次添加一個(gè)調(diào)用頁(yè)面,并給出相應(yīng)的提示,如正在輸入的是第幾次調(diào)度頁(yè)面,在輸入為空時(shí)能夠彈出對(duì)話框提示用戶(hù),在輸入完成時(shí)為避免數(shù)組越界應(yīng)在輸入完成時(shí)隱藏;輸入過(guò)程中始終保證時(shí)輸入焦點(diǎn)。private void btnAdd_Click(object sender, EventArgs e){ if(txtAdd.Text!= “")//輸入不為空才能繼續(xù)輸入 { page_dd[i_add] = Convert.ToInt32(txtAdd.Text);/*將輸入值賦值給頁(yè)面數(shù)組*/ txtShow.Text += txtAdd.Text + ” “;/*顯示供用戶(hù)查閱*/ i_add++;txtAdd.Clear();/*清空*/ if(i_add == MaxN)//輸入結(jié)束時(shí) { txtAdd.ReadOnly = true;//不允許繼續(xù)輸入 btnAdd.Hide();//按鈕隱藏 return;} txtAdd.Focus();//設(shè)置為輸入焦點(diǎn)
label2.Text = ”第“ +(i_add + 1)+ ”次調(diào)度頁(yè)面:“;/*提示用戶(hù)正在輸入的是第幾次調(diào)度頁(yè)面*/ } /*輸入為空則彈出對(duì)話框提示用戶(hù)輸入為空*/ else { MessageBox.Show(”請(qǐng)輸入調(diào)用頁(yè)面!“, ”輸入為空“, MessageBoxButtons.OK, MessageBoxIcon.Warning);txtAdd.Focus();} }
2、初始化函數(shù)
主要功能:將內(nèi)存一先進(jìn)先出方式填滿,并記錄每個(gè)頁(yè)面進(jìn)入時(shí)間,服務(wù)于先進(jìn)先出頁(yè)面置換算法和最佳置換算法。
void init(int[] a, int[] b,int []m1,int[]m2,int[]m3){ /*內(nèi)存未滿時(shí)循環(huán)*/ for(int i = 0;i < MaxM&&page_p //調(diào)整輔助數(shù)組將剛進(jìn)入內(nèi)存的頁(yè)面的對(duì)應(yīng)時(shí)間 OPT_F(O_Q ,i); count++;//缺頁(yè)計(jì)數(shù)器加一 m1[page_p] = b[0];//保存內(nèi)存狀態(tài) m2[page_p] = b[1];m3[page_p] = b[2];page_p++;//調(diào)用下一頁(yè)面 //檢查內(nèi)存中是否原先就有需要的頁(yè)面; for(int j = 0;j <= i&&page_p s[page_p] = 'F';//缺頁(yè)數(shù)組對(duì)應(yīng)數(shù)據(jù)更改 m1[page_p] = b[0];//記錄內(nèi)存狀態(tài) m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1);//調(diào)整最佳置換算法輔助函數(shù) page_p++;//調(diào)用下一頁(yè) j =-1;//重新開(kāi)始尋找 } } } } 3、先進(jìn)先出頁(yè)面置換函數(shù) 主要功能:根據(jù)先進(jìn)先出算法要求在產(chǎn)生缺頁(yè)中斷時(shí)采用先進(jìn)先出方式確定淘汰頁(yè)面,并在每次頁(yè)面調(diào)用時(shí)記錄下內(nèi)存狀態(tài),缺頁(yè)次數(shù);采用循環(huán)隊(duì)列使得每次出隊(duì)的一定是最先進(jìn)入內(nèi)存的。 private void FIFO(int[] a, int[] b,int[]m1,int[]m2,int[]m3,char[] s){ int Fpage_p = page_p;int front, rear;//定義隊(duì)列對(duì)手和對(duì)尾指針并初始化 front = 0;rear = MaxM1;int sa;for(;Fpage_p < MaxN;Fpage_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//檢查內(nèi)存中是否已有要調(diào)用的頁(yè)面。 { if(b[i] == a[Fpage_p]){ m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];s[Fpage_p] = 'F';sa = 1;break;} } if(sa == 0){ front =(front + 1)% MaxM; rear =(rear + 1)% MaxM;b[rear] = a[Fpage_p];m1[Fpage_p] = b[0];m2[Fpage_p] = b[1];m3[Fpage_p] = b[2];count++;} else continue;} } /*最近最久未使用算法輔助數(shù)組調(diào)整函數(shù)*/ private void LUR_I(int[] a,int e){ int temp;temp = a[e];a[e] = 1;for(int i = 0;i < MaxM;i++){ if(a[i] < temp && i!=e)a[i]++;} } /*最佳置換算法輔助數(shù)組調(diào)整函數(shù)*/ private void OPT_F(int[] a, int e){ if(e!=-1){ a[e] = 0;for(int i = 0;i < MaxM;i++){ if(i!= e)a[i]++;} } else for(int i = 0;i < MaxM;i++){ a[i]++;} } /*最近最久未使用算法*/ private void LRU(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){ int[] L_Q = new int[MaxM]{3,3,3};int sa;for(int i = 0;i < MaxM && page_p < MaxN;i++){ b[i] = a[page_p];//調(diào)入內(nèi)存 count++;m1[page_p] = b[0];//保存內(nèi)存狀態(tài) m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);page_p++;for(int j = 0;j <= i && page_p < MaxN;j++){ if(b[j] == a[page_p]){ s[page_p] = 'F';m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, j);page_p++;j =-1;} } } for(;page_p < MaxN;page_p++){ sa = 0;for(int i = 0;i < MaxM;i++)//用的頁(yè)面。{ if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];s[page_p] = 'F';LUR_I(L_Q, i);sa = 1;break;} } if(sa == 0){ 檢查內(nèi)存中是否已有要調(diào)40 for(int i = 0;i < MaxM;i++){ if(L_Q[i] == 3){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];LUR_I(L_Q, i);break;} } count++;} else continue;} } /*最佳置換算法*/ private void OPT(int[] a, int[] b, int[] m1, int[] m2, int[] m3, char[] s){ int sa;int O_p;int Ocount;int[] OPT_I=new int [MaxM ]{-1 ,-1 ,-1 };int[] OPT_J=new int [MaxM]{MaxN ,MaxN ,MaxN };for(;page_p < MaxN;page_p++){ for(int i = 0;i < MaxM;i++){ OPT_I[i] =-1;//刷新?tīng)顟B(tài)數(shù)組 OPT_J[i] = MaxN;} sa = 0;for(int i = 0;i < MaxM;i++)//檢查內(nèi)存中是否已有要調(diào)用的頁(yè)面。 { if(b[i] == a[page_p]){ m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q,-1); s[page_p] = 'F';sa = 1;break;} } if(sa == 0)//缺頁(yè) { Ocount = 0;for(int i = 0;i < MaxM;i++){ O_p = page_p + 1;for(;O_p < MaxN;O_p++){ if(b[i] == a[O_p]){ Ocount++;OPT_I[i] = 1;OPT_J[i] = O_p;break;} } } switch(Ocount){ case 0://全部頁(yè)面以后都不會(huì)再度調(diào)用 int temp = 0;for(int i = 0;i < MaxM;i++){ if(O_Q[i] > O_Q[temp])temp = i;} b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 1://有一個(gè)頁(yè)面將在以后調(diào)用 temp = 0;for(int i = 0;i < MaxM;i++){ if(OPT_I[i]!= 1 && O_Q[i] > O_Q[temp])temp = i; } b[temp] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q ,temp);count++;break;case 2: for(int i = 0;i < MaxM;i++){ if(OPT_I[i] ==-1){ b[i] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, i);count++;} } break;case 3: int p = 0;for(int i = 0;i < MaxM;i++){ if(OPT_J[i] >OPT_J[p])p = i;} b[p] = a[page_p];m1[page_p] = b[0];m2[page_p] = b[1];m3[page_p] = b[2];OPT_F(O_Q, p);count++;break;} } } } /*重置函數(shù)*/ private void btncz_Click(object sender, EventArgs e){ comboBox1.SelectedIndex = 0; txtAdd.Text = ”“;page_p = 0;i_add = 0;count = 0;//txtShow.Text = ”";for(int i = 0;i < MaxM;i++)Memery[i] =-1;for(int i = 0;i < MaxN;i++)s[i] = 'T';} } } 操 作 系 統(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)名稱(chēng): 用C++實(shí)現(xiàn)驅(qū)動(dòng)調(diào)度算法、頁(yè)面替換算法、銀行家算法、處理器調(diào)度算法 二、實(shí)驗(yàn)要求: 書(shū)寫(xiě)實(shí)驗(yàn)報(bào)告,包括的內(nèi)容有: (1)實(shí)驗(yàn)題目 (2)程序中使用的數(shù)據(jù)結(jié)構(gòu)及主要文字說(shuō)明 (3)帶有注釋的源程序 (4)執(zhí)行程序說(shuō)明,表明各進(jìn)程控制快的初始狀態(tài),以及各算法的運(yùn)行狀態(tài) (5)通過(guò)實(shí)驗(yàn)后的收獲與體會(huì)及對(duì)實(shí)驗(yàn)的改進(jìn)意見(jiàn)和見(jiàn)解 二、實(shí)驗(yàn)?zāi)康模?/p> 通過(guò)自己編程來(lái)實(shí)現(xiàn)各類(lèi)操作系統(tǒng)算法,進(jìn)一步理解操作系統(tǒng)的概念及含義,提高對(duì)操作系統(tǒng)的認(rèn)識(shí),同時(shí)提高自己的動(dòng)手實(shí)踐能力。加強(qiáng)我們對(duì)各類(lèi)算法的理解。 三、實(shí)驗(yàn)內(nèi)容: 1、實(shí)現(xiàn)頁(yè)面替換算法 (1)FIFO 先進(jìn)先出頁(yè)面替換算法 (2)LRU最近最少使用頁(yè)面替換算法 (3)LFU最少使用頻率頁(yè)面替換算法 2、銀行家算法 3、實(shí)現(xiàn)驅(qū)動(dòng)調(diào)度算法 (1)先來(lái)先服務(wù)算法 (2)電梯算法 (3)掃描算法 4、實(shí)現(xiàn)處理器調(diào)度 (1)先進(jìn)先出處理器調(diào)度 (2)時(shí)間片輪轉(zhuǎn)法 (3)優(yōu)先級(jí)調(diào)度 四、實(shí)驗(yàn)原理: 1、頁(yè)面替換算法 先進(jìn)先出頁(yè)面置換算法:該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,即選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面加以淘汰。將已調(diào)入內(nèi)存的頁(yè)面按先后次序鏈接成一個(gè)隊(duì)列,將最先調(diào)入的頁(yè)面與新頁(yè)面進(jìn)行置換 最近最久未使用置換算法:該算法是利用“最近的過(guò)去”作為“最近的將來(lái)”,將最近最久未使用的頁(yè)面加以淘汰。將已調(diào)入內(nèi)存的頁(yè)面按先后順序鏈接成一個(gè)隊(duì)列,為每一個(gè)頁(yè)面增加一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的是時(shí)間t,當(dāng)需淘汰一個(gè)頁(yè)面時(shí),選擇現(xiàn)有頁(yè)面中其t值最大,即最近最久未使用的頁(yè)面加以淘汰 2、銀行家算法 先對(duì)用戶(hù)提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求的是不大于需要的,是否不大于可利用的。若請(qǐng)求合法,則進(jìn)行試分配。最后對(duì)試分配后的狀態(tài)調(diào)用安全性檢查算法進(jìn)行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來(lái)狀態(tài),拒絕申請(qǐng)。 3、驅(qū)動(dòng)調(diào)度算法 先進(jìn)先出算法(FIFO):總是嚴(yán)格按時(shí)間順序?qū)Υ疟P(pán)請(qǐng)求予以處理。算法實(shí)現(xiàn)簡(jiǎn)單、易于理解并且相對(duì)公平,不會(huì)發(fā)生進(jìn)程餓死現(xiàn)象。但該算法可能會(huì)移動(dòng)的柱面數(shù)較多并且會(huì) 經(jīng)常更換移動(dòng)方向,效率有待提高 電梯調(diào)度算法:總是將一個(gè)方向上的請(qǐng)求全部處理完后,才改變方向繼續(xù)處理其他請(qǐng)求。 掃描算法(scan algorithm):總是從最外向最內(nèi)(或最內(nèi)向最外)進(jìn)行掃描,然后在從最內(nèi)向最外(或最外向最內(nèi))掃描。該算法與電梯調(diào)度算法的區(qū)別是電梯調(diào)度在沒(méi)有最外或最內(nèi)的請(qǐng)求時(shí)不會(huì)移動(dòng)到最外或最內(nèi)柱面。 4、處理器調(diào)度算法 先進(jìn)先出處理器調(diào)度:按照作業(yè)進(jìn)入系統(tǒng)后備工作隊(duì)列的先后次序來(lái)挑選作業(yè),先進(jìn)入系統(tǒng)的作業(yè)將優(yōu)先被挑選進(jìn)入主存,創(chuàng)建用戶(hù)進(jìn)程,分配所需資源,然后移入就緒隊(duì)列。 時(shí)間片輪轉(zhuǎn)法調(diào)度算法:調(diào)度次序每次把CPU分配給就緒隊(duì)列進(jìn)程/線程使用規(guī) 定的時(shí)間間隔,就緒隊(duì)列中每個(gè)進(jìn)程/線程輪流的運(yùn)行一個(gè)時(shí)間片,當(dāng)時(shí)間片耗盡時(shí),就強(qiáng)迫當(dāng)前運(yùn)行進(jìn)程/線程讓出處理器,轉(zhuǎn)而排列到就緒隊(duì)列尾部,等候下一輪調(diào)度。 優(yōu)先級(jí)調(diào)度:根據(jù)確定的優(yōu)先級(jí)來(lái)選取進(jìn)程/線程,總是選擇就緒隊(duì)列中的優(yōu)先 級(jí)最高者投入運(yùn)行,即優(yōu)先級(jí)越高,先被調(diào)用。 五、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 對(duì)操作系統(tǒng)的各類(lèi)算法設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)如下: 頁(yè)面替換算法:void FIFO();void LRU();void LFU(); 銀行家算法:void Init()初始化算法 void Bank()銀行家算法 bool Safe()安全性算法 驅(qū)動(dòng)調(diào)度算法: struct MagneticHead//磁頭構(gòu)成{ int site; int count; bool direct; }; struct Range//磁盤(pán)磁道范圍 { int mStart; int mEnd; }; struct RequestList//請(qǐng)求序列 { int site; bool state; }; struct Data//基本數(shù)據(jù)集合{ MagneticHead magneticHead; RequestList *requestList; int *executeList; Range range; int length; }; 處理器調(diào)度: typedef struct pcb//時(shí)間片輪轉(zhuǎn)法 { char pname[N]; int runtime; int arrivetime; char state; struct pcb*next; }PCB; typedef struct PCB1//先進(jìn)先出服務(wù) { char ID[3];//進(jìn)程號(hào) char name[10];//進(jìn)程名 char state;//運(yùn)行狀態(tài) floatarrivetime;//到達(dá)時(shí)間 floatstarttime;//進(jìn)程開(kāi)始時(shí)間 floatfinishtime;//進(jìn)程結(jié)束時(shí)間 floatservicetime;//服務(wù)時(shí)間 float turnaroundtime;//周轉(zhuǎn)時(shí)間 float weightedturnaroundtime;//帶權(quán)周轉(zhuǎn)時(shí)間 struct PCB1 *next;//指向下個(gè)進(jìn)程 }pcb1; struct pcb2 {優(yōu)先級(jí)調(diào)度 char name[10]; char state; int super; int ntime; int rtime; struct pcb2* link; }*ready=NULL,*d; typedef struct pcb2 PCB2; 六、課程設(shè)計(jì)總結(jié) 在本次課程設(shè)計(jì)中,就是講平時(shí)所做的實(shí)驗(yàn)結(jié)合起來(lái),實(shí)現(xiàn)操作系統(tǒng)的各類(lèi)算法,了解操作系統(tǒng)的運(yùn)行原理以及其基本概念,更好的將操作系統(tǒng)的原理很好的展現(xiàn)出來(lái)。同時(shí),在本次實(shí)驗(yàn)中遇到了很多問(wèn)題,需要我們仔細(xì)的檢查和修改。其次,實(shí)驗(yàn)中為了能更好的體現(xiàn)各類(lèi)算法的運(yùn)行情況,需要做一個(gè)清晰的界面,以能清楚地看出運(yùn)行結(jié)果。 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 專(zhuān) 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 號(hào): 姓 名: 提交日期: 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 【設(shè)計(jì)目的】 (1)本實(shí)驗(yàn)的目的是通過(guò)一個(gè)簡(jiǎn)單多用戶(hù)文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實(shí)現(xiàn)。 (2)結(jié)合數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)、計(jì)算機(jī)原理等課程的知識(shí),設(shè)計(jì)一個(gè)二級(jí)文件系統(tǒng),進(jìn)一步理解操作系統(tǒng)。 (3)通過(guò)分對(duì)實(shí)際問(wèn)題的分析、設(shè)計(jì)、編程實(shí)現(xiàn),提高學(xué)生實(shí)際應(yīng)用、編程的能力 【設(shè)計(jì)內(nèi)容】 為L(zhǎng)inux系統(tǒng)設(shè)計(jì)一個(gè)簡(jiǎn)單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn): 1.可以實(shí)現(xiàn)下列幾條命令: login 用戶(hù)登錄 dir 列目錄 create 創(chuàng)建文件 delete 刪除文件 open 打開(kāi)文件 close 關(guān)閉文件 read 讀文件 write 寫(xiě)文件 cd 進(jìn)出目錄 2.列目錄時(shí)要列出文件名,物理地址,保護(hù)碼和文件長(zhǎng)度 3.源文件可以進(jìn)行讀寫(xiě)保護(hù) 【實(shí)驗(yàn)環(huán)境】 Windows xp/7 C++/VC++ 【相關(guān)知識(shí)綜述】 1、文件系統(tǒng) 文件系統(tǒng)是操作系統(tǒng)用于明確存儲(chǔ)設(shè)備(常見(jiàn)的是磁盤(pán),也有基于NAND Flash的固態(tài)硬盤(pán))或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu);即在存儲(chǔ)設(shè)備上組織文件的方法。操作系統(tǒng)中負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)稱(chēng)為文件管理系統(tǒng),簡(jiǎn)稱(chēng)文件系統(tǒng)。文件系統(tǒng)由三部分組成:文件系統(tǒng)的接口,對(duì)對(duì)象操縱和管理的軟件集合,對(duì)象及屬性。從系統(tǒng)角度來(lái)看,文件系統(tǒng)是對(duì)文件存儲(chǔ)設(shè)備的空間進(jìn)行組織和分配,負(fù)責(zé)文件存儲(chǔ)并對(duì)存入的文件進(jìn)行保護(hù)和檢索的系統(tǒng)。具體地說(shuō),它負(fù)責(zé)為用戶(hù)建立文件,存入、讀出、修改、轉(zhuǎn)儲(chǔ)文件,控制文件的存取,當(dāng)用戶(hù)不再使用時(shí)撤銷(xiāo)文件等。 2、位示圖 位示圖是利用二進(jìn)制的一位來(lái)表示磁盤(pán)中的一個(gè)盤(pán)塊的使用情況。當(dāng)其值為“0”時(shí),表示對(duì)應(yīng)的盤(pán)塊空閑;為“1”時(shí),表示已經(jīng)分配。有的系統(tǒng)把“0”作為盤(pán)塊已分配的標(biāo)記,把“1”作為空閑標(biāo)志。(它們的本質(zhì)上是相同的,都是用一位的兩種狀態(tài)標(biāo)志空閑和已分配兩種情況。)磁盤(pán)上的所有盤(pán)塊都有一個(gè)二進(jìn)制位與之對(duì)應(yīng),這樣,由所有盤(pán)塊所對(duì)應(yīng)的位構(gòu)成一個(gè)集合,稱(chēng)為位示圖。 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 【設(shè)計(jì)思路】 本文件系統(tǒng)采用兩級(jí)目錄,其中第一級(jí)對(duì)應(yīng)于用戶(hù)賬號(hào),第二級(jí)對(duì)應(yīng)于用戶(hù)帳號(hào)下的文件。另外,為了簡(jiǎn)便文件系統(tǒng)未考慮文件共享,文件系統(tǒng)安全以及管道文件與設(shè)備文件等特殊內(nèi)容。 首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤(pán),這樣便于查找和修改。 用戶(hù)創(chuàng)建的文件,可以編號(hào)存儲(chǔ)于磁盤(pán)上。如:file0,file1,file2?并以編號(hào)作為物理地址,在目錄中進(jìn)行登記。 【程序主要流程圖】 否 驗(yàn)證是否成 功? 是 目錄 右鍵進(jìn)行選擇 操作 新建目錄新建文件打開(kāi)文件 結(jié)束 開(kāi)始登錄刪除屬性 2 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 【源程序清單】 typedef struct //文件結(jié)構(gòu)體 /*the structure of OSFILE*/ { int fpaddr; /*file physical address*/ int flength; /*file length*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write;3-Protect;*/ char fname[MAXNAME]; /*file name*/ } OSFILE; typedef struct //用戶(hù)文件目錄結(jié)構(gòu)體 user file directory /*the structure of OSUFD*/ { char ufdname[MAXNAME]; /*ufd name*/ OSFILE ufdfile[MAXCHILD]; /*ufd own file*/ }OSUFD; typedef struct //登陸 /*the structure of OSUFD'LOGIN*/ { char ufdname[MAXNAME]; /*ufd name*/ char ufdpword[8]; /*ufd password*/ } OSUFD_LOGIN; typedef struct //文件打開(kāi)模式 /*file open mode*/ { int ifopen; /*ifopen:0-close,1-open*/ int openmode; /*0-read only,1-write only,2-read and write,3-initial*/ }OSUFD_OPENMODE; void DeleteF()/*Delete File*/ { int i,j,k=0;char str[255],str1[255];char fname[MAXNAME];k=ExistD(dirname);//獲取用戶(hù)的序號(hào) printf(“Please input filename:”);gets(fname);//獲得需要打開(kāi)的文件名fname for(i=0;i if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0) { 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 } } void OpenF()/*Open File*/ { int i,k=0;char fname[MAXNAME];//printf(“nnC:%s>”,strupr(dirname));k=ExistD(dirname);printf(“Please input filename:”);gets(fname);//獲得需要打開(kāi)的文件名fname for(i=0;i if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0) { ifopen[k][i].ifopen=1;//打開(kāi)文件 ifopen[k][i].openmode=ufd[k]->ufdfile[i].fmode;//將讀寫(xiě)屬性賦值 //test// printf(“i=%d,k=%dn”,i,k); ///test// printf(“openmode=%dn”,ifopen[k][i].openmode); printf(“Open file successfully!n”); break;//打開(kāi)文件則跳出循環(huán) itoa(ufd[k]->ufdfile[i].fpaddr,str,10);//itoa函數(shù),把數(shù)字轉(zhuǎn)換成字符串 strcpy(str1,“file”);strcat(str1,str);strcpy(str,“c:osfilefile”);strcat(str,str1);strcat(str,“.txt”);//str為文件的物理路徑 if(remove(str)==0) //調(diào)用remove函數(shù)刪除 第k個(gè)用戶(hù)的第i個(gè)文件ufd[k]->ufdfile[i] { fpaddrno[ufd[k]->ufdfile[i].fpaddr] = 0;//位示圖置為0,表示沒(méi)被占用 for(j = i;j<=fcount[k]-1;j++)//文件順序往前移一位 ufd[k]->ufdfile[j] = ufd[k]->ufdfile[j+1]; fcount[k] = fcount[k]-1;//文件數(shù)-1 printf(“Delete file successfully!n”); //除了刪除原文件,還要 刪除dir中的東西 } else printf(“Delete file fail!n”);break;} 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 } } } void CloseF()/*Close File*/ { int i,k=0;char fname[MAXNAME]; k=ExistD(dirname);printf(“Please input filename:”);gets(fname);//獲得需要關(guān)閉的文件名fname for(i=0;i if(strcmp(strupr(ufd[k]->ufdfile[i].fname),strupr(fname))==0) { ifopen[k][i].ifopen=0;//關(guān)閉文件 ifopen[k][i].openmode=4;//fmode改為初始值4 printf(“Close file successfully!n”); break; } } } void WriteF()/*Write File*/ { int i,k,n=0;char fname[MAXNAME];char str[255],str1[255];int flag=1; if(strcmp(strupr(ltrim(rtrim(dirname))),“")==0) { printf(”nError.Please convert to ufd dir before read.n“); wgetchar=1; return;} printf(”nCaution:Open file firstn“);printf(”O(jiān)pened File(s)List:n“);k=ExistD(dirname); 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 for(i=0;i //文件屬性為只寫(xiě)或者是讀寫(xiě)才能write { printf(”%15s“,ufd[k]->ufdfile[i].fname); n++;} if((n%4==0)&&(n!=0))printf(”n“); } printf(”n%d files openned.n“,n); if(n==0)wgetchar=1;if(n!=0){ printf(”nPlease input FileName:“);gets(fname);ltrim(rtrim(fname));i=ExistF(fname);if(i>=0){ if(ifopen[k][i].ifopen==1) { if((ifopen[k][i].openmode==1)||(ifopen[k][i].openmode==2)) { itoa(ufd[k]->ufdfile[i].fpaddr,str,10); strcpy(str1,”file“); strcat(str1,str); strcpy(str,”c:osfilefile“); strcat(str,str1); strcat(str,”.txt“);//物理路徑 int length=0; char c; printf(”P(pán)lease input text('#' stands for end):n“); fp_file=fopen(str,”ab+“);//在文件末尾加 add bit while((c=getchar())!='#')//以#為結(jié)尾 { fputc(c,fp_file); if(c!='n')length++; } //fprintf(fp_file,”n“); 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 fclose(fp_file); ufd[k]->ufdfile[fcount[i]-1].flength += length;//原長(zhǎng)度加輸入長(zhǎng)度 printf(”n'%s' has been written successfully!n“,fname); } else { printf(”nError.'%s' has been opened with WRITE ONLY mode.It isn't read.n“,fname); wgetchar=1; } } else { printf(”nError.'%s' is in closing status.Please open it before readn“,fname); wgetchar=1; } } else { printf(”nError.'%s' does not exist.n",fname); wgetchar=1; } } } 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 【測(cè)試結(jié)果】 1、創(chuàng)建用戶(hù) 2、創(chuàng)建文件,并且打開(kāi)讀取文件 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 3、寫(xiě)文件 4、刪除文件 操作系統(tǒng)課程設(shè)計(jì)報(bào)告 【設(shè)計(jì)總結(jié)】 這兩周的課程設(shè)計(jì)時(shí)間非常短,從中學(xué)到了很多知識(shí),也為我們的學(xué)習(xí)提供了良好的實(shí)踐平臺(tái)。首先,通過(guò)老師的細(xì)心指導(dǎo)和同學(xué)們的相互幫助,讓我對(duì)題目【二級(jí)文件系統(tǒng)】有了進(jìn)一步了解。接下來(lái),主要是研究老師所給的大部分代碼,參考他的基本思路,并且思考每一個(gè)結(jié)構(gòu)體在代碼中的具體作用。這期間和一些同學(xué)交流了各自的思路,在交流中,大家漸漸的明確了這個(gè)程序的思路、框架結(jié)構(gòu)等。我們所做的主要是補(bǔ)充了刪除文件,打開(kāi)文件,關(guān)閉文件,寫(xiě)文件這幾個(gè)部分。 代碼編寫(xiě)完了之后,實(shí)現(xiàn)了題目所要求的基本功能,但是在測(cè)試的過(guò)程中,還發(fā)現(xiàn)了這個(gè)程序存在各種各樣的bug。不斷的測(cè)試修改后,得到完善。 這次課設(shè)最大的收獲在于:學(xué)會(huì)交流以及相互幫助。在大家的交流溝通之中,我們解決了一個(gè)又一個(gè)難題。 在這次課設(shè)中,我還意識(shí)到,要把這門(mén)課真真正正地學(xué)好,不單單只是為了能夠應(yīng)付考試,平時(shí)還要多加學(xué)習(xí),多加努力才對(duì)。 【參考文獻(xiàn)】 【1】C語(yǔ)言程序設(shè)計(jì)(第三版)譚浩強(qiáng) 【2】計(jì)算機(jī)操作系統(tǒng)教程(第三版).張堯?qū)W 史美林 張高 【3】計(jì)算機(jī)操作系統(tǒng),西安電子科技大學(xué)出版社,方敏主編,2004.8第四篇:操作系統(tǒng)課程設(shè)計(jì)報(bào)告
第五篇:操作系統(tǒng)課程設(shè)計(jì)報(bào)告