我相信以下内容是每一位想学习Linux嵌入式系统想要了解的内容,真的很想要分享给大家!
本文分享的内容主要如下几个方面:
系统总线
处理器
主存储器
输入/输出模块
数据寄存器、地址寄存器、索引寄存器
段指针
栈指针
pc程序计数器
取指令和执行指令
IO模块
中断系统机制
中断处理
多道程序设计
存储器的层次结构
高速缓冲存储器
块大小
映射函数
直接存储器访问
DMA模块
1.1 嵌入式系统组成概述
操作系统利用一个或多个处理器的硬件资源,为系统用户提供一组服务,它还代表用户来管理辅助存储器和输入/输出(Input/Output,I/O)设备。因此,在开始分析操作系统之前掌握一些底层的计算机系统硬件知识是很重要的。
本节给出了计算机系统硬件的概述。假设读者对这些领域已经比较熟悉,所以对大多数领域的概述是简要的。但某些内容对本书后面的主题比较重要,因此对这些内容的讲述比较详细。
1.1.1 基本构成
从最顶层看,一台计算机由处理器、存储器和输入/输出部件组成,每类部件有一个或多个模块。这
些部件以某种方式互联,以实现计算机执行程序的主要功能。因此,计算机有四个主要的结构化部件:
处理器 (Processor):控制计算机的操作,执行数据处理功能。当只有一个处理器时,它通常指中
央处理器(CPU)。
主存储器n (Main memory):存储数据和程序。此类存储器通常是易失性的,即当计算机关机时,存
储器的内容会丢失。相对于此的是磁盘存储器,当计算机关机时,它的内容不会丢失。主存储器通
常也称为实存储器(real memory)或主存储器(primary memory)。
输入/ / 输出模块O (I/O modules):在计算机和外部环境之间移动数据。外部环境由各种外部设备组成,包括二级存储器设备(如硬盘)、通信设备和终端。
1.1.2 处理器寄存器
处理器包括一组寄存器,它们提供一定的存储能力,比主存储器访问速度快,但比主存储器的容量小。
处理器中的寄存器有两个功能:
用户可见寄存器:优先使用这些寄存器,可以使机器语言或汇编语言的程序员减少对主存储器的访
问次数。对高级语言而言,由优化编译器负责决定哪些变量应该分配给寄存器、哪些变量应该分配
给主存储器。一些高级语言(如 C 语言)允许程序员建议编译器把哪些变量保存在寄存器中。
控制和状态寄存器:用以控制处理器的操作,且主要被具有特权的操作系统例程使用,以控制程序
的执行。
这两类寄存器并没有很明显的界限。例如,对某些机器而言,程序计数器是用户可见的,但对其他机
器却不是这样。但为了方便起见,以下的讨论使用这种分类方法。
1 用户可见寄存器
用户可见寄存器可以通过由处理器执行的机器语言来引用,它一般对所有的程序都是可用的,包括应
用程序和系统程序。通常可用的寄存器类型包括 数据寄存器、 地址寄存器和 条件码寄存器。
数据寄存器 (data register)可以被程序员分配给各种函数。在某些情况下,它们实际上是通用的,
可被执行数据操作的任何机器指令使用。但通常也有一些限制,例如对浮点数运算使用专用的寄存
器,而对整数运算使用其他寄存器。
地址寄存器 (address register)包含数据和指令的主存储器地址,或者包含用于计算完整地址或有
效地址的地址区域。这些寄存器可以是通用的,或者可以用来以某一特定方式或模式寻址存储器。
如下面的例子所示:
索引寄存器(index register) :索引寻址是一种最常用的寻址方式,它通过给一个基值加一个索引
来获得有效地址。
段指针t(segment pointer):对于分段寻址方式,存储器被划分成长度不等的段。一个存储器引用
由一个特定段号和段内的偏移量组成;这种寻址方式在嵌入式较少采用。采用这种寻址方式,需要
用一个寄存器保存段的基地址(起始地址)。可能存在多个这样的寄存器;例如一个用于操作系统(即
当操作系统代码在处理器中执行时使用),一个用于当前正在执行的应用程序。
栈指针 (stack pointer):如果对用户可见的栈进行寻址,则应该有一个专门的寄存器指向栈顶。
这样就允许使用不包含地址域的指令,如入栈(push)和出栈(pop)。
在某些机器中,过程调用或子程序调用将导致所有用户可见的寄存器自动保存,在调用返回时恢复保
存的寄存器。由处理器执行的保存操作和恢复操作是调用指令和返回指令执行过程的一部分。这就允许每个过程独立地使用这些寄存器。而在其他一些机器上,在过程调用前保存相应的用户可见寄存器却是程序员的责任,这通过在程序中包含完成此项任务的指令来实现。因此,保存和恢复功能可以由硬件完成,也可以由软件完成,这完全取决于处理器的实现。
2 控制和状态寄存器
有多种处理器的寄存器用于控制处理器的操作。在大多数机器上,大部分此类寄存器对用户不可见,
其中一部分可被在控制模式(或称为操作系统模式)下执行的某些机器指令访问。
当然,不同的机器有不同的寄存器结构,并使用不同的术语。在这里我们列出了比较合理和完全的寄存器类型,并给出了简要的说明。除了前面提到过的 MAR、MBR、I/O AR 和 I/0 BR 寄存器(如图 l-1 所示)外,下面的寄存器是指令执行所必需的:
程序计数器 (ProgramCounter , PC):包含将取指令的地址。
指令寄存器 (Instruction Register 。 IR):包含最近取的指令内容。
所有的处理器设计还包括一个寄存器或一组寄存器,通常称为 程序状态字m (Program s Status Word ,PSW),它包含状态信息。PSW 通常包含条件码和其他状态信息,如中断允许/禁止位和管理/用户模式位。
条件码n (condition code , 也称为标记) )是由处理器硬件为操作结果设置的位。例如,算术运算可能产
生正数、负数、零或溢出的结果,除了结果自身存储在一个寄存器或存储器中,在算术指令执行之后,也随之设置一个条件码。这个条件码接着可作为条件分支运算的一部分被测试。条件码位被收集到一个或多个寄存器中,通常它们构成了控制寄存器的一部分。机器指令通常允许通过隐式访问读取这些位,但不能通过显式访问进行修改,这是因为它们是为指令执行结果的反馈而设计的。
在使用多种类型中断的机器中,通常有一组中断寄存器,每个指向一个中断处理例程;如果使用栈实现某些功能(例如过程调用),则需要一个系统栈指针,最后,寄存器还可以用于控制 I/0 操作。
在设计控制和状态寄存器结构时需要考虑很多因素,一个关键问题是对操作系统的支持。某些类型的控制信息对操作系统来说有特殊的用途,如果处理器设计者对所用操作系统的功能有所了解,那么可以设
计寄存器结构,对操作系统的特殊功能提供硬件支持,如存储器保护和用户程序之间的切换等。
另一个重要的设计决策是在寄存器和存储器间分配控制信息。通常把存储器最初的(最低的)几百个或几千个字用于控制目的,设计者必须决定在昂贵、高速的寄存器中放置多少控制信息,在相对便宜、低速的主存储器中放置多少控制信息。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。