前言

从一开始的引导程序到现在的文件系统已经有十篇了,算是自己对操作系统的学习的一个笔记,原本是想结合自己之前写的玩具操作系统FragileOS
<https://github.com/dejavudwh/FragileOS>,但是之后就转到了结合Linux 0.11的代码去写这个笔记。

因为现在是马上开学了,后劲不足,也有点焦虑,所以这个系列写得非常乱。没有之前那个从零写编译器的系列学习笔记
<https://www.cnblogs.com/secoding/p/11393720.html>
写得顺畅,收获也没有那么多。所以之后开学后可能会打算再读一下Linux 0.11的源码。

索引

我是如何学习写一个操作系统(一):开篇 <https://www.cnblogs.com/secoding/p/11402948.html>

我是如何学习写一个操作系统(二):操作系统的启动之Bootloader
<https://www.cnblogs.com/secoding/p/11405968.html>

我是如何学习写一个操作系统(三):操作系统的启动之保护模式
<https://www.cnblogs.com/secoding/p/11407486.html>

我是如何学习写一个操作系统(四):操作系统之系统调用 <https://www.cnblogs.com/secoding/p/11414172.html>

我是如何学习写一个操作系统(五):故事的高潮之进程和线程1
<https://www.cnblogs.com/secoding/p/11417547.html>

我是如何学习写一个操作系统(六):进程的调度 <https://www.cnblogs.com/secoding/p/11422525.html>

我是如何学习写一个操作系统(七):进程的同步与信号量 <https://www.cnblogs.com/secoding/p/11428751.html>

我是如何学习写一个操作系统(八):内存管理和段页机制 <https://www.cnblogs.com/secoding/p/11437268.html>

我是如何学习写一个操作系统(九):文件系统 <https://www.cnblogs.com/secoding/p/11442659.html>

总结

一个完整的操作系统至少包含这几个部分:进程管理、内存管理和文件系统,如果严格来说的话可以从引导程序开始说

引导程序

对于X86架构的计算机,开机时一共做这几件事

* 开机时的CS = 0xFFFF, IP = 0x0000
这时候的CPU处理实模式,也就是寻址的方式是CS:IP (实模式和保护模式属于CPU的工作模式,其中比较大的区别就是寻址的方式)

*
寻址0xFFFF0

*
检查硬件设备,像键盘显示器之类的

*
将磁盘0磁道0扇区读入0x7c00处

会从这里读入512字节,也就是传说中的引导程序,这里放着计算机执行的第一段代码

* 设置cs = 0x7c00 ip = 0x0000
这里也就是会把真正的操作系统引导到指定位置开始执行

进程

单核CPU在同一时刻只能运行一条指令,所谓的多进程只是指令来回切换的假象,但是因为速度太快,就可以看成是同时进行的。所以在进程切换的时就需要去组织进程的切换

而有关进程最重要的两个问题就是:

*
进程的调度

*
进程的同步

内存管理


多进程和内存管理是紧密相连的两个模块,因为运行进程也就是从内存中取指执行,创建进程首先要将程序和数据装入内存。将用户原程序变成可在内存中执行的程序,而这就涉及到了内存管理。

这里也就是为了更好的管理内存而引出了段机制和页机制

文件系统

计算机以进程为基本单位进行资源的调度和分配;而与用户的交互,基本单位则是文件。在文件这一部分更多是和磁盘打交道。

操作系统很多时候就是围绕着方便用户和提高效率这两方面,所以才会把磁盘抽象成文件,又才会有后来的文件目录

结束

其实这一部分的总结在之前都有提到,在这里做一个小整理而已。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信