
一个操作系统的实现
学习操作系统
落子摘星
吾尝终日而思矣,不如须臾之所学也。
展开
-
分页机制小记
分页的主要目的在于实现虚拟存储器。线性地址中任意一个页都能映射到物理地址中的任何一个页,这无疑使得内存管理变得相当灵活。原创 2020-03-01 19:49:31 · 244 阅读 · 6 评论 -
一个操作系统的实现笔记:加载Loader进入内存
一个操作系统从开机到开始运行,大致经历“引导→加载内核入内存→跳入保护模式→开始执行内核”这样一个过程。也就是说,在内核开始执行之前不但要加载内核,而且还有准备保护模式等一系列工作,如果全都交给引导扇区来做,512字节很可能是不够用的,所以,不妨把这个过程交给另外的模块来完成,我们把这个模块叫做Loader。引导扇区负责把Loader加载入内存并且把控制权交给它,其他工作放心地交给Loader来...原创 2020-02-20 14:47:19 · 690 阅读 · 0 评论 -
FAT12引导扇区格式及根目录区条目格式
几乎所有的文件系统都会把磁盘划分为若干层次以方便组织和管理,这些层次包括: ①扇区(Sector):磁盘上的最小数据单元。 ②簇(Cluster):...原创 2020-02-19 15:42:45 · 2594 阅读 · 0 评论 -
一个操作系统的实现笔记:利用内存的大小计算页表的个数
利用内存的大小设置页表的个数的公式是:页表个数=内存大小÷4MB。为什么是这样呢?首先,80386一个页的大小是4KB,页是通过页表来找到的,而一个页表中有1024个页,所以一个页表对应的物理内存就是4MB,所以页表个数=内存大小÷4MB,这样我们就可以克勤克俭用内存啦。计算页表个数的代码是这几行:SetupPaging: ; 根据内存大小计算应初始化多少PDE以及多少页表 xor ed...原创 2020-02-04 14:19:47 · 1871 阅读 · 0 评论 -
记录特权级转移中遇到的问题
特权级转移这块看了很长时间,终于把该弄懂的弄懂了,记录一下这个过程中想不明白的东西。第一个问题就是:由高特权级向低特权级转移的问题。由高特权级向低特权级转移的代码是这样: push SelectorStack3 ;R3堆栈段选择子 push TopOfStack3 ;R3堆栈段栈顶 push SelectorCodeRing3 ;R3代码段选择子 p...原创 2020-02-03 13:17:29 · 383 阅读 · 0 评论 -
一个操作系统的实现笔记:初始化32位代码段描述符及为加载GDTR做准备
有时候书看一遍是真的不行,看于渊的《一个操作系统的实现》看到pmtest1中的代码关于初始化32位代码段描述符及为加载GDTR做准备时怎么也看不懂,感觉这本书讲的不仔细,但是过了两天再回头看时,突然就看明白了,第一次看时忽略了好多细节,今天记录一下忽略的一些细节。先上完整的代码:; ==========================================; pmtest1.asm...原创 2020-01-21 18:27:59 · 1191 阅读 · 1 评论 -
段描述符属性参照表
(1) G: 段界限粒度(Granularity)位。 G=0 表示界限粒度为字节; G=1 表示界限粒度为4K 字节。 &nb...原创 2020-01-21 15:53:11 · 1256 阅读 · 0 评论 -
Orange's:一个操作系统的实现 Descriptor 3宏详解
最近在学于渊的《Orange’s:一个操作系统的实现》,学到原创 2020-01-17 23:49:32 · 445 阅读 · 0 评论 -
硬盘知识笔记整理
面,磁道和扇区。1.新买来的硬盘是不能直接使用的,必须对它进行分区并进行格式化的才能储存数据。分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘的各项物理参数,指定了硬盘主引导记录(即 Master Boot Record,一般简称为 MBR)和引导记录备份的存放位置。2.硬盘分区后,将会被划分为面(Side)、磁道(Track)和扇区(Sector)。(这都只是虚拟的...原创 2020-01-16 10:46:34 · 490 阅读 · 0 评论