资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第一章:引论操作系统是运行在内核态的软件,为程序猿提供资源集抽象以及管理硬件 1.1.2主要任务:记录那个程序在用什么资源,管理资源分配,评估使用代价,调节冲突 1.3.11.操作系统必须知道所有的寄存器,以便中断时保存进度 2.用户程序在用户态运行时,仅允许执行至灵级的一个子集,一般不能调用 IO 和内 存保护指令 3.陷阱: a. 用于执行系统调用 b. 多数由硬件引起,用于警告异常 4.超线程:无并行处理,线程切换纳秒级 1.3.2 存储器 1. 寄存器(和 CPU 一样快)-高速缓存(多级缓存)-主存(RAM ROM EEROM 闪 存) 1.3.3上下文切换:多道程序系统中从一个程序切换到另一个程序上下文切换:多道程序系统中从一个程序切换到另一个程序 1.3.51. 设备驱动程序:控制 IO 设备,与控制器对话并收发命令 2. 设备存储器:映射到操作空间 A优点:不需要特定 IO 指令 B缺点:占地址空间(8088) 3. 实现输入输出的方法: A 忙等待:设备驱动循环检查 IO B 操作完成时中断 C 使用特殊的直接存储器访问芯片 DMA 1.3.61. USB:通用串行总线,键盘鼠标等慢速设备 1.3.7 启动 1. 加电-BIOS 检查硬件-BIOS 查询启动设备(设备第一扇区用启动签名才可以作为 启动设备)-硬盘第一区(MBR) ,分区表,超级块等 1.5.1 进程 1. 本质:正在执行的程序的实例,地址空间(core image 进程可读写,有数据和堆栈) 。 2. 相关:资源集(寄存器,报警,文件清单等) 3. 容许运行一个程序所需要所有信息的容器 4. UID 与 GID 1.5.31. IO 设备的分类: A块设备:硬盘,可随机读取 B字符特殊文件:键盘鼠标 2管道:虚文件,连接进程 1.6 系统调用1. 用户程序与操作系统交互:处理抽象 2. 能进入内核的过程调用 用户态切换到核心态三种方法:中断,异常,系统调用 3.TRAP 指令:副作用切换到内核态 1.7.3 微内核 1. 高可靠性,把操作系统划分成小的,定义良好的模块,只有微内核运行在内核,其 他是普通用户程序 2. 设备驱动:崩溃不会导致系统死机 3. 机制与策略分离第二章:进程与线程2.1 进程模型 1. 多道程序设计:CPU 在多个程序之间快速切换 2. UNIX: 开始是相同,之后不同。Windows:一直不同。 3. 进程退出的原因: 1. 正常退出; 2. 出错退出;(异常处理) 3. 严重错误;(非法指令,引用错误内存,除零错误) 4. 被杀死 4. 进程层次 Windows: 没有层次的概念,所有进程地位相同 Linux:进程及进程的子女们组成进程组 5. 进程的三种状态: 1. 运行态(实际占用 CPU) 2. 就绪态(可运行) 3. 阻塞态(等待外部事件) 6. 进程表:储存进程状态(程序计数器,堆栈指针,内存分配状况,打开的文件状态。 账号等) 7. 中断向量:与每一个 IO 类关联 1. 中断发生时,中断硬件程序将进程表中的重要数据压入堆栈,计算机跳到中断 向量的地址 2. 汇编语言设置新的堆栈(无法用 C 语言这类高级语言来描述) 8. 多道程序设计 1. 假设一个进程等待 IO 与停留在 CPU 的时间比为 p,n 个进程时,CPU 使用率为 使用率 = 1 pn 2.2 线程(http:/www.cnblogs.com/way_testlife/archive/2011/04/16/2018312.html 进程与线 程) 1. 定义:传统操作系统中,每个进程有一个地址空间和一个控制线程 2. 线程将应用程序分解成可以并行运行的多个顺序线程 3. 使用多线程的原因: 1. 并行实体共享同一个地址空间和所有可用数据的能力 2. 线程更轻量级,所以他们比进程更快创建和撤销 3. 同时需要大量 IO 和 CPU 计算时,多线程允许多个活动彼此重叠进行,从而加快执行速度 4. 多核系统中,多线程可以真正实现并行 5. 例子:多线程/单线程 web 服务器 1. 第三种设计(有限状态机: 并行,非阻塞系统调用, 【中断】 ):唯一的线 程对请求进行考察,如果需要 IO,则启动一个非阻塞 IO,服务器在表格里记 录当前请求,然后处理下一个事项。 6. 线程模型 1. 进程:集中程序运行的相关资源(地址空间,全局变量等) 2. 线程:程序计数器,寄存器,堆栈,共享的地址空间,多个线程的执行能 力。 7. 线程之间没有保护: 1. 不可能 2. 不需要(线程之间是合作关系) 8. 每个线程都有自己的堆栈 9. thread_yield:不同于进程,线程无法使用时钟中断强制线程让出 CPU 10. 线程引入的问题 1. fork 系统调用是否应该复制子线程 2.共享文件冲突 4 线程实现 1. 用户空间实现 1每个进程需要有其专门的线程表,由运行时系统管理 2. 优点 1. 可以在不支持线程的操作系统上实现多线程 2. 线程切换速度快(调用运行时系统的过程,不需要刷新和上下文切换)3. 允许每个进程有自己定制的调度算法 4. 有较好的拓展性(内核县城需要固定的表格空间和堆栈空间) 3. 缺点 1. 某个线程进行阻塞调用会引起所有其他线程阻塞 1. 使用非阻塞系统调用 2. 阻塞提前通知(select 系统调用) 2. 页面故障阻塞其他线程 3. 除非线程放弃 CPU,否则其他线程(包括调度线程)无法运行(没有 时钟中断) 1. 运行时系统也给与时钟中断:不好,不可能而且开销大 2. 内核线程 1. 内核有记录所有线程的线程表 2. 使用环保方法回收线程 3. 在线程级别使用调度算法:如果线程的操作比较多,会带来很大的开销 4. 信号:是发给进程的。当多个线程注册时,会出问题 3. 混合实现 1. 使用内核级线程,将用户级线程与某些或者全部内核线程多路复用(很灵 活)4. 调度机制1. 内核给每个进程安排一定数量的虚拟处理器并且让运行时系统分到线程上 2. 进程被阻塞后,内核通知运行时系统(upcall) 3. 根据中断决定是否继续 5. 弹出式线程 1. 一个消息的到达导致系统创造新的线程处理消息-弹出式线程 2. 优点:没有历史,创建迅速 6. 重写单线程代码 1. 私有的全局变量 2. 可重入的库 1. 重写整个库 2. 为每个过程提供 wrapper,标志该库正在被使用中 3. 信号:内核不知道用户级线程,因此不容易将信号发给正确的线程 4. 堆栈管理:内核不了解线程,无法自动增长,可能会造成线程堆栈出错。 进程与线程的区别与联系进程与线程的区别与联系这问题,估计计算机专业的同学在找研发等工作的时候都会遇到过。前几天某老牌软件厂商的电话面试就提到了这一经典问题,今天招聘会上又有不少同学说在面试的时候被问到这点。在这里我就起个头,大家有啥想法意见等都欢迎回帖交流。要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解。进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。进程空间的大小 只与处理机的位数有关,一个 16 位长处理机的进程空间大小为 216 ,而 32 位处理机的进程空间大小为 232 。进程至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。线程,在网络或多用户环境下,一个服务器通常需要接收大量且不确定数量用户的并发请求,为每一个请求都创建一个进程显然是行不通的,无论是从系统资源开销方面或是响应用户请求的效率方面来看。因此,操作系统中线程的概念便被引进了。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。说到这里,我们对进程与线程都有了一个大体上的印象,现在开始说说二者大致的区别。进程的执行过程是线状的进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。这是进程宏观上的执行过程。而进程又可有单线程进程与多线程进程两种。我们知道,进程有 一个进程控制块 PCB ,相关程序段 和 该程序段对其进行操作的数据结构集 这三部分,单线程进程的执行过程在宏观上是线性的,微观上也只有单一的执行过程;而多线程进程在宏观上的执行过程同样为线性的,但微观上却可以有多个执行操作(线程),如不同代码片段以及相关的数据结构集。线程的改变只代表了线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。执行过程的改变,而没有发生进程所拥有的资源变化。出了 CPU 之外,计算机内的软硬件资源的分配与线程无关计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。与进程控制表和 PCB 相似,每个线程也有自己的线程控制表 TCB ,而这个 TCB 中所保存的线程状态信息则要比 PCB 表少得多,这些信息主要是相关指针用堆栈(系统栈和用户栈),寄存器中的状态数据。进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。线程可以有效地提高系统的执行效率,但并不是在所有计算机系统中都是适用的,如某些很少做进程调度和切换的实时系统。使用线程的好处是有多个任务需要处理机处理时,减少处理机的切换时间;而且,线程的创建和结束所需要的系统开销也比进程的创建和结束要小得多。最适用使用线程的系统是多处理机系统和网络系统或分布式系统。-1. 线程的执行特性。线程只有 3 个基本状态:就绪,执行,阻塞。线程存在 5 种基本操作来切换线程的状态:派生,阻塞,激活,调度,结束。2. 进程通信。单机系统中进程通信有 4 种形式:主从式,会话式,消息或邮箱机制,共享存储区方式。主从式典型例子:终端控制进程和终端进程。会话式典型例子:用户进程与磁盘管理进程之间的通信。2.3 进程间通信 1. 三个基础问题 1. 进程如何把信息传递给另一个 2. 确保两个或多个进程在关键活动中不会交叉 3. 进程执行的正确顺序 2. 竞争条件:两个或多个进程读写共享数据,最后结果取决于进程执行的精确时序。 3. 临界区:多个进程中访问共享区域的程序段 1. 互斥:不能同时多个进程使用共享变量或者文件 2. 临界区解决方案四个条件 1. 任何两个进程不能同时处于临界区 2. 不应对 CPU 的数量和速度有任何的假设 3. 临界区外的程序不应阻塞其他程序 4. 不能使程序无限期等待进入临界区 3. 解决方案(基于忙等待:进程如不能进入互斥区,则会一直原地等待) 缺点: 1.可能导致优先级反转问题 2.浪费 CPU 3.用户级线程会一直忙等待,从而没用办法让拥有锁的线程运行 1. 屏蔽中断:进程进入临界区之后屏蔽所有中断(CPU 不会切换) 评价:不好的方案 1. 不能把屏蔽中断的权力交给用户进程(不打开中断则系统会终止) 2. 多处理器时不能解决互斥 2. 锁变量:共享锁,程序在进入临界区之前检查锁的值 评价:无法解决临界区问题3. 严格轮换法评价: 1.可以解决,但为忙等待。只有有理由认为等待时间很短的情况下才 使用忙等待(锁被称为自旋锁) 2 在一个进程比另一个进程慢很多的情况下,不好(违反条件三) 4. Peterson 解法 评价:可以解决,满足四大条件5. TSL 指令(硬件解法) TSL RX LOCK:测试并加锁,把 LOCK 值读到 RX 并在 LOCK 上存入 1。原
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号