-
什么是操作系统
用户角度:一个控制软件,管理应用程序,为应用程序提供服务,杀死应用程序
对象管理:资源管理,管理外设、分配资源
层次架构:硬件之上,应用程序之下
操作系统位于应用软件之下,为应用软件提供服务支持支撑
Linux,Windows,Android的界面属于外壳(Shell),而不是内核(Kernel),Kernel是我们研究重点,在shelll之下。
Kernel:操作系统内部组件,包括:
1. CPU调度器
2. 物理内存管理
3. 虚拟内存管理
4. 文件系统管理
5. 中断处理与设备驱动OS Kernel的特征:
并发:计算机系统中存在多个同时运行的程序,需要OS管理调度
共享:“同时”访问,互斥共享
虚拟:利用多道程序设计艺术,让每个用户都觉得有一个计算机专门为他服务
异步:程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知。但只要运行环境相同,OS需要保证程序运行的结果也要相同 -
操作系统的启动:
Disk:存放OS
BIOS:基本I/O处理系统,加载bootloader
bootloader:加载OS(从硬盘放到内存中)
系统调用(来源于应用程序):应用程序主动向操作系统发出服务请求(同步或者异步)(等待和持续)
异常(来源于不良的应用程序):非法指令或者其他坏的处理状态(如内存出错)(同步,知道是在某条特殊指令是产生的异常)(杀死或者重新执行意想不到的应用程序指令)
中断(来源于外设):来自不同的硬件设备的计时器和网络的中断(异步,不知道什么时候会产生)(对于用户应用程序是透明的,用户无法感知到)*在计算机运行中,内核是被信任的第三方;只有内核可以执行特权指令;为了方便应用程序
- 中断,异常和系统调用:
中断处理机制:
硬件:设置中断标记(CPU初始化),将内部外部事件设置中断标记,中断事件ID
软件:保存当前处理状态(便于后续恢复),中断服务程序的处理,清楚中断标记,回复之前保存的处理状态
异常处理机制:异常编号
保存现场,异常处理(杀死产生异常的程序/重新执行异常指令),恢复现场
系统调用:例如标准c库中应用程序调用printf(),会触发系统调用write()
程序访问主要是通过高层次API接口而不是直接进行系统调用:例如Java API用于JVM,最终还是用Win 32 API用于Windows
跨越操作系统边界的开销:
- 中断,异常和系统调用:
-
计算机体系结构以及内存分层体系:
在操作系统中管理内存的不同方法:
程序重定位;分段;分页;虚拟内存;按需分页虚拟内存
其实现高度依赖于硬件:必须知道内存架构,MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求。 -
地址空间与地址生成:
地址空间定义,地址生成,地址安全检查:
-
连续内存分配:内存碎片与分区的动态分配:
内存碎片问题:空闲内存不能被利用
外部碎片:在分配单元间的未使用内存
内部碎片:在分配单元中的未使用内存分区的动态分配:
首次适配算法:
分配找到的第一个大于需要分配的大小的可用的空闲块。简单且便于实现。需求:按地值排序的空闲块列表;分配需要寻找第一个分区;若分配需要检查,看是否自由分区能合并于相邻的空闲分区。
优点:简单;容易产生更大空闲块,向着地址空间的结尾
缺点:产生外部碎片;产生不确定性
最优适配算法:
寻找最适合的可用空闲块(即大于所需内存的最小值)
特点:避免分割大空闲块,最小化外部碎片产生的尺寸,需求:按尺寸排列的空闲块列表,分配需要寻找一个合适的分区,重分配需要搜索及合并于相邻的空闲分区,如果有的话
优点:当大部分分配是小尺寸是非常有效,比较简单
缺点:外部碎片;重分配慢;易产生很多没有用的微小碎片
最差适配算法:
使用最大的可用内存块。为了避免太多微小的碎片。需求:按尺寸排列的空闲块列表,分配很快,重分配需要合并于相邻的空闲分区,若有,然后调整空闲块列表
优点:分配是中等尺寸效果最好
缺点:重分配慢;外部碎片;易于破碎的空闲块一致大块区无法被分配![在这里插入图片描述](https://img-blog.csdnimg.cn/73af236d0caa46f8ad9140c5b496027d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56a55rSL5Y2a,size_20,color_FFFFFF,t_70,g_se,x_16)
-
连续内存分配:压缩式与交换式碎片整理
压缩式碎片整理:重置程序以合并孔洞;要求所有程序是动态可重置的。问题:何时重置?开销如何?
交换式碎片整理:运行程序需要更多的内存,抢占等待的程序&回收它们的内存:被抢占的程序数据并未丢失,只是被存在了磁盘中。问题:选择哪些程序交换?
-
非连续内存分配: 分段
连续内存分配的缺点:分配给一个程序的物理内存是连续的,内存利用率低,有外碎片,内碎片的问题。
非连续分配的优点:分配给一个程序的物理内存是非连续的,更好的内存利用和管理,允许共享代码与数据,支持动态加载与动态链接。
缺点:如何建立虚拟地址和物理地址之间的转换(开销大):软件方案/硬件方案
两种硬件方案:分段,分页。分段:程序的分段地址空间;分段的寻址方案:
映射关系(逻辑地址——物理地址):
硬件的分段寻址方案:
段表:包含起始地址和长度限制 ,由操作系统建立段表
操作系统学习01
最新推荐文章于 2024-09-19 17:00:27 发布