码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统复习整理

时间:2020-08-19 19:19:23      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:alt   动态   down   lazy   img   区间   文件中   角度   改变   

1.进程的概念:一个具有一定独立功能的程序关于某个数据集合的一次运动活动,是系统进行资源调度和分配的基本单位
 
2.进程的常见状态:
就绪:已经获得出cpu外的所有必要资源,只要获得cpu就可运行,进程处于已经准备好的状态
执行:已经获得cpu,正在执行
阻塞:正在执行的进程由于发生某种事件暂时无法工作
技术图片
 
3.进程同步:进程同步的主要任务:对多个相关进程在执行次序上进行协调,使并发执行的进程之间能有效的共享资源和合作
同步机制遵循的原则:1.空闲让进 2.忙则等待 3.有限等待 4.有权等待
 
4.上下文切换:对于单核单线程CPU而言,在某一时刻只能执行一条CPU指令。上下文切换将CPU资源从一个进程分配给另一个进程。从用户角度看,计算机能够并行运行多个进程,这恰恰是操作系统通过快速上下文切换造成的结果。在切换的过程中,操作系统需要先存储当前进程的状态(包括内存空间的指针,当前执行完的指令等等),再读入下一个进程的状态,然后执行此进程
 
5.进程与线程的区别和联系:线程是进程的一个实体,是cpu调度和分配的基本单位,它是比进程更小的能独立运行的基本单位
 
进程与线程的关系:
1:一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
2:资源分配给进程,同一个进程的所有线程共享该进程的所有资源,同一个进程的多个线程共享代码段(代码和常量)、数据段(全局变量和静态变量)、扩展段(堆存储)。但是每个线程有自己的栈段,用来存放临时变量和所有全局变量
3.处理机分配给线程,即真正在处理机上运行的是线程
4.线程在运行过程中需要协作同步。不同进程的线程间要利用消息通信实现同步
 
进程与线程的区别:
1.进程有自己的独立地址空间,线程没有
2.进程是资源分配的最小单位,线程是cpu调度的最小单位
3.进程和线程通信方式不同(线程之间的通信比较方便,同一进程下的线程共享数据,进程之间只能通过进程通信的方式进行
4.进程上下文切换开销大,线程小
5.一个进程挂掉不会影响其他进程,一个线程挂掉会影响其他线程
6.对进程操作开销大,线程小
 
为什么进程上下文切换开销比线程大:
进程切换分两步:1:切换页目录以使用新的地址空间2.切换内核栈以及硬件上下文
对线程来说,第一步不需要,第二步需要
 
切换的性能消耗:1.线程与进程之间上下文切换的最主要区别就是线程切换的虚拟内存空间任然相同,都由操作系统内核来完成,内核的切换过程最主要消耗就是将寄存器中内容切换出
2.上下文的切换会扰乱处理器的缓存机制。简单的说,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。还有一个显著的区别是当你改变虚拟内存空间的时候,处理的页表缓冲(processor‘s Translation Lookaside Buffer (TLB))或者相当的神马东西会被全部刷新,这将导致内存的访问在一段时间内相当的低效。但是在线程的切换中,不会出现这个问题
 
总结:进程和线程都是一个时间段的描述,是cpu工作时间段的描述,在cpu看来所有任务一个一个执行。具体方法:先加载a的上下文,然后开始执行a,保存a的上下文,调入下一个要执行程序b的上下文,开始执行b,保存b的上下文
 
6.调度算法:
1.FIFO先来先服务:调度顺序就是任务到达就绪队列的顺序,简单非抢占不适合交互式,未考虑任务特性
2.SJF:最短作业优先调度,可以保证最小的平均等待时间
3.SRJF:SJF的抢占版,如何知道下一个 cpu区间大小,根据历史进行预测:指数平均法
4.优先权调度:每个关联任务给与一个优先权,调度优先权最高的,但产生问题:优先权太低的任务一直得不到调度,不能运行,出现饥荒现象
5.轮转调度算法:设置一个时间片,按时间片来轮转调度。优点:定时有响应,等待时间较短,缺点:上下文切换次数过多.时间片太大,响应时间太长,吞吐量变小,周转时间边长,当时间片过长,退化为先来先服务算法
 
 
7.死锁的条件,如何处理死锁
如果一组进程中每一个进程都在等待由该组中其他进程触发的事件,那么该组进程死锁
如果每个进程都持有着某种资源而又等待着其他进程释放资源,导致状态无法改变,则死锁
 
产生死锁的必要条件:
互斥条件:资源不能共享,只能由一个进程使用
请求与保持条件:已经得到资源的进程可以再申请新的资源
非抢占条件:已经分配的资源不能从相应的进程中被强制的抢占
循环等待条件:系统中若干进程组成环路,环路中每个进程都在等待系统中其他进程正在占用的资源
 
如何处理死锁问题:
直接忽略该问题:鸵鸟算法,掩耳盗铃
检测死锁并恢复
仔细进行动态分配,避免死锁
通过打破死锁四个条件之一,防止死锁
 
8.临界资源
进程是占有资源的最小单位,线程只是访问进程内所有资源或仅拥有一点必须资源
但对于某些资源来说,同一时间内只能被一个进程占用,这些一次只能被一个进程占用的资源就叫做临界资源
对于临界资源的访问,必须是互斥进行,当临界资源被某一进程占用,另一个进程会堵塞,知道资源被释放,而进程内访问临界资源的代码被称为临界区
 
9.程序从开始到结束
1.预处理:条件编译,头文件包含,宏替换处理,生成.i文件
2.编译:将预处理后的文件转换成编译语言,生成.s文件
3.汇编:汇编为目标机器代码
4.链接:连接目标代码,生成可执行文件
 
10.内存池、进程池、线程池
池:提前保存大量的资源,以备不时之需重复使用
在实际应用中,分配内存,创建线程,进程都会涉及系统调用,系统调用需要导致程序从用户状态切换到内核状态,导致消耗时间
 
线程池:缓冲区,先创建若干线程将他们休眠,当需要开一个线程时,唤醒一个线程,完成后将它休眠而不是销毁
进程池与线程池相同
内存池:程序预先申请一大块内存,此后,当需要内存时不必向系统调用而直接从内存池中获取,释放内存时不是直接释放给操作系统而是返还给内存池,当程序结束后将内存池返还
 
 
11.动态链接与静态链接的区别
静态库是一个外部函数与变量的集合体。静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与链接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件。而这个可执行文件与编译可执行文件的程序,都是一种程序的静态创建
使用静态库的时候,静态链接库要参与编译,在生成执行文件之前的链接过程中,要将静态链接库的全部指令直接链接入可执行文件中。而动态库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个.dll文件中,该dll包含一个或多个已被编译,链接并与使用它们的进程分开储存的函数。
静态库中不能再包含其他动态库或静态库,而在动态库中还可以再包含其他动态或者静态库。
静态库在编译的时候,就将库函数装在到程序中去了,而动态库函数必须在运行的时候才被装载,所以使用静态库速度快一些。
 
12.页面置换算法
操作系统将内存按照页面进行管理,当页面进过修改时,就需要重新写入到磁盘,页面置换算法就是要选出一个最合适的页面使得效率最高
 
1.先进先出算法:和名字一样,将内存中时间停留最久的页面替换,缺点:对于一些经常被访问的页面例如全局变量,常用函数等页面,降低了效率
改进:最老页面设置一个值,当被修改则将其值设为1,当需要置换时,查看最老页面对应值,若为1则将值复位将页面调到链表最后,若不为1则置换
改进:将链表设为首位相连,指针指向最老页面
 
2.最近最少使用页面算法:2.1在每个页面上配置一个移位寄存器,每过一段时间向右移动一格,最小
数值对应的页面就是最近最少受用的页面2.2用一个栈保存当前这些页面的页面号,每当进程访问这些页面时,将对应的页面号移除再重新压入栈顶,栈底就是最近最少被访问的页面
 
3.分段:虚拟内存采用分页,将地址空间划分为固定大小的页面,每一页与内存对应
分段将每个表分成段,每段构成一个独立的地址空间,每段长度不同且可以动态增长
段页式:程序地址空间划分为多个拥有独立地址空间的段,每个段上的地址空间再分成大小相同的页
 
13.线程安全
如果多个线程每次运行代码结果和单线程运行的结果一致,其他变量和预期的值也一致,则称为线程安全
 
14.同步与异步
同步:一个进程在执行某个请求时会一直等待下去,直到成功才继续执行
异步:进程无需等待,继续执行下一个操作,有消息时会通知进程进行处理,提高执行效率
同步与异步优缺点:同步可以避免发生死锁,读脏数据存在。共享资源时总可能出现各种各样的问题
异步可以提高效率但安全性低
 
15.同步与互斥、信号量
同步:多个进程按一定顺序进行
互斥:多个进程在同一时间内只有一个能进入临界区
信号量:一个整形变量,可以对其执行P、V操作
P:如果信号量大于0执行-1操作,如果信号量等于0,进程睡眠等待信号量大于0
V:对信号量执行+1操作,唤醒睡眠进程使其完成down操作
 
如果信号量只能为1或者 0,那么就成了互斥量,0表示临界区已近加锁,1表示临界区已近解锁
 
生产者消费者问题:缓冲区保存物品,只有缓冲区没满时生产者可以放入物品,只有缓冲区不为空时消费者可以拿走物品
使用两个信号量empty和full,empty用于生产者,不为0时生产者可以进入,full用于消费者,不为0时消费者可拿走物品
技术图片
不能先对mutex加锁再对empty加锁,否则会出现:生产者P操作empty为0休眠,由于已被加锁mutex,消费者无法访问
 
读者写者问题:允许多个进程同时对数据进行读操作,但是不允许读和写以及写和写操作同时发生
一个变量count记录对数据进行读操作的数量,一个互斥量countmutex对count加锁,一个互斥量datamutex用于对读写的数据加锁
技术图片
 
哲学家就餐问题:
为了避免死锁,设置条件,哲学家必须同时拿起两双筷子,进餐时必须保证左右邻居不进餐
 
技术图片
技术图片

操作系统复习整理

标签:alt   动态   down   lazy   img   区间   文件中   角度   改变   

原文地址:https://www.cnblogs.com/Yuanzzz/p/13514657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!