用位示图管理磁盘空间的分配与回收设计报告.doc

上传人:jian****018 文档编号:9165047 上传时间:2020-04-03 格式:DOC 页数:17 大小:359KB
返回 下载 相关 举报
用位示图管理磁盘空间的分配与回收设计报告.doc_第1页
第1页 / 共17页
用位示图管理磁盘空间的分配与回收设计报告.doc_第2页
第2页 / 共17页
用位示图管理磁盘空间的分配与回收设计报告.doc_第3页
第3页 / 共17页
点击查看更多>>
资源描述
课 程 设 计 报 告( 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=dlg.m_it1; b=dlg.m_it2; c=dlg.m_it3;CString str;int m,n;int k=0;for(m=0;ma;m+) for(n=0;n16;n+) array1_beforemn=(int)(rand()%2); array1_aftermn=array1_beforemn; if(array1_beforemn=0) count+; m_kongxian=count; str.Format(%d,array1_beforem0);for(m=0;ma;m+) m_list1_before.InsertItem(m,str);for(n=0;n16;n+)CString str;str.Format(%d,array1_beforemn); m_list1_before.SetItemText(m,n,str); UpdateData(FALSE);四、使用说明程序运行后的运行界面如图3所示: 图3程序运行界面单击初使化按扭初使化程序。初使化后位示图分配情况图如图4所示。图4初使化后位示图分配情况图连续单击分配按钮,系统从第一个盘块到最后一个盘块,寻找第一个不为1的盘块,并为用户连续分配相应个数盘块,并显示分配情况和位示图情况,如图5所示。 图5点击分配按钮后信息单击回收按钮,系统回收已分配给用户的盘块,如图6所示图6回收的提示信息 当空闲块为零时,会弹出提示信息,如图7所示。 图6回收的提示信息五、结果分析程序满足要求,测试通过。但是不能实现一次分配多块,只能多次单击分配按钮实现该功能。在以后的学习中一定多加努力,解决这个问题。六、心得体会 通过这次课程设计,我更加明确的了解了磁盘分配和回收的过程,同时我的编程能力也得到了加强。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!