嵌入式系统嵌入式Linux操作系统课件

上传人:仙*** 文档编号:230349324 上传时间:2023-08-23 格式:PPT 页数:87 大小:494KB
收藏 版权申诉 举报 下载
嵌入式系统嵌入式Linux操作系统课件_第1页
第1页 / 共87页
嵌入式系统嵌入式Linux操作系统课件_第2页
第2页 / 共87页
嵌入式系统嵌入式Linux操作系统课件_第3页
第3页 / 共87页
资源描述:

《嵌入式系统嵌入式Linux操作系统课件》由会员分享,可在线阅读,更多相关《嵌入式系统嵌入式Linux操作系统课件(87页珍藏版)》请在装配图网上搜索。

1、第第5章章 嵌入式嵌入式Linux操作系统操作系统嵌入式系统嵌入式Linux操作系统5.1 与与Linux相关术语相关术语n nGNUn nGUNGUN项目项目(GNU Project)(GNU Project)开始于开始于19841984年,主要由自由软年,主要由自由软件基金(件基金(Free Software FoundationFree Software FoundationFSFFSF)资助的)资助的一个项目,目标是开发一个自由的、一个项目,目标是开发一个自由的、UNIXUNIX类型的操作类型的操作系统,称为系统,称为GNUGNU系统。系统。n nGNUGNU是是“GNUGNU s N

2、ot UNIXs Not UNIX”的首字母的递归缩写。的首字母的递归缩写。n nGPLn n所有的所有的GNUGNU软件和派生工作均遵循软件和派生工作均遵循GNUGNU通用公通用公共许可证,即共许可证,即GPLGPL。嵌入式系统嵌入式Linux操作系统5.1 与与Linux相关术语相关术语n nGNU LGPLGNU LGPL(Library General Public LicenseLibrary General Public License程序库公共许可证)程序库公共许可证)n n允许用户在自己的应用程序中使用程序库,即使不允许用户在自己的应用程序中使用程序库,即使不公开自己的源代码。

3、用户必须能够获得在应用程序公开自己的源代码。用户必须能够获得在应用程序中使用的程序库的源代码,并且允许用户对这些程中使用的程序库的源代码,并且允许用户对这些程序库进行修改。序库进行修改。n n遵循遵循LGPLLGPL的一种方法是,随应用程序一起发布目标的一种方法是,随应用程序一起发布目标代码以及可以将这些目标程序和受代码以及可以将这些目标程序和受LGPLLGPL保护的程序保护的程序库链接起来的库链接起来的makefilemakefile文件。文件。n n遵循遵循LGPLLGPL的另一种比较好的方法是使用动态链接。的另一种比较好的方法是使用动态链接。n nFSF FSF:Free Softwar

4、e FoundationFree Software Foundation 自由软件基金会自由软件基金会嵌入式系统嵌入式Linux操作系统5.2 嵌入式嵌入式Linux操作系统操作系统n n5.2.1 Linux介绍介绍 技术上说技术上说LinuxLinux是一个内核。是一个内核。“内核内核”指的是一个提供硬件抽象层、磁指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完成的操作系统,还需要加载库文件、应用程序等,才可以形成完整的成的操作系统,还需要加载库文件、应用程序等,才可以形成完整的操作系统。一

5、套基于操作系统。一套基于LinuxLinux内核的完整操作系统叫做内核的完整操作系统叫做LinuxLinux操作系统。操作系统。LinuxLinux操作系统具备结构清晰、功能简介等特征,逐渐成为一个稳定操作系统具备结构清晰、功能简介等特征,逐渐成为一个稳定可靠、功能完善的操作系统。作为一个操作系统,可靠、功能完善的操作系统。作为一个操作系统,LinuxLinux几乎满足当今几乎满足当今UnixUnix操作系统的所有要求。操作系统的所有要求。嵌入式系统嵌入式Linux操作系统Linux具有的特点具有的特点 n n1 1、完全免费、完全免费n n2 2、开放型、开放型n n3 3、支持多用户访问和

6、多任务编程、支持多用户访问和多任务编程 n n4 4、良好的用户界面、良好的用户界面n n5 5、支持多种文件系统、支持多种文件系统 n n6 6、采用虚拟内存管理技术、采用虚拟内存管理技术n n7 7、设备独立性、设备独立性n n8 8、丰富的网络功能、丰富的网络功能n n9 9、可靠的系统安全、可靠的系统安全n n1010、良好的可移植性、良好的可移植性嵌入式系统嵌入式Linux操作系统完整的完整的Linux架构图架构图 嵌入式系统嵌入式Linux操作系统n n作为一个完成的操作系统,作为一个完成的操作系统,LinuxLinux具有稳定而强大具有稳定而强大的功能,想要访问任何非自己的存储器

7、空间的进的功能,想要访问任何非自己的存储器空间的进程只能通过系统调用来达成。一般进程是处于用程只能通过系统调用来达成。一般进程是处于用户模式底下,而运行系统调用时会被切换成内核户模式底下,而运行系统调用时会被切换成内核模式,所有的特殊指令只能在内核模式运行,此模式,所有的特殊指令只能在内核模式运行,此措施让内核可以完美管理系统内部与外部设备,措施让内核可以完美管理系统内部与外部设备,并且拒绝无权限的进程提出的请求。因此理论上并且拒绝无权限的进程提出的请求。因此理论上任何应用程序运行时的错误,都不可能让系统崩任何应用程序运行时的错误,都不可能让系统崩溃。溃。嵌入式系统嵌入式Linux操作系统n

8、n5.2.2 Linux作为嵌入式操作系统的优势作为嵌入式操作系统的优势n n1 1、支持多种硬件平台、支持多种硬件平台 n n2 2、占有较少的硬件资源、占有较少的硬件资源n n3 3、高可定制性、高可定制性 n n4 4、具有实时处理能力、具有实时处理能力 n n5 5、具备强大的网络功能、具备强大的网络功能 n nLinuxLinux作为嵌入式操作系统也存在着不足,主要表现在集成作为嵌入式操作系统也存在着不足,主要表现在集成开发环境有待改善开发环境有待改善。嵌入式系统嵌入式Linux操作系统n n5.2.3 进程管理进程管理n n进程的基本概念进程的基本概念 进程就是运行中的程序。一个运

9、行着的程序,可能有多个进程。进程就是运行中的程序。一个运行着的程序,可能有多个进程。对于进程来说,可以看成是一个具有独立功能的程序关于某个数据集对于进程来说,可以看成是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。嵌入式系统嵌入式Linux操作系统n n进程的属性进程的属性 进程的定义:一个进程是一个程序的一次执行的过程;程进程的定义:一个进程是一个程序的一次执行的过程;程序是静态的,它是一些保存在磁盘上的可执行的代码和数序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;进程是一

10、个动态的概念,它是据集合;进程是一个动态的概念,它是LinuxLinux系统的基本的系统的基本的调度单位。一个进程由如下元素组成:调度单位。一个进程由如下元素组成:程序读取的上下文,它表示程序读取执行的状态。程序读取的上下文,它表示程序读取执行的状态。程序当前执行的目录。程序当前执行的目录。程序服务的文件和目录。程序服务的文件和目录。程序访问的权限。程序访问的权限。内存和其他分配给进程的系统资源内存和其他分配给进程的系统资源。嵌入式系统嵌入式Linux操作系统n nLinuxLinux进程中最知名的属性就是它的进程号(进程中最知名的属性就是它的进程号(Process Idenity Proce

11、ss Idenity NumberNumber,PIDPID)和它的父进程号()和它的父进程号(Parent Process IDParent Process ID,PPIDPPID)。)。PIDPID、PPIDPPID都是非零正整数。一个都是非零正整数。一个PIDPID唯一地标唯一地标识一个进程。一个进程创建新进程称为创建了子进程识一个进程。一个进程创建新进程称为创建了子进程(Child ProcessChild Process)。相反地,创建子进程的进程称为父进)。相反地,创建子进程的进程称为父进程。所有进程追溯其祖先最终都会落到进程号为程。所有进程追溯其祖先最终都会落到进程号为1 1的进

12、程的进程身上,这个进程叫做身上,这个进程叫做initinit进程,是内核自举后第一个启动的进程,是内核自举后第一个启动的进程。进程。initinit进程扮演终结父进程的角色。因为进程扮演终结父进程的角色。因为initinit进程永远进程永远不会被终止,所以系统总是可以确信它的存在,并在必要不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。的时候以它为参照。嵌入式系统嵌入式Linux操作系统n nLinuxLinux下进程的结构下进程的结构 代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们

13、就可以使用同一个代码段。而数据段则存放程序一个程序,那么它们就可以使用同一个代码段。而数据段则存放程序的全局变量、常数及动态数据分配的数据空间。堆栈段存放的就是子的全局变量、常数及动态数据分配的数据空间。堆栈段存放的就是子程序的返回地址、子程序的参数及程序的局部变量。堆栈段包含在进程序的返回地址、子程序的参数及程序的局部变量。堆栈段包含在进程控制块程控制块PCBPCB(Process Control BlockProcess Control Block)中。)中。PCBPCB处于进程核心堆栈的处于进程核心堆栈的底部,不需要额外分配空间。底部,不需要额外分配空间。嵌入式系统嵌入式Linux操作系

14、统n n进程状态进程状态进程在生存周期中的各种状态及状态的转换进程在生存周期中的各种状态及状态的转换 。LinuxLinux系统的进程状态模型的各种状态:系统的进程状态模型的各种状态:用户状态:用户状态:用户状态:用户状态:进程在用户状态下运行的状态。进程在用户状态下运行的状态。内核状态:内核状态:内核状态:内核状态:进程在内核状态下运行的状态。进程在内核状态下运行的状态。内存中就绪:内存中就绪:内存中就绪:内存中就绪:进程没有执行,但处于就绪状态,只要内核调度它,就进程没有执行,但处于就绪状态,只要内核调度它,就可以执行。可以执行。内存中睡眠:内存中睡眠:内存中睡眠:内存中睡眠:进程正在睡眠

15、并且进程存储在内存中,没有被交换到进程正在睡眠并且进程存储在内存中,没有被交换到SWAPSWAP设备。设备。就绪且换出:就绪且换出:就绪且换出:就绪且换出:进程处于就绪状态,但是必须把它换入内存,内核才能进程处于就绪状态,但是必须把它换入内存,内核才能再次调度它运行。再次调度它运行。睡眠且换出:睡眠且换出:睡眠且换出:睡眠且换出:进程正在睡眠,且被换出内存。进程正在睡眠,且被换出内存。被抢先:被抢先:被抢先:被抢先:进程从内核状态返回用户状态时,内核抢先于它做了上下文进程从内核状态返回用户状态时,内核抢先于它做了上下文切换,调度了另一个进程。原先这个进程就处于被抢先状态。切换,调度了另一个进程

16、。原先这个进程就处于被抢先状态。创建状态:创建状态:创建状态:创建状态:进程刚被创建。该进程存在,但既不是就绪状态,也不是进程刚被创建。该进程存在,但既不是就绪状态,也不是睡眠状态。这个状态是除了进程睡眠状态。这个状态是除了进程0 0以外的所有进程的最初状态。以外的所有进程的最初状态。僵死状态(僵死状态(僵死状态(僵死状态(zombiezombie):进程调用:进程调用exitexit结束,进程不再存在,但在进程结束,进程不再存在,但在进程表项中仍有记录,该记录可由父进程收集。表项中仍有记录,该记录可由父进程收集。嵌入式系统嵌入式Linux操作系统n n进程的创建与结束进程的创建与结束 在在L

17、inuxLinux系统中,通常使用系统中,通常使用fork()fork()系统调用用来复制一个现有进程,从系统调用用来复制一个现有进程,从而创建一个全新的进程。被复制的进程被称为父进程,新产生的进程而创建一个全新的进程。被复制的进程被称为父进程,新产生的进程被称为子进程。被称为子进程。为了方便用户处理父进程与子进程之间的一些事物,为了方便用户处理父进程与子进程之间的一些事物,LinuxLinux允许父进程允许父进程在创建了进程之后,通过调用在创建了进程之后,通过调用wait()wait()先进入等待状态,以使子进程先先进入等待状态,以使子进程先运行,然后再决定自己的进一步行为,这成为父进程的阻

18、塞方式。运行,然后再决定自己的进一步行为,这成为父进程的阻塞方式。进程的结束可以使用进程的结束可以使用exit()exit()系统调用,无论在执行到什么位置,只要执系统调用,无论在执行到什么位置,只要执行到行到exitexit系统调用,进程会停止所有操作并将其占用的资源释放掉。系统调用,进程会停止所有操作并将其占用的资源释放掉。嵌入式系统嵌入式Linux操作系统n n进程的创建与结束进程的创建与结束有一个更简单的执行其他程序的函数有一个更简单的执行其他程序的函数systemsystem,参数,参数stringstring传递给一个命传递给一个命令解释器(一般为令解释器(一般为shsh)执行,即

19、)执行,即stringstring被解释为一条命令,由被解释为一条命令,由shsh执行该执行该命令。命令。除了除了systemsystem之外,系统调用之外,系统调用execexec来执行一个可执行文件,来代替当前进来执行一个可执行文件,来代替当前进程的执行映像。程的执行映像。系统调用系统调用exitexit的功能是终止发出调用的进程。的功能是终止发出调用的进程。父进程和子进程的关系是管理和被管理的关系,当父进程父进程和子进程的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止时,父进程终止时,子进程也随之而终止。但子进程终止时,父进程并不一定终止。并不一定终止。嵌入式

20、系统嵌入式Linux操作系统n n进程的组成 嵌入式系统嵌入式Linux操作系统n n在在LinuxLinux中,进程是以进程号中,进程是以进程号PIDPID(Process IDProcess ID)作为标示。)作为标示。任何对进程进行的操作都要给与其相应的任何对进程进行的操作都要给与其相应的PIDPID号。每个进号。每个进程都属于一个用户,进程要配备其所属的用户编号程都属于一个用户,进程要配备其所属的用户编号UIDUID。此外,每个进程都属于多个用户组,所以进程还要配备其此外,每个进程都属于多个用户组,所以进程还要配备其归属的用户组编号归属的用户组编号GIDGID的数组。的数组。n n进程

21、运行的环境成为进程上下文。进程运行的环境成为进程上下文。LinuxLinux中进程的上下文由中进程的上下文由进程控制块进程控制块PCBPCB(Process Control BlockProcess Control Block)、正文段、数据)、正文段、数据段以及用户堆栈组成。其中,正文段存放该进程的可执行段以及用户堆栈组成。其中,正文段存放该进程的可执行代码,数据段存放进程中静态产生的数据结构,而代码,数据段存放进程中静态产生的数据结构,而PCBPCB包包括进程的编号、状态、优先级以及正文段和数据段中数据括进程的编号、状态、优先级以及正文段和数据段中数据分布的大概情况。分布的大概情况。n n

22、一个称作进程表(一个称作进程表(Process TableProcess Table)的链表结构将系统中所)的链表结构将系统中所有的有的PCBPCB块联系起来块联系起来。嵌入式系统嵌入式Linux操作系统n n启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。由用户输入命令,直接启动一个进行设置,根据用户要求自行启动。由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际

23、结果也不一样。的进程类型不同、性质不同,实际结果也不一样。n n(1 1)前台启动)前台启动前台启动是手工启动一个进程的最常用的方式。用户键入一个命令前台启动是手工启动一个进程的最常用的方式。用户键入一个命令“dfdf”,就已经启动了一个进程,而且是一个前台的进程。,就已经启动了一个进程,而且是一个前台的进程。n n(2 2)后台启动)后台启动直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果。时,且用户也不急着需要结果。嵌入式系统嵌入式Linux操作系统n n进程的状态和调度进程的状态和调度 一般

24、来说,所有进程都要经历三种状态,即运行态、就绪态和阻塞态一般来说,所有进程都要经历三种状态,即运行态、就绪态和阻塞态 嵌入式系统嵌入式Linux操作系统在在LinuxLinux系统中将上述三种状态进行重新组织,得到了系统中将上述三种状态进行重新组织,得到了LinuxLinux进程的几进程的几个状态:个状态:嵌入式系统嵌入式Linux操作系统n n进程的调度进程的调度 为了让为了让LinuxLinux来管理系统中的进程,每个进程用一个来管理系统中的进程,每个进程用一个task_structtask_struct数据结数据结构来表示(任务与进程在构来表示(任务与进程在LinuxLinux中可以混用

25、)。数组中可以混用)。数组tasktask包含指向系统包含指向系统中所有中所有task_structtask_struct结构的指针。这意味着系统中的最大进程数目受结构的指针。这意味着系统中的最大进程数目受tasktask数组大小的限制,缺省值一般为数组大小的限制,缺省值一般为512512。创建新进程时,。创建新进程时,LinuxLinux将从系统将从系统内存中分配一个内存中分配一个task_structtask_struct结构并将其加入结构并将其加入tasktask数组。当前运行进程的数组。当前运行进程的结构用结构用currentcurrent指针来指示。指针来指示。嵌入式系统嵌入式Lin

26、ux操作系统n nLinuxLinux还支持实时进程。这些进程必须对外部时间作出快速反应(这就是还支持实时进程。这些进程必须对外部时间作出快速反应(这就是“实实时时”的意思),系统将区分对待这些进程和其他进程。虽然的意思),系统将区分对待这些进程和其他进程。虽然task_structtask_struct数据结数据结构庞大而复杂,但它可以分成一些功能组成部分:构庞大而复杂,但它可以分成一些功能组成部分:StateState 进程在执行过程中会根据环境来改变进程在执行过程中会根据环境来改变statestate。SchedulingSchedulingInformationInformation

27、调度器需要这些信息以便判定系统中哪个进程最迫切需要运行。调度器需要这些信息以便判定系统中哪个进程最迫切需要运行。IdentifiersIdentifiers 系统中每个进程都有进程标志。进程标志并不是系统中每个进程都有进程标志。进程标志并不是tasktask数组的索引,它仅仅是个数字。数组的索引,它仅仅是个数字。Inter-ProcessInter-ProcessCommunicationCommunication LinuxLinux支持经典的支持经典的Unix IPCUnix IPC机制。机制。LinksLinks LinuxLinux系统中所有进程都是相互联系的。系统中所有进程都是相互联

28、系的。TimesTimesandandTimersTimers 核心需要记录进程的创建时间以及在其生命期中消耗的核心需要记录进程的创建时间以及在其生命期中消耗的CPUCPU时间。时间。FileFilesystemsystem 进程可以自由地打开或关闭文件,进程的进程可以自由地打开或关闭文件,进程的task_structtask_struct结构中包含一个指向每个打开文件描叙结构中包含一个指向每个打开文件描叙符的指针以及指向两个符的指针以及指向两个VFSVFSinodeinode的指针。的指针。VirtualVirtualmemorymemory 多数进程都有一些虚拟内存(核心线程和后台进程没有

29、),多数进程都有一些虚拟内存(核心线程和后台进程没有),LinuxLinux核心必须跟踪虚拟内存与核心必须跟踪虚拟内存与系统物理内存的映射关系。系统物理内存的映射关系。ProcessorProcessorSpecificSpecificContextContext 进程可以认为是系统当前状态的总和。进程可以认为是系统当前状态的总和。嵌入式系统嵌入式Linux操作系统n nLinuxLinux使用用户和组标志符来检查对系统中文件和可执行映使用用户和组标志符来检查对系统中文件和可执行映象的访问权限。象的访问权限。LinuxLinux系统中所有的文件都有所有者和允许系统中所有的文件都有所有者和允许的

30、权限,这些权限描叙了系统使用者对文件或者目录的使的权限,这些权限描叙了系统使用者对文件或者目录的使用权。基本的权限是读、写和可执行,这些权限被分配给用权。基本的权限是读、写和可执行,这些权限被分配给三类用户:文件的所有者,属于相同组的进程以及系统中三类用户:文件的所有者,属于相同组的进程以及系统中所有进程。每类用户具有不同的权限,例如一个文件允许所有进程。每类用户具有不同的权限,例如一个文件允许其拥有者读写,但是同组的只能读而其他进程不允许访问。其拥有者读写,但是同组的只能读而其他进程不允许访问。嵌入式系统嵌入式Linux操作系统n ntask_structtask_struct结构中有四对进

31、程和组标志符:结构中有四对进程和组标志符:n nuid,uid,gidgid 表示运行进程的用户标志符和组标志符。表示运行进程的用户标志符和组标志符。n neffectiveeffectiveuiduidandandgidgid 有些程序可以在执行过程中将执行进程的有些程序可以在执行过程中将执行进程的uiduid和和gidgid改成其程序自身的改成其程序自身的uiduid和和gidgid(保存在描叙可执行映象的(保存在描叙可执行映象的VFSVFSinodeinode属性中)。这些程序被称为属性中)。这些程序被称为setuidsetuid程程序,常在严格控制对某些服务的访问时使用,特别是那些为别

32、的进程而运行序,常在严格控制对某些服务的访问时使用,特别是那些为别的进程而运行的进程,例如网络后台进程。有效的进程,例如网络后台进程。有效uiduid和和gidgid是那些是那些setuidsetuid执行过程在执行时变化执行过程在执行时变化出的出的uiduid和和gidgid。当进程试图访问特权数据或代码时,核心将检查进程的有效。当进程试图访问特权数据或代码时,核心将检查进程的有效gidgid和和uiduid。n nfilefilesystemsystemuiduidandandgidgid 它们和有效它们和有效uiduid和和gidgid相似但用来检验进程的文件系统访问权限。如运行在用户相

33、似但用来检验进程的文件系统访问权限。如运行在用户模式下的模式下的NFSNFS服务器存取文件时,服务器存取文件时,NFSNFS文件系统将使用这些标志符。此例中只文件系统将使用这些标志符。此例中只有文件系统有文件系统uiduid和和gidgid发生了改变(而非有效发生了改变(而非有效uiduid和和gidgid)。这样可以避免恶意用)。这样可以避免恶意用户向户向NFSNFS服务器发送服务器发送KILLKILL信号。信号。n nsavedsaveduiduidandandgidgid POSIXPOSIX标准中要求实现这两个标志符,它们被那些通过系统调用改变进程标准中要求实现这两个标志符,它们被那些

34、通过系统调用改变进程uiduid和和gidgid的程序使用。当进程的原始的程序使用。当进程的原始uiduid和和gidgid变化时,它们被用来保存真正的变化时,它们被用来保存真正的uiduid和和gidgid。嵌入式系统嵌入式Linux操作系统n n进程调度机制的设计,还对系统复杂性有着极大的影响,进程调度机制的设计,还对系统复杂性有着极大的影响,常常会由于实现的复杂程度而在功能和性能方面做出必要常常会由于实现的复杂程度而在功能和性能方面做出必要的权衡和让步。另外,进度调度的机制还要考虑到的权衡和让步。另外,进度调度的机制还要考虑到“公正公正性性”,让系统所有进程都有机会向前推进,尽管其进度各

35、,让系统所有进程都有机会向前推进,尽管其进度各有不同,并最终受到有不同,并最终受到CPUCPU速度和负载的影响。更重要的是,速度和负载的影响。更重要的是,还要防止死锁的发生,以及防止对还要防止死锁的发生,以及防止对CPUCPU能力的不合理使用,能力的不合理使用,也就是说要防止也就是说要防止CPUCPU尚有能力且有进程等执行,却由于某尚有能力且有进程等执行,却由于某种原因而长时间得不到执行的情况。一旦这些情况发生,种原因而长时间得不到执行的情况。一旦这些情况发生,调度机制还能识别与化解。调度机制还能识别与化解。嵌入式系统嵌入式Linux操作系统n n调度器必须选择最迫切需要运行而且可以执行的进程

36、来执调度器必须选择最迫切需要运行而且可以执行的进程来执行。可运行进程是一个只等待行。可运行进程是一个只等待CPUCPU资源的进程。资源的进程。LinuxLinux使用使用基于优先级的简单调度算法来选择下一个运行进程。当选基于优先级的简单调度算法来选择下一个运行进程。当选定新进程后,系统必须将当前进程的状态,处理器中的寄定新进程后,系统必须将当前进程的状态,处理器中的寄存器以及上下文状态保存到存器以及上下文状态保存到task_structtask_struct结构中。同时它将重结构中。同时它将重新设置新进程的状态并将系统控制权交给此进程。为了将新设置新进程的状态并将系统控制权交给此进程。为了将C

37、PUCPU时间合理的分配给系统中每个可执行进程,调度管理时间合理的分配给系统中每个可执行进程,调度管理器必须将这些时间信息也保存在器必须将这些时间信息也保存在task_structtask_struct中。中。嵌入式系统嵌入式Linux操作系统n n在每个进程的在每个进程的task_structtask_struct结构中有以下四项:结构中有以下四项:policypolicy、prioritypriority、countercounter、rt_priorityrt_priority。这四项是选择进程的依据。这四项是选择进程的依据。其中,其中,policypolicy是进程的调度策略,用来区分

38、实时进程和普是进程的调度策略,用来区分实时进程和普通进程,实时进程优先于普通进程运行;通进程,实时进程优先于普通进程运行;prioritypriority是进程是进程(包包括实时和普通括实时和普通)的静态优先级;的静态优先级;countercounter是进程剩余的时间片,是进程剩余的时间片,它的起始值就是它的起始值就是prioritypriority的值;由于的值;由于countercounter在后面计算一个在后面计算一个处于可运行状态的进程值得运行的程度处于可运行状态的进程值得运行的程度goodnessgoodness时起重要时起重要作用,因此,作用,因此,countercounter也

39、可以看作是进程的动态优先级。也可以看作是进程的动态优先级。rt_priorityrt_priority是实时进程特有的,用于实时进程间的选择。是实时进程特有的,用于实时进程间的选择。嵌入式系统嵌入式Linux操作系统n n进程调度的核心在几个位置调用调度管理器。如当前进程进程调度的核心在几个位置调用调度管理器。如当前进程被放入等待队列后运行或者系统调用结束时,以及从系统被放入等待队列后运行或者系统调用结束时,以及从系统模式返回用户模式时。此时系统时钟将当前进程的模式返回用户模式时。此时系统时钟将当前进程的countercounter值设为值设为0 0以驱动调度管理器。每次调度管理器运行时将进以

40、驱动调度管理器。每次调度管理器运行时将进行下列操作行下列操作:n nkernelkernelworkwork 调度管理器运行底层处理程序并处理调度任务队列。调度管理器运行底层处理程序并处理调度任务队列。n nCurrentCurrentprocessprocess 当选定其他进程运行之前必须对当前进程进行一些处理。当选定其他进程运行之前必须对当前进程进行一些处理。嵌入式系统嵌入式Linux操作系统n n如果当前进程的调度策略是时间片轮转,则它被放回到运如果当前进程的调度策略是时间片轮转,则它被放回到运行队列。如果任务可中断且从上次被调度后接收到了一个行队列。如果任务可中断且从上次被调度后接收到

41、了一个信号,则它的状态变为运行态。如果当前进程的状态是信号,则它的状态变为运行态。如果当前进程的状态是RunningRunning,则状态保持不变。那些既不处于,则状态保持不变。那些既不处于RunningRunning状态又状态又不是可中断的进程将会从运行队列中删除。这意味着调度不是可中断的进程将会从运行队列中删除。这意味着调度管理器选择运行进程时不会将这些进程考虑在内。管理器选择运行进程时不会将这些进程考虑在内。n n调度器在运行队列中选择一个最迫切需要运行的进程。如调度器在运行队列中选择一个最迫切需要运行的进程。如果运行队列中存在实时进程(那些具有实时调度策略的进果运行队列中存在实时进程(

42、那些具有实时调度策略的进程),则它们比普通进程更多的优先级权值。程),则它们比普通进程更多的优先级权值。n n在存在多个相同优先级进程的平衡系统中,每个进程被依在存在多个相同优先级进程的平衡系统中,每个进程被依次执行,这就是次执行,这就是RoundRoundRobinRobin策略。然而由于进程经常需策略。然而由于进程经常需要等待某些资源,所以它们的运行顺序也常发变化。要等待某些资源,所以它们的运行顺序也常发变化。n n如果系统选择其他进程运行,则必须被挂起当前进程且开如果系统选择其他进程运行,则必须被挂起当前进程且开始执行新进程。进程执行时将使用寄存器、物理内存以及始执行新进程。进程执行时将

43、使用寄存器、物理内存以及CPUCPU。每次调用子程序时,它将参数放在寄存器中并把返。每次调用子程序时,它将参数放在寄存器中并把返回地址放置在堆栈中,所以调度管理器总是运行在当前进回地址放置在堆栈中,所以调度管理器总是运行在当前进程的上下文。程的上下文。嵌入式系统嵌入式Linux操作系统n n进程的切换发生在调度管理器运行之后。以前进程保存的进程的切换发生在调度管理器运行之后。以前进程保存的上下文与当前进程加载时的上下文相同,包括进程程序计上下文与当前进程加载时的上下文相同,包括进程程序计数器和寄存器内容。如果以前或者当前进程使用了虚拟内数器和寄存器内容。如果以前或者当前进程使用了虚拟内存,则系

44、统必须更新其页表入口,这与具体体系结构有关。存,则系统必须更新其页表入口,这与具体体系结构有关。如果处理器使用了转换旁视缓冲或者缓冲了页表入口如果处理器使用了转换旁视缓冲或者缓冲了页表入口(如如AlphaAlphaAXP)AXP),那么必须冲刷以前运行进程的页表入口。,那么必须冲刷以前运行进程的页表入口。嵌入式系统嵌入式Linux操作系统n n5.2.4 存储管理存储管理在在这这里里所所说说的的存存储储管管理理一一般般指指的的是是内内存存管管理理,在在计计算算机机业业界界,内内存存这这个个名名词词被被广广泛泛用用来来称称呼呼 RAMRAM(随随机机存存取取内内存存),计计算算机机使使用用随随机

45、机存存取取内内存存来来储储存存执执行行作作业业所所须须的的暂暂时时指指令令以以及及数数据据,以以使使计计算算机机的的 CPUCPU能够更快速读取储存在内存的指令及数据。能够更快速读取储存在内存的指令及数据。下面介绍下面介绍LinuxLinux存储器管理几个基本概念存储器管理几个基本概念 :嵌入式系统嵌入式Linux操作系统n n存储管理的任务存储管理的任务 存储管理是存储管理是LinuxLinux中负责管理内存的模块。存储管理的任务有以下几点:中负责管理内存的模块。存储管理的任务有以下几点:屏蔽各种硬件的内存结构,并向上层返回同意的访问界面。屏蔽各种硬件的内存结构,并向上层返回同意的访问界面。

46、LinuxLinux支持支持各种各样的硬件体系结构。对每种硬件结构,其内存的组织形式各不各种各样的硬件体系结构。对每种硬件结构,其内存的组织形式各不相同。然而,对于用户的应用程序来说,总是希望提供一个同意的界相同。然而,对于用户的应用程序来说,总是希望提供一个同意的界面以供调用。这样,存储模块就自然要担负这个屏蔽和转化的任务。面以供调用。这样,存储模块就自然要担负这个屏蔽和转化的任务。解决进程状态下内存不足的问题,按需调页。随着硬件的发展,内存解决进程状态下内存不足的问题,按需调页。随着硬件的发展,内存的增大,软件业相应地向着大规模方向发展。在一个多进程系统中,的增大,软件业相应地向着大规模方

47、向发展。在一个多进程系统中,所有进程所占用的内存总和往往会超过物理内存容量。这样就需要存所有进程所占用的内存总和往往会超过物理内存容量。这样就需要存储管理实现能够利用副存储器(比如硬盘)进行辅助存储的功能。存储管理实现能够利用副存储器(比如硬盘)进行辅助存储的功能。存储管理机制甚至还能够处理单个进程所占用内存超过主存大小的情况。储管理机制甚至还能够处理单个进程所占用内存超过主存大小的情况。阻止进程肆意访问其他进程的地址空间和内核地址空间。由于并发执阻止进程肆意访问其他进程的地址空间和内核地址空间。由于并发执行的进程所在的地址空间都不能冲突,而进程太多,物理内存空间根行的进程所在的地址空间都不能

48、冲突,而进程太多,物理内存空间根本不够,故需要模拟出一个更大的虚拟逻辑空间提供给上层应用程序,本不够,故需要模拟出一个更大的虚拟逻辑空间提供给上层应用程序,并通过一个可靠的机制建立起逻辑空间到物理空间的映射关系。并通过一个可靠的机制建立起逻辑空间到物理空间的映射关系。为进程中通信所需要的共享内存提供必要的基础。对于上层用户来讲,为进程中通信所需要的共享内存提供必要的基础。对于上层用户来讲,共享内存和普通内存是两种概念;然而对于存储管理系统来讲,这两共享内存和普通内存是两种概念;然而对于存储管理系统来讲,这两者却都是内存中的一部分,所有内存空间的任一部分都可被划为共享者却都是内存中的一部分,所有

49、内存空间的任一部分都可被划为共享内存使用。因此,实现共享内存的任务就需要由存储管理模块来实现内存使用。因此,实现共享内存的任务就需要由存储管理模块来实现 嵌入式系统嵌入式Linux操作系统n n虚拟内存 虚拟内存是现代操作系统的重要特征。对于一个多进程的虚拟内存是现代操作系统的重要特征。对于一个多进程的操作系统来说,每个进程都要占据自己唯一的内存地址空操作系统来说,每个进程都要占据自己唯一的内存地址空间。虚拟内存的基本原理是将内存中一部分近期不需要的间。虚拟内存的基本原理是将内存中一部分近期不需要的内容移出到外存上,从而让出一块内存空间,以供其他需内容移出到外存上,从而让出一块内存空间,以供其

50、他需要的内存使用。当要访问到那些已经被调出到外存的数据要的内存使用。当要访问到那些已经被调出到外存的数据时,存储管理要将内存中一部分不常被访问的数据调出,时,存储管理要将内存中一部分不常被访问的数据调出,让出一块空间以供需要的数据调入内存。让出一块空间以供需要的数据调入内存。嵌入式系统嵌入式Linux操作系统n n页面模式 页面为存储管理中调入调出的基本单位。在存储管理中,页面为存储管理中调入调出的基本单位。在存储管理中,将内存划分为长度相等的页面。将内存划分为长度相等的页面。LinuxLinux将每个用户进程将每个用户进程4GB4GB长度的虚拟内存划分成固定大小的页面。其中,长度的虚拟内存划

51、分成固定大小的页面。其中,03GB03GB是是用户态空间,由各进程独占;用户态空间,由各进程独占;34GB34GB是内核态空间,由所是内核态空间,由所有进程共享,但只有内核态的进程才能访问。有进程共享,但只有内核态的进程才能访问。嵌入式系统嵌入式Linux操作系统n n按需调页 当进程访问到某个虚存地址,却发现该地址所对应的物理当进程访问到某个虚存地址,却发现该地址所对应的物理页面已经被换出内存时,系统会自动产生一个硬件中断,页面已经被换出内存时,系统会自动产生一个硬件中断,即缺页中断。在中断产生后,系统会自动调用相应的中断即缺页中断。在中断产生后,系统会自动调用相应的中断处理程序,来将所需的

52、页面从外存调入,或者干脆新建一处理程序,来将所需的页面从外存调入,或者干脆新建一个空白页面。这个过程就叫做按需调页。个空白页面。这个过程就叫做按需调页。嵌入式系统嵌入式Linux操作系统n n对换 对于虚拟内存页面来说,总是要将其改动过的内容写回到对于虚拟内存页面来说,总是要将其改动过的内容写回到外存中,才能够将其丢弃。一个被更改过的内存页面,但外存中,才能够将其丢弃。一个被更改过的内存页面,但还没有将其内容写到外存中,就称之为还没有将其内容写到外存中,就称之为“脏页面脏页面”。在换。在换入页面时,首先考虑的肯定是将入页面时,首先考虑的肯定是将“干净的干净的”页面直接丢弃,页面直接丢弃,然后将

53、外存数据写进来,因为这样不会破坏数据的完整性。然后将外存数据写进来,因为这样不会破坏数据的完整性。然而这是一个矛盾,内存调用者希望尽可能少地进行外存然而这是一个矛盾,内存调用者希望尽可能少地进行外存的刷新,这个结果造成内存中的刷新,这个结果造成内存中“脏页面脏页面”不断增加,而换不断增加,而换入程序又希望尽可能多一些入程序又希望尽可能多一些“干净干净”页面,以便使它们可页面,以便使它们可以很方便地将数据调入。于是,收拾垃圾的工作就由一个以很方便地将数据调入。于是,收拾垃圾的工作就由一个被称作被称作“对换对换”(swapswap)的程序来完成。)的程序来完成。嵌入式系统嵌入式Linux操作系统L

54、inux中存储器管理的相关概念及实现中存储器管理的相关概念及实现 n n伙伴算法伙伴算法LinuxLinux的伙伴算法把所有的空闲页面分为的伙伴算法把所有的空闲页面分为1010个块组,每组中块的大小个块组,每组中块的大小是是2 2的幂次方个页面。的幂次方个页面。工作原理:工作原理:工作原理:工作原理:如果要求要求分配一个大小为如果要求要求分配一个大小为MM个页面的块,伙伴算法会先到与要个页面的块,伙伴算法会先到与要求分配的求分配的MM个页面大小最接近的空闲块链表中查找,看是否有这样个页面大小最接近的空闲块链表中查找,看是否有这样的一个空闲块。如果有,就直接分配;如果没有,该算法就会到下的一个空

55、闲块。如果有,就直接分配;如果没有,该算法就会到下一个更大的空闲块链表中查找一个空闲块,如果有,就将该空闲块一个更大的空闲块链表中查找一个空闲块,如果有,就将该空闲块分为两等份,一份分配出去,另一份就挂入下一级的空闲块链表中;分为两等份,一份分配出去,另一份就挂入下一级的空闲块链表中;如果没有,就继续向更大的空闲块链表中查找,直到查找完所有更如果没有,就继续向更大的空闲块链表中查找,直到查找完所有更大的空闲块链表都没找到空闲块为止(空闲块链表最大为大的空闲块链表都没找到空闲块为止(空闲块链表最大为512512个页个页面),如果没有的就放弃分配,并发出出错信息。面),如果没有的就放弃分配,并发出

56、出错信息。以上过程的逆过程就是块的释放过程,这也是该算法名字的来由。以上过程的逆过程就是块的释放过程,这也是该算法名字的来由。满足以下条件的两个块称为伙伴:满足以下条件的两个块称为伙伴:(1)(1)两个块的大小相同;两个块的大小相同;(2)(2)两个块的物理地址连续。两个块的物理地址连续。嵌入式系统嵌入式Linux操作系统n nslab SlabSlab是是LinuxLinux操作系统的一种内存分配机制。操作系统的一种内存分配机制。SlabSlab中引入了对象这个概中引入了对象这个概念,所谓对象就是存放一组数据结构的内存区,其方法就是构造或析念,所谓对象就是存放一组数据结构的内存区,其方法就是

57、构造或析构函数,构造函数用于初始化数据结构所在的内存区,而析构函数收构函数,构造函数用于初始化数据结构所在的内存区,而析构函数收回相应的内存区。回相应的内存区。实际上,实际上,LinuxLinux中对中对SlabSlab分配模式有所改进,它对内存区的处理并不需分配模式有所改进,它对内存区的处理并不需要进行初始化或回收。出于效率的考虑,要进行初始化或回收。出于效率的考虑,LinuxLinux并不调用对象的构造或并不调用对象的构造或析构函数,而是把指向这两个函数的指针都置为空。析构函数,而是把指向这两个函数的指针都置为空。LinuxLinux中引入中引入slabslab的丰要目的是为了减少对伙伴算

58、法的调用次数。的丰要目的是为了减少对伙伴算法的调用次数。缓冲区就是主存中的一片区域,把这片区域划分为多个块,每块就是缓冲区就是主存中的一片区域,把这片区域划分为多个块,每块就是一个一个SlabSlab,每个,每个SlabSlab由一个或多个页面组成,每个由一个或多个页面组成,每个SlabSlab中存放的就是对中存放的就是对象。象。对于小对象,就把对于小对象,就把slabslab的描述结构的描述结构slab_tslab_t放在该放在该slabslab中;对于大对象,则中;对于大对象,则把把slabslab结构游离出来,集中存放。关于结构游离出来,集中存放。关于slabslab中的着色区再给予具体

59、描述。中的着色区再给予具体描述。嵌入式系统嵌入式Linux操作系统n n缓冲区每个缓冲区还有一个轮转锁每个缓冲区还有一个轮转锁(spinlock)(spinlock),在对链表进行修改时用这个,在对链表进行修改时用这个轮转锁进行同步。轮转锁进行同步。缓冲区只有在一下两个条件都成立的的时候才能分配到缓冲区只有在一下两个条件都成立的的时候才能分配到SlabSlab:(1 1)已发出)已发出个分配新对象的请求;个分配新对象的请求;(2 2)缓冲区不包含任何空闲对象。)缓冲区不包含任何空闲对象。在内核中当初始化开销不大的数据结构可以合用一个通用的缓冲区。在内核中当初始化开销不大的数据结构可以合用一个通

60、用的缓冲区。嵌入式系统嵌入式Linux操作系统n n地址映射机制 顾名思义地址映射就是建立几种存储媒介顾名思义地址映射就是建立几种存储媒介(内存,辅存,虚存内存,辅存,虚存)间的关间的关联,完成地址间的相互转换,它既包括磁盘文件到虚拟内存的映射,联,完成地址间的相互转换,它既包括磁盘文件到虚拟内存的映射,也包括虚拟内存到物理内存的映射。也包括虚拟内存到物理内存的映射。嵌入式系统嵌入式Linux操作系统n n进程的虚拟空间进程的虚拟空间 堆栈区位于进程虚拟空间的顶部,运行时由顶向下延伸。数据和代码堆栈区位于进程虚拟空间的顶部,运行时由顶向下延伸。数据和代码段位于虚拟空间的底部,运行时不向上延伸。

61、中间的空洞是进程在运段位于虚拟空间的底部,运行时不向上延伸。中间的空洞是进程在运行时可以动态分配的空间(也叫动态内存)。行时可以动态分配的空间(也叫动态内存)。嵌入式系统嵌入式Linux操作系统n n页故障的产生(1 1)一是程序出现错误)一是程序出现错误 (2 2)另一种情况是,虚拟地址有效,但其所对应的也当前不在物理内存)另一种情况是,虚拟地址有效,但其所对应的也当前不在物理内存中,即缺页错误中,即缺页错误 (3 3)最后一种情况是,要访问的虚拟地址被写保护,即保护错误)最后一种情况是,要访问的虚拟地址被写保护,即保护错误 嵌入式系统嵌入式Linux操作系统n n交换机制 当物理内存出现不

62、足时,当物理内存出现不足时,LinuxLinux内存管理子系统需要释放部分物理内存内存管理子系统需要释放部分物理内存页面。这一任务由内核的交换守护进程页面。这一任务由内核的交换守护进程kswapdkswapd完成,该内核守护进程完成,该内核守护进程实际是一个内核线程,它在内核初始化时启动,并周期地运行。它的实际是一个内核线程,它在内核初始化时启动,并周期地运行。它的任务就是保证系统中具有足够的空闲页面,从而使内存管理子系统能任务就是保证系统中具有足够的空闲页面,从而使内存管理子系统能够有效运行够有效运行。n n页面交换策略:页面交换策略:策略一:需要时才交换策略一:需要时才交换策略二:系统空闲

63、时交换策略二:系统空闲时交换策略三:换出但不立即释放策略三:换出但不立即释放策略四:把页面换出推迟到不能再推迟为止策略四:把页面换出推迟到不能再推迟为止嵌入式系统嵌入式Linux操作系统n nLinux中新页框的分配方案请求调页(请求调页(demand pagingdemand paging):是在类):是在类UNIXUNIX操作系统中使操作系统中使用较为普遍的一种动态内存分配技术。所谓动态内存分配用较为普遍的一种动态内存分配技术。所谓动态内存分配技术就是指进程运行所需要的页框不是一开始就全部分配技术就是指进程运行所需要的页框不是一开始就全部分配给进程,而是当内核执行进程的一个指令所需的页面不

64、在给进程,而是当内核执行进程的一个指令所需的页面不在内存时,再由内存时,再由CPUCPU的控制单元引起一个缺页异常,这时再的控制单元引起一个缺页异常,这时再由异常处理程序调入内存。由异常处理程序调入内存。写时拷贝(写时拷贝(copy_on_writecopy_on_write):把一个页面标记为只读,而):把一个页面标记为只读,而把代表它的把代表它的VMAVMA标记为可写。因此任何对页面的写操作都标记为可写。因此任何对页面的写操作都会造成页面写访问异常,同样会引起缺页中断。会造成页面写访问异常,同样会引起缺页中断。嵌入式系统嵌入式Linux操作系统n n缓冲区高速缓存 缓冲区高速缓存由设备标识

65、号和块标号索引,因此可以快缓冲区高速缓存由设备标识号和块标号索引,因此可以快速找出数据块。速找出数据块。缓冲区高速缓存的大小可以变化。当需要新缓冲区而现在缓冲区高速缓存的大小可以变化。当需要新缓冲区而现在又没有可用的缓冲区时,就按需分配页面。又没有可用的缓冲区时,就按需分配页面。嵌入式系统嵌入式Linux操作系统n n刷新机制 采取的解决办法是为计算机装备一个不需要经过页表就能把虚拟地址采取的解决办法是为计算机装备一个不需要经过页表就能把虚拟地址映射成物理地址的小的硬件设备,这个设备叫做映射成物理地址的小的硬件设备,这个设备叫做TLB(TLB(翻译后援存储器,翻译后援存储器,Translati

66、on Lookside Buffer)Translation Lookside Buffer),有时也叫做相联存储器,有时也叫做相联存储器(Associative(Associative Memov)Memov),它通常在,它通常在MMUMMU内部,条目的数量较少。内部,条目的数量较少。每一个每一个TLBTLB寄存器的每个条目包含一个页面的信息:有效位、虚页面寄存器的每个条目包含一个页面的信息:有效位、虚页面号、修改位、保护码和页面所在的物理页面号,它们和页面表中的表号、修改位、保护码和页面所在的物理页面号,它们和页面表中的表项一一对应。项一一对应。在在LinuxLinux中刷新机制(包括中刷新机制(包括TLBTLB的刷新和缓存的刷新)主要完成以下两的刷新和缓存的刷新)主要完成以下两项工作:项工作:(1 1)保证在任何时刻内存管理硬件所看到的进程的内核映射与内核)保证在任何时刻内存管理硬件所看到的进程的内核映射与内核页表一致。页表一致。(2 2)如果负责内存管理的内核代码对用户进程页进行了修改,那么)如果负责内存管理的内核代码对用户进程页进行了修改,那么用户进程在被允许继续执行前必须在

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