进程管理

107 阅读5分钟

进程和线程

进程

进程(Process)是计算机中正在运行的程序的实例,它包括程序计数器、堆栈和数据段等信息

线程

线程(Thread)是进程的执行单元,一个进程中可以包含多个线程,每个线程可以独立执行不同的任务,但它们共享同一个进程的内存和其他资源

进程和线程的区别:

  • 资源占用:一个进程可以包含多个线程,但进程是一个独立的实体,需要占用操作系统的资源,包括内存、CPU时间片等;线程是进程的执行单元,它们共享进程的内存和其他资源,因此线程的资源占用相对较少。
  • 调度:操作系统调度进程,为每个进程分配时间片,每个进程在时间片内执行自己的任务;线程是由进程内的调度器调度,线程之间切换的开销比进程之间小得多。
  • 通信:进程之间的通信需要特殊的机制,比如管道、消息队列、信号量等;线程之间的通信可以直接访问共享内存等资源,通信效率较高。
  • 安全性:一个进程崩溃不会对其他进程产生影响,但是一个线程崩溃会导致整个进程崩溃。

进程的状态和转换

在操作系统中,进程有多种状态,包括以下几种:

  • 新建状态(New):当进程被创建时,处于新建状态。在这个状态下,操作系统会为进程分配一些必要的资源,如内存和唯一的进程ID
  • 就绪状态(Ready):当进程准备好执行时,它进入就绪状态。在这个状态下,进程已经拥有了它需要的所有资源,并且正在等待处理器分配执行时间片
  • 运行状态(Running):当进程被分配到处理器并正在执行时,它进入运行状态。在这个状态下,进程会占用CPU资源,并执行它的指令
  • 阻塞状态(Blocked):当进程等待某个事件的发生时,它进入阻塞状态。在这个状态下,进程不能占用CPU资源,直到等待的事件发生并使进程重新进入就绪状态
  • 终止状态(Terminated):当进程完成其执行或被操作系统强制终止时,它进入终止状态。在这个状态下,操作系统会回收进程所占用的资源

进程的状态可以通过一些事件来进行状态的转换:

  • 创建进程(New):当一个新进程被创建时,它进入新建状态
  • 就绪操作(Ready):当进程已准备好执行并正在等待处理器分配时间片时,它进入就绪状态
  • 调度进程(Running):当进程获得处理器并开始执行时,它进入运行状态
  • 阻塞操作(Blocked):当进程等待某些事件发生时,例如等待I/O操作完成时,它进入阻塞状态
  • 结束进程(Terminated):当进程完成执行时,它进入终止状态

进程的状态转换是由操作系统内部的调度程序控制的,调度程序根据各种算法来选择下一个要运行的进程,并将其从就绪状态转换到运行状态。如果进程正在运行时需要等待某些事件,例如I/O操作完成,它将进入阻塞状态。当等待的事件发生时,操作系统将进程从阻塞状态转换为就绪状态,以便它可以继续执行

进程的调度算法

程调度算法是操作系统中用于决定哪个进程可以使用 CPU 的算法。常见的进程调度算法有以下几种:

  • 先来先服务 (FCFS):按照进程到达 CPU 的先后顺序来决定进程的执行顺序
  • 最短作业优先 (SJF):按照进程需要执行的时间来决定进程的执行顺序
  • 优先级调度 (PS):按照进程的优先级来决定进程的执行顺序。进程的优先级可以是静态的,也可以是动态的
  • 时间片轮转 (RR):将 CPU 时间分成若干个时间片,每个进程分配一个时间片,当时间片用完后,就会进行进程切换
  • 多级反馈队列 (MFQ):将进程分为若干个队列,每个队列对应一个时间片大小,如果进程能在该时间片内完成,则执行完后立即退出,否则就被移到下一个队列,直到执行完或到达最后一个队列

不同的调度算法适用于不同的场景和需求,没有一种调度算法是最好的,需要根据具体的情况进行选择。

进程同步和互斥

进程同步和互斥是指在多个进程(线程)之间对共享资源的访问进行协调的一种机制。在多个进程(线程)并发执行的情况下,如果它们同时对共享资源进行访问,就可能会导致数据不一致或者其他问题,因此需要对进程的访问进行协调和控制,确保系统的正确性和可靠性。

进程同步指的是多个进程(线程)之间按照一定的顺序进行访问共享资源,避免出现冲突和竞争。常用的进程同步机制包括互斥锁、信号量、条件变量等。

互斥是指多个进程(线程)之间互相排斥,只有一个进程(线程)能够访问共享资源,其他进程(线程)需要等待该进程(线程)释放资源之后才能访问。互斥机制的实现通常使用互斥锁(Mutex),它是一种二进制信号量,只有两种状态:上锁和未上锁。

除了互斥机制之外,还有一种更高级别的同步机制,叫做条件变量(Condition Variable)。条件变量是基于互斥锁实现的,它允许进程(线程)在等待某个条件满足时,将自己阻塞挂起,而不是像互斥锁一样忙等待,从而可以提高系统的效率