前言
从一开始的引导程序到现在的文件系统已经有十篇了, 算是自己对操作系统的学习的一个笔记, 原本是想结合自己之前写的玩具操作系统 https://github.com/dejavudwh/FragileOS , 但是之后就转到了结合 Linux 0.11 的代码去写这个笔记.
因为现在是马上开学了, 后劲不足, 也有点焦虑, 所以这个系列写得非常乱. 没有之前那个从零写编译器的系列学习笔记写得顺畅, 收获也没有那么多. 所以之后开学后可能会打算再读一下 Linux 0.11 的源码.
索引
我是如何学习写一个操作系统 (一): 开篇
我是如何学习写一个操作系统 (二): 操作系统的启动之 Bootloader
我是如何学习写一个操作系统 (三): 操作系统的启动之保护模式
我是如何学习写一个操作系统 (四): 操作系统之系统调用
我是如何学习写一个操作系统 (五): 故事的高潮之进程和线程 1
我是如何学习写一个操作系统 (六): 进程的调度
我是如何学习写一个操作系统 (七): 进程的同步与信号量
我是如何学习写一个操作系统 (八): 内存管理和段页机制
我是如何学习写一个操作系统 (九): 文件系统
总结
一个完整的操作系统至少包含这几个部分: 进程管理, 内存管理和文件系统, 如果严格来说的话可以从引导程序开始说
引导程序
对于 X86 架构的计算机, 开机时一共做这几件事
开机时的 CS = 0xFFFF, IP = 0x0000
这时候的 CPU 处理实模式, 也就是寻址的方式是 CS:IP (实模式和保护模式属于 CPU 的工作模式, 其中比较大的区别就是寻址的方式)
寻址 0xFFFF0
检查硬件设备, 像键盘显示器之类的
将磁盘 0 磁道 0 扇区读入 0x7c00 处
会从这里读入 512 字节, 也就是传说中的引导程序, 这里放着计算机执行的第一段代码
设置 cs = 0x7c00 ip = 0x0000
这里也就是会把真正的操作系统引导到指定位置开始执行
进程
单核 CPU 在同一时刻只能运行一条指令, 所谓的多进程只是指令来回切换的假象, 但是因为速度太快, 就可以看成是同时进行的. 所以在进程切换的时就需要去组织进程的切换
而有关进程最重要的两个问题就是:
进程的调度
进程的同步
内存管理
多进程和内存管理是紧密相连的两个模块, 因为运行进程也就是从内存中取指执行, 创建进程首先要将程序和数据装入内存. 将用户原程序变成可在内存中执行的程序, 而这就涉及到了内存管理.
这里也就是为了更好的管理内存而引出了段机制和页机制
文件系统
计算机以进程为基本单位进行资源的调度和分配; 而与用户的交互, 基本单位则是文件. 在文件这一部分更多是和磁盘打交道.
操作系统很多时候就是围绕着方便用户和提高效率这两方面, 所以才会把磁盘抽象成文件, 又才会有后来的文件目录
结束
其实这一部分的总结在之前都有提到, 在这里做一个小整理而已.
来源: https://www.cnblogs.com/secoding/p/11444680.html