前言

从一开始的引导程序到现在的文件系统已经有十篇了,算是自己对操作系统的学习的一个笔记,原本是想结合自己之前写的玩具操作系统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

我是如何学习写一个操作系统(完结):总结和系列索引相关推荐

  1. 我是如何学习写一个操作系统(五):故事的高潮之进程和线程1

    前言 为什么取这个标题呢?一是进程和线程是作为操作系统里最重要最核心的一部分.二是确实吃冰棍拉冰棍,没话,强行凑标题和之前的标题差不多字数. 前一章写了系统调用的过程,算是一个小插曲,这个部分不管在哪 ...

  2. 我是如何学习写一个操作系统(四):操作系统之系统调用

    前言 最近有点事情,马上要开学了,所以学习的脚步就慢下来了.这一篇主要是来说操作系统的系统调用的,像C语言的printf深入到内部就是一个有关屏幕输出的系统调用 什么是系统调用 之前提过操作系统是对硬 ...

  3. 我是如何学习写一个操作系统(二):操作系统的启动之Bootloader

    前言 今天本来的任务看书和把之前写的FragileOS整理一下,但是到现在还在摸鱼,书也只看一点.后来整理了一下写这个系列的思路,原本的目的是对操作系统原理性的学习和对之前写的一个玩具型操作系统的回顾 ...

  4. 我是如何学习写一个操作系统(一):开篇

    前言 有人说程序员的三大浪漫分别是编译原理.操作系统和计算机网络 在之前完成了一两个小软件和网站后遇见了编译原理,也不知道为什么就傻傻的学,还写了一个从零写编译器的系列学习笔记,不过都是小打小闹,只能 ...

  5. 我是如何学习写一个操作系统(九):文件系统

    前言 这个应该是这个系列的尾声了,一个完整的操作系统可能最主要的也就是分成这几大模块:进程管理.内存管理和文件系统.计算机以进程为基本单位进行资源的调度和分配:而与用户的交互,基本单位则是文件 生磁盘 ...

  6. 我是如何学习写一个操作系统(八):内存管理和段页机制

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

  7. 我是如何学习写一个操作系统(七):进程的同步与信号量

    前言 在多进程的运行环境下,进程是并发执行的,不同进程间存在着不同的相互制约关系.为了协调进程之间的相互制约关系,达到资源共享和进程协作,避免进程之间的冲突,引入了进程同步的概念. 临界资源 多个进程 ...

  8. 我是如何学习写一个操作系统(三):操作系统的启动之保护模式

    前言 上一篇其实已经说完了boot的大致工作,但是Linux在最后进入操作系统之前还有一些操作,比如进入保护模式.在我自己的FragileOS里进入保护模式是在引导程序结束后完成的. 实模式到保护模式 ...

  9. 我是如何学习写一个操作系统(六):进程的调度

    前言 既然引进了多进程,其实也就是在进程之间来回切换,那么就会有进程之间的调度问题.实则是在可运行进程之间分配有限的处理器时间资源的内核子系统. 几个简单的CPU调度算法 First Come, Fi ...

最新文章

  1. 小A与任务 (贪心 优先队列)
  2. Template Method(模板方法)模式
  3. JavaScript Date 对象
  4. android如何添加gif,Android加载Gif和ImageView的通用解决方案:android-gif-drawable(1)...
  5. DeepFakes天敌来了!伯克利紧急研发“火眼金睛”防伪克星
  6. knn算法实现电影分类
  7. outlook邮件中图片无显示解决方法
  8. 无需再忙了:Lambda-S3缩略图,由SLAppForge Sigma钉牢!
  9. MarkDown常用语法及word转MarkDown
  10. heartbeat 非联网安装(通过配置本地yum文件库安装heartbeat)
  11. 瞬态电压抑制二极管选型指导,一场走心的科普之旅
  12. 失业一年,学做跨境电商赚了50万,才知道上班是真的耽误赚钱 !
  13. windows防火墙设置_详解关闭Windows防火墙操作技巧,让你彻底断开与外网的连接...
  14. 年度盘点丨2017十大最佳科技创新产品!
  15. 悼念512汶川大地震遇难同胞——一定要记住我爱你
  16. 电商物流系统技术架构进化史
  17. pytorch学习(五)---torch.nn模块
  18. C语言 1999年标准
  19. Matlab/simulink 车辆七自由度平顺性仿真
  20. Mysql加密身份证号

热门文章

  1. 思考问题的“六顶帽子”
  2. CloudCC CRM探讨如何建立完善的服务体系
  3. emacs vim IDE
  4. linux的文件io操作(转)
  5. 测试工具iometer, iozone, bonnie++
  6. SQLDump***.txt
  7. 编程语言“铁三角”,JavaScript 力压 Java和Python
  8. Linux游戏0 A.D.操作说明(持续更新中)
  9. 第1章-什么是深度学习(笔记)
  10. linux下面navicat调整字体