C++/java操作系统常见题目1_进程与线程

进程与线程

  • 进程:https://baike.baidu.com/item/%E8%BF%9B%E7%A8%8B/382503
  • 线程:https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B/103101
  1. 进程:资源分配的基本单位。线程:独立运行和调度的基本单位。
  2. 进程由程序、数据和进程控制块(PCB)三部分组成。线程由程序、数据和线程控制块(TCB)三部分组成。
  3. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  4. 资源:同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
  5. 通信:进程间通信--IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)。线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
  6. 调度:在同一进程中,线程的切换不会引起进程的切换,在由一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。同时线程上下文切换比进程上下文切换要快得多。
  7. PCB:进程标识符信息(唯一的标识符),处理机状态信息(通用寄存器,指令寄存器,程序状态字PSW,用户栈指针),进程调度信息(进程状态,进程优先级)
  8. TCB:用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
  9. 控制:进程控制是进程管理中最基本的功能。它用于创建一个新进程,终止一个已完成的进程,或者去终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转换。

死锁的四个必要条件:

  1. 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
  2. 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
  3. 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  4. 环路等待条件指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

解决方法

  1. 死锁预防银行家算法,有序资源分配法
  2. 死锁避免
  3. 死锁检测和解除:资源剥夺、撤销进程、进程回退

排除方法

  1. 撤消陷于死锁的全部进程;
  2. 逐个撤消陷于死锁的进程,直到死锁不存在;
  3. 从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。
  4. 从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

 

进程的同步:

  1. 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
  2. 互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
  3. 事件:通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
  4. 信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目

 

本系列文章目的为个人准备面试的简单总结,文中多有不足,敬请批评指正!

参考:

https://www.cnblogs.com/losing-1216/p/5083097.html

你可能感兴趣的:(操作系统基础)