跳过正文
  1. 博客/
  2. 随笔/
  3. 编程/

内存分页

·2 分钟· ·
随笔 编程 MIT6.828
目录

引言
#

本来自己查了很多资料,想自己写出来,结果下笔的时候发现别人已经把我想写的部分全部写出来了,而且比我想的还要具体,所以我就不写了,把链接放出了,顺便我补充一些

http://leenjewel.github.io/blog/2015/11/11/%5B%28xue-xi-xv6%29%5D-nei-he-gai-lan/

总结
#

由于内存分页在后面的lab2中也会设计,而且给出的资料写的非常详细,所以我就不多提了。这里提一下为了更好的理解什么内存分页的段选择子与CS的关系,我写了一篇关于CS寄存器的发展史

最后我提一下kern/entrypgdir.c手写的内存分页表

第一个entry_pgdir是页目录,第二个entry_pgtable页表,而且注意entry_pgtable是代表0-4M物理内存可写可读的真实内存地址

前面知道了目录和页表的作用,在现实系统中,一个目录下有1024个页表,但是这只有一个页表,而且它代表从0-4M连续的内存空间

PS:后面12位是权限位,只看前三位,可以知道是从(000-3ff)的高20位物理地址,由于我们声明了__attribute__((__aligned__(PGSIZE)))(地址4K对齐,其实意思是它真实物理地址后12位一定全部为0),所以直接取(uintptr_t)entry_pgtable地址就是页表地址,虽然后面加上权限位PTE_P + PTE_W,但是在寻找真实地址时都会屏蔽(只取前20位如),当初想了很久感觉取不到页表的真实地址,还以为有什么神奇的编译设定,后面查了很久资料才明白,所以这里提个醒后面我们会在lab2中正式接触内存分页技术,这里只是相当于设定了一个“常数”,后面会将器扩展变成“函数”。

引用
#

相关文章

引导和操作系统的交互
·3 分钟
随笔 编程 MIT6.828
引言 # 本来自己查了很多资料,想自己写出来,结果下笔的时候发现别人已经把我想写的部分全部写出来了,而且比我想的还要具体,所以我就不写了,把链接放出了,顺便我补充一些
什么是操作系统
·8 分钟
随笔 编程 MIT6.828
引言 # 本文是基于mit6.828 的lab1对操作系统的思考,网上有不少关于lab1的博客,大部分都是介绍如何完成lab1的问题,介绍的比较详细的有这个博客,在这里我就不从问题出发,建议大家看完上面的博客在看我这篇博文,我这篇博文就是从把我遇到的疑惑提炼出知识点,然后再把这些知识点串起来
从CS寄存器看段的前世今生
·2 分钟
随笔 编程 MIT6.828
引言 # Intel作为作为微处理器的航头老大,一直引导CPU的进步发展,也正是因为Intel是一个有着历史包袱的企业,所以站在现代CPU看起来,有一些非常奇葩的设计遗留下来,这些设计一开始是为了兼容,慢慢的将这种兼容又发展成新的功能,把“包袱”转换成“亮点”,段设计就是其中的一个很重要的代表,要想搞懂这个设计在不同的CPU的如何保持兼容和强化,我们必须要慢慢的把CPU的历史给捋顺。
mit6.828课程总结
·2 分钟
随笔 编程 MIT6.828
引言 # 一开始想直接做一个操作系统,但是万事开头难,学习操作系统需要太多基础知识了,所以就按照网上推荐先学习mit6.828的课程,先把xvf6操作系统搞懂,然后在来实现自己的操作系统,下面就是学习这个课程的体会,按照各个lab的顺序,介绍自己的心得体会
AVL树实现原理
·2 分钟
随笔 编程
本篇博客主要基于这篇博客的扩展,建议阅读前先阅读这篇博文,这篇博文详细介绍AVL树的实现原理,完整代码在github的avl.go文件中 浅谈"树"这种数据结构 Github 可视化页面 引言 # AVL树是在对二叉搜索树的一种优化,通过构造一棵高度平衡的二叉搜索树从而实现提高空间利用率,所以在了解如何实现之前,必须了解如何构造一棵二叉搜索树,你可以阅读我的这篇博客了解如何构建一棵二叉搜索树,虽然我是用Go来实现的,但是不必了解太多Go方面的知识,我在博客中尽量使用图片的方式来介绍实现原理
二叉搜索树实现原理
·4 分钟
随笔 编程
本篇博客主要基于这篇博客的扩展,建议阅读前先阅读这篇博文,这篇博文详细介绍二叉搜索树的实现原理,完整代码在github的binary.go文件中 浅谈"树"这种数据结构 Github 可视化页面 引言 # 之所以使用Go来实现,个人还是比较喜欢Go的,作为一个基础数据结构,Go用来实现这个速度比Java、C++都快,而且相比Java也能节省内存,而且我也不喜欢换使用冒号。