首页 > 其他分享 >1661_MIT 6.868 JOS page_init实现的初步尝试

1661_MIT 6.868 JOS page_init实现的初步尝试

时间:2023-04-09 11:34:14浏览次数:52  
标签:存储 JOS 实现 boot 接口 链表 init page


GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         最近的几次学习笔记的整理都有一点拿不准,不是很确定自己所做的是否准确。不过,如果战线跨得太长,可能整个新建立的知识体系会垮掉。因此,还是一步步做梳理,做记录。即便是后面发现了错误重新修改,暂时也得让部分学习整理的信息定稿。

         这一次来看一下page_init()接口的实现,这个是在boot_alloc()接口发挥作用之后进行的。

1661_MIT 6.868 JOS page_init实现的初步尝试_unix

         本来还想借助于boot_map_region()和page_insert()接口来辅助理解,但是看到后面发现这俩接口其实是没有实现的,需要后续去实现。

1661_MIT 6.868 JOS page_init实现的初步尝试_MIT_02

         这里的这部分注释比较有价值,值得注意的有几点:第一,pages的信息主要是对引用的页面进行统计,而没有引用的界面则在链表中进行维护;第二,boot_alloc接口在这个接口调用之后,基本就完成使命了,不会再使用了;第三,说明了后续的存储管理该使用什么接口。

1661_MIT 6.868 JOS page_init实现的初步尝试_MIT_03

         这里的注释讲解了接下来的设计的思路和要求,说明了哪一些存储是不能够设置为可用也就是不可以在存储分配中分配给软件做存储申请应用的。

1661_MIT 6.868 JOS page_init实现的初步尝试_服务器_04

         这个是按照上面的4条要求做的一个简单的设计实现,其中结构体的pp_ref成员可能有多种数值,但是当这个数值为0的时候应该是没有被引用的时候,这个也是最初给出来的示范代码的设计。不过代码跟实际的情况并不相符,因此删除了之后进行了上面的修改。

1661_MIT 6.868 JOS page_init实现的初步尝试_unix_05

         而前面看过的这个调用,也是这个接口在整个系统中的唯一一次调度。接下来,存储的管理可能得基于这个链表的操作来实施了。继续往下的分析,应该暂停下面接口的分析,先去把上面提到的boot_map_region()以及page_insert()接口的实现。感觉上,这两个接口中应该能够体会到更多链表设计的意图。

         这一次的梳理暂且到此,后面,先完成上面两个接口的实现与分析。

标签:存储,JOS,实现,boot,接口,链表,init,page
From: https://blog.51cto.com/greyzhang/6178703

相关文章

  • Java SpringBoot Bean InitializingBean
    Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。Spring初始化bean有两种方式:实现InitializingBean接口,实现afterPropertiesSet方法。(比通过反射......
  • AndroidBanner - ViewPager 03
    AndroidBanner-ViewPager03上一篇文章,描述了如何实现自动轮播的,以及手指触摸的时候停止轮播,抬起继续轮播,其实还遗留了一些问题:当banner不可见的时候,也需要停止轮播给banner设置点击事件,长时间的触摸也会被默认是一个点击事件这篇文章就来解决这些问题,并处理一下banner的......
  • PySide2或PyQt5 运行时提示This application failed to start because no Qt platform
    1.把PySide2或者PyQt5安装在解释器目录下的 \plugins\platforms 目录添加到环境变量Path中。比如,我的环境就是把下面这个路径加到环境变量 Path 中 c:\Python38\Lib\site-packages\PySide2\plugins\platforms 2. 确保环境变量中没有中文......
  • multiple definition of `MainWindow::MainWindow(QWidget*)
     qt刚建好工程运行的时候没问题,后面写了一点东西之后,再运行就发现出现MainWindow重复,我不理解。  解决方法:删除重复的引用。 再重新构建一下就好了。 ......
  • PageOffice——动态填充Word模板并在线编辑
    说明:使用pageoffice动态给word模板填充数据,插入图片、excel、word格式的文件和创建表格。一、准备工作:本地创建一个doc或者docx格式的文件,在文件中需要插入数据的地方设置以“PO_”开头的书签(pageoffice只能识别“PO_”开头的书签)。 二、插入图片PageOfficeCtrlp......
  • 为ViewPager设置SimpleViewPagerIndicator
    说到ViewPagerIndicator,网上有很多专门的开源库;我这里重提一下,只是想试试它的实现方法;记录下来,可以以后快速的修改迭代~~~很简单的一个类:importandroid.content.Context;importandroid.graphics.Canvas;importandroid.graphics.Color;importan......
  • 缓存式的ViewPager&和其他手势控件冲突的解决办法
    一般来说ViewPager如果有很多页的话,会加载它的上一页,当前页和下一页,当从n页以后再想回到第一页,就会再加载一次,这样第一页很多操作后的数据就会被重置,原因是在PagerAdapter的destroyItem经常会移除View,类似下面这样的代码:@Overridepublicvoiddest......
  • PVE Cloud-INIT 模板配置
    PVECloud-INIT模板配置Cloud-init是什么Cloud-init是开源的云初始化程序,能够对新创建弹性云服务器中指定的自定义信息(主机名、密钥和用户数据等)进行初始化配置。通过Cloud-init进行弹性云服务器的初始化配置,将对您使用弹性云服务器、镜像服务和弹性伸缩产生影响。简单地讲,clou......
  • Page 对象与 list 对象的相互转换
    转载:Page对象与list对象的相互转换_page转list_ajungejava的博客-CSDN博客我们有的时候会用到分页,使用page对象,但是在处理逻辑中常常需要list对象和page对象的转换Page-->Listpage.getcontent();返回的是list<object>List-->PagenewpageImpl(List<Object>co......
  • 50、K8S-自定义资源定义-CustomResourceDefinition
    Kubernetes学习目录1、基础知识1.1、回顾到目前位置,我们为了在k8s上能够正常的运行我们所需要的服务,需要遵循以下方式来创建相关资源:1、合理的分析业务需求。2、梳理业务需求的相关功能。3、定制不同功能的资源配置文件。4、应用资源配置文件,完善业务环境。1.2、需求......