前端备战21秋招之操作系统,线程/进程/死锁 (2)

无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。即一个进程的所有资源可供进程内的所有线程共享

系统开销

进程创建和撤消的开销远大于线程创建和撤消的开销

进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置

线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作

同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也比较容易

目的

进程:为了使多个程序更好的并发执行,改善资源利用率、提高系统效率

线程:为了减少并发执行时所付出的时空开销,使并发粒度更细、并发性更好

差异 进程

拥有独立的地址空间:一个进程崩溃后,在保护模式下不会对其它进程产生影响

线程

只是进程中的不同执行路径

有独立的堆栈与局部变量

没有单独的地址空间

一个线程死掉等于整个进程死掉

小总结

多进程程序比多线程程序健壮

进程切换时耗费资源更大,效率较差

线程执行开销小,但不利于资源的管理和保护

要求同时进行又要共享某些变量的并发操作,只能用线程,不能用进程

多个线程共享内存,从而极大地提高了程序的运行效率

进程在执行过程中拥有独立的内存单元

死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源而造成阻塞的现象,若无外力作用,它们都将无法继续执行

产生原因

竞争资源引起进程死锁

可剥夺和非剥夺资源

竞争非剥夺资源

竞争临时性资源

进程推进顺序不当

产生条件

互斥条件:涉及的资源是非共享的

涉及的资源是非共享的,一段时间内某资源只由一个进程占用,如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放

不剥夺条件:不能强行剥夺进程拥有的资源

进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放

请求和保持条件:进程在等待一新资源时继续占有已分配的资源

指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放
环路等待条件:存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中的下一个进程所请求
在发生死锁时,必然存在一个进程——资源的环形链

解决办法

只要打破四个必要条件之一就能有效预防死锁的发生

面试相关问题

能力有限,这里就没有留下个人的回答了,避免带入误区,影响到读者的总结,我相信读者可以根据上文中知识点的描述,能总结出自己的结论

1.线程与进程的概念? 2.线程与进程的区别? 3.线程如何工作的? 4.进程如何工作的? 5.进程与线程是如何通信的? 6.进程/线程之间如何进行切换的? 7.线程和进程的关系? 8.什么是死锁?为什么会出现?如何避免?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxsyd.html