第一章:操作系统概论
Part1:基本概念
1、操作系统的发展
-
无操作系统:纯手工操作
-
批处理系统:
- 单道批处理系统:内存中仅保留一道作业
- 多道批处理系统:在单道批处理系统的基础上引入多道程序设计技术1
-
分时操作系统
CPU采用时分复用,将时间片轮流分配给各个作业,实际上是一种虚拟技术,使得各个用户共享一台主机
2、程序运行环境
2.1 CPU运行模式2
- 用户态:CPU运行应用程序,调试程序/设置断点
- 内核态:CPU执行操作系统内核程序,可执行特权指令
2.2 程序的编译、链接、装入
-
编译
编译器将源代码编译为CPU可执行代码,通常为几个程序段,这些程序段被称为目标模块(object module)这些程序段中的地址均为以本段首地址为0,进行基址寻址(即相对于该模块而言),这些程序段所在的空间为作业的逻辑空间
-
链接
链接器将目标模块和一些库函数链接起来,形成装入模块(load module),此时形成程序完整的逻辑地址。按照链接的时间,可将连接划分为下面两类
- 静态链接:程序运行前,就已经链接完成
- 动态链接:
- 装入时:装入内存时链接
- 运行时:运行程序时链接
-
装入
装入器将装入模块装入物理内存,此时需要将逻辑地址装换为物理地址,该过程称为地址重定位。装入的分类
- 绝对装入:逻辑地址即为物理地址(单道批处理环境)
- 地址重定位
- 静态:程序运行前重定位完成
- 动态:程序运行时重定位完成
2.3内存映像
程序的内存映像即为内存中装载程序的区域,一般分为三个部分
- Code Segement:防止程序指令
- Static Memory:存放永久数据
- Dynamic Memory:存放临时数据
3、操作系统体系结构
3.1 操作系统分层与模块化
-
分层
-
模块化
将操作系统按照功能划分为多个模块,每个模块实现一个特定功能,比如说进程管理模块,存储器管理模块等。并且仔细规定模块之间的接口,使得模块之间能通过接口实现交互
3.2 内核与外核
-
内核
对硬件做抽象,把硬件资源和设备驱动程序隐藏在硬件抽象层之下
- 微内核:只把最基本的功能保留到内核中——易维护、性能低(用户态与核心态之间频繁切换)
- 宏内核:将主要的模块都作为系统的内核——高性能,难维护
-
外核
不提供任何的硬件抽象,直接让应用程序请求一块特定的物理空间(比如说磁盘空间)
3.3 虚拟机
通过软件模拟一台具有完整硬件的计算机
Part2:操作系统引导
1、2个重要寄存器
- CS寄存器:Code Segement Register
- IP寄存器: Instrcution Pointer Register
Intel 8086 CPU将两者拼在一起(CS:IP)即为下一条指令的地址,非intel的商家则用PC来指代下一条指令地址
2、操作系统引导
2.1 初始化CPU
Intel 8086 CPU通电稳定之后会初始化内部寄存器,其中会重置CS和IP寄存器为
- CS:0xFFFF
- IP: 0x0000
此时下一条指令地址为[CS<<4:IP]=0xFFF0
于是CPU便去访问0xFFF0处的地址,但是该地址实际上并不是内存地址,它会被地址控制器(南桥/北桥)映射到BIOS ROM中,而在该ROM中的这个地址处存放着一条跳转指令
2.2 初始化程序
存放于0xFFF0跳转指令会使得下一条地址跳转到BIOS ROM中的某个地址处,这个地址则为一段初始化程序,CPU便把这段程序复制到内存中执行,这段程序的作用为
- 初始化硬件(内存、显卡)
- 从硬盘中找到引导程序(标志:55AA),找到之后复制到内存中(0x07C00~0x07dff)
- 然后CPU跳转到0x07C00出开始执行引导程序
2.3 引导程序执行
引导程序将操作系统读入内存,并且跳转到操作系统地址处开始执行操作系统
2.4 开始执行操作系统
Part3:操作系统功能
1、管理CPU
在多道程序环境中,CPU的分配以进程为基本单位,所以管理CPU即为管理进程
2、管理内存
3、管理文件系统
计算机中的信息均为文件的形式存在,操作系统管理文件的部分称为文件系统
4、管理IO
完成用户的IO请求
Part end:参考文献和一些说明
多道程序设计技术:将多个程序同时调入内存,当一道程序因为某种原因暂停执行时,CPU转而执行下一道程序 ↩︎
区分用户态和内核态的原因:在冯诺依曼计算机结构中最重要的就是这5个部件:输入/输出设备,运算器,存储器,控制器。其中输入/输出设别只有接受指令之后才能动作;控制器配合一部分寄存器,寄存器数量不多而且非常容易被修改;运算器是无状态的;由此可见,整个计算机完全有存储器和几个关键寄存器所控制。如果有一个程序可以完成控制物理内存,那么他就能任意改变计算机的状态,这显然是不被允许的,为了限制应用程序的行为,必须在操作系统和应用程序执行时划分2个不同的状态。详见知乎这个问题下的回答:https://www.zhihu.com/question/306127044/answer/555327651灵剑大佬的回答 ↩︎