一个操作系统的实现(12)-汇编和C相互调用

这节介绍了32位汇编与C相互调用的过程。里面有64位linux编译链接32位源程序的解决办法。  首先实现linux下汇编输出`Hello, world!’ linux下汇编源程序的编译连接 10 [section .data] ; 数据在此 11 12 strHello db "Hello, world!", 0Ah 13 STRLEN ...
阅读(284) 评论(0)

一个操作系统的实现(11)-让操作系统进入保护模式

这节首先介绍了突破引导扇区只有512字节的原理,然后介绍了FAT12文件系统,最后通过实验加载loader并将控制权交给loader来实现突破512字节的束缚。 突破512字节的限制 前面所用的引导扇区只有512字节。然而实际上操作系统在启动过程需要做的事情是很多的。所以需要通过某种方法突破512字节的限制。 那么如何突破512字节的限制呢?一种方法是再建立一个文件,通过引导...
阅读(7009) 评论(0)

一个操作系统的实现(10)-中断和异常的补充说明

这节对中断和异常机制做一些额外的补充说明。还介绍了保护模式下的I/O操作。最后总结了一下前面学习的保护模式。 特权级变换规则 上节的代码始终运行在ring0层,没有涉及特权级的变换。这里需要说明的是,中断和陷阱过程的特权级变换规则与调用门涉及的特权级变换规则是完全相同的。 中断或异常发生时的堆栈变化 无特权级变换的中断发生时的堆栈变化和有特权级变换的中断发生时的堆栈变化...
阅读(481) 评论(0)

一个操作系统的实现(9)-中断和异常

这节讲了中断与异常的一些基本概念。然后通过代码实现一个显示字符的中断和时钟中断。 实模式与保护模式下的中断有区别 保护模式下的中断与实模式下的中断有几点不同。 实模式下的中断向量表在保护模式下被IDT取代实模式下可以使用BIOS中断,而保护模式下不能用 这里面出现了一个新的名词IDT,接下来就介绍什么是IDT。 中断描述符表(IDT,Interrupt Des...
阅读(7833) 评论(0)

一个操作系统的实现(8)-进一步体会分页机制

上面的两篇文章中,我们对可用内存进行了统计,并且合理的分配了页表的大小。这节中,我们来看看分页的好处 在此之前不知道你有没有注意过一个细节,如果你写一个程序(在Linux或Windows下均可),并改个名复制一份,然后同时调试,你会发现,从变量地址到寄存器的值,几乎全部都是一样的!而这些“一样的”地址之间完全不会混淆起来,而是各自完成着自己的职责。这就是分页机制的功劳,下面我们就来模拟一...
阅读(7486) 评论(0)

一个操作系统的实现(7)-获取机器内存并进行合理分页

在前面的程序中,我们用了4MB的空间来存放页表,并用它映射了4GB的内存空间,而我们的物理内存不见得有这么大,这显然是太浪费了。如果我们的内存总数只有16MB的话,只是页表就占用了25%的内存空间。而实际上,如果仅仅是对等映射的话,16MB的内存只要4个页表就够了。所以,我们有必要知道内存有多大,然后根据内存大小确定多少页表是够用的。而且,一个操作系统也必须知道内存的容量,以便进行内存管理。 ...
阅读(7440) 评论(0)

一个操作系统的实现(6)-初识分页机制

这节仍然是从实现的角度来讲述分页机制。 为什么要引入分页机制。我们都知道分段机制是为了提供保护机制,那么为什么还要引入分页机制呢? 为什么引入分页机制 想象一下这样一种情况:假设我们用的计算机物理内存是4GB,但是我们的程序大小是5GB。那么这个时候我们无法将程序全部放到内存中,也就无法运行程序。分页机制引入的原因之一就是为了解决这个问题。分页机制的引入实现了虚拟存储器的机制...
阅读(8042) 评论(0)

一个操作系统的实现(5)-关于特权级

这节讲述IA32分段机制中的特权级。包括CPL、DPL、RPL的介绍以及代码实现不同特权级之间的转换。 IA32的分段机制有四种特权级别,从高到低分别是0、1、2、3。数字越小表示的特权级越大。 处理器引入特权级的目的是为了保护核心代码和数据。核心的代码和数据会被放在较高的层级中。从而避免低特权级(外层)的任务在不被允许的情况下访问位于高特权级(内层)的段。 在开始之前,首先...
阅读(8424) 评论(0)

一个操作系统的实现(4)-认识LDT

看到这里,你应该已经很了解GDT了,如果还不了解GDT。请看这篇文章:OS:一个操作系统的实现(2)-认识保护模式,认识保护模式那篇文章的最后详细介绍了由16位寻址升级到32位寻址而引入的GDT。 LDT(Local Descriptor Table):从名字上面就可以看出来它与GDT(Gobal Descriptor Table)的区别。GDT是全局描述符表,LDT是局部描述符表(相对...
阅读(10592) 评论(0)

一个操作系统的实现(3)-保护模式进阶

上节内容是从实模式进入到保护模式,但只是进入保护模式打印了一个字母P。但是没有体现出保护模式的优势,也没有从保护模式中返回。这节就是要体验保护模式下读写大地址内存的能力和从保护模式返回到实模式。 这节要做的内容如下:首先在屏幕的第11行输出In Protect Mode now. ^-^。然后在屏幕第12行输出内存中起始地址为5MB的连续的8个字节。然后向这个以5MB开始的内存中写入AB...
阅读(8600) 评论(2)
12条 共2页1 2 下一页 尾页
    个人资料
    • 访问:89431次
    • 积分:1053
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档
    最新评论