固定分區(qū)存儲(chǔ)管理_第1頁
固定分區(qū)存儲(chǔ)管理_第2頁
固定分區(qū)存儲(chǔ)管理_第3頁
固定分區(qū)存儲(chǔ)管理_第4頁
固定分區(qū)存儲(chǔ)管理_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、昆明理工大學(xué)信息工程與自動(dòng)化學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告( 2013 2014 學(xué)年第 一 學(xué)期 )課程名稱:操作系統(tǒng) 開課實(shí)驗(yàn)室:信自樓444 2013年 11月28 日年級(jí)、專業(yè)、班物聯(lián)網(wǎng)2011級(jí)學(xué)號(hào)姓名成績實(shí)驗(yàn)項(xiàng)目名稱固定分區(qū)存儲(chǔ)管理指導(dǎo)教師教師評(píng)語該同學(xué)是否了解實(shí)驗(yàn)內(nèi)容與要求:A.了解B.基本了解C.不了解設(shè)計(jì)思想或流程圖是否正確: A.正確B.基本正確C.較差 該同學(xué)的實(shí)驗(yàn)?zāi)芰Γ?A.強(qiáng) B.中等 C.差 該同學(xué)的實(shí)驗(yàn)是否達(dá)到要求: A.達(dá)到B.基本達(dá)到C.未達(dá)到實(shí)驗(yàn)報(bào)告是否規(guī)范: A.規(guī)范B.基本規(guī)范C.不規(guī)范是否有運(yùn)行結(jié)果與分析: A.詳細(xì)B.一般 C.沒有 是否有總結(jié)與體會(huì): A.詳細(xì)B

2、.一般 C.沒有 教師簽名: 年 月 日注:報(bào)告內(nèi)容按下列的要求進(jìn)行。一、 實(shí)驗(yàn)?zāi)康耐ㄟ^編寫固定分區(qū)存儲(chǔ)管理的模擬程序,加深對(duì)操作系統(tǒng)存儲(chǔ)管理功能中的固定分區(qū)管理方式、主存分配表等相應(yīng)知識(shí)的理解。通過編寫和調(diào)試存儲(chǔ)管理的模擬程序以加深對(duì)存儲(chǔ)管理方案的理解,熟悉可變分區(qū)存儲(chǔ)管理的內(nèi)存分配和回收。二、 實(shí)驗(yàn)題目1. 設(shè)計(jì)一個(gè)固定分區(qū)分配的存儲(chǔ)管理方案。并模擬實(shí)現(xiàn)分區(qū)的分配和回收過程。 2. 必須建立分區(qū)表,記錄空閑區(qū)與占用區(qū)的狀況。3. 流程圖按選定的算法自己完成。三、 算法設(shè)計(jì)的思想或流程圖 本系統(tǒng)將內(nèi)存用戶空間劃分為五個(gè)大小不固定的分區(qū),其分區(qū)大小由用戶輸入決定。在每個(gè)分區(qū)只裝入一道作業(yè),這樣

3、把用戶空間劃分為幾個(gè)分區(qū),便允許幾道作業(yè)并發(fā)運(yùn)行。當(dāng)有一個(gè)空閑分區(qū)時(shí),便可以從外存的后備隊(duì)列中選擇一個(gè)適當(dāng)大小的作業(yè)裝入該分區(qū),當(dāng)該作業(yè)結(jié)束時(shí)又可以從后備作業(yè)隊(duì)列中找出另一作業(yè)調(diào)入該分區(qū)。每個(gè)內(nèi)存空間是一個(gè)Node型的對(duì)象。Node類有一個(gè)三個(gè)參數(shù)的構(gòu)造函數(shù)。分別為:分區(qū)號(hào)、起始地址、大小。然后就是一些屬性的get、set方法和一個(gè)打印其屬性的函數(shù)。四個(gè)數(shù)據(jù)域分別為:屬性m_No用來表示該內(nèi)存空間的序號(hào)。屬性m_Addr用來表示內(nèi)存分區(qū)的起始地址。屬性m_Size用來表示內(nèi)存空間的大小。屬性m_State表示內(nèi)存空間的是否已分配的狀態(tài)標(biāo)志。若該內(nèi)存空間已分配,m_TaskNo表示占有該內(nèi)存空間

4、的任務(wù)序號(hào)。否則沒有實(shí)際意義。在用戶申請(qǐng)任務(wù)的內(nèi)存空間時(shí),提示用戶輸入任務(wù)號(hào)和其需要的內(nèi)存空間大小。流程圖主程序:開始創(chuàng)建MManage對(duì)象,內(nèi)存空間長度為5.讓用戶手工輸入每個(gè)分區(qū)大小,來初始化內(nèi)存空間提示用戶輸入他的選擇:1、申請(qǐng)內(nèi)存空間 2、釋放內(nèi)存空間。 將用戶輸入存放入swt變量swt!=1并且swt!=2?進(jìn)行任務(wù)的內(nèi)存空間分配操作Swt=1? YSwt=2? N執(zhí)行分配給任務(wù)的內(nèi)存空間分釋放操作 Ydefault:拋出異常 N提示用戶是否繼續(xù)操作(Y/N),將用戶輸入存放在變量yesorno中yesorno!=n&& yesorno!=N Y N 結(jié)束 分配內(nèi)存空

5、間算法:開始提示用戶輸入作業(yè)名和作業(yè)占的內(nèi)存大小檢查該任務(wù)號(hào)是否已經(jīng)存在,或該任務(wù)大小是否超過100該任務(wù)號(hào)已經(jīng)存在或該任務(wù)大小否超過100初值為0的變量i,是否小于節(jié)點(diǎn)隊(duì)列大小第i個(gè)內(nèi)存空閑并且其大小大于作業(yè)申請(qǐng)的大小 Ytemp2賦值為第i個(gè)內(nèi)存空間大小與申請(qǐng)的內(nèi)存空間大小只差 YTemp1<temp2? YTemp1=temp2.保存內(nèi)存空間號(hào)到Noi+No=-1? N Y將內(nèi)存空間No置為占有,并將作業(yè)分配給它申請(qǐng)失敗打印出內(nèi)存空間信息結(jié)束釋放內(nèi)存空間算法開始提示用戶輸入作業(yè)名初值為0的變量i,是否小于節(jié)點(diǎn)隊(duì)列大小第i個(gè)內(nèi)存占有并且其作業(yè)號(hào)等于輸入的作業(yè)號(hào)保存內(nèi)存空間號(hào)到NoNo

6、=-1?將內(nèi)存空間No置為空閑釋放失敗打印出內(nèi)存空間信息結(jié)束四、算法設(shè)計(jì)的實(shí)現(xiàn)1、類設(shè)計(jì)本程序設(shè)計(jì)了兩個(gè)比較簡單的類:Node類和MManage類。Node類主要是存放每個(gè)固定分區(qū)的一些信息。而MManage類則主要是對(duì)Node類的容器List<Node>進(jìn)行一些操作來實(shí)現(xiàn)要求的內(nèi)存空間的的分配和釋放。類設(shè)計(jì)的數(shù)據(jù)成員和接口如下:Node.h#ifndef NODE_H#define NODE_Hclass Nodepublic:Node(int No, int Addr, int Size);int getSize() constreturn m_Size;bool getSta

7、te() constreturn m_State;int getTaskNo() constreturn m_TaskNo;void setState(bool State);void setTaskNo(int TaskNo);void print();private:int m_No;int m_Addr;int m_Size;bool m_State;int m_TaskNo;#endif /NODE_HMManage.h#ifndef MMANAGE_H#define MMANAGE_H#include <vector>class Node;class MManagepub

8、lic:/MManage();MManage(int MLength);MManage(std:vector<Node> Nodes);void MAlloc();void MFree();void print();private:std:vector<Node> m_Nodes;#endif/MMANAGE_H類接口實(shí)現(xiàn)和main函數(shù)的實(shí)現(xiàn):Node.cpp#include <iostream>#include "Node.h"Node:Node(int No, int Addr, int Size):m_No(No),m_Addr(A

9、ddr),m_Size(Size)m_State = true;m_TaskNo = 0;void Node:setTaskNo(int TaskNo)m_TaskNo = TaskNo;void Node:setState(bool State)m_State = State;void Node:print()std:cout<<"| "<<m_No<<" | "<<m_Addr<<" | "<<m_Size<<" | "if(m

10、_State)std:cout<<"Idle |"<<std:endl;elsestd:cout<<"Occupy | "<<m_TaskNo<<" |"<<std:endl;MManage.cpp#include <iostream>#include "MManag.h"#include "Node.h"#define MAXSIZE 100/class Node;/*MManage:MManage()int

11、sum;std:cout << "Please input the number of memory:"std:cin >> sum;std:cout << std:endl;MManage(sum);*/MManage:MManage(int MNo)int size;int addr = 0;char yesOrNo = 'n'while ( yesOrNo != 'y' && yesOrNo != 'Y')m_Nodes.clear();std:cout <<

12、; "Start to init the memory table" << std:endl;for (int i=0; i<MNo; +i)dostd:cout << "Please input the size of " << i+1 << "th memory:"std:cin >> size;while(size >= MAXSIZE);Node node(i+1, addr, size);m_Nodes.push_back(node);addr+=siz

13、e;print();std:cout << "Is this correct?" << std:endl;std:cin >> yesOrNo;MManage:MManage(std:vector<Node> Nodes)m_Nodes.assign(Nodes.begin(), Nodes.end();void MManage:MAlloc()int taskNo, size;int No = -1;int temp1 = MAXSIZE;int temp2 = MAXSIZE;bool flag;doflag=false;

14、std:cout << "Please input the task No. and size" << std:endl;std:cin >> taskNo >> size;for(unsigned i=0; i<m_Nodes.size(); +i)if(m_Nodesi.getTaskNo() = taskNo)std:cout<<"This task areally exist,please change it"<<std:endl;flag = true;if(size

15、 > MAXSIZE)std:cout<<"The size is too big,please change it"<<std:endl;flag = true;while(flag);for(unsigned i=0; i<m_Nodes.size(); +i)if(m_Nodesi.getState()&&m_Nodesi.getSize()>=size)temp2 = m_Nodesi.getSize() - size;if(temp2<temp1)temp1 = temp2;No = i;if(No=

16、-1)std:cout << "Allocation fail." << std:endl;elsestd:cout << "Allocation success." << std:endl;m_NodesNo.setState(false);m_NodesNo.setTaskNo(taskNo);void MManage:MFree()int taskNo,No=-1;std:cout << "Please input the task No." << std:

17、endl;std:cin >> taskNo;for(unsigned i=0; i<m_Nodes.size(); +i)if(m_Nodesi.getTaskNo()=taskNo&&!m_Nodesi.getState()No = i;if(No=-1)std:cout << "Free fail(Can not find the task)." << std:endl;elsestd:cout << "Free success." << std:endl;m_Nod

18、esNo.setState(true);m_NodesNo.setTaskNo(0);void MManage:print()std:cout << "The the memory table:" << std:endl;std:cout << "| No |" << "| Addr |" << "| Size |" << "| State |" << "| TaskNo |"<<

19、 std:endl;for (unsigned i=0; i<m_Nodes.size(); +i)m_Nodesi.print();Main.cpp#include <iostream>#include "MManag.h"#include "Node.h"#define SIZE 5 /分配區(qū)的個(gè)數(shù)void testNode()int size = 10;Node node1(1,0,size);node1.print();Node node2(2,size,size);node2.setState(false);node2.set

20、TaskNo(1);node2.print();/MManage m1();/m1.print();MManage m2(2);m2.print();int main()MManage m(SIZE);char yesOrNo = 'y'int swt = 0;while(yesOrNo != 'n' && yesOrNo != 'N')while(swt != 1 && swt != 2)system("cls");std:cout<<"="<<st

21、d:endl;std:cout<<" Please put your choice:"<<std:endl;std:cout<<" 1-apply memory"<<std:endl;std:cout<<" 2-free memory"<<std:endl;std:cout<<"="<<std:endl;std:cin>>swt;if(swt!=1&&swt!=2)std:cout<<"error iput,please put(1、2)"<<std:endl;switch(swt)c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論