目录
多任务处理指用户可以同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务。
多任务操作系统使用某种调度策略支持多个任务并发执行。
事实上,(单核)处理器在某一时刻只能执行一个任务。由于任务会频道切换执行,因此给用户多个任务同时运行的感觉。
1.任务
任务是个逻辑概念,指由一个软件完成的任务,或者是为了实现某个目地的一系列操作。通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务是进程或者线程。
2.进程
2.1 进程的基本概念
进程是指具有独立功能的程序在某一个数据集合上的一次动态集合上的一次动态执行过程,它是操作系统进行资源分配和调度的基本单元。一次任务的运行可以激活多个进程,这些进程相互合作来完成该任务的一个最终目标。
进程具有并发性、动态性、交互性、独立性等主要特性。
Linux系统中主要有:①.交互性进程;②.批处理进程;③.守护进程;
2.2 linux下的进程结构
(1)进程状态。
Linux中的进程有以下几种主要状态。
① 运行状态(TASK_RUNNING):进程当前正在运行,或者正在运行队列中等待调度。
② 可中断的阻塞状态(TASK_INTERRUPTIBLE):进程处于阻塞(睡眠)状态,正在等待某些事件发生或能够占用某些资源。处在这种状态下的进程可以被信号中断。接收到信号或被显式地唤醒呼叫(如调用wake up系列宏: wake up, wake up interruptible )唤醒之后,进程将转变为TASK RUNNING状态。
③不可中断的阻塞状态(TASK_UNINTERRLPTIBLE:此进程状态类似于可中断的阻塞状态(TASK INTERRUPTIBLE),只是它不会处理信号,把信号传递到这种状态下的进程不能改变它的状态。在一些特定的情况下(进程必须等待,直到某些不能被中断的事件发生),这种状态是很有用的。只有在它所等待的事件发生时,进程才被显式地唤醒呼叫唤醒。
④暂停状态(TASK_STOPPED ):进程的执行被暂停,当进程收到SIGSTOP, SIGTSTPSIGTTIN, SIGTTOU等信号,就会进入暂停状态。
⑤僵死状态(EXIT_ZOMBIE):子进程运行结束,父进程尚未使用wait函数族(如使用waitpid()函数)等系统调用来回收退出状态。处在该状态下的子进程已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其父进程收集。
⑥消亡状态(EXIT_DEAD):这是最终状态,父进程调用wait函数族回收之后,子进程彻底由系统删除。
他们之间的转换关系:
2.3 进程的创建`执行和终止
2.4 进程的内存结构
3.线程
进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段和堆栈区,这就造成进程在进行切换时操作系统的开销比较大。为了提高效率,操作系统又引入另外一个概念—线程,也称为轻量级进程。
线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享。因此,线程的上下文切换的开销比进程小的多。
一个进程可以拥有多个线程,其中每个线程共享该进程所拥有的资源。由于线程共享了进程的资源和地址空间,因此,任何线程对系统资源的操作都会给其他线程带来影响。由此,多线程的同步是非常重要的问题。
4.进程和线程的区别
4.1 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
4.2 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。
4.3 拥有资源:进程是拥有资源的一个独立单位,线程不拥有独立系统资源,但是可以访问隶属于进程的资源。
4.4 开销:在创建或者撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤销线程。