0%

Linux进程管理

我们拥有操作系统就是为了运行用户程序,因此,进程管理是操作系统的心脏,Linux也不例外。

进程

进程就是处于执行期的程序(目标代码存放在某种介质上)。但进程并不仅仅局限于一段可执行代码(Unix称其为代码段,text section),通常进程还包含其它资源,例如打开的文件、挂起的信号、内核内部的数据、处理器状态、一个或多个具有内存映射的内存地址空间及一个或多个执行线程(Thread of execution)等。实际上,进程是处于执行期程序以及相关资源的总称。可能存在两个或多个不同进程执行的是同一个程序。并且多个并存的进程还可以共享许多诸如打开的文件、地址空间之类的资源。
进程从创建它的时刻开始存活,在Linux系统中,通常通过fork()系统调用实现,该系统调用通过复制一个现有的进程来创建一个全新的进程。调用fork()的进程称为父进程,新产生的进程称为子进程。系统调用结束后,在返回点这个相同的位置,父进程恢复执行,子进程开始执行。fork()系统调用从内核返回两次,一次回到父进程,另一次回到新产生的子进程。

线程

执行线程,简称线程(Thread),是在进程中活动的对象。每个线程都有一个独立的程序计数器、进程栈和一组进程计数器。内核调度的对象是线程而不是进程。在传统的Unix系统中,一个进程只包含一个线程,但是对于现代操作系统来说,一个进程包含多个线程是非常常见的。Linux对进程和线程并不特别区分,线程只不过是一种特殊的进程。

在现代操作系统中,进程提供两种虚拟机制:虚拟处理器虚拟内存。虽然实际上可能是许多进程正在分享一个处理器,但虚拟处理器给进程一种假象,让这些进程觉得自己在独享处理器。而虚拟内存让进程在分配和管理内存时觉得自己拥有整个系统的所有内存资源。同一进程的线程之间可以共享虚拟内存,但每个都拥有各自独立的虚拟处理器。

参考文档

《Linux内核设计与实现(第三版)》