全部科目 > 嵌入式系统设计师 >
2012年下半年 上午试卷 综合知识
第 50 题
知识点 存储管理   嵌入式系统   分段存储管理  
关键词 32位   存储管理   段号   嵌入式系统   嵌入式  
章/节 嵌入式软件基础知识   嵌入式系统程序设计  
 
 
一个分段存储管理嵌入式系统中,地址长度为32位,其中段号占8位,则最大段长是(50)。
 
  A.  28字节
 
  B.  216字节
 
  C.  224字节
 
  D.  232字节
 
 




 
 
相关试题     嵌入式软件基础知识 

  第50题    2019年下半年  
关于嵌入式SQL,下列描述不正确的是(50)。

  第31题    2018年下半年  
嵌入式系统可以有多种电源管理方案,对于每个给定的任务都具有最优的功耗。例如,嵌入式系统电源管理可以有四种模式:正常模式、慢速模式、空闲模式、掉电模式。下列关于嵌入式系统电源管理的描..

  第31题    2015年下半年  
在嵌入式系统设计中,一般包含多种类型的存储资源,比如ROM、EEPROM、NAND Flash、Nor Flash、DDR、SD卡等。下面关于这些资源的描述中,正确的是(31)。

相关试题     C程序设计基础 

  第23题    2018年下半年  
某计算机系统采用页式存储管理方案,假设其地址长度为32位,其中页号占20位,页内地址占12位。系统中页面总数与页面大小分别为(23) 。

  第62题    2013年下半年  
执行下面的一段C程序后,变量result的值应为(62)。(08年55)(09年49)

  第38题    2015年下半年  
存储一个32位数0x12345678到1000H〜1003H四个字节单元中,若以小端模式存储,则1000H存储单元的内容为(38)。

 
知识点讲解
· 存储管理
· 嵌入式系统
· 分段存储管理
 
        存储管理
        C程序中经常需要使用各种变量,如全局变量、静态变量、局部变量,编程时需要了解这些变量的作用域及其所占用的存储位置及存储空间大小,包括静态存储和动态存储的概念。若程序中的一个变量在运行时总是不正常地被改变,那么有理由怀疑它临近的数据存在溢出情况,从而改变了这个变量值。要进行跟踪排查,就必须知道该变量被分配的位置及其附近的其他变量。
        程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是通常所说的全局变量。
        例如,在下面的程序段中,有全局变量degree、cnt和局部变量times、price。
        
               内存布局
               一个C程序在不同的系统中运行时,虽然对其代码和数据所占用的内存空间会有不同的布局和安排,但是一般都包括正文段(包含代码和只读数据)、数据区、堆和栈等。例如,在Linux系统中进程的内存布局示意图如下图所示。
               
               程序的内存映像示意图
               (1)正文段中主要包括由CPU执行的机器指令,该存储区是只读区域,以防止程序由于意外事件而修改,该段也是可共享的,因此经常执行的程序在存储器中只需要有一个副本。
               (2)数据区(段)分为初始化部分和未初始化部分,在程序中已初始化的全局变量和静态局部变量的存储单元在该区域。还有程序中未初始化的全局数据所占存储区域,常称为BSS段(来源于早期汇编程序的一个操作,即Block Started by Symbol),在程序开始执行之前,内核将此段初始化为0。
               (3)栈是局部变量以及每次函数调用时所需保存的信息的存储区域,其空间的分配和释放由操作系统进行管理。每次函数调用时,其返回地址以及调用者的环境信息(例如某些寄存器)都存放在栈中。然后,在栈中为新被调用的函数的自动和临时变量分配存储空间。栈空间向低地址方向增长。
               (4)堆是一块动态存储区域,由程序员堆分配和释放,若程序员不释放,则程序结束时由操作系统回收。堆空间地址的增长方向是从低地址向高地址。在C程序中,通过调用标准库函数malloc/calloc/realloc等向系统动态地申请堆存储空间来存储相应规模的数据,之后用free函数释放所申请到的存储空间。
               当程序使用这些函数去获得新的内存空间时,系统首先在堆上进行内存空间的分配,操作系统一般需要维护一个记录空闲内存地址的链表。当系统收到程序的申请时,会遍历该链表,寻找适用于所申请空间大小的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给用户程序。另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的free操作才能正确地释放本段内存空间。由于找到的堆结点大小不一定正好等于申请空间的大小,因此涉及到复杂的分配机制,需要进行系统调用,可能产生内存碎片以及用户态与核心态的转换等一系列问题。
               对于内存受限的系统,应尽量避免使用动态内存分配,多采用静态内存分配,从而在程序编译时就能确定其运行时所需要的存储空间。
               大端模式和小端模式
               在计算机系统中是以字节为单位存储信息的,每个地址单元都对应着一个字节(8bit)。但是在C程序中除了8bit的char型数据外,还有16bit的short型、32bit的int型及long型(要看具体的编译器)。另外,对于16位或者32位的处理器,由于寄存器宽度为多个字节,那么必然存在着如何将多个字节安排的问题。因此就导致了大端(Big-endian)存储模式和小端(Little-endian)存储模式。
               大端模式就是高位字节存储在内存的低地址端,低位字节存储在内存的高地址端。
               小端模式就是低位字节存储在内存的低地址端,高位字节存储在内存的高地址端。
               常用CPU中的PowerPC、IBM、Sun、KEIL C51采用大端模式,X86、DEC采用小端模式,很多ARM、DSP为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
               一般操作系统是小端模式,而通信协议是大端模式。另外,Java和所有的网络通信协议都是使用大端模式的编码。
               例如,对于一个32bit的十六进制整数0x12345678,在Little-endian模式以及Big-endian模式内存中的存储方式(假设从地址0x4000开始存放)如下表所示。
               
               大端模式和小端模式存储示例
 
        嵌入式系统
        嵌入式计算机系统是与特定功能的设备集成在一起、且隐藏在这个功能系统内部为预定任务而设计的计算机系统。该计算机可对设备的状态进行采集,包括操作者的命令和受控对象的状态,按照设备所要求的、预先设定的特定规律进行计算,计算结果作为命令输出到设备的某些部件,控制某些操作,同时将人所关心的信息显示给操作者。一个典型的嵌入式系统如下图所示。
        
        嵌入式系统组成
        上述嵌入式系统的输入、处理、输出的各个部分,一般情况下都是通过软件运行完成的。因此嵌入式软件是嵌入式系统的重要组成部分,而且体现了系统的思想、方法和规律。
        在当今社会中,嵌入式系统已经和我们的生活息息相关,人们每时每刻都离不了嵌入式系统,如下图所示。
        
        嵌入式系统基本分类
        嵌入式系统一般是实时系统,《牛津计算机字典》对实时系统解释是:“系统的输入对应于一个外部物理世界的运动,而系统输出对应着另外一个物理世界的运动,而这两个运动的时间差必须在可接受的足够小的范围内,实时性就体现在从输入到形成输出所需的时间。”实时系统又进一步定义为硬实时系统和软实时系统两种,如下表所示。
        
        实时系统分类及其特性
        一般认为,嵌入式计算机相对于个人计算机或超级计算机,在软件或硬件上的资源是有限的,硬件资源体现在处理速度、功耗、存储空间等方面,软件资源指有限的应用、有限的操作系统支持、应用代码量少等方面。
        第一款大批量生产的嵌入式系统是美国1961年发布的民兵Ⅰ型导弹内嵌的D-17自动制导计算机。
        随着20世纪60年代早期应用开始,嵌入式系统的价格迅速降低,同时处理功能和能力获得快速提高。以第一款单片机Intel 4004为例,在存储器和外围芯片的配套使用下,实现了计算器和其他小型系统。1978年,美国国家工程制造商协会发布了可编程单片机的“标准”,涵盖了几乎所有以计算机为基础的控制器,如单板计算机、数控设备以及基于事件的控制器,使得微处理器得到了快速发展。
        无一例外,不断发展中的嵌入式计算功能的实现都通过用户需求驱动、顶层定义、硬件定义开始,但核心是软件的算法处理,实际上类似硬件功能通过不同软件的控制就可以实现不同用户所需要的嵌入式功能,如下图所示。
        
        嵌入式计算机的层次化架构
        当基础硬件接口、计算和存储资源、总线与网络乃至各种传感器、作动器、液压等以模块化、通用化、组合化等变得越来越成熟,他们就可以方便地组合成硬件平台。而软件却恰恰相反,基本是为满足人类某种新的设想或应用要求开始进行新的设计。这些设计从诸如领域、实现功能、性能、可靠性、安全性等方面,可以是全新理念设备、或是适应性修改升级等途径,都会导致软件有不同程度的差异。
        嵌入式系统具有以下特征:
        (1)嵌入式系统的时间敏感性。嵌入式实时系统对时间响应都是有要求的。例如对于一个设备的运动控制系统,从操作指令发出,嵌入式计算机根据指令和外部条件计算并输出到动作器的动作,要保证在所有的条件下、在确定的时间内产生所需的输出。这对于设计者来说,一般的实时系统都会围绕这个关键需求进行系统设计。另外为了满足时间敏感性要求,确保在最复杂行为和最大延时情况下,系统操作不发生延迟,要求处理器的利用率要有40%左右的余量。有时为满足某些强实时嵌入式系统的应答时间限定在毫秒级或更低,需要在高级语言中嵌入低级语言编程实现。
        (2)嵌入式系统的可靠性和安全性。嵌入式计算机系统的失效带来的可能是个人娱乐系统故障的微小损失,可能是铁路信号失效的巨额经济损失,也可能是战略武器控制等经济损失以及重大的社会政治影响等。所以在某种设计缺陷被诱发后,对于不同的系统需要采取不同的策略,例如对具有重大影响的系统,要求计算机或计算机软件对设计缺陷、制造缺陷等失效采取“永不放弃”的安全性设计技术,将损失控制在可接受的范围内。在有人为输入情况下,嵌入式系统还需考虑最大可能地减少人为失误所引起的系统失效。这些算法或机制可以是输入有效性合理性检查、硬件容错、软件容错、错误后的系统缓慢降级、系统进入安全模式等。
        (3)嵌入式软件的复杂性。软件复杂度取决于问题规模和复杂度。简单问题的软件可由个人完成,甚至可以进行软件正确性证明;即使过程中更换人员,花费少许时间就可掌握和维护。但如汽车控制、飞机控制等大型复杂软件,其需要根据复杂的外部输入、按照多变量物理规律和人们的预期,实现预定的功能。软件需要根据系统的外部事件及其组合,考虑各种处理、逻辑、时序、边界、超出边界的鲁棒性等进行详细算法和策略研究。还需要考虑如安全性、可靠性、维护性等质量要求。更困难的是大规模软件需要团队联合定义、并行开发、持续维护,同时考虑处理平台限制条件。
 
        分段存储管理
        在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,例如有主程序段、子程序段、数据段及堆栈段等,每个段都有自己的名字,都是从0开始编址的一段连续的地址空间,各段的长度是不等的。分段系统的地址结构如下图所示,逻辑地址由段号(名)和段内地址两部分组成。在该地址结构中,允许一个作业最多有64 KB个段,每个段的最大长度为64 KB。
        
        分段的地址结构
        在分段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以离散地分配到主存的不同分区中。在系统中为每个进程建立一张段映射表,简称为“段表”。每个段在表中占有一个表项,在其中记录了该段在主存中的起始地址(又称为“基址”)和段的长度,如下图所示。进程在执行时,通过查段表来找到每个段所对应的主存区。可见,段表实现了从逻辑段到物理主存区的映射。
        
        段式存储管理的地址变换机构
        为了实现从逻辑地址到物理地址的变换功能,系统中设置了段表寄存器,用于存放段表始址和段表长度。在进行地址变换时,系统将逻辑地址中的段号S与段表长度L进行比较。若SL,表示段号太大,访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在主存中的起始地址,然后再检查段内地址d是否超过该段的段长SL。若超过,即dSL,同样发出越界中断信号;若未越界,则将该段的基址S'与段内地址d相加,得到要访问的主存物理地址。



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2023 All Rights Reserved
软考在线版权所有