路漫漫其修远兮,吾将上下而求索-百度文库11课程设计报告(2009--2010年度第二学期)课程名称:操作系统实验课设题目:用位示图管理磁盘空间的分配与回收院系:控制与计算机工程学院班级:姓名:指导教师:李为设计周数:一周成绩:2010年7月9日路漫漫其修远兮,吾将上下而求索-百度文库22一、需求分析要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程。(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图9—1所示。系统设一个变量S,记录磁盘的空闲块个数。位0123456789101112131415字0111111010011111012....39图9—1位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号×16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数=每柱面的磁道数×每磁道的扇区数=4×4=16,故柱面号=相对块号/16的商,即柱面号=字号磁道号=(相对块号/16的余数)/4的商,即(位号/4)的商物理块号=(相对块号/16的余数)/4的余数,即(位号/4)的余数(3)当释放一个相对物理块时,运行回收程序,计算该块在位示图中的位置,再把相应位置0。计算公式如下:先由磁盘地址计算相对块号:相对块号=柱面号×16+磁道号×4+物理块号再计算字号和位号:字号=相对块号/16的商,也即字号=柱面号位号=磁道号×物理块数/每磁道+物理块号(4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。(5)设计一个回收算法,将上述已分配给用户的各盘块释放。并显示系统各表。回收算法框图如图5所示。二、整体功能及设计路漫漫其修远兮,吾将上下而求索-百度文库33程序整体主要有三个功能模块,分别是:初使化、分配以及回收。当点击相应按钮时实现其功能。使用二维数组array1_after[50][16]、array1_before[50][16]、array2_after[50][16]分别记录分配前、分配后、回收后的位示图的使用情况,使用表格m_list1_after、m_list1_before、m_listafter显示位示图的使用情况。程序设计了三个方法,分别是初始化OnInitDialog()、分配算法OnButtonFp()、回收算法OnButtonHs()。磁盘空间分配框图如图1所示,磁盘空间回收框图如图2所示.图1磁盘空间分配框图图2磁盘空间回收框图三、编程实现#includestdafx.h#includeFENPEIYUHUISHOU.h#includeFENPEIYUHUISHOUDlg.h#includeHuishouDlg.h开始由磁盘的三维转为磁盘的相对块号由相对块号转换成对应位示图的字位号置位示图相应位为0空闲盘个数+1输出位示图等返回释放一个磁盘块开始申请一个磁盘块还有空闲块?申请者等待返回查位示图找第一个为0的字位号找到了?返回,磁盘已满本次无法分配返回NYYNN由字位号计算相对块号,柱面号,磁道号,物理记录号,并输出这些参数位置示图相应位为1路漫漫其修远兮,吾将上下而求索-百度文库44#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endifclassCAboutDlg:publicCDialog{public:CAboutDlg();//DialogData//{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX};//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};路漫漫其修远兮,吾将上下而求索-百度文库55CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}voidCAboutDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}CFENPEIYUHUISHOUDlg::CFENPEIYUHUISHOUDlg(CWnd*pParent/*=NULL*/):CDialog(CFENPEIYUHUISHOUDlg::IDD,pParent){//{{AFX_DATA_INIT(CFENPEIYUHUISHOUDlg)m_kongxian=0;//}}AFX_DATA_INIT//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);}voidCFENPEIYUHUISHOUDlg::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);路漫漫其修远兮,吾将上下而求索-百度文库66DDX_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_MAP}BEGIN_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()BOOLCFENPEIYUHUISHOUDlg::OnInitDialog(){CDialog::OnInitDialog();//AddAbout...menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL)路漫漫其修远兮,吾将上下而求索-百度文库77{CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu-AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}//Settheiconforthisdialog.Theframeworkdoesthisautomatically//whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE);//SetbigiconSetIcon(m_hIcon,FALSE);//Setsmallicon//TODO:AddextrainitializationhereDWORDdwExStyle=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(inti=15;i=0;i--){CStringstr;str.Format(%d,i);m_list1_before.InsertColumn(0,str,LVCFMT_CENTER,30);路漫漫其修远兮,吾将上下而求索-百度文库88m_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);returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCFENPEIYUHUISHOUDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID,lParam);}}路漫漫其修远兮,吾将上下而求索-百度文库99voidCFENPEIYUHUISHOUDlg::OnPaint(){if(IsIconic()){CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);//CentericoninclientrectangleintcxIcon=GetSyst