随笔分类 -  30天自制操作系统

摘要:计算机启动流程在我的上一个学习计划《自制操作系统》系列中,已经从完全不知道,过渡到了现在的了如指掌了,虽然有些夸张,但整个大体流程已经像过电影一样在我脑海里了,所以在看 linux 源码的这个 boot 部分时,几乎是看到的地方即使自己写不出,也知道它究竟在做什么,以及下一步可能要做什么,真的特别庆 阅读全文
posted @ 2020-05-14 20:51 闪客sun 阅读(1961) 评论(0) 推荐(0) 编辑
摘要:经过之前的一个系列学习,自己照着书本 《操作系统真相还原》学着做了一个 demo 级别的操作系统,总算对操作系统的整体和细节有了一个粗浅的了解。但写操作系统不是目的(我目前也没这能力),主要是想通过亲自动手的方式,深入了解一些操作系统底层的知识,而不是只停留在书本和概念上,以下是系列博客(也是学习笔 阅读全文
posted @ 2020-05-08 22:55 闪客sun 阅读(1741) 评论(0) 推荐(2) 编辑
摘要:一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 二、CPU 原生支持多任务切换 没错,本来多任务同分页、中断、段选择子一样,都是软硬件配合的产物,CPU 厂商也在硬件层面用 TSS 结构支持多任务,同中断的逻辑一样,也是有个 TSS 描述符存在 GDT 阅读全文
posted @ 2020-05-08 22:27 闪客sun 阅读(1367) 评论(11) 推荐(0) 编辑
摘要:没错,就是你们这群高级程序员(其实我也是)所耳熟能详但又讲不明白的 锁,只是本章不是如何用,也不是讲它是什么原理,而是在实现我们操作系统的过程中所自然而然地产生的一个需求,并且我们从零开始来实现 锁 本章需要和上一章 【自制操作系统12】熟悉而陌生的多线程 连起来看,因为正是上一章我们多线程输出字符 阅读全文
posted @ 2020-03-08 15:48 闪客sun 阅读(1379) 评论(0) 推荐(1) 编辑
摘要:一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。红色部分是我们今天要实现的 二、进程与线程简述 相信看这篇文章的人,肯定不是对基本概念感兴趣,这也不是我的主要目的。所以这里真的是简述一下 进程和线程都是 独立的程序执行流,只不过进程有自己独立的内存空间,同 阅读全文
posted @ 2020-03-04 22:14 闪客sun 阅读(1708) 评论(3) 推荐(1) 编辑
摘要:如果你有幸看到这一章,那么恭喜你,你已经完成了整个操作系统的一多半了,而且如果你前面的东西都完全掌握了,那后面无非就是顺水推舟的事情了。本章不做继续的讲解,而是将之前的知识进行回顾,并把相似的知识点做对比。同时我也将到目前为止最大的感悟 细节是魔鬼 分享给大家。 一、到目前为止的程序流程图 为了让大 阅读全文
posted @ 2020-02-26 18:22 闪客sun 阅读(1178) 评论(0) 推荐(2) 编辑
摘要:本章我们要完成初步的内存管理系统,最终简单实现一个从内核内存池中获取 3 页的内存这样一个函数实现。 一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 图中红色部分就是我们本章的代码在全局流程中的位置,下面蓝色部分是将 malloc_page 方法树状拆解 阅读全文
posted @ 2020-02-25 17:02 闪客sun 阅读(2419) 评论(1) 推荐(1) 编辑
摘要:由于中断这块的知识和代码都占较大篇幅,因此分成两章来讲,上一讲 【自制操作系统08】中断 讲述了中断的理论知识,本讲开始上代码 一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 右半部分的时序图,就是我们今天要做做的事情,其实一句话就是:初始化中断描述符表 阅读全文
posted @ 2020-02-21 19:37 闪客sun 阅读(2523) 评论(3) 推荐(2) 编辑
摘要:由于中断这块的知识和代码都占较大篇幅,因此分成两章来讲,本章不包含任何中断的代码,只讲理论部分,以及中断的大概流程。代码实现部分由下一章来讲解 "【自制操作系统09】中断的代码实现" 一、到目前为止的程序流程图 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下。 二、什么是中断 这里我 阅读全文
posted @ 2020-02-16 18:03 闪客sun 阅读(2127) 评论(0) 推荐(1) 编辑
摘要:一、到目前为止的程序流程图 本讲我们不继续写任何代码,而是专门拿出一讲来说说特权级的事,为后续的工作做一个知识储备。这段内容太难啃了,也可能我恰好对这块不太感冒,反正我是恶心了好久才啃下来。 为了让大家清楚目前的程序进度,画了到目前为止的程序流程图,如下 二、什么时候处理器会进行特权级检查 为什么要 阅读全文
posted @ 2020-02-14 19:08 闪客sun 阅读(2430) 评论(0) 推荐(0) 编辑
摘要:一、整理下到目前为止的流程图 写到这,终于才把一些苦力活都干完了,也终于到了我们的内核代码部分,也终于开始第一次用 c 语言写代码了!为了这个阶段性的胜利,以及更好地进入内核部分,下图贴一张到目前为止的流程图。(其中黄色部分是今天准备做的事情) 二、先上代码 loader.asm main.c pr 阅读全文
posted @ 2020-02-02 14:30 闪客sun 阅读(4672) 评论(6) 推荐(1) 编辑
摘要:通过前四章的努力,我们成功将控制权转交给了 loader.asm 这个程序,并且从实模式跨越到了保护模式。第四章讲保护模式的时候我说过,这是我们操作系统的第一个精彩之处。但其实这只是针对之前我们进行的只是无意义的输出,以及硬盘的加载等工作。但到了这一章,之前一步步的努力进入到了保护模式,也只能说是做 阅读全文
posted @ 2020-01-26 20:57 闪客sun 阅读(3188) 评论(6) 推荐(3) 编辑
摘要:通过前三章的努力,我们成功将控制权转交给了 loader.asm 这个程序。具体说就是 bios 通过 加载并跳转到 0x7c00 (IMB大叔们定的) 把控制权转交给了我们操作系统的第一个汇编程序 mbr.asm,然后 mbr.asm 里做的事就是通过 加载 loader 程序并跳转到 0x900 阅读全文
posted @ 2020-01-25 21:45 闪客sun 阅读(4571) 评论(8) 推荐(3) 编辑
摘要:通过 "【自制操作系统01】硬核讲解计算机的启动过程" 和 "【自制操作系统02】环境准备与启动区实现" 的讲解,我们已经实现了一个最简单的操作系统(仅仅一条机器指令)。 今天我们要再往前进一步,逐渐将这个最简单的操作系统完善起来。之前最简单的操作系统是写在启动区的 512 字节里,这么小的空间以后 阅读全文
posted @ 2020-01-25 17:38 闪客sun 阅读(5786) 评论(6) 推荐(1) 编辑
摘要:一、计算机启动过程回顾 要想写一个启动区代码,就需要了解开机的启动过程,因为开机过程中一些硬件的规定决定了这段代码应该怎么写,不明白没关系,且听我慢慢道来。 具体过程在我上一篇文章 "【自制操作系统01】硬核讲解计算机的启动过程" 讲述得一清二楚,这里我们简单回顾一下。了解开机过程,并不是一个简单的 阅读全文
posted @ 2020-01-21 11:18 闪客sun 阅读(4818) 评论(10) 推荐(3) 编辑
摘要:本讲只为讲明白下面一个问题: 我们按下开机键后究竟发生了什么? 好的,这似乎是好多人都特别想搞明白的一个问题,有时候非常纳闷,为什么一个看似这么简单的问题,就是搜不到一个直面问题的答案呢? 好问题,我也不知道为什么会这样,但我猜是因为: 其一 ,似懂非懂的人太多,他们其实也不知道究竟发生了什么,所以 阅读全文
posted @ 2020-01-20 17:41 闪客sun 阅读(7369) 评论(10) 推荐(10) 编辑
摘要:内容待续 阅读全文
posted @ 2019-10-11 23:17 闪客sun 阅读(652) 评论(0) 推荐(1) 编辑
摘要:输出一个 16 行 8 列的点阵字符 GDT 初始化 GDTR寄存器(48位):低16位表示段上限(0xffff - 64KB),高32位表示GDT的开始地址(0x270000) 段信息(64位):20位段大小 + 32位段起始地址 + 12位段属性 段属性(12位):GD000000xxxxxxx 阅读全文
posted @ 2019-10-07 21:47 闪客sun 阅读(714) 评论(0) 推荐(0) 编辑
摘要:BIOS 中断大全 阅读全文
posted @ 2019-10-07 16:07 闪客sun 阅读(726) 评论(0) 推荐(0) 编辑
摘要:用 C 语言直接写入内存 原来依靠汇编 现在直接 C 栈的汇编 文件生成过程 程序执行流程图 阅读全文
posted @ 2019-10-06 11:04 闪客sun 阅读(836) 评论(0) 推荐(0) 编辑