`
444878909
  • 浏览: 638970 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

概述

多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux就是一个支持多任务的操作系统,比起单任务系统它的功能增强了许多.
当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。多任务系统中有3个功能单位:任务、进程和线程。

当操作系统使用某种策略允许两个或更多进程并发共享一个CPU时,它称作多任务运行,或多道程序运行.在规定的时间片过期或某些事件发生前,一直执行某个进程.然后,操作系统切换到另一个进程.这种切换十分迅速,给人一种这些进程是同时执行的错觉.而事实上,同一时刻在一个CPU上只能激活一个进程.这种进程间的切换在所有进程完成前一直进行.并发共享策略决定何时切换进程.该策略由操作系统或其他进程强制执行.

多任务可以分为3个级别:对话级,进程级,线程级.

任务是一个逻辑概念,指由一个软件完成的活动,或者是一系列共同达到某一目的的操作.通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务是进程或者是线程. 任务、进程和线程之间的关系:


对话级多任务

对话间的多任务由用户控制.用户运行若干应用程序或对话.对话创建一个虚拟计算机以及它的键盘,鼠标和屏幕.当执行一个应用程序或对话时.用户可以决定切换到另一个应用程序或对话.


如上图,当前SecureCRT是处于前台的,而其他窗口(用于编写博客的Chrome浏览器)是在后台,那么何为前台,后台呢?针对进程,拥有控制终端(当前交互的)的属于前台,而没有控制终端的属于后台进程;如同时打开SecureCRT和Chrome浏览器,当使用SecureCRT进行操作时,SecureCRT属于前台,而Chrome在后台执行;当然前台和后台是可以切换的,即上下文切换,这个切换由用户控制,所以称之为用户控制多任务.永久的后台进程一般叫守护进程.

进程级多任务

在对话中可以并发激活多个进程,这些进程相互合作来完成一个最终任务.例如,要完成这样一个任务:列出系统中所有由用户A启动的进程.该任务由两个进程组成,第一个进程要搜索系统中所有运行着的系统信息,这些内容通过管道传给对话中的另一个进程(第二个进程),这个进程可以过滤处包含用户A启动的进程信息.这两个进程按序列逐个地执行,最后得到系统中所有由用户A启动的进程.所有的进程共享CPU运行,一个进程运行一段时间,然后另一个进程再运行一段时间.操作系统控制进程间的切换,直到所有的进程运行完成.对于这样一种多个进程并发执行的多任务实现方式,称做进程级多任务.

进程是运行着的程序,是操作系统执行任务的基本单位.进程具备文本,数据和堆栈片断,以及它自己的资源.资源可以是文件,对象句柄,设备,信号量,互斥量,管道等等.操作系统管理进程以及它的资源.每个进程有着独立的运行环境,进程与进程间是相互隔离但又相互联系的,一个进程运行出错不会影响到其他的进程运行,两个进程之间可以通过管道等方式通信,或者通过信号量的工具同步运行.因此,进程是实现多任务处理的核心单元,我们将在后面的内容中详细的讨论它.

线程级多任务

进程完成单独的任务,每个任务又可能有自己的控制流程.这些流程由轻量级的进程构成,称做线程.进程的线程并发执行称做线程级多任务.让我们详细看看这个级别的多任务是如何相互作用的.当用户使用鼠标或键盘上的按键从一个对话移到另一个对话时,发生的是对话间的多任务.用户从当前对话切换到另一个对话,使得当前对话成为后台对话,同时激活了另一个对话,这时将发生上下文切换.进行上下文切换任务的进程或者线程抢占或释放了对处理器的控制权,而另一个进程或线程随即释放或得到了处理器的控制权.
在窗口系统中每时每刻都在进行着上下文切换,而进程级的上下文切换代价十分昂贵,频繁的切换不但不能体现多任务系统的优,反而降低了系统的整体反应速度.线程是轻量级的进程,它由进程创建,并与创建它的进程工作在同一内存空间中,不但可以与同一进程中的其他线程共享数据和文件描述符,而且线程间的切换过程也是十分快捷和低成本的.因此越来越多的多任务处理在底层都采取线程来实现.

多任务处理的特点

对话间的多任务是一个高级别的多任务,它受用户控制.进程间的多任务及多线程在低级别上实现,由设计它的程序员控制.程序员创建进程,并决定每个进程的线程数,任务的优先级,以及什么时候挂起,什么时候终止.

处于多任务执行状态下的大部分任务不能不间断执行,因为它们总是在等待使用I\O或另一个任务的终止.以基于进程的多任务为例,下图所示.


图中A进程将数据写入存储器,而进程B则从存储器中读取数据,为了保证数据的一致性,必须等待进程A的写入操作后进程B才可从存储器中读数据,同样,也必须当进程B完成读取操作后,进程A才能接着写数据.为了高效地完成多任务的操作,这两个进程必须采取一定的策略保存同步.

分享到:
评论

相关推荐

    Linux编程--Linux内核概念系统结构

    Linux内核概念系统结构 摘要 323 前言 324 第1章 系统结构 325 1.1 系统概述 325 1.2 内核的目标 325 1.3 内核结构的概述 325 1.4 支持多个开发人员 327 1.5 系统数据结构 328 1.5.1 任务列表 328 1.5.2 内存映射 ...

    Linux多线程 C语言编程关于多线程

    csdn Linux 下的多进程编程初步 摘要:多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix 系 ...和早期的Windows 不同,Unix/Linux 系统是真正实现多任务操作的系统,可以说,不使. . . ./ .

    LinuxC编程一站式学习

    Linux用户的使用习惯从来都是以敲命令为主,以鼠标操作为辅,从学编程的第一天起就要敲命令编译程序,等到你把这些基本概念都搞清楚了,你觉得哪个IDE好用你再去用,不过到那时候你可能会更喜欢vi或emacs而不是IDE了...

    linux编程白皮书

    本书对Linux操作系统及其编程作了整体的介绍,以支持用于开发软件的公开源码模型。对内存管理、进程及其通信机制、PCI、内核模块编程及内核系统结构作了详细的解释,且附有很多程序代码实例。对深入研究Linux下的...

    Linux编程从入门到精通

    linux内核编程 目 录 雷蒙序 简介 Linux文档工程小组“公告” 译者序 第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 ...

    Linux编程从入门到精通.rar

    第四部分 Linux内核概念系统结构 第1章 系统结构 第2章 子系统的系统结构 第3章 结论 336 ------------------------\ 第五部分 Linux内核具体系统结构 第1章 前言 第2章 系统结构 345 第3章 子系统结构 34 第4章 ...

    LINUX命令、编辑器与SHELL编程PDF.part01

    通常必须购买两本书才能达到精通的目的:一本关于Linux基本概念和技术的指南,再加上一个单独的参考手册。更糟糕的是,大多数Linux参考手册只是对man手册页的稍加整理。而现在有了一个好得多的解决方案。知名Linux...

    LINUX命令、编辑器与SHELL编程PDF.part02.rar

    通常必须购买两本书才能达到精通的目的:一本关于Linux基本概念和技术的指南,再加上一个单独的参考手册。更糟糕的是,大多数Linux参考手册只是对man手册页的稍加整理。而现在有了一个好得多的解决方案。知名Linux...

    嵌入式应用程序综合教程(微课版)-第1章 Linux标准IO编程

    嵌入式应用程序设计综合教程 微课版 华清远见嵌入式学院 刘洪涛 熊家主编。...多任务编程;进程间通信;多线程编程;Linux网络编程。整书下来没有废话,言简意赅,非常适合初学和入门,以及建立清晰的概念。

    Linux内核编程实战经验谈

    Linux以其源码开放、配置灵活等不可多得的优越性吸引着越来越多的编程爱好者深入Linux的内核开发。笔者近来实践过一个Linux的实时化改造课题任务,积累了一点Linux内核编程的实战经验,在这里想就编译内核、增加系统...

    Linux程序设计参考书-六部

    Linux编程实例第1章Hello, World1.1 内核模块的Makefiles文件1.2 多重文件内核模块第2章字符设备文件第3章/proc文件系统第4章把/proc用于输入第5章把设备文件用于输入第6章启动参数第7章系统调用第8章阻塞处理第9章...

    LINUX编程白皮书 (全集)

    第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 ...

    Linux编程资料

    第二部分 Linux内核模块编程指南 致谢 前言 第1章 Hello, World 145 1.1 内核模块的Makefiles文件 146 1.2 多重文件内核模块 147 第2章 字符设备文件 149 第3章 /proc文件系统 158 第4章 把/proc用于输入 162 第5章 ...

    Linux多线程编程快速入门

    本文主要对Linux下的多线程进行一个入门的介绍,虽然是入门,但是十分详细,希望大家通过本文所述,对Linux多线程编程的概念有一定的了解。具体如下。 1 线程基本知识 进程是资源管理的基本单元,而线程是系统调度的...

    linux多线程编程(五)

    线程  线程是计算机中独立运行的... 使用多线程的理由之一是和进程相比,它是一种非常“节俭”的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它

    LINUX编程白皮书

    非常全的 讲linux编程的经典书籍。 本书对Linux操作系统及其编程作了整体的介绍,以支持用于开发软件的公开源码模型。对内存管理、进程及其通信机制、PCI、内核模块编程及内核系统结构作了详细的解释,且附有很多...

    LINUX命令编辑器与SHELL编程(中文)01

    通常必须购买两本书才能达到精通的目的:一本关于Linux基本概念和技术的指南,再加上一个单独的参考手册。更糟糕的是,大多数Linux参考手册只是对man手册页的稍加整理。而现在有了一个好得多的解决方案。知名Linux ...

    LINUX操作系统(电子教案,参考答案)

    Linux是一个多任务、多用户的操作系统,它以其良好的特性和资源的免费性而得到了蓬勃的发展。  本书通过大量的图示和实例,深入浅出的介绍了Linux的基本原理和应用。主要包括Linux的基本概念和操作,Linux的树型...

Global site tag (gtag.js) - Google Analytics