题目一:进程和线程区别?

  1.进程是资源分配的基本单位,也是调度运行的基本单位;线程是调度的基本单位。

  2.进程有独立的虚拟地址空间。父子进程共享文件表,但不共享用户地址空间。

  *优点:一个进程崩溃后不会对其他进程产生影响。

  *缺点:进程间共享数据变得困难,必须使用显式的IPC机制。

  *进程虚拟地址空间包括:代码段、堆栈段(临时数据:如函数参数、返回地址和局部变量)、数据段(包括全局变量)、堆(动态分配的内存)等等。

  3.线程运行在进程的上下文中,所有运行在一个进程内的线程共享该进程的整个虚拟地址空间:代码、数据、堆、共享库和打开文件。

  *每个线程有自己的线程上下文:一个线程ID、栈、栈指针、程序计数器、通用目的的寄存器和条件吗。

  4.创建、切换和终止开销小:线程的上下文比进程的上下文小很多,所以线程的创建、上下文切换和终止要比进程快很多。

  *线程间共享数据容易,因为多个线程共享进程地址空间,但需要同步。

  5.补充程序和进程区别(选自操作系统概念第7版):

  *程序本身不是进程,程序只是被动实体,如存储在磁盘上的一系列指令的文件内容(常被成为可执行文件)

  *进程是活动实体,它有一个程序计数器来表示下一个要执行的命令和相关资源集合。

  *当一个可执行文件被装入内存时,一个程序才成为进程。

  *虽然多个进程可以与统一程序相关,但是它们被当做两个独立的执行序列,都是独立的进程,虽然文本段相同,但是数据段、堆、堆栈段都不同。

  题目二:进程间通信方式?

  1.管道

  2.消息队列

  3.共享内存

  4.套接字

  5.信号量

  6.信号:异步通信方式,软件层次上对中断机制的一种模拟。

  题目三:进程的组成部分和状态?

  (一)进程的组成部分:进程控制块、程序段和数据段。

  (二)进程的状态(注意状态之间切换条件):

  1.三种基本状态:运行态、绪态、阻塞态。

  2.挂起状态(从内存换出到磁盘):当内存中的所有进程都处于阻塞态,OS把被阻塞的进程换出到磁盘中的“挂起队列”(将进程置于挂起态,并将它转移到磁盘),内存中释放的空间可被调入的另一个进程使用。取哪个进程到内存执行的选择:新创建的进程或调入一个以前被挂起的进程(倾向于这个,不会增加系统的负载)。

  3.新建态和终止态。

  题目四:死锁的条件和预防?

  一 死锁的充分必要条件:

  *互斥:一次只有一个进程可以使用一个资源。

  *占有且等待:当一个进程等待其他进程时,继续占有已经分配的资源。

  *不可抢占:不能强行抢占进程已占有的资源。

  *环路等待:存在一个封闭的进程链,使每个进程至少占有此链中下一个进程所需要的一个资源。

  前三个是死锁的必要条件,第四个是前三个条件的潜在结果。

  二 处理死锁的基本方法:

  *死锁预防:通过设置某些限制条件,去破坏死锁的四个条件中的一个或几个条件,来预防发生死锁。但由于所施加的限制条件往往太严格,因而导致系统资源利用率和系统吞吐量降低。

  *死锁避免:允许前三个必要条件,但通过明智的选择,确保永远不会到达死锁点,因此死锁避免比死锁预防允许更多的并发。(例如银行家算法)。

  *死锁检测:不须实现采取任何限制性措施,而是允许系统在运行过程发生死锁,但可通过系统设置的检测机构及时检测出死锁的发生,并精确地确定于死锁相关的进程和资源,然后采取适当的措施,从系统中将已发生的死锁清除掉。

  *死锁解除:与死锁检测相配套的一种措施。当检测到系统中已发生死锁,需将进程从死锁状态中解脱出来。常用方法:撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程。