一:进程的定义
进程是操作系统分配资源的基本单位,每个进程之间的资源互不相通,不进行资源共享(除非使用管道或者其他共享资源的手段),每个进程都有独立的PCB(操作系统用于管理进程的数据结构,包含进程的基本信息,如进程ID、状态、优先级、程序计数器、寄存器集合、进程的内存管理信息等),每个子进程都有他的父进程,子进程结束以后,父进程负责管理子进程的资源回收,通常情况下,一个进程的崩溃不会影响另一个进程(进程之间资源的独立性)。
进程的几种状态:
-
就绪(Ready)状态:
进程已准备好执行,等待被调度器选中并分配CPU时间。在多任务操作系统中,多个进程可能同时处于就绪状态,等待CPU资源。 -
运行(Running)状态:
进程正在获得CPU时间并执行。在单核CPU上,任何时刻只有一个进程处于运行状态;在多核CPU上,可以有多个进程同时处于运行状态。 -
阻塞(Blocked)状态:
进程因为等待某个事件(如I/O操作、获取信号量等)而暂时停止执行。在等待的事件完成之前,进程不能继续执行。 -
等待(Waiting)状态:
进程因为等待某个条件发生而挂起,不会对CPU资源进行竞争。这种状态通常用于同步和通信,进程需要等待特定的事件或信号。 -
挂起(Suspended)状态:
进程被操作系统挂起,不能执行。挂起状态可以是用户请求的,也可以是操作系统为了资源管理而自动进行的。挂起的进程可以被恢复到就绪状态。
有什么类型的进程,以及产生原因
-
用户进程:
这些进程执行用户级别的任务,如运行应用程序、处理用户输入等。它们通常直接与用户交互。 -
守护进程(Daemon)
守护进程是系统进程,它们在后台运行,通常独立于控制终端,周期性地执行某些任务,如Web服务器和数据库服务器。它们被设计为在系统启动时自动启动,并在整个系统运行期间保持活动状态,无需用户干预。 -
僵尸进程(Zombie Process)
僵尸进程产生于子进程结束后,父进程没有调用wait()
或waitpid()
来获取子进程的退出状态。在这种情况下,子进程的进程描述符(包括进程号PID、退出状态等)仍然保存在系统中。危害:僵尸进程会占用系统资源,尤其是进程表中的条目。如果系统中存在大量的僵尸进程,可能会导致进程表耗尽,从而无法创建新的进程。 -
孤儿进程(Orphan Process)
孤儿进程是指父进程结束后仍在运行的子进程。当一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程就成为孤儿进程。孤儿进程会被操作系统的init进程(PID为1)收养,并由init进程完成状态收集工作。危害:孤儿进程本身不会对系统造成危害,因为它们最终会被init进程处理。但是,如果孤儿进程非常多,它们可能会间接增加系统负担,因为init进程需要为它们做额外的管理工作。
二:线程的定义
线程是系统运算和调度的最小单位,它是存在于进程当中的
线程的特点:
-
轻量级:
线程相比于进程是更轻量级的实体,它们共享进程的资源,如内存空间和文件描述符,但拥有自己的程序计数器、寄存器集合和堆栈。 -
并发性:
在多线程程序中,多个线程可以并发执行,提高了程序的执行效率和响应速度。 -
资源共享:
同一进程内的线程可以共享进程的资源,如内存空间和文件句柄,这使得线程间通信和数据共享更加容易。 -
独立调度:
每个线程都有自己的执行栈和程序计数器,可以被独立调度和分派到不同的处理器上执行。 -
上下文切换:
线程的上下文切换比进程的上下文切换要快,因为它们共享许多资源,不需要重新加载内存映射等。
进程与线程的相同点和不同点
相同点
-
调度:
进程和线程都可以被操作系统调度执行。 -
并发性:
进程和线程都可以实现并发执行,提高程序的效率。 -
系统调用:
进程和线程都可以进行系统调用,请求操作系统的服务。
不同点
-
资源拥有:
- 进程:拥有独立的地址空间,一个进程的资源不与其他进程共享。
- 线程:同一进程内的线程共享进程的地址空间和资源。
-
创建和管理开销:
- 进程:创建和管理进程的开销相对较大,因为需要为每个进程分配独立的资源。
- 线程:创建和管理线程的开销较小,因为它们可以共享进程的资源。
-
通信方式:
- 进程:进程间通信(IPC)需要特定的机制,如管道、消息队列、共享内存等。
- 线程:线程间可以直接读写共享变量来进行通信,不需要特定的IPC机制。
-
独立性:
- 进程:进程是独立运行的实体,一个进程的崩溃不会直接影响到其他进程。
- 线程:线程之间是相互依赖的,一个线程的崩溃可能会导致整个进程的崩溃。
-
上下文切换:
- 进程:进程间的上下文切换开销较大,因为涉及到虚拟地址空间的切换。
- 线程:线程间的上下文切换开销较小,因为它们共享相同的地址空间。
-
执行单元:
- 进程:进程是操作系统进行资源分配和调度的基本单位。
- 线程:线程是操作系统能够进行运算调度的最小单位。
-
调度优先级:
- 进程:调度是基于进程进行的,每个进程有独立的调度优先级。
- 线程:线程可以有自己的调度优先级,也可以与进程共享优先级。
-
生命周期:
- 进程:进程的生命周期从创建开始,到执行完成或被终止结束。
- 线程:线程的生命周期从创建开始,到执行完成、被终止或其所属进程结束