本文摘抄自http://www.cnblogs.com/heyonggang/p/3172570.htmlhtml
一、线程与进程的区别联系程序员
二、进程通讯方式有哪些?面试
三、同步的方式有哪些?算法
四、ThreadLocal与其它同步机制的比较shell
五、进程死锁的条件数据库
第一题:数组
(1)线程是进程的一个实体,一个进程能够拥有多个线程,多个线程也能够并发执行。一个没有线程的进程也能够看作是单线程的,一样线程也常常被看作是一种轻量级的进程。而且进程能够不依赖于线程而单独存在,而线程则否则。安全
(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程更小的可以独立执行的基本单元,线程本身不拥有任何系统资源,可是它能够访问其隶属进程的所有资源。服务器
(3) 与进程的控制表PCB类似,线程也有本身的控制表TCB,可是TCB中所保存的线程状态比PCB表少得多。网络
进程的做用与定义:是为了提升CPU的执行效率,为了不因等待而形成CPU空转以及其余计算机硬件资源的浪费而提出来的。
线程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不一样用户的网页访问请求的话,能够建立父进程和多个子进 程的方式来进行处理,可是建立一个进程要花费较大的系统开销和占用较多的资源。除外,这些不一样的用户子进程在执行的时候涉及到进程上下文切换,上下文切换 是一个复杂的过程。因此,为了减小进程切换和建立的开销,提升执行效率和节省资源,人们在操做系统中引入了"线程(thread)"的概念。
第二题:
进程间通信的方式:
几种方式的比较:
第三题:
线程同步指多个线程同时访问某资源时,采用一系列的机制以保证同时最多只能一个线程访问该资源。线程同步是多线程中必须考虑和解决的问题,由于极可能发生多个线程同时访问(主要是写操做)同一资源,若是不进行线程同步,极可能会引发数据混乱,形成线程死锁等问题;
线程同步的方式:
总结比较:
第四题:
Threadlocal 和其余全部的同步机制都是为了解决多线程中的对同一变量的访问冲突,在普通的同步机制 中,是经过对对象加锁来实现多个线程对同一变量的安全访问的。这时该变量是多个线程共享的,使用这种同步机制须要很细致的分析在何时对变量进行读写, 何时须要锁定某个对象,何时释放该对象的索等等。全部这些都是由于多个线程共享了该资源形成的。Threadlocal就从另外一个角度来解决多线程的并发访问,Threadlocal会为每个线程维护一个和该线程绑定的变量副本,从而隔离了多个线程的数据共享,每个线程都拥有本身的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,能够把不安全的变量封装进ThreadLocal。
总结:当 然ThreadLocal并 不能替代同步机制,二者面向的问题领域不一样。同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通讯的有效方式;而 ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源(变量),这样固然不须要对多个线程进行同步了。因此,若是你须要 进行多个线程之间进行通讯,则使用同步机制;若是须要隔离多个线程之间的共享冲突,可使用ThreadLocal,这将极大地简化你的程序,使程序更加 易读、简洁。
第五题:
首先回答死锁的定义,所谓死锁就是一个进程集合中的多个进程由于竞争资源,而形成的互相等待现象。
死锁的缘由:系统资源不足;多个进程的推动顺序不合理
死锁的必要条件:
处理死锁的策略:
操做系统常见面试题(答案仅供参考)
1. 什么是中断?中断时CPU作什么工做?
中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
2. CPU在上电后,进入操做系统的main()以前必须作什么?
加电后,会触发CPU的reset信号,致使CPU复位,而后CPU会跳到(arm下0x00000000,x86下0xfffffff0)执行指令.主 要是作CPU初始化,肯定CPU的工做模式,mmu初始化。创建页表段表,初始化中孤单控制器和中断向量表,初始化输入和输出,初始化 nandflash,把OS的TEXT区加载到sdram,而后跳转到sdram的main()
3. 简术ISO OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。
网络层:资料传送的目的地寻址,再选择出传送资料的最佳路线;
链路层:负责网络上资料封包如何传送的方式;
物理层:在设备与传输媒介之间创建及终止链接。参与通信过程使得资源能够在共享的多用户中有效分配,对信号进行调制或转换使得用户设备中的数字信号定义能与信道上实际传送的数字信号相匹配
4. makefile文件的做用是什么?
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件须要先编译,哪些文件须要后 编译,哪些文件须要从新编译,甚至于进行更复杂的功能操做,由于 makefile就像一个Shell脚本同样,其中也能够执行操做系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只须要一个 make命令,整个工程彻底自动编译,极大的提升了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,通常来讲,大 多数的IDE都有这个命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
5. UNIX显示文件夹中文件名的命令是什么?能使文件内容显示在屏幕的命令是什么?
ls cat
type tail
6. Linux文件属性有哪些?(共十位)
-rw-r--r—1
第一个属性表明这个文件是【目录、文件或连结文件】,当为[ d ]则是目录,为[ - ]则是文件,如果[ l ]则表示为连结档(link file);
如果[ b ]则表示为装置文件里面的可供储存的接口设备;
如果[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。接下来的属性中,三个为一组,且均为【rwx】三个参数的组合,其中[r]代可读、[w]表明可写、[x]表明可执行:
第一组为【拥有人的权限】,第二组为【同群组的权限】; 第三组为【其它非本群组的权限】。
7. Linux中经常使用到的命令
显示文件目录命令ls
改变当前目录命令cd 如cd / /home
创建子目录mkdir mkdir xiong
删除子目录命令rmdir 如 rmdir /mnt/cdrom
删除文件命令RM 如 rm /ucdos.bat
文件复制命令cp 如 cp /ucdos/* /fox
获取帮助信息命令man 如 man ls
显示文件的内容less 如 less mwm.lx
重定向与管道type 如type readme>>direct,将文件readme的内容追加到文direct中
8. 进程通讯有哪些方式?
管道通讯、消息通讯、内存共享
9. 说说分段和分页。
页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提升内存的利用率;或者说,分页仅仅是因为系统管理的须要,而不是用户的须要。
段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的知足用户的须要。页的大小固定且由系统肯定,把逻辑地址划分为页号和页内 地址两部分,是由机器硬件实现的,于是一个系统只能有一种大小的页面。 段的长度却不固定,决定于用户所编写的程序,一般由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
分页的做业地址空间是维一的,即单一的线性空间,程序员只须利用一个记忆符,便可表示一地址。分段的做业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址
10.什么是进程和线程?有何区别?
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.
线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),可是它可与同属一个进程的其余的线程共享进程所拥有的所有资源.一个线程能够建立和撤销另外一个线程;同一个进程中的多个线程之间能够并发执行.
11.Windows下的内存是如何管理的?
Window操纵内存能够分两个层面:物理内存和虚拟内存。
其中物理内存由系统管理,不容许应用程序直接访问,应用程序可见的只有一 个2G地址空间,而内存分配是经过堆进行的,对于每一个进程都有本身的默认堆,当一个堆建立后,就经过虚拟内存操做保留了相应大小的地址块(不占有实际的内 存,系统消耗很小),当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(若是找不到,且堆建立属性是可扩充的,则扩充堆大小)为这个空闲块所包 含的全部内存页提交物理对象(物理内存上或硬盘上的交换文件上)。这时能够就访问这部分地址了。提交时,系统将对全部进程的内存统一调配,若是物理内存不 够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留 地址空间。
若是要知道某个地址是否被占用/可不能够访问,只要查询此地址的虚拟内存状VirtualQuery),若是是提交,则能够访问。若是仅仅保留,或没保留,则产生一 个 软件异常。此外有些内存页能够设置各类属性。若是是只读,向内写也会产生软件异常
12.操做系统的内容分为几块?什么叫作虚拟内存?优势管理属于操做系统的内容吗?
13.进程是一个比较重要的概念,那么进程有哪几种状态?
基本状态有3种,即ready(就绪),running(运行),wait(等待).
14.说出你所知道的保持进程同步的方法?
进程间同步的主要方法有内存屏障,互斥锁,信号量和锁,管程,消息,管道
15.OS中如何实现物理地址到逻辑志址的转换?
16.解释一下分页式管理。
用户程序的地址空间被划分红若干固定大小的区域,称为“页”,相应地,内存空间分红若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配.
17.什么是死锁,其条件是什么?怎么避免死锁?
死锁是指,在两个或多个并发进程中,若是每一个进程持有某种资源而又都等待别的进程释放它们如今保持着的资源,不然就不能向前推动.此时,每一个进程都占用了 必定的资源可是又不能向前推动,称这一组进程产生了死锁. 通俗的讲,就是两个或多个进程无止境的等候着永远不会成立的条件的一种系统状态. 其条件是为
1.互斥:存在这样一种资源,它在某个时刻只能被分配给一个执行绪使用;
2.持有:当请求的资源已被占用从而致使执行绪阻塞时,资源占用者不但无需释放该资源,并且还能够继续请求更多资源;
3.不可剥夺:执行绪得到到的互斥资源不可被强行剥夺,换句话说,只有资源占用者本身才能释放资源;
4.环形等待:若干执行绪以不一样的次序获取互斥资源,从而在由多个执行绪组成的环形链中,每一个执行绪都在等待下一个执行绪释放它持有的资源。
避免死锁:按顺序访问,事务最小化
18.什么是缓冲区溢出?有什么危害?其缘由是什么?
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区自己的容量溢出的数据覆盖在合法数据上,
危害:在当前网络与分布式系统安全中,被普遍利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危险的是堆栈溢出,由于入侵者能够利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃致使拒绝服务,另一种就是跳转而且执行一段恶意代码,好比获得shell,而后随心所欲。
经过往程序的缓冲区写超出其长度的内容,形成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。形成缓冲区溢出的缘由是程序中没有仔细检查用户输入的参数
19.什么是临界区?如何解决冲突?
每一个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不容许其余进程进入。
① 若是有若干进程要求进入空闲的临界区,一次仅容许一个进程进入。
② 任什么时候候,处于临界区内的进程不可多于一个。如已有进程进入本身的临界区,则其它全部试图进入临界区的进程必须等待。
③ 进入临界区的进程要在有限时间内退出,以便其它进程能及时进入本身的临界区。
④ 若是进程不能进入本身的临界区,则应让出CPU,避免进程出现“忙等”现象。
20.解释一下P操做与V操做。
P就是请求资源,V就是释放资源
21.中断和轮询的特色。
一、什么是进程(Process)和线程(Thread)?有何区别?
进程是具备必定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和 分派的基本单位,它是比进程更小的能独立运行的基本单位。线程本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和 栈),可是它可与同属一个进程的其余的线程共享进程所拥有的所有资源。一个线程能够建立和撤销另外一个线程,同一个进程中的多个线程之间能够并发执行。
进程与应用程序的区别在于应用程序做为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操做系统维护的系统资源管理实体。
二、Windows下的内存是如何管理的?
Windows提供了3种方法来进行内存管理:虚拟内存,最适合用来管理大型对象或者结构数组;内存映射文件,最适合用来管理大型数据流(一般来自文件)以及在单个计算机上运行多个进程之间共享数据;内存堆栈,最适合用来管理大量的小对象。
Windows操纵内存能够分两个层面:物理内存和虚拟内存。
其中物理内存由系统管理,不容许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是经过堆进行的。对于每一个进程都有本身的默认堆,当 一个堆建立后,就经过虚拟内存操做保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲 块(若是找不到,且堆建立属性是可扩充的,则扩充堆大小),为这个空闲块所包含的全部内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就能够 访问这部分地址。提交时,系统将对全部进程的内存统一调配,若是物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释 放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。
若是要知道某个地址是否被占用/可不能够访问,只要查询此地址的虚拟内存状态便可。若是是提交,则能够访问。若是仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页能够设置各类属性。若是是只读,向内存写也会产生软件异常。
三、Windows消息调度机制是?
A)指令队列;B)指令堆栈;C)消息队列;D)消息堆栈
答案:C
处理消息队列的顺序。首先Windows绝对不是按队列先进先出的次序来处理的,而是有必定优先级的。优先级经过消息队列的状态标志来实现的。首先,最 高优先级的是别的线程发过来的消息(经过sendmessage);其次,处理登记消息队列消息;再次处理QS_QUIT标志,处理虚拟输入队列,处理 wm_paint;最后是wm_timer。
四、描述实时系统的基本特性
在特定时间内完成特定的任务,实时性与可靠性。
所谓“实时操做系统”,其实是指操做系统工做时,其各类资源能够根据须要随时进行动态分配。因为各类资源能够进行动态分配,所以,其处理事务的能力较强、速度较快。
五、中断和轮询的特色
对I/O设备的程序轮询的方式,是早期的计算机系统对I/O设备的一种管理方式。它定时对各类设备轮流询问一遍有无处理要求。轮流询问以后,有要求的, 则加以处理。在处理I/O设备的要求以后,处理机返回继续工做。尽管轮询须要时间,但轮询要比I/O设备的速度要快得多,因此通常不会发生不能及时处理的 问题。固然,再快的处理机,能处理的输入输出设备的数量也是有必定限度的。并且,程序轮询毕竟占据了CPU至关一部分处理时间,所以,程序轮询是一种效率 较低的方式,在现代计算机系统中已不多应用。
程序中断一般简称中断,是指CPU在正常运行程序的过程当中,因为预先安排或发生了各类随机的内部或外部事件,使CPU中断正在运行的程序,而转到为响应的服务程序去处理。
轮询——效率低,等待时间很长,CPU利用率不高。
中断——容易遗漏一些问题,CPU利用率高。
六、什么是临界区?如何解决冲突?
每一个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不容许其余进程进入。
(1)若是有若干进程要求进入空闲的临界区,一次仅容许一个进程进入;
(2)任什么时候候,处于临界区内的进程不可多于一个。如已有进程进入本身的临界区,则其它全部试图进入临界区的进程必须等待;
(3)进入临界区的进程要在有限时间内退出,以便其它进程能及时进入本身的临界区;
(4)若是进程不能进入本身的临界区,则应让出CPU,避免进程出现“忙等”现象。
七、说说分段和分页
页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提升内存的利用率;或者说,分页仅仅是因为系统管理的须要,而不是用户的须要。
段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好的知足用户的须要。
页的大小固定且由系统肯定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,于是一个系统只能有一种大小的页面。段的长度却不固定,决定于用户所编写的程序,一般由编辑程序在对源程序进行编辑时,根据信息的性质来划分。
分页的做业地址空间是一维的,即单一的线性空间,程序员只须利用一个记忆符,便可表示一地址。分段的做业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
八、说出你所知道的保持进程同步的方法?
进程间同步的主要方法有原子操做、信号量机制、自旋锁、管程、会合、分布式系统等。
九、Linux中经常使用到的命令
显示文件目录命令ls 如ls
改变当前目录命令cd 如cd /home
创建子目录mkdir 如mkdir xiong
删除子目录命令rmdir 如rmdir /mnt/cdrom
删除文件命令rm 如rm /ucdos.bat
文件复制命令cp 如cp /ucdos /fox
获取帮助信息命令man 如man ls
显示文件的内容less 如less mwm.lx
重定向与管道type 如type readme>>direct,将文件readme的内容追加到文direct中
十、Linux文件属性有哪些?(共十位)
-rw-r--r--那个是权限符号,总共是- --- --- ---这几个位。
第一个短横处是文件类型识别符:-表示普通文件;c表示字符设备(character);b表示块设备(block);d表示目录 (directory);l表示连接文件(link);后面第一个三个连续的短横是用户权限位(User),第二个三个连续短横是组权限位 (Group),第三个三个连续短横是其余权限位(Other)。每一个权限位有三个权限,r(读权限),w(写权限),x(执行权限)。若是每一个权限位都 有权限存在,那么满权限的状况就是:-rwxrwxrwx;权限为空的状况就是- --- --- ---。
权限的设定能够用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:
一个文件aaa具备彻底空的权限- --- --- ---。
chmod u+rw aaa(给用户权限位设置读写权限,其权限表示为:- rw- --- ---)
chmod g+r aaa(给组设置权限为可读,其权限表示为:- --- r-- ---)
chmod ugo+rw aaa(给用户,组,其它用户或组设置权限为读写,权限表示为:- rw- rw- rw-)
若是aaa具备满权限- rwx rwx rwx。
chmod u-x aaa(去掉用户可执行权限,权限表示为:- rw- rwx rwx)
若是要给aaa赋予制定权限- rwx r-x r-x,命令为:
chmod u=rwx,go=rx aaa
十一、makefile文件的做用是什么?
一个工程中的源文件不可胜数,其按类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定哪些文件须要先编译,哪些文件须要 后编译,哪些文件须要从新编译,甚至于进行更复杂的功能操做。由于makefile就像一个Shell脚本同样,其中也能够执行操做系统的命令。 makefile带来的好处就是——“自动化编译”。一旦写好,只须要一个make命令,整个工程彻底自动编译,极大地提升了软件开发的效率。make是 一个命令工具,是一个解释makefile中指令的命令工具。通常来讲,大多数的IDE都有这个命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
十二、简术OSI的物理层Layer1,链路层Layer2,网络层Layer3的任务。
网络层:经过路由选择算法,为报文或分组经过通讯子网选择最适当的路径。
链路层:经过各类控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
物理层:利用传输介质为数据链路层提供物理链接,实现比特流的透明传输。
1三、什么是中断?中断时CPU作什么工做?
中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的事件处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。
1四、你知道操做系统的内容分为几块吗?什么叫作虚拟内存?他和主存的关系如何?内存管理属于操做系统的内容吗?
操做系统的主要组成部分:进程和线程的管理,存储管理,设备管理,文件管理。虚拟内存是一些系统页文件,存放在磁盘上,每一个系统页文件大小为4K,物理 内存也被分页,每一个页大小也为4K,这样虚拟页文件和物理内存页就能够对应,实际上虚拟内存就是用于物理内存的临时存放的磁盘空间。页文件就是内存页,物 理内存中每页叫物理页,磁盘上的页文件叫虚拟页,物理页+虚拟页就是系统全部使用的页文件的总和。
1五、线程是否具备相同的堆栈?dll是否有独立的堆栈?
每一个线程有本身的堆栈。
dll是否有独立的堆栈?这个问题很差回答,或者说这个问题自己是否有问题。由于dll中的代码是被某些线程所执行,只有线程拥有堆栈。若是dll中的 代码是exe中的线程所调用,那么这个时候是否是说这个dll没有独立的堆栈?若是dll中的代码是由dll本身建立的线程所执行,那么是否是说dll有 独立的堆栈?
以上讲的是堆栈,若是对于堆来讲,每一个dll有本身的堆,因此若是是从dll中动态分配的内存,最好是从dll中删除;若是你从dll中分配内存,而后在exe中,或者另一个dll中删除,颇有可能致使程序崩溃。
1六、什么是缓冲区溢出?有什么危害?其缘由是什么?
缓冲区溢出是指当计算机向缓冲区内填充数据时超过了缓冲区自己的容量,溢出的数据覆盖在合法数据上。
危害:在当前网络与分布式系统安全中,被普遍利用的50%以上都是缓冲区溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕虫。而缓冲区溢 出中,最为危险的是堆栈溢出,由于入侵者能够利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃致使拒绝服 务,另一种就是跳转而且执行一段恶意代码,好比获得shell,而后随心所欲。经过往程序的缓冲区写超出其长度的内容,形成缓冲区的溢出,从而破坏程序 的堆栈,使程序转而执行其它指令,以达到攻击的目的。
形成缓冲区溢出的主缘由是程序中没有仔细检查用户输入的参数。
1七、什么是死锁?其条件是什么?怎样避免死锁?
死锁的概念:在两个或多个并发进程中,若是每一个进程持有某种资源而又都等待别的进程释放它或它们如今保持着的资源,在未改变这种状态以前都不能向前推动,称这一组进程产生了死锁。通俗地讲,就是两个或多个进程被无限期地阻塞、相互等待的一种状态。
死锁产生的缘由主要是:? 系统资源不足;? 进程推动顺序非法。
产生死锁的必要条件:
(1)互斥(mutualexclusion),一个资源每次只能被一个进程使用;
(2)不可抢占(nopreemption),进程已得到的资源,在未使用完以前,不能强行剥夺;
(3)占有并等待(hold andwait),一个进程因请求资源而阻塞时,对已得到的资源保持不放;
(4)环形等待(circularwait),若干进程之间造成一种首尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不知足,就不会发生死锁。
死锁的解除与预防:理解了死锁的缘由,尤为是产生死锁的四个必要条件,就能够最大可能地避免、预防和解除死锁。因此,在系统设计、进程调度等方面注意如 何不让这四个必要条件成立,如何肯定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的状况下占用资源。所以,对资源的 分配要给予合理的规划。
死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与恢复策略。