操作系统定义
操作系统组成:shellGUI Kernel(内部)
并发,共享,虚拟,异步
1.OS启动,中断,设备管理
2.物理内存管理
3.虚拟内存管理
4.内核线程管理
5.用户进程管理
6.进程调度
7.同步互斥
8.文件系统
为什么需要中断,异常和系统调用
在计算机运行中,内核是被信任的第三方;只有内核可以执行特权指令,方便应用程序;
系统调用:应用程序主动向操作系统发出的服务请求
异常:非法指令或者其他原因导致指令执行失败
中断:来自硬件设备的处理请求
中断嵌套
不同硬件中断源可能硬件中断处理时出现
硬件中断服务例程中需要临时禁止中断请求
中断请求会保持到CPU做出响应
异常服务例程可被打断
异常服务例程执行时可能出现缺页
系统调用:INTIRET,系统调用时,堆栈切换和特权级的转换
函数调用:CALLRET,常规调用时没有堆栈切换
段机制
中断处理 中断服务例程ISR(Interrupt Service Routine) GDT全局描述符表
http://blog.csdn.net/zat111/article/details/36420903
内存最小访问单位一个字节8位 MMU把逻辑地址空间转成物理地址空间
内存管理:抽象(逻辑地址空间),保护(独立地址空间),共享(访问相同地址)
虚拟化(更大的地址空间)
管理方式:重定位(relocation)分段(segmentation)分页(paging)虚拟存储
地址空间和地址生成
地址空间:起始地址0到MAX
编译时,假设起始地址已知,如果起始地址改变,必须重新编译
加载时,如编译时起始位置未知,编译时需产生可重定位的代码
执行时,执行时代码可移动,需地址转换硬件支持
ALU:需要地址的内存内容
MMU:进行逻辑地址和物理地址的转换
CPU控制逻辑:给总线发送物理地址请求
连续内存分配
内存碎片:
动态分配:当程序被加载执行时,分配一个进程指定大小可变的分区,分区的地址是连续的;分配策略:最先,最佳,最差
最先:空闲分区列表按地址顺序排序,分配过程时,搜索第一个合适的分区,释放分区时,检查是否可以与临近的空闲分区合并,简单,在高地址空间有大块的空闲分区
最差:空闲分区列表按由大到小排序,分配时,选最大的分区,释放时,检查是否可与邻居空闲分区合并,进行可能的合并,并调整空闲分区列表顺序,中等大学的分配较多时,效果最好,避免出现太多的小碎片,释放分区较慢,外部碎片,容易破坏大的空闲分区,因此后续难以分配大的分区
非连续分配:提高利用效率和管理灵活性
段地址空间:主代码段,子模块代码段,公用库代码段,堆栈段,堆数据,初始化数据段,符号表
段表示访问方式和存储数据等属性相同的一段地址空间
页帧frame把物理地址空间划分为大小相同的基本分配单位
页面,页面到页帧
物理:内存物理地址的表示二元组(帧号,帧内偏移)
逻辑:页内偏移=帧内偏移通常:页号大小!=帧号大小 二元组(页号,页内偏移)
页到帧的映射,逻辑地址的页号连续,物理地址帧号不连续不是所有的页都有对应的帧
页表保存了逻辑地址—物理地址之间的映射关系
页式存储管理:访问一个内存单元需要2次内存访问,第一次访问获取页表项,第二次访问访问数据,页表会很大
页表树
反置页表,大地址空间系统,多级页表变得繁琐
逻辑地址空间增长速度快于物理地址空间,页寄存器和反置页面的思路:不让页表与逻辑地址空间大小相对应,让页表与物理地址空间的大小相对应
页寄存器:使用位:此帧是否被进程占用,占用页号,保护位
优点:页表大小相对于物理内存很小。页表大小与逻辑地址空间大小无关
缺点:页表信息对调后需要依据帧号可找页号,页寄存器中搜索逻辑地址的页号
用快表缓存页表项后的页寄存器搜索步骤
对逻辑地址进行hash变换,在快表中查找对应页表项,有冲突时遍历冲突项链表,查找失败时产生异常,快表容量限制,功耗限制
段页式存储管理
进程特点
动态性,并发性,独立性,制约性
进程是操作系统处于执行状态程序的抽象
进程控制块PCB
进程标识信息,处理机线程保存,进程控制信息
进程生命周期:创建,执行,等待,抢占,唤醒,结束
状态队列
线程是进程的一部分,描述指令流执行状态,它是进程中指令执行流的最小单位,CPU调度的基本单位。
进程的资源分配角色:进程由一组相关资源构成,包括地址空间(代码段,数据段)
线程的处理机调度角色:线程描述在进程资源环境中的指令流执行状态
线程=进程-共享资源
一个线程崩溃,会导致其所属进程的所有线程崩溃
用户线程的特征
1.不依赖于操作系统的内核
内核不理解用户线程的存在,可以用于不支持线程的多进程操作系统
2.在用户空间实现的线程机制
每个进程有私有的线程控制块TCB,TCB由线程库函数维护
3.同一进程内的用户线程
无需用户态/核心态切换
内核线程
进程由内核通过系统调用实现的线程机制,由内核完成线程的创建
1.内核维护PCB和TCB
2.线程执行系统调用而被阻塞不影响其他线程
进程切换(上下文切换)
1.暂停当前运行进程,从运行状态变成其他状态
2.调度另一个进程从就绪变成运行
切换前,保存进程上下文,切换后,恢复,寄存器,CPU状态,内存地址空间
处理机调度
用信号量实现条件同步
管程:是一种用于多线程互斥访问共享资源的程序结构
1.采用面向对象方法,简化了线程间的同步控制
2.任一时刻最多只有一个线程执行执行管程代码
3.正在管程中的线程可临时放弃管程的互斥访问,等待事件出现时恢复
条件变量是管程内的等待机制
进入管程的线程因资源被占用而进入等待状态
每个条件变量表示一种等待原因,对应一个等待队列
Wait()操作:将自己阻塞在等待队列中,唤醒一个等待者或释放管程的互斥访问
Signal()操作:将等待队列中的一个线程唤醒,如果等待队列为空,相当于空操作
内存管理有哪几种方式
常见的内存管理方式有块式管理、页式管理、段式和段页式管理。
(1)块式管理:把主存分为一大块一大块的,当所需的程序片段不在主存时就分配一块主存空间,把程序片段load入主存