- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                第12章 设计项目4  一、项目设计目的    了解虚拟存储器管理设计原理,掌握请求分页虚拟存储管理的具体实现技术。 二、项目设计要求 (1)在src/geekos/paging.c文件中编写代码完成以下函数: Init_VM()(defined in )函数将建立一个初始的内存页目录和页表,并且安装一个页面出错处理函数。 Init_Paging()函数(定义在src/geekos/paging.c)初始化操作页面调度文件所需的所有数据结构。就如前面说到的,Get_Paging_Device()函数指定分页调度文件定位在哪一个设备和占用磁盘块的地址范围。 Find_Space_On_Paging_File()函数应该在分页调度文件里面找到一个空闲的足够大的页空间。它将返回这个大块的索引,或者当没有合适的空间就返回-1。  第三十页,共五十二页。 Free_Space_On_Paging_File()函数将释放由Find_Space_On_Paging_File()函数在分页调度文件里所分配的的磁盘块。 Write_To_Paging_File()函数将把存储在内存的一页数据写出到分页调度文件里。 Read_From_Paging_File()函数将读取分页调度文件里的一页数据到内存空间。 (2)在src/geekos/uservm.c文件中编写代码完成以下函数: Destroy_User_Context()释放进程所占用的所有内存和其它资源。 Load_User_Program()装载可执行文件到内存里,创建一个就绪的用户地址空间,功能类似于分段系统的实现。 Copy_From_User()从一个用户缓冲区复制数据到一个内核缓冲区。 Copy_To_User()从一个内核缓冲区复制数据到一个用户缓冲区。 Switch_To_Address_Space()利用它装载相应页目录和LDT来切换到一个用户地址空间。  第三十一页,共五十二页。 1、地址转换 三、项目设计提示  第三十二页,共五十二页。 第三十三页,共五十二页。 线性地址到物理地址的转换过程 第三十四页,共五十二页。 2、用户进程的线性地址空间 第三十五页,共五十二页。 3、请求分页系统实现 操作系统将需要在磁盘设备上创建一个page file文件暂时保存从内存中替换出去的页,  实现一个类LRU算法在内存中选取一个替换页把它写到磁盘的page file文件中。 缺页中断处理  表12-1 缺页处理表  缺页情况 标识 相应处理 堆栈生长到新页 超出原来分配一页的限制 分配一个新页进程继续 此页保存在磁盘上 数据标识这一页在page file中存在 从page file读入需要的页继续 因为无效地址缺页 非法地址访问 终止用户进程 第三十六页,共五十二页。 在“/src/geekos/mem.c”文件中,已经定义了一个函数Alloc_Pageable_Page实现交换一页到磁盘的操作,具体执行步骤如下: 调用mem.c文件中已经实现的Find_Page_To_Page_Out函数来确定要替换的页(这个函数依赖于页数据结构中的clock域)。 调用paging.c文件中已经实现的Find_Space_On_Paging_File函数在page file中找到空闲的存储空间。 调用paging.c文件中已经实现的Write_To_Paging_File函数把被替换的页写到page file文件中。 修改页表的相应表项,清除页存在的标志,标识为此页在内存为不存在。 修改页表项的页基地址为包含这一页的第一个磁盘块号。 修改页表项的kernelInfo位标识为KINFO_PAGE_ON_DISK状态(标识这一页是在磁盘上存在,而不是没有效)。 调用lowlevel.asm文件中已经实现的Flush_TLB来刷新TLB。 第三十七页,共五十二页。 * * 一、项目设计目的    熟悉GeekOS的项目编译、调试和运行环    境,掌握GeekOS运行工作过程。 二、项目设计要求    1、搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。    2、熟悉键盘操作函数,编程实现一个内核进程。该进程的功能是:接收键盘输入的字符并显示到屏幕上,当输入ctrl+d时,结束进程的运行。 第八章 设计项目0  第一页,共五十二页。 三、项目0的实现主要由以下步骤完成(在项目0的/src/geekos/main.c中完成): 编写一个C语言函数,函数功能是:接收键盘输入的按键,并将键值在显示器显示出来,当输入ctrl+d就退出; 在Main函数体内调用Start_Kernel_Thread函数,将步骤1编写的函数地址传递给参数startFunc,利用Setup_Kernel_
                 原创力文档
原创力文档 
                         
                                    

文档评论(0)