操作系统导论
希望跟着李老师来了解一下,嵌入式系统和微机原理没有了解的地方,来见证计computer是如何从计算机变成电脑的。可能需要看一下<计算机组成原理>,但是因为太下饭了,就看一下这个吧,掌握概念就好。Learning OS concepts by coding them!
0x01 什么是操作系统
计算机是用来帮助人们解决一些实际问题的,它需要通过总线来连接输入输出设备、存储、CPU和内存等设备。其中最重要的CPU(Central Processing Unit,中央处理器)主要是解释计算机中的指令并处理数据的单元。
比如计算机在终端输入hello的过程
- cpu发出指令,取内存
- 内存取对应地址的内容
- 通过控制器、总线来传递到图形控制器
操作系统(operation system)将计算机硬件设备管理,在这个基础上实现应用软件。基本的软件包括CPU、内存、终端、磁盘、文件;在之外的高级操作系统中添加不同计算机之前的使用。
我们需要学习
- 从应用软件出发看操作系统,只能是仅仅停留在操作系统的接口
- 从应用软件出发进入到操作系统,理解其中命令的过程,理解量才能知道背后的功能并开发
- 从硬件出发设计并实现操作系统
希望了解操作系统是如何运转的,八个实验
添加图片注释,不超过 140 字(可选)
0x02 bootsect.s
2.1 计算机发展的历史
- 从白纸到图灵机,1936年,通过模拟人对计算过程得到计算模型
- 从图灵机到通用图灵机的过程
添加图片注释,不超过 140 字(可选)
- 从通用图灵机到计算机(1946年,冯·洛依曼)
添加图片注释,不超过 140 字(可选)
2.2 计算机开机的过程
- 计算机中开始电源的最初的IP是由硬件设计者决定,比如x86的开机CS=0xffff,ip=0x0000,以及寻址(Bios映射区),检查RAM、键盘、显示器和软硬磁盘,汇编中的每一条指令中有着操作
添加图片注释,不超过 140 字(可选)
- BIOS的引导扇区代码(bootsect.s)
添加图片注释,不超过 140 字(可选)
0x03 setup.s and head.s
添加图片注释,不超过 140 字(可选)
在上述bootsec.s运行完之后,可以是导入setup.s,它主要做了两件事情
- 添加操作系统代码到内存中,并为了保证操作系统的完整性,移动到0地址,第一个代码是head.s
- 读取硬件信息并初始化,mem_init
运行setup.s的过程中会短暂的定义GDT和IDT表格,之后系统会进行模式的转换,将16位模式来变为32位模式,提高对内存使用的权限
16位模式的寻址解析电路:CS<<4+ip (称为实模式)
32位模式的寻址解析电路:根据CS查表+IP(称位保护模式)
添加图片注释,不超过 140 字(可选)
在运行完head.s之后便可以孩子选哪个main.c,这里是根据栈来进行处理的,也就是内存中函数的记录和返回
0x04 Interface
接口就是系统提供的一些可以调用的函数,因为接口是函数,函数是通过调用实现的,因此也称为系统调用
在具体到操作系统中,系统的接口需要一些统一的规范,最基本的是POSIX中的接口列表
添加图片注释,不超过 140 字(可选)