这里写目录标题
知识体系来源于清华大学操作系统的公开课,后续还会补充进一些其他知识
操作系统的结构(乱)
微内核架构设计:
内核只放最基本功能:LPC HAL (中断处理,消息传递)
文件系统(file systems)、内存管理(memory mgmt)、网络协议栈(network stack)、设备驱动(device drivers)、I\O系统(I\O system)都放在外围以进程(程序)的形式存在
程序与程序通过内核的消息传递机制进行通信,很灵活
但是有代价:需要进行多次拷贝
VMM虚拟机监控器:
跑在传统的OS之下,虚拟出传统计算机,包括CPU和硬件等
操作系统的启动
从加电到程序运行的过程:
先导知识:
- 计算机主要由三部分:CPU、内存、硬盘组成。
开机时内存与硬盘状态:
- bootloader:将OS从硬盘加载到内存中去,使得CPU可以执行操作系统
- BIOS:基本I\O处理系统:负责找到开机时执行的特定地址CS:IP=0xf000:fff0(X86系统)
CS:IP(段寄存器:指令寄存器)这俩合在一起可以表示一个具体的内存地址
2、从加电到操作系统启动
中断异常系统调用
先导知识
操作系统如何与设备和程序交互
- 定义
- 系统调用:应用程序主动向操作系统发出服务请求。
- 异常:应用程序在执行过程中出现意想不到的问题,不得不由操作系统来进行解决。
- 中断: 外设向操作系统发出请求。
- 三者区别
中断和异常和系统调用的处理过程
1、中断:
- 产生中断
- 查找中断表,找到对应指令地址。
- 执行
-
存在问题:中断优先级很高,操作系统需要临时终止原有执行转而执行中断,执行中断后如何恢复原有执行呢?
- 外设:
- 设置中断标记
- 产生中断号发送给操作系统
- OS:
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前处理状态
- 外设:
2、异常
- 异常处理过程
- OS:
- 保存现场
- 根据异常编号进行处理
- 恢复现场
- OS:
3、系统调用
- 应用程序发出系统调用
- OS从用户态转化为内核态
- CPU控制权由应用移交给OS
系统调用与函数调用的区别
- 函数调用在一个栈空间内完成
- 系统调用应用程序与OS各自存在堆栈,需要完成一定堆栈转换
跨越操作系统边界的开销
- 建立中断异常系统调用
- 堆栈转换开销
- 用户态内核态转换中的内存拷贝开销
- 验证程序调用OSAPI中参数开销
- 页机制的刷新
内存
操作系统如何管理物理内存
先导知识
1、计算机体系结构
计算机体系结构分为:
- CPU:完成对程序的执行和控制
- 内存:放置程序代码与数据(包括CPU缓存、物理内存与虚拟内存)
- 外设:I/O
2、内存的层次结构
操作系统在管理物理内存中都做了什么
- 抽象:将物理地址空间抽象为逻辑地址空间(连续的)面向应用程序
- 保护:设立机制保护每个进程的地址空间独立
- 共享:设置进程间可以进行数据传递的机制
- 虚拟化: 虚拟化硬盘空间,把最需要的程序放在内存中,其余放在硬盘中等待被读取,给程序一种内存空间很大的假象。
操作系统中管理内存的不同办法
- 程序重定位
- 分段
- 分页
- 虚拟内存
- 按需分页虚拟内存
地址空间和地址生成
地址空间分类
物理地址空间:硬件支持的地址空间
逻辑地址空间:一个运行程序所拥有的内存范围
- 逻辑地址生成
几乎不需要操作系统做什么,通过应用程序、编译器、link、loader就可以完成。放在内存里的是逻辑地址。 - 从逻辑地址找到物理地址
当CPU需要执行某条命令时,CPU中的运算器需要得到在逻辑地址的内存中的内容。MMU寻找逻辑地址与物理地址之间的映射(MMU中没有就去内存中的MAP找),如果找到了CPU的控制器会向内存发出命令请求该逻辑地址映射到的物理地址中的内容,内存通过总线发送在物理地址的内容。 - OS做的事情:设置逻辑地址与物理地址的映射。
连续内存分配
内存碎片问题
当我们给一个应用程序分配空间时,会出现一些无法进行利用的空间,称为碎片。
内存碎片分类
- 外部碎片:分配单元之间的无法使用的内存
- 内碎片:在分配单元之内的无法进行使用的内存(已经把空间分给了程序,但内部出现了无法使用的空间。)
OS何时提供连续空间的分配
- OS把程序从硬盘加载到内存去时需要分配连续空间
- 程序运行时需要加载数据,此时需要分配连续空间
因此OS需要管理空闲的与非空闲的空间
- 动态分配算法(简单版):
1、first fit(FF):找到第一个合适的空闲块进行分配
空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
优势:简单、易于产生大空闲块
劣势:外部碎片、不确定性
2、best fit(BF):找到所有空闲块中最适合的空闲块(空闲块最好按大小排列)
好处:避免把大空闲块拆散,适用于大部分分配都是小尺寸的、最小化外部碎片产生的尺寸
劣势:外部碎片、容易产生很多难再利用的微小碎片
3、worst fit(最坏适配算法)
好处:可以把大空闲块拆分,避免产生很多小碎片(假如分配是中大尺寸的话比较合适)
劣势:拆掉了大块后以后再有大块不好分配 - 有无办法使碎片尽量少,并有大块连续的内存块为后续内存释放做准备。
1、压缩式碎片整理
2、交换式碎片整理:把暂时不需要的程序放到硬盘上去(后续会有详细说明)