摘要:
本章我们要完成初步的内存管理系统,最终简单实现一个从内核内存池中获取 3 页的内存这样一个函数实现。 一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 图中红色部分就是我们本章的代码在全局流程中的位置,下面蓝色部分是将 malloc_page 方法树状拆解 阅读全文
摘要:
由于中断这块的知识和代码都占较大篇幅,因此分成两章来讲,上一讲 【自制操作系统08】中断 讲述了中断的理论知识,本讲开始上代码 一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 右半部分的时序图,就是我们今天要做做的事情,其实一句话就是:初始化中断描述符表 阅读全文
摘要:
由于中断这块的知识和代码都占较大篇幅,因此分成两章来讲,本章不包含任何中断的代码,只讲理论部分,以及中断的大概流程。代码实现部分由下一章来讲解 "【自制操作系统09】中断的代码实现" 一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 二、什么是中断 这里我 阅读全文
摘要:
一、到目前为止的程序流程图 本讲我们不继续写任何代码,而是专门拿出一讲来说说特权级的事,为后续的工作做一个知识储备。这段内容太难啃了,也可能我恰好对这块不太感冒,反正我是恶心了好久才啃下来。 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下 二、什么时候处理器会进行特权级检查 为什么要 阅读全文
摘要:
一、整理下到目前为止的流程图 写到这,终于才把一些苦力活都干完了,也终于到了我们的内核代码部分,也终于开始第一次用 c 语言写代码了!为了这个阶段性的胜利,以及更好地进入内核部分,下图贴一张到目前为止的流程图。(其中黄色部分是今天准备做的事情) 二、先上代码 loader.asm main.c pr 阅读全文
摘要:
通过前四章的努力,我们成功将控制权转交给了 loader.asm 这个程序,并且从实模式跨越到了保护模式。第四章讲保护模式的时候我说过,这是我们操作系统的第一个精彩之处。但其实这只是针对之前我们进行的只是无意义的输出,以及硬盘的加载等工作。但到了这一章,之前一步步的努力进入到了保护模式,也只能说是做 阅读全文
摘要:
通过前三章的努力,我们成功将控制权转交给了 loader.asm 这个程序。具体说就是 bios 通过 加载并跳转到 0x7c00 (IMB大叔们定的) 把控制权转交给了我们操作系统的第一个汇编程序 mbr.asm,然后 mbr.asm 里做的事就是通过 加载 loader 程序并跳转到 0x900 阅读全文
摘要:
通过 "【自制操作系统01】硬核讲解计算机的启动过程" 和 "【自制操作系统02】环境准备与启动区实现" 的讲解,我们已经实现了一个最简单的操作系统(仅仅一条机器指令)。 今天我们要再往前进一步,逐渐将这个最简单的操作系统完善起来。之前最简单的操作系统是写在启动区的 512 字节里,这么小的空间以后 阅读全文
摘要:
一、计算机启动过程回顾 要想写一个启动区代码,就需要了解开机的启动过程,因为开机过程中一些硬件的规定决定了这段代码应该怎么写,不明白没关系,且听我慢慢道来。 具体过程在我上一篇文章 "【自制操作系统01】硬核讲解计算机的启动过程" 讲述得一清二楚,这里我们简单回顾一下。了解开机过程,并不是一个简单的 阅读全文
摘要:
本讲只为讲明白下面一个问题: 我们按下开机键后究竟发生了什么? 好的,这似乎是好多人都特别想搞明白的一个问题,有时候非常纳闷,为什么一个看似这么简单的问题,就是搜不到一个直面问题的答案呢? 好问题,我也不知道为什么会这样,但我猜是因为: 其一 ,似懂非懂的人太多,他们其实也不知道究竟发生了什么,所以 阅读全文