Linux内核学习010——进程管理(六)
线程
进程(process)是计算机中已经运行程序的实体,是系统进行资源分配的基本单位。每个进程都被操作系统分配了一定的资源,比如:内存、文件、信号量等。程序本身只是指令和数据的集合,进程才是程序的执行实体。在现代操作系统中,引入了线程的概念。线程(thread)是操作系统能够进行运算调度的最小单位,其被包含在进程之中,是进程中的实际运作单位。一个进程内可以由多个线程并发执行,进程可以视为线程的容器。线程才是操作系统调度和分派的基本单元,是程序执行流的最小单元。同属于一个进程的线程之间共享资源,比如:虚拟地址空间、文件描述符、信号量等。线程页有各自的调用栈,寄存器环境和线程本地存储。
Linux中线程的实现
Linux实现线程的机制非常特殊,其并没有线程的概念,而是将所有的线程都当作进程来实现。内核中并没有特别的调度算法或是数据结构表示线程,相反,线程被视为一个与其他进程共享某些资源的进程。某个线程都拥有各自的task_struct,因此其在内核中就是一个普通的进程(知识和其他的某些进程共享一些资源)。
MS Windos或者Sun Solaris等操作系统的实现与此差异很大,这些系统都在内核中提供了专门的支持线程的机制(通常叫做轻量级进程)。在这些系统中,相较于重量级进程,线程被抽象为一种耗费较少资源,运行迅速的执行单元。而对于Linux而言,线程是实现进程间共享资源的手段。
内核线程
内核需要在后台执行一些操作,这一任务是通过内核线程(独立运行在内核空间的标准进程)完成的。内核线程和普通进程讲的区别在于内核线程没有独立的地址空间,其只在内核空间中运行,但是可以被调度和抢占。
内核线程是直接由内核本身启动的进程。实际上,内核线程是将内核函数委托给独立的进程。内核线程和其他的进程并行执行,也被称为内核守护进程。