版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
山東理工大學課程設計〔計算機操作系統(tǒng)〕院系計算機學院專業(yè)計算機科學與技姓名指導教師二○○五年六月二十二日課程設計任務書計算機學院院〔系〕計算機科學與技術專業(yè)課題組學生姓名班級學號課題名稱存儲器管理設計Ⅰ、題目的目的和要求:本課程設計的目的是使學生熟悉存儲器管理系統(tǒng)的設計方法。加深對所學各種存儲器管理方案的了解;要求采用一些常用的存儲器分配算法,設計一個存儲器管理模擬系統(tǒng)并調(diào)試運行。模擬環(huán)境應盡量接近真實。Ⅱ、設計技術要求與數(shù)據(jù):穩(wěn)固和加深對操作系統(tǒng)原理的理解,提高系統(tǒng)設計的能力;通過應用,提高程序設計能力,本課程設計對應用方面只作一般要求,選做不同的功能模塊,重點放在數(shù)據(jù)結(jié)構設計、文檔標準化和程序設計風格,寫出易讀、易懂的程序。技術要求:(一)源程序文件(1)符號名的命名:這包括變量名、文件名、程序名、模塊名、過程文件名等。命名不主張用A、B、A1、A2等為文件名,而從易于識別和理解的要求出發(fā),使用一些有實際意義的標識符,如:fork();exit();sleep();wakeup()等。(2)程序中的注釋行:夾在源程序中的注釋行能幫助讀者理解程序,絕不是可有可無的,注釋是源程序文件必不可少的一局部。要求在程序開頭有序言性注釋,有關的工程如下:程序的標題(文件名等)目的、功能調(diào)用形式,參數(shù)含義輸入數(shù)據(jù)輸出數(shù)據(jù)調(diào)用的過程或過程文件其它類型的文件名稱(數(shù)據(jù)文件、索引文件、格式文件等)作者審查調(diào)試日期(3)空行和縮格自然的程序段用空行隔開,分支嵌套和循環(huán)嵌套要層次清楚。如C語言程序:if(條件)(語句組);elseif(條件)(語句組);else(語句組);(二)數(shù)據(jù)說明適當用說明方式:<命令語句>/*<注釋>*/如對變量所賦數(shù)據(jù)的類型加以說明,以便核對和查找。(三)語句結(jié)構程序的清晰性是最重要的目標,語句應寫的簡明,直接了當,不要在語句中使用“技巧〞。因為這會給調(diào)試過程帶來不必要的麻煩,復雜的表達式用括號表示運算的優(yōu)先次序,以免造成誤解。沒有程序的簡明性和清晰性,就不能保證程序的可靠性和正確性。另外,盡可能利用現(xiàn)成函數(shù),減少臨時變量,防止用浮點數(shù)(如1.2E4)比擬。(四)輸入和輸出輸入和輸出是與用戶的使用直接相關的。輸入、輸出的方式和格式應盡可能方便用戶,一個程序的輸入格式盡可能統(tǒng)一;但提示要明確和具備捕獲錯誤及處理的能力。數(shù)據(jù)結(jié)構:constintpagesize=1024;constintblocknum=3;intblock[blocknum];intpg[blocknum];Ⅲ、設計工作起始日期:自二○〇五年六月二十日起,至二○〇五年六月二十四日止Ⅳ、進度方案與應完成的工作:日期內(nèi)容6.20周一選取參考書,查閱有關文獻資料,完成課程設計說明書內(nèi)容1局部。完成課程設計說明書內(nèi)容2-4局部6.21周二上機創(chuàng)立相關數(shù)據(jù)結(jié)構,錄入源程序6.22周三上機調(diào)試程序并記錄調(diào)試中的問題,完成課程設計說明書第5局部。6.23周四上機系統(tǒng)測試,演示設計成果。6.24周五整理課程設計說明書,上午11時,由學習委員交課程設計說明書(計算機科學系9#213或直接交給指導教師)Ⅴ、主要參考文獻、資料:1.湯子贏等,計算機操作系統(tǒng)〔第二版〕,西安電子科技大學出版社,19962.湯子贏等,計算機操作系統(tǒng)〔新第一版〕,西安電子科技大學出版社19963.馮耀霖等,操作系統(tǒng),西安電子科技大學出版社,19924.湯子瀛主編.計算機操作系統(tǒng).西安:西安電子科技大學出版社,2002.95.張堯?qū)W,史美林.計算機操作系統(tǒng)教程.北京:清華大學出版社,1995,26.劉乃琦等.操作系統(tǒng)原理及應用.北京:經(jīng)濟科學出版社,1996.5指導教師:學科部主任二○年月日課程設計評語及成績評定Ⅰ、課程設計篇幅:圖紙數(shù)量張設計說明書頁Ⅱ、指導教師的評語:指導教師年月日Ⅲ、成績評定:設計成績教學院長〔主任〕:〔簽字〕二○年月日目錄第一章概述……………第二章系統(tǒng)分析………第三章系統(tǒng)設計………第四章程序設計流程圖或N-S圖……第五章源程序清單……………………第六章調(diào)試過程中的問題及系統(tǒng)測試情況…………第七章結(jié)束語…………第一章概述操作系統(tǒng)課程設計是計算機科學與技術專業(yè)的主要實踐性教學環(huán)節(jié)。在進行了專業(yè)根底課和《操作系統(tǒng)》課程的根底上,設計或分析一個實際的操作系統(tǒng)旨在加深對計算機硬件結(jié)構和系統(tǒng)軟件的認識,初步掌握操作系統(tǒng)組成模塊和應用接口的使用方法,提高進行工程設計和系統(tǒng)分析的能力,為畢業(yè)設計和以后的工程實踐打下良好的根底。存儲器管理的主要任務是為多道程序的運行提供良好的環(huán)境,方便用戶使用存儲器,提高存儲器的利用率以及能從邏輯上擴充內(nèi)存。存儲器管理的主要對象是內(nèi)存,本設計主要針對進程讀入內(nèi)存中的過程模擬存儲器管理系統(tǒng)。涉及到程序的裝入、內(nèi)存空間的分配方式以及進程的換出與換入和頁面置換算法〔本設計的頁面置換算法為先進先出FIFO算法〕。系統(tǒng)分析在多道程序環(huán)境下,要使程序運行,必須先為之創(chuàng)立進程。而創(chuàng)立進程的第一步是將程序和數(shù)據(jù)裝入內(nèi)存。存儲器實現(xiàn)的功能主要是內(nèi)存分配等功能,本模擬系統(tǒng)所要實現(xiàn)的就是將進程的程序和數(shù)據(jù)裝入內(nèi)存〔物理塊〕。具體需要實現(xiàn)的功能如下:讀入進程大小,進行分頁,確定每一頁的指令地址范圍;讀入一個指令,確定其所在頁面,讀入內(nèi)存物理塊中。物理塊空閑直接讀入,物理塊已滿,指向下步操作。物理塊已滿,將要淘汰原來首先進入到內(nèi)存中的頁面,即換出;然后將現(xiàn)在的指令地址頁面讀入物理塊中,即換入。能夠顯示分配的頁面的狀態(tài)信息,包括地址范圍和讀入的內(nèi)存物理塊號〔未讀入與讀入的區(qū)別顯示〕,頁面是否在主存中。顯示內(nèi)存分區(qū)即物理塊號的使用狀況。系統(tǒng)設計本系統(tǒng)實現(xiàn)的功能比擬簡單,主要包括以下幾個數(shù)據(jù)結(jié)構方面:輸入進程大小劃分頁面。求頁面數(shù)利用進程與每一頁面的大小計算和求余函數(shù)add(),根本信息輸出print()函數(shù)。頁面的初始信息包括頁號、頁面的指令地址范圍、讀入物理塊號〔初始均設定為-1〕、讀入內(nèi)存狀態(tài)。intadd(intm,intn)//判斷是否在物理塊的最后一位,要不要加1{if(m%n)//不能整除,有余數(shù),那么需加1return1;else//剛好能整除return0;}指令頁面讀入物理塊。該局部要包括空閑物理塊的查詢freebno〔〕函數(shù),裝入物理塊號load〔〕函數(shù),物理塊指針自加inc()函數(shù)。指令讀入,查詢內(nèi)存中是否有空閑的物理塊,有那么直接讀入,同時物理塊號指針自動指向下一個模塊,以便下一個指令讀入時裝入內(nèi)存。voidload(intb)//裝入主存b號物理塊{bno=b;status=1;block[b]=0;}intfreebno()//查出空閑的物理塊號{inti;for(i=0;i<blocknum;i++) if(block[i]) returni;//返回空閑的物理塊returni;//沒有空閑的物理塊,返回的塊號溢出}3.指令讀入時物理塊全部占滿,需要調(diào)用換出out()函數(shù),淘汰原來進入內(nèi)存的頁面,利用FIFO算法,然后裝入此事的指令到相應物理塊。voidout()//調(diào)出主存{status=0;bno=-1;}4.輸出頁面詳細信息。利用程序初始創(chuàng)立的page類函數(shù)定位到每個頁面,查詢其狀態(tài)輸出其詳細信息即print()函數(shù)內(nèi)的具體內(nèi)容。voidprint(){cout<<"頁號:"<<pno<<"地址范圍:"<<pagesize*pno+1<<"~"<<pagesize*(pno+1)<<"物理塊號:"<<bno<<"狀態(tài):";if(status)cout<<"在主存"<<endl;elsecout<<"在輔存"<<endl;}內(nèi)存物理塊的占用信息。intblock[blocknum];//存放物理塊狀態(tài)的數(shù)組,1為空閑,0為不空閑if(block[i]) cout<<"空閑"<<endl; else { cout<<"占用"; inta=pg[i];第四章程序設計流程圖或N-S圖第五章源程序清單//存儲器管理系統(tǒng)設計#include<iostream.h>constintpagesize=1024;//頁面大小constintblocknum=4;//系統(tǒng)分配的物理塊數(shù)intblock[blocknum];//存放物理塊狀態(tài)的數(shù)組,空閑時為1,不空閑時為0intpg[blocknum];//存放物理塊中的頁號classpage{intpno;//頁號intbno;//物理塊號intstatus;//頁的狀態(tài),1為在主存,0為在輔存staticintn;//表態(tài)成員,為實現(xiàn)頁的編號public:page()//構造函數(shù){pno=n++;//編號bno=-1;//不在任何物理塊中status=0;//初始值}intgetstatus(){returnstatus;}intgetbno(){returnbno;}intgetpno(){returnpno;}voidprint(){cout<<"頁號:"<<pno<<"地址范圍:"<<pagesize*pno+1<<"~"<<pagesize*(pno+1)<<"物理塊號:"<<bno<<"狀態(tài):";if(status)cout<<"在主存"<<endl;elsecout<<"在輔存"<<endl;}voidload(intb)//裝入主存b號物理塊{bno=b;status=1;//裝入主存頁號為1block[b]=0;//數(shù)組狀態(tài)不空閑}//調(diào)出主存,用于頁面置換voidout(){status=0;bno=-1;//相應頁對應物理塊號變?yōu)槌跏贾祡};intpage::n=0;//初始化頁號intfreebno()//查出空閑的物理塊號{inti;for(i=0;i<blocknum;i++) if(block[i]) returni;//返回空閑的物理塊returni;//沒有空閑的物理塊,返回的塊號溢出}voidinc(int&t)//以物理塊數(shù)為模自加{if(t>=0&&t<blocknum-1)t++;elseif(t==blocknum-1)t=0;elsecout<<"出錯!!"<<endl;}//判斷是否在物理塊的最后一位,是否加1intadd(intm,intn){if(m%n)//不能整除,有余數(shù),那么需加1return1;else//剛好能整除return0;}voidmain(){intj;for(j=0;j<blocknum;j++)//初始化,物理塊都置為空閑{block[j]=1;pg[j]=-1;}inti,set;intprocess_size,pagenum,address,pageNO;page*p;intnext=0;//下一個該替換的物理塊號cout<<"************************存儲器管理模擬系統(tǒng)*************************"<<endl;cout<<"請輸入進程的大小(注意:僅為數(shù)據(jù)有效):"<<endl;cin>>process_size;pagenum=process_size/pagesize+add(process_size,pagesize);cout<<"進程的頁數(shù)為:"<<pagenum<<endl;p=newpage[pagenum];//new動態(tài)分配空間cout<<"各頁面狀態(tài)如下:"<<endl;for(i=0;i<pagenum;i++)p[i].print();while(1){cout<<""<<endl;cout<<"1.指令地址信息讀取2.輸出程序所用頁面信息3.快表信息0.退出"<<endl; cout<<endl; cout<<"請選擇相應操作:"<<endl;cin>>set;switch(set){case1: cout<<"請輸入要讀入的指令地址:"<<endl;cin>>address; if(address<0) { cout<<"您所輸入的是負數(shù),不符合要求。"<<endl; break; } else if(address>process_size) {cout<<"您輸入的數(shù)據(jù)太大,不符合要求。"<<endl;break;} else if(address<pagesize) pageNO=0;//判定指令地址頁面號else pageNO=address/pagesize+add(address,pagesize)-1;//因為數(shù)組從0開始計數(shù),故減1 if(p[pageNO].getstatus())//判斷是否在主存 { cout<<"此模塊已在主存中."<<endl; p[pageNO].print(); } else { cout<<"此模塊在輔存中,調(diào)入主存."<<endl; intfno; fno=freebno();//獲取空閑的物理塊號 if(fno>=0&&fno<blocknum)//有空閑物理塊 { p[pageNO].load(fno); cout<<"裝入頁框表,查詢并放入空閑物理塊:"<<fno<<endl; pg[fno]=pageNO; p[pageNO].print(); }//物理塊已滿,執(zhí)行淘汰操作 else { cout<<"頁框已滿,淘汰物理塊:"<<next<<"中的原有頁面"<<pg[next]<<endl; for(i=0;i<pagenum;i++) if(p[i].getstatus()&&p[i].getbno()==next) p[i].out();//換出 p[pageNO].load(next);//裝入 pg[next]=pageNO; p[pageNO].print(); inc(next);//next自加,指向下一個即將換出的塊 } }break;case2:for(i=0;i<pagenum;i++) p[i].print();break; case3: for(i=0;i<4;i++) { cout<<i<<":"; if(block[i]) cout<<"空閑"<<endl; else { cout<<"占用"; inta=pg[i]; cout<<"頁號:"<<a<<"地址范圍:"<<pagesize*a+1<<"~"<<pagesize*(a+1)<<endl;} } break;case0:delete[]p;//釋放資源return;default:cout<<"非法操作,請根據(jù)提示選擇1、2、3或0操作"<<endl;}}}第六章調(diào)試過程中的問題及系統(tǒng)測試情況調(diào)試過程中主要遇到的問題有以下幾個方面:調(diào)用print()函數(shù)時程序應用過程中出現(xiàn)的status狀態(tài)顯示頁面號是否讀入主存中。常規(guī)語法錯誤,如類定義page的最后結(jié)束符需要“;〞。變量的定義出現(xiàn)問題,如開始固定的頁面大小與物理塊數(shù),需要用C++中的const定義常量賦值。系統(tǒng)執(zhí)行情況:1、輸入進程:2、讀入指令地址:3、內(nèi)存物理塊已滿,淘汰原頁
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025完整施工隊合同
- 兼職中醫(yī)師聘用合同
- 活動承辦合同模板
- 合同示范文本庫
- 變壓器承包合同
- 企業(yè)員工勞動合同范本
- 連帶責任擔保借款合同范本
- 2025關于土地轉(zhuǎn)讓合同范本
- 定制家具合同
- 知識產(chǎn)權許可使用及轉(zhuǎn)讓合同范本
- 個人安全與社會責任的基本知識概述
- 建筑裝飾工程計量與計價試題一及答案
- 簡易勞務合同電子版
- 明代文學緒論
- 通用稅務自查情況說明報告(7篇)
- 體育賽事的策劃、組織與實施 體育賽事利益相關者
- 分析化學(高職)PPT完整版全套教學課件
- 晚熟的人(莫言諾獎后首部作品)
- m拱頂儲罐設計計算書
- 2023外貿(mào)業(yè)務協(xié)調(diào)期中試卷
- 新人教鄂教版(2017)五年級下冊科學全冊教學課件
評論
0/150
提交評論