全部学习汇总:GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

这一次,看几个存储管理的辅助接口的实现。

这个接口给出来的提示信息还是很多的,至少从这里能够收集到这个接口实现要用到的一些辅助转换函数以及基本的要求。

这是对本函数接口的一个实现尝试,也按照提示注释中的信息,直接把权限属性分配全了。

这个函数接受三个参数:pgdir是一个指向页目录表的指针,va是要查找的虚拟地址,create表示如果要查找的页表不存在是否要创建。首先,将va的高10位作为页目录项的索引,获取相应的页目录项,保存在pde中。如果该页目录项不存在,则根据create参数决定是否创建它。如果不需要创建或者创建失败,则返回NULL。如果需要创建页目录项,则首先调用page_alloc函数分配一个物理页面,并且将页面清零。然后,将该物理页面的物理地址设置到页目录项中,并设置PTE_P、PTE_U和PTE_W标志。最后,使用虚拟地址KADDR(PTE_ADDR(xxx))将页表的物理地址映射到内核虚拟地址空间,并返回指向相应页表的pte_t类型指针,加上va低12位作为页表项的索引。这里最后一步的转换也非常重要,如果不转换成一个内核的虚拟地址,接下来的访问也会出错。

接下来看page_lookup接口,这个返回的其实是page分配信息而不是page本身。确切说,这个查找查找的是虚拟地址对应的物理page的信息。

这个是按照提示做的一个函数接口的实现。

这个函数接受三个参数:pgdir是一个指向页目录表的指针,va是要查找的虚拟地址,pte_store是一个指向指针的指针,用于保存对应的页表项。首先,调用pgdir_walk函数获取虚拟地址va对应的页表项,并检查page是否存在。如果page不存在,则返回NULL。如果page存在,则使用pte_store参数保存对应的页表项地址,并将物理地址转换成页面结构体并返回。这里使用了宏pa2page和PTE_ADDR,pa2pageE用于将物理地址转换成页面结构体,PTE_ADDR用于提取页表项中的物理地址部分。

相比于walk函数来说,这个lookup函数很大的一个特点是只查找不创建。另外,接口传递的信息进行了进一步的转换,转成了管理所需要的页信息结构体。

这样,继续往下看需要考虑实现page_insert接口。

以上是最初的接口以及实现提示。

这个是对接口的一个实现尝试,但是当前page_remove()接口并没有实现。另一点,关于页表不存在时候的创建,这里是采用给walk接口指定创建符号为true来实现的。

这是最初的接口定义以及提示。

以上是一次尝试实现,但是这次用到了临近的tlb_invalidate()接口。从描述看,应该每一次对TLB,也就是两级查找的表进行修改都应该调用。看起来,前面的插入也应该增加。

按照上面的分析,插入改成如上设计。

继续往下看check_page的测试,主要是针对页面的插入以及移除等操作情况的页页面合理性进行了测试。

测试并没有通过,看起来还是有一些地方没有处理正确。

这个算是自己审题的失误把,当初看到这段的时候以为是注释写错了。先把这部分修正掉,发现前面的问题并没有修正。

以上是修正的方式。

再次进行测试测试通过。

1664_MIT 6.828 JOS页管理的相关行为实现相关推荐

  1. MIT 6.828 JOS学习笔记17. Lab 3.1 Part A User Environments

    Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行.你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息:创建 ...

  2. 1662_MIT 6.828 JOS check_page_free_list实现分析以及boot_alloc问题修复

    全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续尝试完善分析JOS的 ...

  3. 智能卡门禁管理系统_综合门禁管理信息系统相关技术及未来准备

    综合门禁管理信息系统相关技术及未来准备 1)智能卡 基于我们对智能卡的认识,属于物联网的感应层,即实体所关联的感应媒介.从人的角度看,可能是卡(可能多张),也可能是密码.指纹.条码等:未来可能包括资产 ...

  4. python下载包管理器_Python包管理整理:setuptool管理python相关的包

    setuptool管理python相关的包 一.介绍 setuptool管理python相关的包的工具.这些包是zip格式发布,但是后缀一般都是.egg setuptool能解决python包的依赖关 ...

  5. 待办事项桌面插件_让浏览器重获整洁——标签页管理插件:OneTabOneTab PlusToby...

    1 什么是标签页管理插件 chrome浏览器虽然为用户提供了一个非常方便的打开新标签页的方法,但是随着用户浏览网页的时间增长,用户在一个chrome窗口中打开的标签页会越来越多,当这些标签页过多的时候 ...

  6. Python包管理整理:setuptool管理python相关的包

    setuptool管理python相关的包 一.介绍 setuptool管理python相关的包的工具.这些包是zip格式发布,但是后缀一般都是.egg setuptool能解决python包的依赖关 ...

  7. Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)

    页管理容器(TabBox) 页管理容器主要用来管理Tab(twaver.Tab)页. var tablePane = new twaver.controls.TablePane(table); ... ...

  8. 微信隐藏功能系列:微信发现页管理,强迫症人士必看

    不知不觉小编已经给大家分享了许多微信隐藏功能了,大家每次看到一个新的微信隐藏功能时,是否都会和小编一样,眼前一亮呢?这次给大家带来的微信隐藏功能是微信发现页管理. 微信的发现页我们都知道在哪里吧,简单 ...

  9. ODBC管理器相关知识汇总

    ODBC管理器相关知识汇总 最近,在使用终端应用程序调用数据库文件时,发生了:ODBC问题之驱动程序和应用程序之间的体系结构不匹配等问题,通过查阅资料,小有收获,汇总如下: ODBC:开放数据库互连, ...

最新文章

  1. Cisco交换机解决网络蠕虫病毒***问题
  2. matlab 方波_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号
  3. maven依赖decoder_引入依赖maven打包报错
  4. DSP学习 -- GPS时间校准电脑系统时间
  5. python3.7 安装pip3_Ubuntu16.04 安装python3.7和pip3
  6. 《结对-结对编项目作业名称-测试过程》
  7. SpringSecurity 整合 JWT
  8. 双向循环链表的插入与删除
  9. js数组获取index_通过事例重温一下常见的 JS 中 15 种数组操作(备忘清单)
  10. FastDB内存数据库API
  11. Meanshift and Camshift
  12. 新浪微博API使用入门:申请应用、授权、使用官方java版本SDK
  13. 机器人学导论 一、空间变换(1)位姿,变换
  14. gps 数据解析-NMEA 0183协议
  15. mx350显卡天梯图_2019.8月CPU和显卡性能天梯图
  16. 园林计算机制图在计算机上的应用,园林计算机制图
  17. python金融反欺诈-项目实战
  18. python can通信_使用python来调用CAN通讯的DLL实现方法
  19. 《“理想我”与“现实我”》
  20. 面试太卷,我选择背八股。。。

热门文章

  1. python文件式和交互式道路标志_其它课程中的python---4、Matplotlib最最最最简单使用...
  2. 手机录音amr怎么转mp3?三种方法直接转换!
  3. 一级消防工程师前景真的不好了?
  4. 最新WIN10系统封装教程2019系列(二)——虚拟机与母盘安装
  5. 大数据分析师是干嘛的?主要工作做什么
  6. 忘记密码照样查看QQ聊天记录
  7. ireport结构体介绍
  8. VirtuaNES.v0.97源码探究3 卷轴查看器
  9. 唐诗宋词 v1.5 软件下载 诗词库更新时间20090426 唐诗宋词三百首 GCLsoft
  10. 【机器学习--实战篇】足球运动员身价估计---XGBoost