用位示图管理磁盘空间的分配与回收设计报告.doc_第1页
用位示图管理磁盘空间的分配与回收设计报告.doc_第2页
用位示图管理磁盘空间的分配与回收设计报告.doc_第3页
用位示图管理磁盘空间的分配与回收设计报告.doc_第4页
用位示图管理磁盘空间的分配与回收设计报告.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告( 2009-2010年度第二学期)课程名称: 操作系统实验 课设题目: 用位示图管理磁盘空间的分配与回收 院 系: 控制与计算机工程学院 班 级: 姓 名: 指导教师: 李为 设计周数: 一周 成 绩: 2010年7月9 日一、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图91所示。系统设一个变量S,记录磁盘的空闲块个数。位0123456789101112131415字0111111010011111012. . .39图91 位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数每柱面的磁道数每磁道的扇区数4416,故柱面号相对块号16的商,即柱面号字号磁道号(相对块号16的余数)4的商,即(位号4)的商物理块号(相对块号16的余数)4的余数,即(位号4)的余数(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应位置0。计算公式如下:先由磁盘地址计算相对块号:相对块号柱面号16+磁道号4+物理块号再计算字号和位号:字号相对块号16的商,也即字号柱面号位号磁道号物理块数每磁道+物理块号 (4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。(5)设计一个回收算法,将上述已分配给用户的各盘块释放。并显示系统各表。回收算法框图如图5所示。二、整体功能及设计程序整体主要有三个功能模块,分别是:初使化、分配以及回收。当点击相应按钮时实现其功能。使用二维数组array1_after5016、array1_before5016、array2_after5016分别记录分配前、分配后、回收后的位示图的使用情况,使用表格m_list1_after、m_list1_before、m_listafter显示位示图的使用情况。程序设计了三个方法,分别是初始化OnInitDialog()、分配算法OnButtonFp()、回收算法OnButtonHs()。磁盘空间分配框图如图1所示, 磁盘空间回收框图如图2所示.开 始由磁盘的三维转为磁盘的相对块号由相对块号转换成对应位示图的字位号置位示图相应位为0空闲盘个数+1输出位示图等返 回释放一个磁盘块开始申请一个磁盘块还有空闲块?申请者等待返 回查位示图找第一个为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_;#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/ Implementationprotected:/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(CWnd* 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* 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_kongxian);/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_MAP()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, strAboutMenu);/ 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_list1_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,LVCFMT_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_CENTER,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 CFENPEIYUHUISHOUDlg: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 = (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 hereint 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.Format(%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.SetItemText(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 handler 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(int 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=d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论