ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:213.90KB ,
资源ID:8857400      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8857400.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用位示图管理磁盘空间的分配与回收设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、用位示图管理磁盘空间的分配与回收设计报告课 程 设 计 报 告( 2009-2010年度第二学期)课程名称: 操作系统实验 课设题目: 用位示图管理磁盘空间的分配与回收 院 系: 控制与计算机工程学院 班 级: 姓 名: 指导教师: 李为 设计周数: 一周 成 绩: 2010年7月9 日一、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图

2、如图91所示。系统设一个变量S,记录磁盘的空闲块个数。位0123456789101112131415字0111111010011111012. . .39图91 位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数每柱面的磁道数每磁道的扇区数4416,故柱面号相对块号16的商,即柱面号字号磁道号(相对块号16的余数)4的商,即(位号4)的商物理块号(相对块号16的余数)4的余数,即(

3、位号4)的余数(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所示. 图1 磁盘空间分配框图 图2 磁盘空间回收框图三、编程实现#include stdafx.h#includ

5、e 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 generat

6、ed virtual function overrides /AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUAL/ Implementationprotected: /AFX_MSG(CAboutDlg) /AFX_MSG DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD) /AFX_DATA_INIT(CAboutDlg) /AFX_

7、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_INI

8、T / Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_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_Co

9、ntrol(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()

10、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

11、_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 w

12、indow is not a dialog SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FALSE); / Set small icon / TODO: Add extra initialization here DWORD dwExStyle = LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT; m_list1_before.SetExtendedStyle(dwExStyle); m_list1_after.SetExtendedStyle(dwExStyle); m_list2_after

13、.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.InsertColu

14、mn(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

15、unless you set the focus to a controlvoid CFENPEIYUHUISHOUDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialog:OnSysCommand(nID, lParam); void CFENPEIYUHUISHOUDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context

16、for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int 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 +

17、 1) / 2; / Draw the icon dc.DrawIcon(x, y, m_hIcon); else CDialog:OnPaint(); HCURSOR CFENPEIYUHUISHOUDlg:OnQueryDragIcon() return (HCURSOR) m_hIcon;void CFENPEIYUHUISHOUDlg:OnButtonFp() / TODO: Add your control notification handler code here int index=0;int flag =1,m=0,n=0; int count=0; for(m=0;ma;m

18、+) 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=array

19、1_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)

20、; 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 here UpdateData(TRUE

21、); 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+) CS

22、tring 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:OnBu

23、ttonInit() / TODO: Add your control notification handler code here UpdateData(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;

24、 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@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1