这节首先介绍了突破引导扇区只有512字节的原理,然后介绍了FAT12文件系统,最后通过实验加载loader并将控制权交给loader来实现突破512字节的束缚。
突破512字节的限制
前面所用的引导扇区只有512字节。然而实际上操作系统在启动过程需要做的事情是很多的。所以需要通过某种方法突破512字节的限制。
那么如何突破512字节的限制呢?一种方法是再建立一个文件,通过引导...
分类:
其他好文 时间:
2016-06-16 14:42:22
阅读次数:
311
这节讲了中断与异常的一些基本概念。然后通过代码实现一个显示字符的中断和时钟中断。
实模式与保护模式下的中断有区别
保护模式下的中断与实模式下的中断有几点不同。
实模式下的中断向量表在保护模式下被IDT取代实模式下可以使用BIOS中断,而保护模式下不能用
这里面出现了一个新的名词IDT,接下来就介绍什么是IDT。
中断描述符表(IDT,Interrupt
Des...
分类:
其他好文 时间:
2016-06-10 11:09:30
阅读次数:
316
这节讲述IA32分段机制中的特权级。包括CPL、DPL、RPL的介绍以及代码实现不同特权级之间的转换。
IA32的分段机制有四种特权级别,从高到低分别是0、1、2、3。数字越小表示的特权级越大。
处理器引入特权级的目的是为了保护核心代码和数据。核心的代码和数据会被放在较高的层级中。从而避免低特权级(外层)的任务在不被允许的情况下访问位于高特权级(内层)的段。
在开始之前,首先...
分类:
其他好文 时间:
2016-05-30 15:29:04
阅读次数:
151
在前面的程序中,我们用了4MB的空间来存放页表,并用它映射了4GB的内存空间,而我们的物理内存不见得有这么大,这显然是太浪费了。如果我们的内存总数只有16MB的话,只是页表就占用了25%的内存空间。而实际上,如果仅仅是对等映射的话,16MB的内存只要4个页表就够了。所以,我们有必要知道内存有多大,然后根据内存大小确定多少页表是够用的。而且,一个操作系统也必须知道内存的容量,以便进行内存管理。
...
分类:
其他好文 时间:
2016-05-30 14:54:18
阅读次数:
353
这节仍然是从实现的角度来讲述分页机制。
为什么要引入分页机制。我们都知道分段机制是为了提供保护机制,那么为什么还要引入分页机制呢?
为什么引入分页机制
想象一下这样一种情况:假设我们用的计算机物理内存是4GB,但是我们的程序大小是5GB。那么这个时候我们无法将程序全部放到内存中,也就无法运行程序。分页机制引入的原因之一就是为了解决这个问题。分页机制的引入实现了虚拟存储器的机制...
分类:
其他好文 时间:
2016-05-30 14:54:08
阅读次数:
304
上面的两篇文章中,我们对可用内存进行了统计,并且合理的分配了页表的大小。这节中,我们来看看分页的好处
在此之前不知道你有没有注意过一个细节,如果你写一个程序(在Linux或Windows下均可),并改个名复制一份,然后同时调试,你会发现,从变量地址到寄存器的值,几乎全部都是一样的!而这些“一样的”地址之间完全不会混淆起来,而是各自完成着自己的职责。这就是分页机制的功劳,下面我们就来模拟一...
分类:
其他好文 时间:
2016-05-30 14:49:35
阅读次数:
265
看到这里,你应该已经很了解GDT了,如果还不了解GDT。请看这篇文章:OS:一个操作系统的实现(2)-认识保护模式,认识保护模式那篇文章的最后详细介绍了由16位寻址升级到32位寻址而引入的GDT。
LDT(Local Descriptor Table):从名字上面就可以看出来它与GDT(Gobal Descriptor Table)的区别。GDT是全局描述符表,LDT是局部描述符表(相对...
分类:
其他好文 时间:
2016-05-27 12:42:24
阅读次数:
244
写操作系统 利益于分页(19) 写操作系统 中断门(20) 写操作系统 中断实例:时钟中断(21) 写操作系统 FAT12文件系统(22) 写操作系统 加载Loader.bin(23) ...
分类:
其他好文 时间:
2016-05-26 18:25:08
阅读次数:
134
今天开始看《Orange’S:一个操作系统的实现》一书。这里是ubuntu 16.04下开发环境的搭建以及实现一个最小的操作系统(准确地说应该是一个引导扇区)。
工欲善其事,必先利其器。自制一个操作系统需要的工具如下:
汇编编译器NASM虚拟机算计Bochs软盘绝对扇区读写工具(这里直接使用强大的dd)
现在就来安装这些工具
安装NASM
通过源代码安装,官网下载...
分类:
其他好文 时间:
2016-05-18 19:41:05
阅读次数:
251
今天开始学习intel处理器的保护模式。书的第二章
这节讲述的是如何从实模式进入保护模式。用的例子是在保护模式下向屏幕上输出字符P
如何进入保护模式呢?主要步骤如下:
0. 进入保护模式的步骤
准备GDT用lgdt加载gdtr打开A20置r0的PE位位1跳转,进入保护模式
下面是书的例子:
1. 进入保护模式实例
; ===================...
分类:
其他好文 时间:
2016-05-18 19:23:04
阅读次数:
197