Linux下多任务介绍
首先,先简单的介绍一下什么叫多任务系统?任务、进程、线程分别是什么? 它们之间的区别是什么?,从而可以宏观的了解一下这三者,然后再针对每一个仔细的讲解。
什么叫 多任务系统?多任务系统指可以同一时间内运行多个应用程序,每个应用程序被称作一个任务。
任务 定义:任务是一个逻辑概念,指由一个软件完成的任务,或者是一系列共同达到某一目的的操作。
进程 定义:进程是指一个具有独立功能的程序在某个数据集上的一次动态执行过程,它是系统进行资源分配和调度 的最小单元。
线程定义:线程是进程内独立的一条运行路线,是处理器调度的最小单元,也可以成为轻 量级进程。
看了定义,有点晕,还是通俗的说一下它们的区别吧。①通常一个任务是一个程序的一次 执行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务就是进程或线程。②一个进程可以 拥有多个线程,每个线程必须有一个父进程。
任务
任务是一个逻辑概念,指由一个软件完成的 任务,或者是一系列共同达到某一目的的操作。通常一个任务是一个程序的一次执行,一个任务包含一个或多 个完成独立功能的子任务,这个独立的子任务就是进程或线程。例如,一个杀毒软件的一次运行是一个任务, 目的是从各种病毒的侵害中保护计算机系统,这个任务包含多个独立功能的子任务(进程或线程),包括实时监 控功能、定时查杀功能、防火墙功能及用户交互功能等。任务、进程和线程之间的关系如图1所示
进 程
进程的基本概念
进程是指一个具有独立功能的程序在某个数据集上的一次动态执行过程,它 是系统进行资源分配和调度的基本单元。一次任务的运行可以并发激活多个进程,这些进程相互合作来完成该 任务的一个最终目标。
进程具有并发性、动态性、交互性、独立性和异步性等主要特性。
进程 和程序是有本质区别的:程序是静态的一段代码,是一些保存在非易失性存储器的指令的有序集合,没有任何 执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括动态创建、调度和消亡的整个过程,它是 程序执行和资源管理的最小单位。
Linux下的进程结构
进程不但包括程序的指令和数据,而且 包括程序计数器和处理器的所有寄存器及存储临时数据的进程堆栈,因此,正在执行的进程包括处理器当前的 一切活动。
因为linux是一个多任务多进程的操作系统,所以其他的进程必须等到系统将处理器使用权 分配给自己之后才能运行。当正在运行的进程等待其他的系统资源时,linux内核将取得处理器的控制权,并 将处理器分配给其他正在等待的进程,他按照内核中的调度算法决定将处理器分配给哪一个进程,也就是说, 内核不会让处理器闲着。
内核将所有进程存放在双向循环链表(进程链表)中,其中链表的头是 init_task 描述符。链表的每一项都是类型为 task_struct,称为进程描述符的结构,该结构包含了一个进程 相关的所有信息,定义在<include/linux/sched.h>文件中。task_struct内核结构比较大,它能完整的 描述一个进程,如进程的状态、进程的基本信息、进程标识符、内存相关信息、父进程相关信息、与进程相关 的终端信息、当前工作目录、打开的文件信息、所接收的信号信息等。