ARM汇编语言程序设计基础第8章嵌入式系统

上传人:沈*** 文档编号:161086406 上传时间:2022-10-12 格式:PPT 页数:93 大小:345KB
收藏 版权申诉 举报 下载
ARM汇编语言程序设计基础第8章嵌入式系统_第1页
第1页 / 共93页
ARM汇编语言程序设计基础第8章嵌入式系统_第2页
第2页 / 共93页
ARM汇编语言程序设计基础第8章嵌入式系统_第3页
第3页 / 共93页
资源描述:

《ARM汇编语言程序设计基础第8章嵌入式系统》由会员分享,可在线阅读,更多相关《ARM汇编语言程序设计基础第8章嵌入式系统(93页珍藏版)》请在装配图网上搜索。

1、第第8章章 嵌入式系统软件及操作系统基础嵌入式系统软件及操作系统基础8.1 嵌入式软件基础嵌入式软件基础n8.1.1 嵌入式软件的特点n应用在嵌入式计算机系统当中的各种软件统称为嵌入式软件,作为嵌入式系统的一个组成部分,目前嵌入式软件的种类和规模都得到了极大的发展,形成了一个完整、独立的体系。除了具有通用软件的一般特性,同时还具有一些与嵌入式系统密切相关的特点,如:n(l)规模较小n在一般情况下,嵌入式系统的资源多是比较有限的,要求嵌入式软件必须尽可能地精简,多数的嵌入式软件都在几MB以内。n(2)开发难度大n嵌入式系统由于硬件资源的有限,使得嵌入式软件在时间和空间上都受到严格的限制,需要开发

2、人员对编程语言、编译器和操作系统有深刻的了解,才有可能开发出运行速度快、存储空间少、维护成本低的软件。嵌入式软件一般都要涉及到底层软件的开发,应用软件的开发也是直接基于操作系统的,这就要求开发人员具有扎实的软、硬件基础,能灵活运用不同的开发手段和工具,具有较丰富的开发经验。嵌入式软件的运行环境和开发环境比PC机复杂,嵌入式软件是在目标系统上运行的,而嵌入式软件的开发工作则是在另外的开发系统中进行,当应用软件调试无误后,再把它放到目标系统上去。n(3)高实时性和可靠性要求n具有实时处理的能力是许多嵌入式系统的基本要求,实时性要求软件对外部事件做出反应的时间必须要快,在某些情况下还要求是确定的、可

3、重复实现的,不管系统当时的内部状态如何,都是可以预测的。同时,对于事件的处理一定要在限定的时间期限之前完成,否则就有可能引起系统的崩溃。n在航天控制、核电站、工业机器人等实时系统对嵌入式软件的可靠性要求是非常高的,一旦软件出了问题,其后果是非常严重的。n(4)软件固化存储n为了提高系统的启动速度、执行速度和可靠性,嵌入式系统中的软件一般都固化在存储器芯片或微处理器中。8.1.2嵌入式软件的分类n1系统软件系统软件n系统软件控制和管理嵌入式系统资源,为嵌入式应用提供支持的各种软件,如设备驱动程序、嵌入式操作系统、嵌入式中间件等。n2应用软件应用软件n应用软件是嵌入式系统中的上层软件,它定义了嵌入

4、式设备的主要功能和用途,并负责与用户进行交互。应用软件是嵌入式系统功能的体现,如飞行控制软件、手机软件、MP3播放软件、电子地图软件等,一般面向于特定的应用领域,。n3支撑软件支撑软件n支撑软件指辅助软件开发的工具软件,如系统分析设计工具、在线仿真工具、交叉编译器、源程序模拟器和配置管理工具等。n在嵌入式系统当中,系统软件和应用软件运行在目标平台的(即嵌入式设备上),而对于各种软件开发工具来说,它们大部分都运行在开发平台(PC机)上,运行Windows或Linux操作系统。8.1.3 嵌入式软件的体系结构n1无操作系统的嵌入式软件无操作系统的嵌入式软件n早期在嵌入式系统的应用范围主要集中在控制

5、领域,硬件的配置比较低,嵌入式软件的设计主要是以应用为核心,应用软件直接建立在硬件上,没有专门的操作系统,软件的规模也很小。n无操作系统的嵌入式软件主要采用循环轮转和中断(前后台)两种实现方式。n(1)循环轮转方式n循环轮转方式的基本设计思想是:把系统的功能分解为若干个不同的任务,放置在一个永不结束的循环语句当中,按照时间顺序逐一执行。当程序执行完一轮后,又回到程序的开头重新执行,循环不断。n循环轮转方式的程序简单、直观、开销小、可预测。软件的开发可以按照自顶向下、逐步求精的方式,将系统要完成的功能逐级划分成若干个小的功能模块进行编程,最后组合在一起。循环轮转方式的软件系统只有一条执行流程和一

6、个地址空间,不需要任务之间的调度和切换,其程序的代码都是固定的,函数之间的调用关系也是明确的,整个系统的执行过程是可预测的。n循环轮转方式的缺点是程序必须按顺序执行,无法处理异步事件,缺乏并行处理的能力。缺乏硬件上的时间控制机制,无法实现定时功能。n(2)中断方式n中断方式又称为前后台系统形式,系统在循环轮转方式的基础上增加了中断处理功能。ISR(Interrupt Service Routine,中断服务程序)负责处理异步事件,即前台程序(foreground),也称为事件处理级程序。而后台程序(background)是一个系统管理调度程序,一般采用的是一个无限的循环形式,负责掌管整个嵌入式

7、系统软、硬件资源的分配、管理以及任务的调度。后台程序也称为任务级程序。一般情形下,后台程序会检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。而一些对实时性有要求的操作通常由中断服务程序来完成,大多数的中断服务程序只做一些最基本的操作,如标记中断事件的发生等,其余的事情会延迟到后台程序去完成。n2有操作系统的嵌入式软件有操作系统的嵌入式软件n从20世纪80年代开始,操作系统出现在嵌入式系统上。如今,嵌入式操作系统在嵌入式系统中广泛应用,尤其是在功能复杂、系统庞大的应用中显得愈来愈重要。在应用软件开发时,程序员不是直接面对嵌入式硬件设备,而是采用一些嵌入式软件开发环境,在操作系统

8、的基础上编写程序。n在控制系统中,采用前后台系统体系结构的软件,在遇到强干扰时,可能会使应用程序产生异常、出错,甚至死循环的现象,从而造成系统的崩溃。而采用嵌入式操作系统管理的系统,在遇到强干扰时,可能只会引起系统中的某一个进程被破坏,但这可以通过系统的监控进程对其进行修复,系统具有自愈能力,不会造成系统崩溃。n在嵌入式操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程的思想,将整个程序分解为多个任务模块,每个任务模块的调试、修改几乎不影响其他模块。利用商业软件提供的多任务调试环境,可大大提高系统软件的开发效率,降低开发成本,缩短开发周期。n嵌入式操作系统本身是可以剪裁的,嵌入式系统

9、外设、相关应用也可以配置,所开发的应用软件可以在不同的应用环境、不同的处理器芯片之间移植,软件构件可复用,有利于系统的扩展和移植。n嵌入式软件的体系结构图如图8.1.2所示,最底层的是嵌入式硬件系统,包括嵌入式微处理器、存储器、键盘、LCD显示器等输入输出设备。在硬件层之上的是设备驱动层,它负责与硬件直接打交道,并为操作系统层软件提供所需的驱动支持。操作系统层可以分为基本部分和扩展部分,基本部分是操作系统的核心,负责整个系统的任务调度、存储管理、时钟管理和中断管理等功能;扩展部分为用户提供网络、文件系统、图形用户界面GUI、数据库等扩展功能,扩展部分的内容可以根据系统的需要来进行剪裁。在操作系

10、统的上面是一些中间件软件。最上层是网络浏览器、MP3播放器、文本编辑器、电子邮件客户端、电子游戏等各种应用软件,实现嵌入式系统的功能。图8.1.2 嵌入式软件体系结构8.1.4 嵌入式系统的设备驱动n嵌入式系统的设备驱动层用来完成嵌入式系统硬件设备所需要的一些软件初始化和管理。设备驱动层直接对硬件进行管理和控制,并为上层软件提供所需的驱动支持。n1板级支持包板级支持包n设备驱动层也称为BSP(Board Support Package,板级支持包),在BSP中把所有与硬件相关的代码都封装起来,为操作系统提供一个虚拟的硬件平台,操作系统运行在这个虚拟的硬件平台上。在BSP当中,使用一组定义好的编

11、程接口来与BSP进行交互,并通过BSP来访问真正的硬件。在嵌入式系统中,BSP类似于PC系统中的BIOS和驱动程序。BSP把嵌入式操作系统与具体的硬件平台隔离开来。n一般来说,BSP是针对某个特定的单板而设计的,系统都会提供相应的演示版本的BSP(最小系统BSP)。BSP对于用户(指系统开发人员)是开放的,用户可以根据不同的硬件需求对其进行改动或二次开发。在实际开发一个嵌入式系统的时候,通常可以找到一个与自己的硬件系统相近的演示版本的BSP,并以此为基础,进行修改和完善,以适应不同单板的需求。BSP主要包括BootLoader(引导加载程序)和设备驱动程序两个方面的内容。n对于不同的嵌入式操作

12、系统,BSP的具体结构和组成是不相同的。n2BootLoadernBootLoader(引导加载程序)是在操作系统内核运行之前运行的一小段程序。通过这段程序,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境设置到一个合适的状态,以便为最终调用操作系统内核做好准备。BootLoader用来完成整个系统的加载启动任务。通常在系统上电或复位时,BootLoader程序从地址0 x00000000处开始执行。nBootLoader的功能与嵌入式系统的硬件平台直接相关,不同的CPU体系结构和板级设备配置,BootLoader的功能不同。一般来说,BootLoader主要包含片级初始化、板级初

13、始化和加载内核等一些基本功能。n(1)片级初始化n片级初始化是一个纯硬件的初始化过程,把微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。片级初始化主要完成设置微处理器的核心寄存器和控制寄存器、微处理器的核心工作模式及其局部总线模式等初始化。n(2)板级初始化n板级初始化是一个同时包含有软件和硬件在内的初始化过程,通过正确地设置各种寄存器的内容来完成微处理器以外的其他硬件设备的初始化。例如,初始化LED显示设备、定时器、串口通信和内存控制器,建立内存空间的地址映射,设置中断控制寄存器和某些软件的数据结构和参数等。n(3)加载内核n将操作系统和应用程序的映像从Flash存储器复制到系统的

14、内存当中,然后跳转到系统内核的第一条指令处继续执行。n3设备驱动程序设备驱动程序n在一个嵌入式系统中,可以没有操作系统,但设备驱动程序是必不可少的。设备驱动程序是一组库函数,用来对硬件进行初始化和管理,并向上层软件提供访问接口。n不同功能的硬件设备,它们的设备驱动程序是不同的。但大多数的设备驱动程序都具有硬件启动(初始化)、硬件关闭(关机)、硬件停用(暂停)、硬件启用(重新启用)、读操作(读取数据)、写操作(写入数据)等基本功能。n设备驱动程序通常可以完成一些特定的功能,这些功能一般采用函数的形式来实现,这些函数有分层结构和混合结构两种组织结构形式。n在分层结构中,设备驱动程序中的函数分为硬件

15、接口和调用接口两种类型。硬件接口直接跟硬件打交道的,直接去操作和控制硬件设备;调用接口不直接与硬件打交道,它们调用硬件接口当中的函数,与上层软件(包括操作系统、中间件和应用软件)打交道的。分层结构把所有与硬件有关的细节都封装在硬件接口当中,在硬件要升级时,只需要改动硬件接口当中的函数即可,而上层接口当中的函数不用做任何修改。n在混合结构中,上层接口和硬件接口的函数是混在一起、相互调用的,之间没有明确的层次关系。8.1.5 嵌入式中间件n中间件是一种软件平台技术,在银行、证券、电信等行业的大型计算机应用系统中广泛应用。近年来,中间件技术也被引入到嵌入式系统的设计中,并与实时多任务操作系统紧密结合

16、。利用中间件技术可以使用户把精力集中到系统功能的实现上,实现嵌入式系统的软硬件协同设计。n嵌入式中间件是指不包括操作系统内核、设备驱动程序和应用软件在内的所有系统软件。嵌入式中间件把原本属于应用软件层的一些通用的功能模块抽取出来,形成独立的一层软件,为应用软件提供一个灵活、安全、移植性好、相互通信、协同工作的平台。n嵌入式中间件可以分为消息中间件、对象中间件、远程过程调用(Remote Procedure Calls,RPC)、数据库访问中间件、安全中间件等不同的类型。n一些公司可提供嵌入式中间件集成解决方案,如Sun公司的嵌入式Java,微软公司的.NET Compact Frame-wor

17、k,OMG(Object Management Group)的嵌入式CORBA等。8.2嵌入式操作系统基础嵌入式操作系统基础n8.2.1嵌入式操作系统的功能n在嵌入式系统中工作的操作系统称为EOS(Embedded Operating System,嵌入式操作系统),EOS的基本功能主要体现在以下两个方面:n1构成一个易于编程的虚拟机平台nEOS构成一个虚拟机平台,EOS把底层的硬件细节封装起来,为运行在它上面的软件(如中间件软件和各种应用软件)提供了一个抽象的编程接口。软件开发在这个编程接口的上进行,而不直接与机器硬件层打交道。EOS所提供的编程接口实际上就是操作系统对外提供的系统调用函数。

18、n2系统资源的管理者nEOS是一个系统资源的管理者,负责管理系统当中的各种软硬件资源,如处理器、内存、各种I/O设备、文件和数据等,使得整个系统能够高效、可靠地运转。n运行在嵌入式环境中的EOS其目标是为了完成某一项或有限项功能,而非通用型的操作系统,因此在性能和实时性方面有严格的限制,能耗、成本和可靠性通常是影响设计的重要因素,要求占用资源少,适合在有限存储空间运行,要求系统功能可以根据产品的设计要求进行剪裁、调整。n所有的EOS都有一个内核(kernel),内核是系统当中的一个组件,它包含了任务管理、存储管理、输入输出(I/O)设备管理和文件系统管理四个功能模块。其中:n 任务管理:对嵌入

19、式系统中的运行软件进行描述和管理,并完成处理机资源的分配与调度;n 存储管理:用来提高内存的利用率,方便用户的使用,并提供足够的存储空间;n I/O设备管理:方便设备的使用,提高CPU和输入输出设备的利用率;n 文件管理:解决文件资源的存储、共享、保密和保护等问题。n注意:不同的嵌入式系统的EOS所包含的组件可能各不相同,内核设计也可能各不相同的,完全取决于系统的设计以及实际的应用需求。8.2.2嵌入式操作系统的分类nEOS可以按照系统的类型、响应时间和软件结构等不同的标准来分类。n1按系统的类型分类按系统的类型分类n按照系统的类型,可以把EOS分为商业化系统、专用系统和开放源代码系统三大类。

20、n(1)商业化系统n商业化的EOS有风河公司(WindRiver)的VxWorks,微软公司的Windows CE,Palm公司的PalmOS等等,其特点是功能强大,性能稳定,辅助软件工具齐全,应用范围广泛,但成本较高。n(2)专用系统n专用系统是一些专业厂家为本公司产品特制的嵌入式操作系统,一般不提供给应用开发者使用。n(3)开放源代码系统n开放源代码的嵌入式操作系统有C/OS和各类嵌入式Linux系统等,具有免费、开源、性能优良、资源丰富、技术支持强等优点,是近年来发展迅速的一类操作系统。n2按响应时间分类按响应时间分类n按照系统对响应时间的敏感程度,EOS可以分为RTOS(Real Ti

21、me Operating Systems,实时操作系统)和非实时操作系统两大类:。nRTOS对响应时间有非常严格的要求,当某一个外部事件或请求发生时,相应的任务必须在规定的时间内完成相应的处理。RTOS可以分为硬实时和软实时两种情形。n(1)硬实时系统n硬实时系统对响应时间有严格的要求,如果响应时间不能满足可能会引起系统的崩溃或致命的错误。n(2)软实时系统n软实时系统对响应时间有要求,如果响应时间不能满足,将需要支付能够接受的额外代价。n非实时系统对响应时间没有严格的要求,各个进程分享处理器,以获得各自所需要的运行时间。n3按软件结构分类按软件结构分类n按照软件的体系结构,EOS可以分为单体

22、结构、分层结构和微内核结构三大类,如8.2.18.2.3所示。n(1)单体结构n单体结构是一种常见的组织结构,嵌入式Linux操作系统、Jbed RTOS、C/OS-II和PDOS都属于单体内核系统。在单体结构(monolithic)的操作系统中,中间件和设备驱动程序通常就集成在系统内核当中,整个系统通常只有一个可执行文件,里面包含了所有的功能组件。n单体结构的操作系统由一组功能模块组成,系统的各个模块之间可以相互调用,通信开销比较小,系统高度集成和相互关联,系统剪裁、修改、调试和维护不方便。图8.2.1 单体结构 图8.2.2 分层结构 n采用分层结构(layered)的操作系统内部分为若干

23、个层次(0N),各个层次之间的调用关系是单向的,即某一层次上的代码只能调用比它低层的代码。分层结构要求在每个层次上都要提供一组API接口函数,增加了系统的额外开销,但系统的开发和维护较为简单。典型代表有MS-DOS,其结构就是一个有代表性的、组织良好的分层结构。n(3)微内核结构n微内核(microkernel)结构把操作系统的大部分功能都剥离出去,在内核中只保留最核心的功能单元(如进程管理和存储管理),大部分的系统功能都位于内核之外,例如,将所有的设备驱动程序都被置于内核之外,如图8.2.3所示。n在微内核操作系统中,大部分的系统功能被放置在内核之外,客户单元和服务器单元的内存地址空间是相互

24、独立的,系统具有更高的安全性。新的功能组件也可以被动态地添加进来,扩展、调试、移植方便。在微内核操作系统中,核内组件与核外组件之间的通信方式是消息传递,而不是直接的函数调用,运行速度可能会慢一些。另外,由于它们的内存地址空间是相互独立的,在切换的时候,也会增加额外的开销。nOS-9、C Executive、VxWorks,CMX-RTX、Nucleus Plus和QNX等EOS采用的都是微内核结构。图8.2.3 微内核结构8.2.3常见的嵌入式操作系统简介n嵌入式操作系统是操作系统研究领域中的一个重要分支,有许多公司在从事相关方面的研究,开发了数以百计的各具特色的嵌入式操作系统产品,其中比较有

25、影响的系统有VxWorks、嵌入式Linux、Windows CE、C/OS-II和PalmOS等。n1VxWorksn美国WindRiver System公司开发的嵌入式实时操作系统VxWorks采用基于微内核的体系结构,整个系统由四百多个相对独立、短小精练的目标模块组成,用户可以根据自己的需要选择适当的模块,进行裁减和配置。VxWorks采用GNU类型的编译和调试器,专有的API函数,支持x86、Motorola MC68xxx、Coldfire、PowerPC、MIPS、ARM、i960等主流的32位处理器,具有良好的可靠性和卓越的实时性,是目前嵌入式系统领域中使用最广泛、市场占有率最高

26、的商业系统之一。n在VxWorks操作系统中,主要包含有实时微内核Wind、I/O处理系统、文件系统、网络处理模块、虚拟内存模块VxVMI、板级支持包BSP等功能模块。其中:n实时微内核Wind包括基于优先级的任务调度、任务间的通信、同步和互斥、中断处理、定时器和内存管理机制等功能。与ANSI C兼容的I/O系统包括UNIX标准的缓冲I/O和POSIX标准的异步I/O。文件系统主要包括与MS-DOS兼容的文件系统、与RT-11兼容的文件系统、Raw Disk文件系统和SCSI磁带设备。网络处理模块能与如TCP/IP、NFS、UDP、SNMP、FTP等许多运行其他协议的网络进行通信。虚拟内存模块

27、VxVMI主要用于对指定内存区的保护,以加强系统的安全性。板级支持包BSP由初始化和驱动程序两部分组成,用来管理硬件的功能模块,对各种板卡的硬件功能提供统一的接口。n2嵌入式嵌入式Linuxn嵌入式Linux(Embedded Linux)是指对标准Linux进行小型化剪裁处理之后,可固化在存储器或单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。常见的嵌入式Linux有Clinux、RT-Linux、Embedix和Hard Hat Linux等,具有如下特点:n 具有高性能、可裁剪的内核,其独特的模块机制使用户可以根据自己的需要,实时地将某些模块插入到内核或从内核中移走,很适合于

28、嵌入式系统的小型化的需要。n 具有完善的网络通信和文件管理机制,支持所有标准的Internet网络协议,支持ext2,nfat16,fat32,romfs等文件系统。n 可提供完整的工具链(Tool Chain),利用GNU的gcc做编译器,用gdb,kgdb,xgdb做调试工具,能够方便地实现从操作系统到应用软件各个级别的调试。n 嵌入式Linux是开放源码的自由操作系统,用户可以根据自己的应用需要方便地对内核进行修改和优化。n 支持x86、ARM、MIPS、Alpha、PowerPC等多种体系结构,支持各种主流硬件设备和最新硬件技术。n 几乎每一种通用程序在Linux上都能找到,具有丰富的

29、软件资源。n C linux主要针对没有MMU的微处理器;RT-Linux是最早实现硬实时支持的Linux版本;Embedix采用模块化的设计方案,方便系统剪裁;Hard Hat Linux是一个嵌入式实时系统,可以针对硬件环境进行配置,以获得最佳的性能和最小的容量。n3Windows CEnWindows CE是一个基于优先级的多任务嵌入式操作系统,提供了256个优先级别,基本内核需要至少200KB的ROM,支持Win32API子集、支持多种用户界面硬件、支持多种串行和网络通信技术。Windows CE不是一个硬实时系统。nWindows CE主要包含内核模块、内核系统调用接口模块、文件系统

30、模块、图形窗口和事件子系统模块和通信模块五个功能模块。其中:内核模块支持进程和线程处理及内存管理等基本服务。内核系统调用接口模块允许应用软件访问操作系统提供的服务。文件系统模块支持DOS等格式的文件系统。图形窗口和事件子系统模块控制图形显示,并提供Windows GUI图形界面。通信模块允许同其他的设备进行信息交换。nWindows CE操作系统集成了大量的Windows XP Professional的特性,能提供与PC机类似的桌面、任务栏、窗口、图标、控件等图形界面和各种应用程序。熟悉Windows操作系统的用户可以很快地使用基于Windows CE的嵌入式设备。另外,微软公司提供了Vis

31、ual Studio.NET、Embedded Visual C+、Embedded Visual Basic等一组功能强大的应用程序开发工具,专门用于对Windows CE操作系统的开发。n4 C/OS-IInC/OS-II是一种免费、开放源代码、结构小巧、基于可抢占优先级调度的实时操作系统,其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。名称C/OS-II来源于术语Micro-Controller Operating System(微控制器操作系统),它通常也称为MUCOS或者UCOS。nC/OS-II内核在2KB 10KB数量级,具有执行效率高、占用空间小

32、、实时性能优良和可扩展性强等特点,主要面向中小型嵌入式系统。C/OS-II内核提供最基本的系统服务,例如信号量、邮箱、消息队列、内存管理、中断管理等。C/OS-II内核本身并不支持文件系统,但它具有良好的扩展性能,可以根据需要自行加入。C/OS-II具有良好的可移植性。C/OS-II的大部分代码都是用C语言写成的,只有与处理器的硬件相关的一部分代码采用汇编语言编写。C/OS-II并不是一个商业实时操作系统,但C/OS-II的稳定性和实用性却被数百个商业级的应用所验证,C/O S-II不已在众多的商业领域中获得了广泛的应用。nC/OS-II支持ARM、PowerPC、MIPS、68k/ColdF

33、ire和x86等多种体系结构。8.3 嵌入式系统的任务管理嵌入式系统的任务管理n8.3.1 单道程序设计和多道程序设计n嵌入式操作系统可以分为单道程序设计和多道程序设计(mufti-programming)两种类型。n1单道程序设计类型单道程序设计类型n采用单道程序设计的操作系统在任何时候只能有一个程序在运行。n例如:有两个程序甲和乙,它们在运行过程中都要用到CPU和I/O设备。如图8.3.1所示,图中我们采用不同的方框来表示这两个程序对两种资源的使用情况,方框的长度表示使用的时间。n在单道程序设计的环境下,在任何时候,系统中只能有一个程序在运行,因此,甲和乙这两个程序只能一个接一个的执行。如

34、图8.3.1所示,首先执行程序甲,从t0时刻开始,到t6时刻结束。然后再执行程序乙,从t6时刻开始,一直到它所有的工作都已完成。n2.多道程序设计类型多道程序设计类型n采用多道程序设计的操作系统允许多个程序同时存在并运行,采用多道程序技术可以有效提高系统资源的利用率。n在多道程序设计的环境下,允许多个程序同时运行,当一个程序在访问I/O设备时,会主动把CPU交出来,让另一个程序去运行,从而提高系统资源的使用效率。如图8.3.1所示,从t0到t1,甲在使用I/O设备,乙处于等待状态。在到达了t1时刻后,甲释放刚刚占用的I/O设备,交给程序乙去使用。因此,在t1到t2期间,程序甲在使用CPU,程序

35、乙在使用I/O设备。在到达t2时刻后,乙释放刚刚占用的I/O设备,交给程序甲去使用。因此,在t2到t3期间,甲和乙两个程序相互交换资源,继续执行。同样的情形也发生在t3时刻和t4时刻。但是在t5时刻,甲已经使用完了I/O设备,而乙仍然在使用CPU,所以甲只能处于等待状态,等到t6时刻再交换资源。这样一直进行下去,在t7时刻,甲执行完毕,在t8时刻,乙也执行完毕。n从图8.3.1可见,由于CPU和I/O设备的使用是并行进行的,在总的执行时间上要明显少于单道程序系统。图8.3.1 单道程序与多道程序的运行过程8.3.2进程、线程和任务n1进程进程n进程(process)是在描述多道系统中并发活动过

36、程引入的一个概念。进程和程序是两个既有联系又有区别的概念,两者不能混为一谈。例如:一个程序主要由代码和数据两部分内容组成。而进程是正在执行的程序,它是由程序和该程序的运行上下文两部分内容组成。程序是静态的,而进程是一个动态的,变化的。进程和程序之间并不是一一对应的。一个进程在运行的时候可以启动一个或多个程序,同一个程序也可能由多个进程同时执行。程序可以以文件的形式存放在硬盘或光盘上,作为一种软件资源长期保存。而进程则是一次执行过程,它是暂时的,是动态地产生和终止的。n一个进程通常包含有以下几个方面的内容:n 相应的程序:进程是一个正在运行的程序,有相应程序的代码和数据。n CPU上下文:程序在

37、运行时,CPU中含有PC(Program Counter,程序计数器)、PSW(Program Status Word,程序状态字)、通用寄存器、段寄存器、栈指针寄存器等各种寄存器的当前值内容,例如:在PC中记录的将要取出的指令的地址,在PSW中用于记录处理器的运行状态信息,通用寄存器存放的数据或地址;段寄存器存放的程序中各个段的地址;栈指针寄存器记录的栈顶的当前位置。n 一组系统资源:包括操作系统用来管理进程的数据结构、进程的内存地址空间、进程正在使用的文件等。n 总而言之,进程包含了正在运行的一个程序的所有状态信息。进程具有动态性,进程是一个正在运行的程序,程序的运行状态都在不断地变化,如

38、PC寄存器的值、堆和栈的内容、通用寄存器存放数据和地址等。进程具有独立性,一个进程是一个独立的实体,占有计算机的系统资源,每个进程都有自己的运行上下文和内部状态,在它运行的时候独立于其他的进程。进程具有并发性,在系统中同时有多个进程存在,它们相互独立地运行。n2线程线程n线程(thread)是一个比进程更小的能独立运行的基本单位。所谓的线程,就是进程当中的一条执行流程。n从资源组合的角度来看,进程把一组相关的资源组合起来,构成了一个资源平台(资源环境),其中包括运行上下文、内存地址空间、打开的文件等,在图8.3.2中用深色的方框来表示。从程序运行的角度来看,进程就是一个正在运行的程序,在图8.

39、3.2中用一条带有箭头的线段来表示。从图8.3.2可见,可以把进程看成是程序代码在这个资源平台上的一条执行流程(线程),也就是可以认为进程等于线程加上资源平台。n如图8.3.2所示,在一个进程当中,或者说在一个资源平台上,可以同时存在多个线程。可以用线程来作为CPU的基本调度单位,使得各个线程之间可以并发执行。对于同一个进程当中的各个线程来说,运行在相同的资源平台上,可以共享该进程的大部分资源(如内存地址空间、代码、数据、文件等),但也有一小部分资源是不能共享的,每个线程都必须拥有各自独立的一份(如CPU运行上下文(如PC寄存器、PSW寄存器、通用寄存器和栈指针等)和栈)。图8.3.2 线程与

40、进程的资源关系n3任务任务n在一些嵌入式系统中,把能够独立运行的实体称为“任务”(task),并没有使用“进程”或“线程”这两个概念。任务到底是进程还是线程,在研究一个具体的嵌入式操作系统的时候,要注意加以区分。n在任务的创建过程需要定义的主要参数有任务的优先级、栈空间的大小和函数名。任务具有独立的优先级和栈空间,CPU上下文一般也是存放在栈空间中。对于不同的任务,它们也能够访问相同的全局变量,在这些任务之间,可以很方便地、直接地去使用共享的内存,而不需要经过系统内核来进行通信。n通常认为,在嵌入式操作系统中“任务”就是线程,如在VxWorks、C/OS-II、Jbed、嵌入式Linux等嵌入

41、式操作系统中。8.3.3任务的实现n1任务的层次结构任务的层次结构n任务的层次结构如图8.3.3所示。在多道程序的嵌入式操作系统中,同时存在着多个任务,嵌入式内核启动时,只有一个任务存在,然后由该任务派生出其他所有任务,这些任务采用层状结构,存在着父子关系。图8.3.3 任务的层次结构n2.任务的创建与终止任务的创建与终止n(1)任务的创建n在一个嵌入式操作系统中,在系统初始化、任务运行过程中、人机交互等过程中都可以创建任务。n在系统初始化时,一般都会创建系统与用户进行交互的一些前台任务,以及完成键盘扫描、系统状态检测、时间统计等一些特定功能的后台任务。在任务运行过程中,也能够使用相应的系统调

42、用来创建新的任务,以帮助它完成自己的工作。在一些具有交互功能的嵌入式系统中,用户可以通过输入命令或单击图标的方式,让系统启动一个新的任务。n创建任务的基本方法是在一个已经存在的任务当中,通过调用相应的系统函数来创建一个新的任务。n在嵌入式操作系统当中,任务的创建主要采用fork/exec和spawn两种模型。fork/exec模型源于IEEE/ISO POSIX 1003.1标准,而spawn模型是从它派生出来的。n两种模型创建任务的过程非常相似,包括为新任务分配相应的数据结构,存放各种管理信息,分配内存空间,存放任务的代码和数据。当这个新任务准备就绪后,就可以启动它运行了。n在fork/ex

43、ec模型,首先调用fork函数为新任务创建一份与父任务完全相同的内存空间,然后再调用exec函数装入新任务的代码,并用它来覆盖原有的属于父任务的内容。对于新创建的子任务来说,它可以从父任务那里继承代码、数据等各种属性。而spawn模型在创建新任务的时,直接为它分配一个全新的地址空间,然后将新任务的代码装入并运行。n(2)任务的终止n任务的终止可能有多种原因,正常退出、错误退出、被其他任务踢出等情况可以使任务终止。n当一个任务完成了所有的工作,需要结束运行,提出退出要求,称为正常退出。n当一个任务在执行过程中,出现了致命的错误(例如执行了非法指令、内存访问错误等),系统中止该任务的运行,强制性地

44、让该任务退出,称为错误退出。n在一些操作系统中可以提供一些系统调用函数,用来把一个任务从系统中清除出局,称为被其他任务踢出。n在一些嵌入式系统中,某些任务被设计为“死循环”的模式,任务不会自行终止。n3任务的状态任务的状态n在多道程序系统中,任务是独立运行的实体,需要竞争系统资源,而任务所拥有的资源是在不断变化中的,使得任务的状态也在不断的变化。一般来说,任务具有运行(running)、就绪(ready)和阻塞(blocked)三种基本状态。n任务在运行状态时占有CPU并在CPU上运行,在任何一个时刻,处于运行状态的任务个数必须小于或等于CPU的数目。如果在一个系统中只有一个CPU的话,那么最

45、多只能有一个任务处于运行状态。n当一个任务已具备运行条件,但由于CPU正在运行其他的任务,暂时不能运行该任务时,称为就绪状态。不过,只要把CPU分给该任务,它就能够立刻执行。n任务因为正在等待某种事件的发生而暂时不能运行称为阻塞状态,也叫等待状态(waiting)。此时,即使CPU已经空闲下来了,该任务也还是不能运行。n如图8.3.4所示,在一定条件下,任务会在不同的状态之间来回转换,存在运行阻塞、运行就绪、就绪运行、阻塞就绪四种转换关系。图8.3.4 任务间的状态转换图n4任务控制块任务控制块nTCB(Task Control Block,任务控制块)是在操作系统当中用来描述和管理一个任务的

46、数据结构。通过对各个任务的TCB的操作来实现任务管理。利用TCB这个数据结构可以描述任务的基本情况,以及它的运行变化过程。可以把TCB看成是任务存在的唯一标志。当需要创建一个新任务的时候,就为它生成一个TCB,并初始化这个TCB的内容;当需要终止一个任务的时候,只要回收它的TCB即可。对任务的组织和管理可以通过对它们的TCB的组织和管理来实现。TCB主要包括任务的管理信息、CPU上下文信息、资源管理信息等内容。n(1)任务的管理信息n任务的管理信息包括任务的标识ID、任务的状态、任务的优先级、任务的调度信息、任务的时间统计信息、各种队列指针等。n(2)CPU上下文信息nCPU上下文信息包括通用

47、寄存器、PC寄存器、程序状态字、栈指针等各种CPU寄存器的当前值。在实际的嵌入式系统中,CPU上下文信息不一定直接存放在TCB当中,而是存放在任务的栈当中,可以通过相应的栈指针来访问。n(3)资源管理信息n在操作系统中,任务表示的是进程,则还应包含一些资源管理方面的信息,如段表地址、页表地址等存储管理方面的信息,根目录、文件描述字等文件管理方面的信息。n5任务切换任务切换n任务切换(context switching)是指一个任务正在CPU上运行,由于某种原因,系统需要调度另一个任务去运行,那么这时就需要进行把当前任务的运行上下文保存起来,并设置新任务的上下文,这一过程称为任务切换。n任务切换

48、通常包含有以下几个基本步骤:n(1)将处理器的运行上下文保存在当前任务的TCB中;n(2)更新当前任务的状态,从运行状态变为就绪状态或阻塞状态。n(3)按照一定的策略,从所有处于就绪状态的任务中选择一个去运行。n(4)修改新任务的状态,从就绪状态变成运行状态。n(5)根据新任务的TCB的内容,恢复它的运行上下文环境。n6任务队列任务队列n在一个多任务的操作系统中,各个任务的状态是经常变化的,有时处于运行状态,有时处于就绪状态,有时又处于阻塞状态。通常采用任务队列的方式来组织它的所有任务,以提高对这些任务的管理效率。n操作系统用一组队列来表示系统当中所有任务的当前状态。例如,处于运行状态的所有任

49、务构成了运行队列,处于就绪状态的所有任务构成了就绪队列,而对于处于阻塞状态的任务,则要根据它们阻塞的原因,分别构成相应的阻塞队列。不同的状态用不同的队列来表示。然后,对于系统当中的每一个任务,根据它的状态把它的TCB加入到相应的队列当中去。如果一个任务的状态发生变化,就要把它的TCB从一个状态队列中脱离出来,加入到另一个队列当中去。8.3.4 任务的调度n1任务调度概述任务调度概述n在多道程序操作系统中,当有两个或多个任务同时处于就绪状态时,而系统中只有一个CPU而且这个CPU己经空闲下来了,就会出现多个任务同时去竞争这个CPU的情况。通常利用调度器(scheduler)选择就绪队列中的那些任

50、务中的一个去运行,调度器是CPU这个资源的管理者。调度器在决策过程中所采用的算法称为调度算法。n一般来说,在一个新的任务被创建时、在一个任务运行结束时、在一个任务由于I/O操作、信号量或其他原因被阻塞时、在一个I/O中断发生时、在一个时钟中断发生时这五种调度时机都可能会发生任务的调度。n任务调度存在可抢占调度(preemptive)和不可抢占调度(nonpreemptive)两种调度方式。n(1)在可抢占调度方式,当一个任务正在运行的时候,出现调度时机当中的五种情况之一,都有可能会发生调度。调度程序可以去打断它,并安排另外的任务去运行。实时操作系统大都采用可抢占的调度方式。n(2)在不可抢占调

51、度方式,一个任务长时间地占用着CPU系统也不会强制它中止。当出现新任务创建、任务运行结束及任务被阻塞的调度时机时,有可能会发生调度。而对于发生的各种中断,并不会去调用调度程序,而是在中断处理完成后,又会回到刚才被打断的任务中继续执行。n在嵌入式操作系统中,存在着许多的调度算法,每一种算法都有各自的优点和缺点。可以根据响应时间、周转时间、调度开销、公平性、均衡性、吞吐量等指标来评价一个调度算法的好坏。其中:n 调度器为一个就绪任务进行上下文切换时所需的时间,以及任务在就绪队列中的等待时间称为响应时间(response time)。n 一个任务从提交到完成所经历的时间称为周转时间(turnarou

52、nd time)。n 调度器在做出调度决策时所需要的时间和空间开销称为调度开销(overhead)。n 公平性(fairness)是指大致相当的两个任务所得到的CPU时间也应该是大致相同的。另外,要防止饥饿(starvation)情况出现,即某一个任务始终得不到处理器去运行。n 均衡性(balance)是指要尽可能使整个系统的各个部分(CPU,I/O)都忙起来,提高系统资源的使用效率。n 单位时间内完成的任务数量称为吞吐量(throughput)。n对于一个调度算法来说,这些指标中一些是共存的,而另一些是相互牵制的,这些指标不可能全部都实现,而是需要根据系统的要求,综合权衡和折中选择。n2先来

53、先服务算法(先来先服务算法(First Come First Served,FCFS)nFCFS(First Come First Served,先来先服务算法)是一种最简单的调度算法。FCFS的基本思想就是按照任务到达的先后次序来进行调度,它是一种不可抢占的调度方式。FCFS也叫做FIFO(First In First Out,先进先出算法)。nFCFS的最大优点就是简单,易于理解也易于实现。缺点是一批任务的平均周转时间取决于各个任务到达的顺序,如果短任务位于长任务之后,那么将增大平均周转时间。n3短作业优先算法(短作业优先算法(Shortest Job First,SJF)n在SJF(Sh

54、ortest Job First,短作业优先算法)中,在各个任务在开始执行前,事先预计好各任务的执行时间,调度算法根据这些预计时间,安排执行时间较短的任务优先执行。可以证明,对于一批同时到达的任务,采用SJF算法将得到一个最小的平均周转时间。nSJF算法有不可抢占方式和可抢占方式两种实现方案。在不可抢占方式,只有任务运行完毕或者是被阻塞时,才会让出CPU进行新的调度。而在可抢占方式,当前任务正在运行的时候,来了一个比它执行时间更短的任务,而且它的运行时间要小于当前正在运行的任务的剩余时间,那么这个新任务就会抢占CPU去运行。这种方法也称为SRTF(Shortest Remaining Time

55、 First,最短剩余时间优先算法)n不可抢占的SJF算法如图8.3.5所示,由于任务T3的执行时间最短,所以首先被调度运行,其次是T1和T2。图8.3.5 SJF算法示意图n4时间片轮转算法(时间片轮转算法(Round Robin,RR)nRR算法如图8.3.6所示。在RR(Round Robin,时间片轮转算法)中,把系统当中的所有就绪任务按照先来先服务的原则进行排列,然后,在每次调度的时候,处理器分派给队列当中的第一个任务一小段CPU执行时间(time slice,时间片)。当这个时间片结束的时候,如果任务还没有执行完的话,将会发生时钟中断,调度器将会暂停当前任务的执行,并把这个任务送到

56、就绪队列的末尾,然后再执行当前的队列的第一个任务。如果一个任务在分配给它的时间片结束前就已经运行结束了或者是被阻塞了,那么它就会立即让出CPU给其他的任务。n采用RR算法,各个就绪任务平均地分配CPU的使用时间,例如有n个就绪任务,那么每个任务将得到1/n的CPU时间。n采用RR算法时,时间片q既不能太大,也不能太小。q太大,每个任务都在一个时间片内完成,这就失去了RR算法的意义。如果q太小,每个任务都需要更多的时间片才能运行完,增加了在任务之间的切换次数,增大了系统的管理开销,降低了CPU的使用效率。图8.3.6 RR算法示意图n5优先级算法(优先级算法(priority)n在优先级调度算法

57、(priority)中,给每一个任务都设置一个优先级,然后在任务调度的时候,在所有处于就绪状态的任务中选择优先级最高的那个任务去运行。例如,在短作业优先算法中,以时间为优先级,运行时间越短,优先级越高。n优先级算法可以分为可抢占和不可抢占两种方式。在可抢占方式中,当一个任务正在运行的时候,如果这时来了一个新的任务,其优先级更高,则立即抢占CPU去运行这个新任务。而不可抢占方式则是需要等当前任务运行完后再决定。n可以采用静态方式和动态方式确定任务的优先级。静态优先级方式根据任务的类型或重要性,在创建任务的时候就确定任务的优先级,并且一直保持不变直到任务结束。动态优先级方式在创建任务的时候确定任务

58、的优先级,但是该优先级可以在任务的运行过程中动态改变,以便获得更好的调度性能。动态优先级方式可以克服在静态优先级方式中高优先级的任务一直占用着CPU,而那些低优先级的任务可能会长时间地得不到CPU的情况。n在优先级算法中,对于优先级相同的两个任务,通常是把任务按照不同的优先级进行分组,然后在不同组的任务之间使用优先级算法,而在同一组的各个任务之间使用时间片轮转法。8.3.5 实时系统调度n许多嵌入式操作系统都是实时操作系统(RTOS),实时系统的调度追求的是实时性,RTOS调度器要让每个任务都在其最终时间期限(deadline)之前完成,而各任务之间的公平性并不是最重要的指标。RTOS调度器多

59、采用基于优先级的可抢占调度算法。n1RTOS任务模型任务模型nRTOS任务模型如图8.3.7所示,在RTOS任务模型中,每一个任务用一个三元组来表示(执行时间、周期、时间期限)。其中:执行时间(execution time)E(i)是指对于第i个任务,当它所需要的资源都己具备时,它的执行所需要的最长时间。周期(period)P(i)是指第i个任务的连续两次运行之间的最小时间间隔。时间期限(deadline)是指D(i)第i个任务所允许的最大响应时间(从任务启动到运行结束所需的时间)。一般来说,一个任务的周期时间同时也是它的时间期限,因为该任务必须在它的下一个周期开始之前,完成此次运行。启动时间

60、t(i)是指第i个任务的第i次执行的开始时间。图8.3.7 RTOS任务模型n2单调速率调度算法(单调速率调度算法(Rate Monotonic Scheduling,RMS)nRMS(Rate Monotonic Scheduling,单调速率调度算法)是一种静态优先级调度算法。nRMS算法假设:所有的任务都是周期性任务;任务的时间期限等于它的周期;任务在每个周期内的执行时间是一个常量;任务之间不进行通信,也不需要同步;任务可以在任何位置被抢占,不存在临界区的问题。nRMS算法的基本思路是任务的优先级与它的周期表现为单调函数的关系,任务的周期越短,优先级越高;任务的周期越长,优先级越低。nR

61、MS算法是一种最优调度算法。如果存在一种基于静态优先级的调度顺序,使得每个任务都能在其期限时间内完成,那么 RMS算法总能找到这样的一种可行的调度方案。n在任务比较多的情况下,RMS可调度的CPU使用率上限为ln20.69,CPU使用率如此低,对于大多数系统来说是不可接受的。另外,在一个实际的系统中,任务之间通常都需要进行通信和同步。n3最早期限优先算法(最早期限优先算法(Earliest Deadline First,EDF)nEDF(Earliest Deadline First,最早期限优先)调度算法是一种动态优先级调度算法。nEDF算法的基本思路是:根据任务的截止时间来确定其优先级,对

62、于时间期限最近的任务,分配最高的优先级。当有一个新的任务处于就绪状态时,各个任务的优先级就有可能要进行调整。nEDF算法假设条件除了它不要求系统中的任务都必须是周期任务外,其他的假设条件与RMS相同。nEDF算法可调度上限为100。对于给定的一组任务,只要它们的CPU使用率小于或等于1,EDF就能找到合适的调度顺序,使得每个任务都能在自己的时间期限内完成。8.4 嵌入式系统的存储管理n8.4.1嵌入式存储管理方式的特点n 嵌入式系统的存储管理方式与系统的实际应用领域及硬件环境密切相关,不同的嵌入式系统采用不同的存储管理方式,需要考虑硬件条件、实时性要求、系统规模、可靠性要求等因素。系统的实时性

63、要求直接影响到存储管理的实现方式,为了确保系统的实时性,快速和确定是内存管理的基本要求,即在存储管理方面的开销不能太大,对于每一项工作都要有明确的实时约束,即必须在某个限定的时刻之前完成。在实时系统中,存储管理方法就比较简单,甚至不提供存储管理功能。而对一些实时性要求不高,可靠性要求比较高、比较复杂的应用系统,需要实现对操作系统或任务的保护,在存储管理方式上就相对较为复杂。n在嵌入式微处理器中,MMU(Memory Management Unit,存储管理单元)提供了一种内存保护的硬件机制。内存保护用来防止地址越界和防止操作越权。采用内存保护机制的每个应用程序都有自己独立的地址空间,当一个应用

64、程序要访问某个内存单元时,由硬件检查该地址是否在限定的地址空间内,如果不是的话就要进行地址越界处理;二是防对于允许多个应用程序共享的某块存储区域,每个应用程序都有自己的访问权限,如果违反了权限规定,则要进行操作越权处理。n操作系统通常利用MMU来实现系统内核与应用程序的隔离,以及应用程序与应用程序之间的隔离。防止应用程序去破坏操作系统和其他应用程序的代码和数据,防止应用程序对硬件的直接访问。MMU通常只在一些对安全性和可靠性的要求比较高、系统比较复杂的嵌入式系统中存在。8.4.2存储管理的实模式与保护模式n 实模式和保护模式是嵌入式操作系统中常见的两个存储管理方式。n 1实模式存储管理实模式存

65、储管理 n在实模式存储管理方式中,系统不使用MMU;不划分“系统空间”和“用户空间”,整个系统只有一个地址空间,即物理内存地址空间;应用程序和系统程序都能直接对所有的内存单元进行随意访问,无须进行地址映射;操作系统的内核与外围应用程序在编译连接后,两者通常被集成在同一个系统文件中;系统中的“任务”或“进程”均是内核线程,只有运行上下文和栈是独享的,其他资源都是共享的。n在实模式存储管理方式中,系统的内存地址空间一般可以分为text、data、bss、堆、栈五个部分。其中:.text:(代码段)用来存放操作系统和应用程序的所有代码。.data:(数据段)用来存放操作系统和应用程序当中所有带有初始

66、值的全局变量。.bss:用来存放操作系统和应用程序当中所有未带初始值的全局变量。堆为动态分配的内存空间,在系统运行时,可以通过类似于malloc/free之类的函数来申请或释放一段连续的内存空间。栈用来保存运行上下文以及函数调用时的局部变量和运行参数。n对于实时系统来说,实模式方案简单、存储管理的开销确定,比较适合于规模较小、简单和实时性要求较高的系统。其缺点是没有存储保护、安全性差,在应用程序中出现的任何一个小错误或蓄意攻击都有可能导致整个系统的崩溃。n 2保护模式存储管理n在保护模式存储管理方式中,微处理器必须具有MMU硬件并启用它。n在保护模式存储管理方式中,系统内核和用户程序有各自独立的地址空间,操作系统和MMU共同完成逻辑地址到物理地址的映射;每个应用程序只能访问自己的地址空间,对于共享的内存区域,也必须按照规定的权限规则来访问,具有存储保护功能。n保护模式存储管理方式的安全性和可靠性较好,适合于规模较大、较复杂和实时性要求不太高的系统。8.4.3分区存储管理n分区存储管理适合在多道程序操作系统中应用。分区存储管理把整个内存划分为系统区和用户区两大区域,然后再把用户区划分为若

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!