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