您的位置:首页 > 运维架构 > Linux

Linux的多任务编程-基本概念

2013-09-16 19:58 90 查看
概述
多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux就是一个支持多任务的操作系统,比起单任务系统它的功能增强了许多.
当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。多任务系统中有3个功能单位:任务、进程和线程。
当操作系统使用某种策略允许两个或更多进程并发共享一个CPU时,它称作多任务运行,或多道程序运行.在规定的时间片过期或某些事件发生前,一直执行某个进程.然后,操作系统切换到另一个进程.这种切换十分迅速,给人一种这些进程是同时执行的错觉.而事实上,同一时刻在一个CPU上只能激活一个进程.这种进程间的切换在所有进程完成前一直进行.并发共享策略决定何时切换进程.该策略由操作系统或其他进程强制执行.
多任务可以分为3个级别:对话级,进程级,线程级.
任务是一个逻辑概念,指由一个软件完成的活动,或者是一系列共同达到某一目的的操作.通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务是进程或者是线程. 任务、进程和线程之间的关系:
对话级多任务
对话间的多任务由用户控制.用户运行若干应用程序或对话.对话创建一个虚拟计算机以及它的键盘,鼠标和屏幕.当执行一个应用程序或对话时.用户可以决定切换到另一个应用程序或对话.
当前SecureCRT是处于前台的,而其他窗口(用于编写博客的Chrome浏览器)是在后台,那么何为前台,后台呢?针对进程,拥有控制终端(当前交互的)的属于前台,而没有控制终端的属于后台进程;如同时打开SecureCRT和Chrome浏览器,当使用SecureCRT进行操作时,SecureCRT属于前台,而Chrome在后台执行;当然前台和后台是可以切换的,即上下文切换,这个切换由用户控制,所以称之为用户控制多任务.永久的后台进程一般叫守护进程.
进程级多任务
在对话中可以并发激活多个进程,这些进程相互合作来完成一个最终任务.例如,要完成这样一个任务:列出系统中所有由用户A启动的进程.该任务由两个进程组成,第一个进程要搜索系统中所有运行着的系统信息,这些内容通过管道传给对话中的另一个进程(第二个进程),这个进程可以过滤处包含用户A启动的进程信息.这两个进程按序列逐个地执行,最后得到系统中所有由用户A启动的进程.所有的进程共享CPU运行,一个进程运行一段时间,然后另一个进程再运行一段时间.操作系统控制进程间的切换,直到所有的进程运行完成.对于这样一种多个进程并发执行的多任务实现方式,称做进程级多任务.
进程是运行着的程序,是操作系统执行任务的基本单位.进程具备文本,数据和堆栈片断,以及它自己的资源.资源可以是文件,对象句柄,设备,信号量,互斥量,管道等等.操作系统管理进程以及它的资源.每个进程有着独立的运行环境,进程与进程间是相互隔离但又相互联系的,一个进程运行出错不会影响到其他的进程运行,两个进程之间可以通过管道等方式通信,或者通过信号量的工具同步运行.因此,进程是实现多任务处理的核心单元,我们将在后面的内容中详细的讨论它.
线程级多任务
进程完成单独的任务,每个任务又可能有自己的控制流程.这些流程由轻量级的进程构成,称做线程.进程的线程并发执行称做线程级多任务.让我们详细看看这个级别的多任务是如何相互作用的.当用户使用鼠标或键盘上的按键从一个对话移到另一个对话时,发生的是对话间的多任务.用户从当前对话切换到另一个对话,使得当前对话成为后台对话,同时激活了另一个对话,这时将发生上下文切换.进行上下文切换任务的进程或者线程抢占或释放了对处理器的控制权,而另一个进程或线程随即释放或得到了处理器的控制权.
在窗口系统中每时每刻都在进行着上下文切换,而进程级的上下文切换代价十分昂贵,频繁的切换不但不能体现多任务系统的优,反而降低了系统的整体反应速度.线程是轻量级的进程,它由进程创建,并与创建它的进程工作在同一内存空间中,不但可以与同一进程中的其他线程共享数据和文件描述符,而且线程间的切换过程也是十分快捷和低成本的.因此越来越多的多任务处理在底层都采取线程来实现.
多任务处理的特点
对话间的多任务是一个高级别的多任务,它受用户控制.进程间的多任务及多线程在低级别上实现,由设计它的程序员控制.程序员创建进程,并决定每个进程的线程数,任务的优先级,以及什么时候挂起,什么时候终止.
处于多任务执行状态下的大部分任务不能不间断执行,因为它们总是在等待使用I\O或另一个任务的终止.以基于进程的多任务为例. 将夜吧 www.jiangyea.com

图中A进程将数据写入存储器,而进程B则从存储器中读取数据,为了保证数据的一致性,必须等待进程A的写入操作后进程B才可从存储器中读数据,同样,也必须当进程B完成读取操作后,进程A才能接着写数据.为了高效地完成多任务的操作,这两个进程必须采取一定的策略保存同步.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: