1、什么是进程(Process)和线程(Thread)?有何区别?
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的
一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本
单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和
栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线
程,同一个进程中的多个线程之间可以并发执行。
2.虚拟内存
通常来说,内存大小不可能容纳下所有并发执行的进程。因此,交换(Swapping)技术应运而生。交换的基本
思想是,将闲置的进程交换出内存,暂存在硬盘中,待执行时再交换回内存。
外部碎片:在内存空间大小是固定的情况下,两个进程之间的空间由于太小无法另任何进程使用
内部碎片:但实际情况下,进程往往会动态增长,因此创建进程时分配的内存就是个问题了,如果分配多了,
会产生内部碎片,浪费了内存,而分配少了会造成内存溢出。
利用链表管理内存的情况下,创建进程时分配什么样的空闲空间:
(1)首次适配:从链表头开始找,第一次找到的足够大的空闲空间
(2)下次适配:类似首次适配,区别是当一次找到后,记录下位置,下次再找的时候,从这里开始
(3)最佳适配:在链表中便利,找出能够容纳下的最小空间
(4)最差适配:在链表中便利,找出能够容纳下的最大空间
虚拟内存的基本思想是,每个进程有用独立的逻辑地址空间,内存被分为大小相等的多个块,称为页(Page).
每个页都是一段连续的地址。对于进程来看,逻辑上貌似有很多内存空间,其中一部分对应物理内存上的一块
(称为页框,通常页和页框大小相等),还有一些没加载在内存中的对应在硬盘上
页面替换算法:
(1)最佳置换算法:最佳置换算法是将未来最久不使用的页替换出去,这听起来很简单,但是无法实现
(2)最近不常使用算法NRU:这种算法给每个页一个标志位,R表示最近被访问过,M表示被修改过。定期对R进行
清零。这个算法的思路是首先淘汰那些未被访问过R=0的页,其次是被访问过R=1,未
被修改过M=0的页,最后是R=1,M=1的页。
(3)先进先出页面置换算法
(4)改进型FIFO算法:这种算法是在FIFO的基础上,为了避免置换出经常使用的页,增加一个标志位R,如果
最近使用过将R置1,当页将会淘汰时,如果R为1,则不淘汰页,将R置0.而那些R=0的
页将被淘汰时,直接淘汰。这种算法避免了经常被使用的页被淘汰
(5)时钟替换算法:虽然改进型FIFO算法避免置换出常用的页,但由于需要经常移动页,效率并不高。因此在
改进型FIFO算法的基础上,将队列首位相连形成一个环路,当缺页中断产生时,从当前位
置开始找R=0的页,而所经过的R=1的页被置0,并不需要移动页
(6)最久未使用算法: LRU算法的思路是淘汰最近最长未使用的页。这种算法性能比较好,但实现起来比较困难。
进程:
互斥:进程的互斥(mutual exclusion )是解决进程间竞争关系( 间接制约关系) 的手段。 进程互斥指
若干个进程要使用同一共享资源时,任何时刻最多允许一个进程去使用,其他要使用该资源的进程必须
等待,直到占有资源的进程释放该资源。
同步:进程同步指两个以上进程基于某个条件来协调它们的活动。一个进程的执行依赖于另一个协作进程的消
息或信号,当一个进程没有得到来自于另一个进程的消息或信号时则
通信方式:
(1)信号量及其原语操作(PV、读写锁、管程)控制的共享存储区(shared memory )通信机制;
(2)管道(pipeline)提供的共享文件(shared file)通信机制
管道特点:
(1)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;
(2)只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);
(3)单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不
属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
(4)数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓
冲区的末尾,并且每次都是从缓冲区的头部读出数据
进程调度算法:
(1)先来先服务
(2)短作业优先
(3)高优先级调度:
非抢占式:先执行高优先级任务,直到执行完毕或者终止
抢占式:执行时,若来了优先级更高的任务怎会让出
(4)高响应比优先:优先级=(等待时间+服务时间)/服务时间
1.如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
2.当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实
现的是先来先服务。
(5)时间片轮转
进程的状态转换:
一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多
次处于阻塞状态。
(1) 就绪→执行
处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
(2) 执行→就绪
处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完或更高优先级的进程抢占而不得不让出
处理机,于是进程从执行状态转变成就绪状态。
(3) 执行→阻塞
正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
(4) 阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。
(5) 运行→终止
程序执行完毕,撤销而终止
死锁
概念:在两个或多个并发进程中,如果每个进程持有某种资源而又都等待别的进程释放它或它们现在保持着的
资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗地讲,就是两个或多个
进程被无限期地阻塞、相互等待的一种状态。
产生死锁的必要条件:必须4个都满足
(1)互斥(mutualexclusion),一个资源每次只能被一个进程使用;
(2)不可抢占(nopreemption),进程已获得的资源,在未使用完之前,不能强行剥夺;
(3)占有并等待(hold andwait),一个进程因请求资源而阻塞时,对已获得的资源保持不放;
(4)环形等待(circularwait),若干进程之间形成一种首尾相接的循环等待资源关系
处理死锁:
(1)忽略死锁,鸵鸟算法
(2)检测死锁并恢复:允许死锁发生,死锁发生时,检测并解决
检测:把资源转化为图,若果存在环则有死锁
解决:利用抢占,杀死年轻进程
(3)死锁避免:
银行家算法:再某一个时刻,判断对请当前求的满足是否会导致系统进入不拿券状态,若不会则予以分配
(4)破坏死锁发生条件