《操作系统课程设计》指导书 .docx

上传人:H****o 文档编号:26683527 上传时间:2022-07-18 格式:DOCX 页数:28 大小:267.41KB
返回 下载 相关 举报
《操作系统课程设计》指导书 .docx_第1页
第1页 / 共28页
《操作系统课程设计》指导书 .docx_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《《操作系统课程设计》指导书 .docx》由会员分享,可在线阅读,更多相关《《操作系统课程设计》指导书 .docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品名师归纳总结操作系统原理课程设计参考2021 年 12 月课设的目的操作系统是运算机专业的一门专业课,也是运算机专业考研课程,但操作系统比较抽象,有的同学一学期完了都仍很难懂得进程、内存治理等一些概念和原理,操作系统课程设计的目的就是通过设计的试验,让同学们真正懂得进程的实现,内存治理的机制,达到懂得概念,明白实现原理。同时也进一步巩固程序设计与数据结构的实践技能,实现整个高校阶段实践技能不断线的目的。课设的故事一个操作系统采纳恳求页式治理方式来治理内存。当一个进程在运行中,随着进程的 执行,它会不断的拜访内存代码执行、存取数据),这样就会提出内存拜访恳求。操作系统会依据用户进程提出的访存

2、恳求,来做的址变换,从而拜访到用户进程想要拜访的代 码或数据。操作系统进行的址变换的过程中发觉用户将要拜访的的址所在的虚页仍没有进 入内存会自动将该虚页从磁盘中装入内存,再进行的址变换。当然如新的页调入内存之前,该进程所能使用的最大内存块数已经用完的话,操作系统就会从该进程已经在内存的那些页中依据先进先出的原就来剔除掉一个页,腾出空间给将要刚要恳求拜访的页。所以操作系统要记录每个进程的每个页面的状态,记录这些调入内存的页面的次序,仍要记录内存中各个块的使用情形。这些都是操作系统必需动态保护的数据,是操作系统的信息基础。现假设一个运算机系统有内存m KB ,系统的页面大小为1KB ,假设操作系统

3、占用内存低端的n 个块 nm/5 ),剩余的内存空间采纳“随机+次序”的方式来猎取未用内存块,以安排给块恳求程序。所谓“随机 +次序”的内存块安排方式就是用随机数来确定一个起始探测的开头块号,假如其已经被安排,就向下一块探测,假如仍是已经安排,就连续下探,直到找到可用块,假如已经到内存的尾部就回到操作系统分界处连续下探。操作系统采纳固定可用块数的方式给每个进程使用和安排内存块,并且规定最大内存块数为 x,当某个进程已经用完了它的最大内存块数后就要剔除页面了。模拟运算机系统答应最大并发进程数为y,假设目前进程数已经达到最大进程数。为了模拟某个进程,其所需的页面数z 由随机数产生 m/10 z ,

4、页面推动的过程采纳随机数方式给出访存的址a,规律的址 a 应当在 0 到 zKB-1 之间,操作系统负责对规律的址 a 进行的址变换,并保护整个系统内存治理的全部数据结构,保证进程的顺当推进,使内存得以共享,实现虚拟储备器的功能。要求课设实现的系统能够配置上述参数,并依据配置参数的规模来系统的模拟系统的运行过程。期望可以可视化的展现系统内部的变化。课设的方案1 构造页面、进程、内存治理所需的数据结构,动态治理系统中的有关信息。#define MAX_MEMORY_FRAME_COUNT 200 /最大答应设置的内存大小可编辑资料 - - - 欢迎下载精品名师归纳总结public: 。CPage

5、。bool bInMemoryFlag 。/ 该页是否在内存int nFrameNo 。/内存的快号int nDiskRelBlockNo。/ 磁盘的相对块号 可以随机给定) int nNextPageNo 。/ 下一调进内存页的页号bool bModifiedFlag 。/修改位 可编辑资料 - - - 欢迎下载精品名师归纳总结public:下去CProcess。void InitProcessParameterint no,int pagetotal,int runtime。int GetOneLogicalAddress 。/得到下一要拜访的页的页号void AddressMapping

6、int LogicalAddress。int nPID 。/ 进程标识符char szProcessName20。/进程名int nControlNo 。int nStatus。int nPageCountLogicalSpace 。/规律的址空间的页数int nPageCountInMemory 。/ 调入内存的页数int nRunTime 。/运行时间 / 随机产生一个虚页在磁盘的相对块号return rand%1024*1024 。CPage:CPagebInMemoryFlag=0 。/该页是否在内存nFrameNo=0 。/内存的快号nDiskRelBlockNo=GetOneRan

7、dDiskNo 。/磁盘的相对块号 可以随机给定) nNextPageNo=0。/下一调进内存页的页号bModifiedFlag=0 。/修改位 CProcess:CProcessnPID=intthis 。nPageCountInMemory=0 。nStatus=0。nPageNoHead=0。nPageNoTail=0 。PageTable=NULL。void CProcess:InitProcessParameterint no,int pagetotal,int runtimesprintfszProcessName,ProcName%1d,no。/进程名nControlNo=no

8、。nPageCountLogicalSpace=pagetotal。/ 规律的址空间的页数nRunTime=runtime 。/运行时间 / 得到下一要拜访的页的页号int ran_num。ran_num=rand%nPageCountLogicalSpace 。return ran_num。void CProcess:AddressMappingint LogicalAddressint nIndexIn=LogicalAddress 。/正在拜访到的页的页号int nIndexOut 。int nFrameNoReused。/ifPageTablenIndexIn.bInMemoryFla

9、g=0/未装入内存ifnPageCountInMemory/ 本进程使用的内存块数未达最大块数PageTablenIndexIn.nFrameNo = COsExamDlg:AllocateMemoryFramenControlNo 。/恳求分可编辑资料 - - - 欢迎下载精品名师归纳总结配一块PageTablenIndexIn.bInMemoryFlag = true 。/保护链表ifnPageCountInMemory=0/ 第一个页面装入内存PageTablenIndexIn.nNextPageNo=-1 。this-nPageNoHead=nIndexIn 。this-nPageNo

10、Tail=nIndexIn 。else可编辑资料 - - - 欢迎下载精品名师归纳总结PageTablenIndexIn.nNextPageNo=-1 。/刚装入的页面的Next 指针设为 -1nPageNoTail.nNextPageNo=nIndexIn 。this-nPageNoTail=nIndexIn 。nPageCountInMemory+ 。else /本进程使用的内存块数已达最大块数/剔除一页nIndexOut=this-nPageNoHead 。nFrameNoReused=PageTablenIndexOut.nFrameNo。/暂存被重用的内存块的块号this-nPage

11、NoHead=PageTablenIndexOut.nNextPageNo 。/把首页设到原先的其次个次序页PageTablenIndexOut.nFrameNo = -1 。/原先的页设成不在内存PageTablenIndexOut.bInMemoryFlag = false 。PageTablenIndexIn.nFrameNo = nFrameNoReused 。/拜访页装入腾出的块PageTablenIndexIn.bInMemoryFlag = true 。/设为“已装入”PageTablenIndexIn.nNextPageNo=-1 。/刚拜访的页面的Next 指针设为 -1nP

12、ageNoTail.nNextPageNo=nIndexIn 。/附加到链表this-nPageNoTail=nIndexIn 。/设置为新的“链尾”/设置内存映像的显示串/ 。else /拜访的址对应的页已在内存/直接拜访可编辑资料 - - - 欢迎下载精品名师归纳总结2 设计使用上述数据结构来实现恳求分页模拟系统下面的例子是用 VC 的对话框应用程序来实现的测试或应用系统模型。进程的推动由windows 的线程来模拟的,这里进程的内容是由随机数产生运行轨迹。int COsExamDlg:m_sMemoryFrameCount=120 。int COsExamDlg:m_sOsFrameCo

13、unt=40 。bool bMemoryBitmapMAX_MEMORY_FRAME_COUNT 。/内存空间治理的位示图CString csMemoryBitmap。/用于显示内存使用情形的字符串int GetOneLogicalAddressreturn 0 。UINT BarryProcessThreadProc LPVOID pParam/ 模拟进程的线程函数CProcess *pProcess = CProcess*pParam。ifpProcess = NULL | .pProcess-IsKindOfRUNTIME_CLASSCProcessreturn 1。 /假如 pObje

14、ct 无效,就返回 1/添加执行代码CString csOutputInfo= 。int i。int LA。fori=0 。inRunTime 。i+/ 执行每个操作步/随机产生一个拜访的址LA=GetOneLogicalAddress 。/的址变换 -转变数据结构,转变用户界面pProcess-AddressMappingLA 。csOutputInfo+=M 。/构造显示页表信息的串CWnd* pMainWnd 。可编辑资料 - - - 欢迎下载精品名师归纳总结pMainWnd=AfxGetMainWnd 。switchpProcess-nControlNocase 0:pMainWnd-

15、GetDlgItemIDC_STATIC_PROCESS0-SetWindowTextcsOutputInfo 。break。case 1:pMainWnd-GetDlgItemIDC_STATIC_PROCESS1-SetWindowTextcsOutputInfo 。break。case 2:可编辑资料 - - - 欢迎下载精品名师归纳总结case 3:pMainWnd-GetDlgItemIDC_STATIC_PROCESS2-SetWindowTextcsOutputInfo 。break。可编辑资料 - - - 欢迎下载精品名师归纳总结pMainWnd-GetDlgItemIDC_S

16、TATIC_PROCESS3-SetWindowTextcsOutputInfo 。break。/延时Sleep1000。return 0 。 /thread completed successfully.CProcess* ProcessPool。void COsExamDlg:OsInitializationint i。csMemoryBitmap= 。fori=0 。ibMemoryBitmapi=false 。csMemoryBitmap+= 。可编辑资料 - - - 欢迎下载精品名师归纳总结int COsExamDlg:AllocateMemoryFrameint nProcessN

17、oint nFrameNoStart。nFrameNoStart=m_sOsFrameCount + rand % m_sMemoryFrameCount-m_sOsFrameCount 。whilebMemoryBitmapnFrameNoStart=truenFrameNoStart=nFrameNoStart+1 。ifnFrameNoStart=m_sMemoryFrameCount nFrameNoStart=m_sOsFrameCount。return nFrameNoStart 。COsExamDlg:COsExamDlgCWnd* pParent /*=NULL*/: CDia

18、logCOsExamDlg:IDD, pParent/AFX_DATA_INITCOsExamDlg m_nProcessCount = 0。m_nMemoryFrameCount = 0 。m_nOsFrameCount = 0。m_nMaxFrameForOneProcess = 0。/AFX_DATA_INIT/NotethatLoadIcondoesnotrequireasubsequent DestroyIcon in Win32可编辑资料 - - - 欢迎下载精品名师归纳总结m_hIcon = AfxGetApp-LoadIconIDR_MAINFRAME。m_nProcessCo

19、unt = 3。m_nMaxFrameForOneProcess=16。m_nMemoryFrameCount = 64 。m_nOsFrameCount = 16。void COsExamDlg:DoDataExchangeCDataExchange* pDXCDialog:DoDataExchangepDX。/AFX_DATA_MAPCOsExamDlgDDX_TextpDX,IDC_EDIT_PROCESS_COUNT,m_nProcessCount 。DDX_TextpDX,IDC_EDIT_MEMORY_FRAME_COUNT,m_nMemoryFrameCount 。DDV_Min

20、MaxIntpDX,m_nMemoryFrameCount,64, 128 。DDX_TextpDX,IDC_EDIT_OS_FRAME_COUNT,m_nOsFrameCount 。DDV_MinMaxIntpDX, m_nOsFrameCount, 16, 32。可编辑资料 - - - 欢迎下载精品名师归纳总结DDX_TextpDX, IDC_EDIT_MAX_FRAME_COUNT_PER_PROCESS,m_nMaxFrameForOneProcess 。DDV_MinMaxIntpDX,m_nMaxFrameForOneProcess, 4, 16 。/AFX_DATA_MAPBEG

21、IN_MESSAGE_MAPCOsExamDlg, CDialog/AFX_MSG_MAPCOsExamDlg ON_WM_SYSCOMMAND ON_WM_PAINT ON_WM_QUERYDRAGICON ON_BN_CLICKEDIDC_BUTTON_ACCEPT,OnButtonAcceptON_BN_CLICKEDIDC_BUTTON_SIMU,OnButtonSimu/AFX_MSG_MAP END_MESSAGE_MAP/ COsExamDlg message handlersBOOL COsExamDlg:OnInitDialog可编辑资料 - - - 欢迎下载精品名师归纳总结

22、CDialog:OnInitDialog。/ Add About. menu item to system menu./IDM_ABOUTBOXmust be inthe system command range.ASSERTIDM_ABOUTBOX&0xFFF0= IDM_ABOUTBOX 。ASSERTIDM_ABOUTBOX 。CMenu* pSysMenu = GetSystemMenuFALSE 。if pSysMenu .= NULLCString strAboutMenu 。strAboutMenu.LoadStringIDS_ABOUTBOX。if .strAboutMenu.

23、IsEmptypSysMenu-AppendMenuMF_SEP ARATOR。pSysMenu-AppendMenuMF_STRING , IDM_ABOUTBOX, strAboutMenu。可编辑资料 - - - 欢迎下载精品名师归纳总结/ Set the icon for this dialog.The framework does this automatically/ when the applications main window is not a dialogSetIconm_hIcon, TRUE 。/ Set big icon SetIconm_hIcon, FALSE

24、。/ Set small icon/ TODO: Add extra initialization hereGetDlgItemIDC_EDIT_P AGE_COUNT0-SetWindowText12 。GetDlgItemIDC_EDIT_P AGE_COUNT0-SetWindowText12 。GetDlgItemIDC_EDIT_RUN_TIME0-SetWindowText12 。GetDlgItemIDC_EDIT_PAGE_COUNT1-SetWindowText8 。可编辑资料 - - - 欢迎下载精品名师归纳总结GetDlgItemIDC_EDIT_RUN_TIME1-Se

25、tWindowText12 。GetDlgItemIDC_EDIT_P AGE_COUNT2-SetWindowText16 。GetDlgItemIDC_EDIT_RUN_TIME2-SetWindowText12 。GetDlgItemIDC_EDIT_P AGE_COUNT3-SetWindowText9 。GetDlgItemIDC_EDIT_RUN_TIME3-SetWindowText12 。srandtime0 。return TRUE 。 / return TRUE unless you set the focus to a control可编辑资料 - - - 欢迎下载精品名

26、师归纳总结voidCOsExamDlg:OnSysCommandUINTnID,LPARAM lParamif nID & 0xFFF0 = IDM_ABOUTBOX可编辑资料 - - - 欢迎下载精品名师归纳总结elseCAboutDlg dlgAbout 。dlgAbout.DoModal 。CDialog:OnSysCommandnID, lParam。可编辑资料 - - - 欢迎下载精品名师归纳总结/ If you add a minimize button to your dialog, you will need the code below/todrawtheicon.ForMF

27、Capplicationsusingthe document/view model,/ this is automatically done for you by the framework.可编辑资料 - - - 欢迎下载精品名师归纳总结void COsExamDlg:OnPaintif IsIconicCPaintDC dcthis 。 / device context for paintingSendMessageWM_ICONERASEBKGND, WPARAM dc.GetSafeHdc, 0 。/ Center icon in client rectangleint cxIcon

28、= GetSystemMetricsSM_CXICON 。int cyIcon = GetSystemMetricsSM_CYICON 。CRect rect。GetClientRect&rect 。int x = rect.Width - cxIcon + 1 / 2 。int y = rect.Height - cyIcon + 1 / 2 。可编辑资料 - - - 欢迎下载精品名师归纳总结else/ Draw the icondc.DrawIconx, y, m_hIcon 。可编辑资料 - - - 欢迎下载精品名师归纳总结CDialog:OnPaint。/ The system cal

29、ls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR COsExamDlg:OnQueryDragIconreturn HCURSOR m_hIcon 。void COsExamDlg:OnButtonAccept/ TODO: Add your control notification handler code hereUpdateDatatrue 。int i,j 。CStatic* pStatic1,* pStatic2 。CEdit* pEdit1,*pEdi

30、t2。可编辑资料 - - - 欢迎下载精品名师归纳总结char szContent100 。CRect rect。CStringcsInfo 。CPoint point 。CSize size。int PageTotal 。fori=0 。iswitchicase 0:pStatic1=CStatic* GetDlgItemIDC_STATIC_0。可编辑资料 - - - 欢迎下载精品名师归纳总结0 。pEdit1=CEdit*GetDlgItemIDC_EDIT_PAGE_COUNT可编辑资料 - - - 欢迎下载精品名师归纳总结pEdit2=CEdit*GetDlgItemIDC_EDIT

31、_RUN_TIME0。可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载精品名师归纳总结0 。1 。pStatic2=CStatic* GetDlgItemIDC_STATIC_PROCESSbreak。case 1:pStatic1=CStatic* GetDlgItemIDC_STATIC_1。pEdit1=CEdit*GetDlgItemIDC_EDIT_PAGE_COUNT可编辑资料 - - - 欢迎下载精品名师归纳总结pEdit2=CEdit*GetDlgItemIDC_EDIT_RUN_TIME1。可编辑资料 - - - 欢迎下载精品名师归纳总结1 。

32、pStatic2=CStatic* GetDlgItemIDC_STATIC_PROCESSbreak。case 2:pStatic1=CStatic* GetDlgItemIDC_STATIC_2。pEdit1=CEdit*GetDlgItemIDC_EDIT_PAGE_COUNT可编辑资料 - - - 欢迎下载精品名师归纳总结2 。pEdit2=CEdit*GetDlgItemIDC_EDIT_RUN_TIME2。可编辑资料 - - - 欢迎下载精品名师归纳总结2 。3 。pStatic2=CStatic* GetDlgItemIDC_STATIC_PROCESSbreak。case 3:

33、pStatic1=CStatic* GetDlgItemIDC_STATIC_3。pEdit1=CEdit*GetDlgItemIDC_EDIT_PAGE_COUNT可编辑资料 - - - 欢迎下载精品名师归纳总结pEdit2=CEdit*GetDlgItemIDC_EDIT_RUN_TIME3。可编辑资料 - - - 欢迎下载精品名师归纳总结3 。pStatic2=CStatic* GetDlgItemIDC_STATIC_PROCESSbreak。可编辑资料 - - - 欢迎下载精品名师归纳总结ifipStatic1-EnableWindowtrue 。pEdit1-EnableWindo

34、wtrue 。pEdit2-EnableWindowtrue 。pStatic2-EnableWindowtrue 。this-GetWindowRect&rect 。point.x=rect.left 。point.y=rect.top 。csInfo= 。pEdit1-GetWindowTextszContent,200。PageTotal=atoiszContent。forj=0 。jcsInfo+= | 。size=pStatic2-GetDC-GetTextExtentcsInfo 。pStatic2-GetWindowRect&rect 。ScreenToClient&rect 。

35、/pStatic2-MoveWindowrect.left,rect.top,size.cx,size.cy, true。pStatic2-SetWindowTextcsInfo。elsepStatic1-ShowWindowSW_HIDE 。pEdit1-ShowWindowSW_HIDE 。pEdit2-ShowWindowSW_HIDE 。pStatic2-ShowWindowSW_HIDE 。可编辑资料 - - - 欢迎下载精品名师归纳总结m_sMemoryFrameCount=m_nMemoryFrameCount 。m_sOsFrameCount=m_nMemoryFrameCou

36、nt 。void COsExamDlg:OnButtonSimu/ TODO: Add your control notification handler code here/CProcess* pNewProcess = new CProcess。ProcessPool=new CProcessm_nProcessCount。char szContent100 。int i。int PageTotal,RunTime。fori=0 。iswitchi可编辑资料 - - - 欢迎下载精品名师归纳总结case 0:GetDlgItemIDC_EDIT_P AGE_COUNT0-GetWindowTextszContent,200 。PageTotal=atoiszContent。GetDlgItemIDC_EDIT_RUN_TIME0-GetWindowTextszContent,200 。RunTime=atoiszContent 。ProcessPooli.InitProcessParameter0,PageTotal,RunTime 。AfxBeginThreadBarryProcessThreadProc, &ProcessPooli 。break。可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载精品名师归纳总结case 1:case 2:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁