进程与线程
-
进程是资源分配的最小单位,线程是CPU调度的最小单位
-
进程
-
进程就是一个正在执行的程序的实例,是系统进行资源分配和调度的基本单位。在当代面向线程设计的计算机结构中,进程是线程的容器。
-
进程的组成
-
进程由进程控制块、数据段、正文段组成。
-
进程控制块:程序计数器、进程状态、CPU暂存器(中断时用于存储寄存器的值)、虚拟物理内存对应关系表、文件描述符、存储器管理、优先级等调度用参数等。
-
数据段:用户栈区、堆区、数据区等。
-
正文段:正文段是可重入的程序,能被若干进程共享。为了管理可共享的正文段,UNIX设置了一张正文表,每个正文段都占用一个表目,用来指出该正文段在内存和磁盘上的位置、段的大小以及调用该段的进程数等情况。
-
进程的创建
-
进程的创建主要有两种方式:系统初始化、程序执行了创建进程的系统调用。
-
在unix系统中,创建进程是使用系统调用fork(),创建出的进程与父进程拥有相同的内存映像、环境字符串、打开的文件。之后可以通过系统调用execve() 来更改内存映像以运行其他程序。
-
父子进程拥有不同的地址空间,子进程创建时的内存映像是父进程的内存的副本,因此一个进程修改内存不会影响其他进程。(存在不可写的内存区域是父子进程共享一块的情况,以及内存可以通过写时复制cow来共享相同的内存只有修改时才复制到进程私有区域)
-
进程的终止
-
进程的终止主要有几种情况:正常退出,出错退出,被其他进程杀死。
-
在unix中进程执行结束可以通过系统调用exit() 终止进程。
-
-
线程
- 一般来说现在的操作系统的实现都是一个进程中存在多个线程,多个线程共享这个进程的资源。
- 一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。
-
区别
- 进程是资源分配的最小单位,线程是程序执行调度的最小单位。
- 进程需要为其分配独立的地址空间,系统需要为进程维护各种段空间。
- 线程通信方便,可以使用全局变量等数据。进程需要ipc来进行通信。
- 进程切换成本较高,需要重新装入寄存器以及高速缓存等。