版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 报 告( 2009-2010年度第二学期)课程名称: 操作系统实验 课设题目: 用位示图管理磁盘空间的分配与回收 院 系: 控制与计算机工程学院 班 级: 姓 名: 指导教师: 李为 设计周数: 一周 成 绩: 2010年7月9 日一、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图91所示。系统设一个变量S,记录磁盘
2、的空闲块个数。位0123456789101112131415字0111111010011111012. . .39图91 位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数每柱面的磁道数每磁道的扇区数4416,故柱面号相对块号16的商,即柱面号字号磁道号(相对块号16的余数)4的商,即(位号4)的商物理块号(相对块号16的余数)4的余数,即(位号4)的余数(3)当释放一个相对物理块
3、时,运行回收程序,计算该块在位示图中的位置,再把相应位置0。计算公式如下:先由磁盘地址计算相对块号:相对块号柱面号16+磁道号4+物理块号再计算字号和位号:字号相对块号16的商,也即字号柱面号位号磁道号物理块数每磁道+物理块号 (4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。(5)设计一个回收算法,将上述已分配给用户的各盘块释放。并显示系统各表。回收算法框图如图5所示。二、整体功能及设计程序整体主要有三个功能模块,分别是:初使化、分配以及回收。当点击相应按钮时实现其功能。使用二维数
4、组array1_after5016、array1_before5016、array2_after5016分别记录分配前、分配后、回收后的位示图的使用情况,使用表格m_list1_after、m_list1_before、m_listafter显示位示图的使用情况。程序设计了三个方法,分别是初始化OnInitDialog()、分配算法OnButtonFp()、回收算法OnButtonHs()。磁盘空间分配框图如图1所示, 磁盘空间回收框图如图2所示.开 始由磁盘的三维转为磁盘的相对块号由相对块号转换成对应位示图的字位号置位示图相应位为0空闲盘个数+1输出位示图等返 回释放一个磁盘块开始申请一个磁
5、盘块还有空闲块?申请者等待返 回查位示图找第一个为0的字位号找到了?返回,磁盘已满本次无法分配返 回NYYNN由字位号计算相对块号,柱面号,磁道号,物理记录号,并输出这些参数位置示图相应位为1 图1 磁盘空间分配框图 图2 磁盘空间回收框图三、编程实现#include stdafx.h#include FENPEIYUHUISHOU.h#include FENPEIYUHUISHOUDlg.h#include HuishouDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;
6、#endifclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementatio
7、nprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPCFENPEIYUHUISHOUDlg:CFENPEIYUHUISHOUDlg(C
8、Wnd* pParent /*=NULL*/): CDialog(CFENPEIYUHUISHOUDlg:IDD, pParent)/AFX_DATA_INIT(CFENPEIYUHUISHOUDlg)m_kongxian = 0;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CFENPEIYUHUISHOUDlg:DoDataExchange(CDataExchange
9、* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CFENPEIYUHUISHOUDlg)DDX_Control(pDX, IDC_LIST2_AFTER, m_list2_after);DDX_Control(pDX, IDC_LIST1_ON, m_list1_on);DDX_Control(pDX, IDC_LIST1_BEFORE, m_list1_before);DDX_Control(pDX, IDC_LIST1_AFTER, m_list1_after);DDX_Text(pDX, IDC_EDIT_KONGXIAN, m_kongx
10、ian);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CFENPEIYUHUISHOUDlg, CDialog)/AFX_MSG_MAP(CFENPEIYUHUISHOUDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON_FP, OnButtonFp)ON_BN_CLICKED(IDC_BUTTON_HS, OnButtonHs)ON_BN_CLICKED(IDC_BUTTON_INIT, OnButtonInit)/AFX_MSG_MAPEND_MESSAGE_MA
11、P()BOOL CFENPEIYUHUISHOUDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMe
12、nu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereDWORD dwExStyle = LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT;m_li
13、st1_before.SetExtendedStyle(dwExStyle);m_list1_after.SetExtendedStyle(dwExStyle); m_list2_after.SetExtendedStyle(dwExStyle);m_list1_on.SetExtendedStyle(dwExStyle);for(int i=15;i=0;i-)CString str;str.Format(%d,i);m_list1_before.InsertColumn(0,str,LVCFMT_CENTER,30);m_list1_after.InsertColumn(0,str,LVC
14、FMT_CENTER,30); m_list2_after.InsertColumn(0,str,LVCFMT_CENTER,30);m_list1_on.InsertColumn(0,相对块号,LVCFMT_CENTER,60);m_list1_on.InsertColumn(1,柱面号,LVCFMT_CENTER,60);m_list1_on.InsertColumn(2,磁道号,LVCFMT_CENTER,60);m_list1_on.InsertColumn(3,物理块号,LVCFMT_CENTER,60);m_list1_on.InsertColumn(4,字号,LVCFMT_CEN
15、TER,40);m_list1_on.InsertColumn(5,位号,LVCFMT_CENTER,40);return TRUE; / return TRUE unless you set the focus to a controlvoid CFENPEIYUHUISHOUDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CFENP
16、EIYUHUISHOUDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x
17、= (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CFENPEIYUHUISHOUDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CFENPEIYUHUISHOUDlg:OnButtonFp() / TODO: Add your control notification handler code he
18、reint index=0;int flag =1,m=0,n=0;int count=0;for(m=0;ma;m+)for(n=0;n16;n+)if(array1_aftermn=0)flag = 0;break;if(flag = 0)break;array1_aftermn=1; CString str;int k=0;int i,j;for(i=0;ia;i+) str.Format(%d,array1_afteri0);for(i=0;ia;i+) m_list1_after.InsertItem(i,str);for(j=0;j16;j+)CString str;str.For
19、mat(%d,array1_afterij);array2_afterij=array1_afterij;if(array1_afterij=0)count+; m_list1_after.SetItemText(i,j,str);str.Format(%d,m*16+n);m_list1_on.InsertItem(index,str);str.Format(%d,m);m_list1_on.SetItemText(index,1,str);m_list1_on.SetItemText(index,4,str);str.Format(%d,n/b);m_list1_on.SetItemTex
20、t(index,2,str);str.Format(%d,n%b); m_list1_on.SetItemText(index,3,str);str.Format(%d,n); m_list1_on.SetItemText(index,5,str);index+;m_kongxian=m_kongxian-1; if(m_kongxian0)AfxMessageBox(无空闲块!请回收后再使用!); UpdateData(FALSE);void CFENPEIYUHUISHOUDlg:OnButtonHs() / TODO: Add your control notification hand
21、ler code hereUpdateData(TRUE);CHuishouDlg dlg;int num=0;int m=0,n=0;CString str;if(dlg.DoModal()=IDOK)num=dlg.m_it1*16+dlg.m_it2*b+dlg.m_it3;m=dlg.m_it1;n=dlg.m_it2*b+dlg.m_it3;array2_aftermn=0;for(int i=0;ia;i+) str.Format(%d,array2_afteri0);for(int x=0;xa;x+) m_list2_after.InsertItem(x,str);for(in
22、t y=0;y16;y+)CString str;str.Format(%d,array2_afterxy); m_list2_after.SetItemText(x,y,str);m_kongxian=m_kongxian+1;for(i=0;im_list1_on.GetItemCount();i+) CString o=m_list1_on.GetItemText(i,0);CString str1;str1.Format(%d,num);if(str1=o)m_list1_on.DeleteItem(i); UpdateData(FALSE);void CFENPEIYUHUISHOUDlg:OnButtonInit() / TODO: Add your control notification handler code hereUpdateData(TRUE);CInitDlg dlg;int count=0;if(dlg.DoModal()=IDOK) a=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/Z 10062.32-2025锥齿轮承载能力计算方法第32部分:锥齿轮和准双曲面齿轮的ISO评价体系胶合承载能力算例
- 2026北京印钞有限公司招聘26人考试参考试题及答案解析
- 2026传奇腾芳幼儿园公开招聘5人考试参考题库及答案解析
- 2026年1月广西百色市田阳区城镇公益性岗位工作人员招聘1人考试备考试题及答案解析
- 2026重庆医科大学编外聘用人员招聘(第2轮)考试备考试题及答案解析
- 2026江西吉安市井冈山垦殖场农产品开发有限责任公司面向社会招聘3人考试参考试题及答案解析
- 2026广西南宁马山县人民法院招聘1人考试备考题库及答案解析
- 胺碘酮的儿科应用
- 2025浙江杭州余杭水务有限公司招聘36人考试备考题库及答案解析
- 2026江西晶昊盐化有限公司专业技术技能人才(第二次)招聘6人考试备考试题及答案解析
- 蜜雪冰城转让合同
- CT及MR对比剂种类、临床应用及常见副反应
- 《老年人辅助器具应用( 第2版)》高职全套教学课件
- 北斗卫星导航系统在交通运输行业的应用(每日一练)
- DL-T5191-2004风力发电场项目建设工程验收规程
- 酒店楼层管理制度
- 葫芦巴碱在中药药理研究
- 晶体渗透压与胶体渗透压讲解
- 年项目经理讲安全课
- 部编人教版四年级下册小学语文全册教案(教学设计)(新课标核心素养教案)
- 住院病历质量考核评分表
评论
0/150
提交评论