linux内核完全注释之微型计算机组成结构

时间:2020-12-08 16:31:51

计算机组成原理

1、传统计算机计算机组成框图

CPU通过地址线、数据线、控制线组成的本地总线(或内部总线),与系统的其他部分进行数据通信,地址线用于提供内存或I/O设备的地址,指明所需读写数据的具体操作位置。数据线用于在CPU和内存或I/O之间的数据传输通道;控制线用于控制内存与I/O的具体读写操作

内存的大小由地址线的位数决定:如32位232字节,共4GB

linux内核完全注释之微型计算机组成结构

下方的各种控制卡(也可成适配卡)是通过扩展插槽与系统总线进行连接,总线插槽是系统地址线、数据总线、控制总线与扩展设备控制器的标准接口。总线接口的标准由ISA(Industry Standard Aarchitecture)总线,EISA,PCI(Peripheral component Interconnect)外围组件互连总线,AGP(Accelerated Graphics Port)加速图形端口视频总线

2、现代计算机组成结构

现代pc根据各个设备的传输数据速度不同,分为南北桥,北桥连接AGP总线、内存、CPU与总线。南桥用于硬盘、键盘、USB端口、PCI总线等中低速设备与总线的通信

linux内核完全注释之微型计算机组成结构

I/O端口的寻址与访问控制方式

1、I/O端口寻址:CPU为了访问I/O控制卡上的数据和状态信息,需要先指定其地址,此地址就称为I/O端口地址或者端口。通常根据与不同总线通信分为访问数据的数据端口,输出命令的命令端口、访问控制器执行状态的状态端口。

2、端口地址的设置方法一般由两种:统一编址、独立编址

端口统一编址的原理是把I/O端口地址归入存储器寻址地址空间范围内,也叫存储器映像编址,CPU访问一个I/O端口的操作与访问内存一样,且命令也用访问内存命令

端口独立编址的方法是把I/O控制器与控制卡的端口地址作为一个独立的地址空间对待,称为I/O地址空间,故其访问需要专门的I/O指令

接口访问控制

PC机I/O接口数据传输控制方式一般可以采用程序循环查询方式、中断处理方式和DMA传输方式

1、循环查询方式是指CPU通过在程序中循环查询指定设备控制器中的状态来判断是否可以与设备进行数据交换(浪费CPU)

2、中断处理控制方式需要中断处理器支持,只有在I/O设备通过中断向CPU提出处理请求时,CPU才会暂时中断当前执行的程序而去执行I/O中断处理服务过程,在I/O控制器或设备发出中断请求时,CPU通过中中断向量表(中断描述符)来寻址相应的中断处理服务程序的入口地址。中断控制方式需要事先设置好中断向量表

3、直接内存访问(DMA):该方式时用过DMA控制器无需CPU干预完成内存与I/O设备之间的数据传输。

主存储器

当计算机初始化上电时,物理内存被设置成从地址0开始的连续区域。除了地址从0xA0000到0xFFFFF(640K到1M共384K)和 4G处的最后64K范围以外所有的内存都可用作系统内存。

在linux0.1x系统中,若内存大小位16M

0-640K被用作存放内核代码和数据

640K-1M之间的384K仍保留指定用途

1M-16M将被内核用作作为可分配的主存区

linux内核完全注释之微型计算机组成结构

BIOS

1、存放在ROM中的系统BIOS程序主要用于计算机开始时候执行系统各部分的自检,建立起操作系统所需的各种配置表,例如中断向量表、硬盘参数表。(由于BIOS提供的服务不具备可重入性,为了保证访问效率,除了在初始化时候会利用BIOS提供一些系统参数以外,Linux操作系统在运行时并不使用BIOS中的功能)

2、当计算机系统上电开机或这按了机箱上的复位按钮时,CPU会自动把代码段寄存器CS设置为0xF000,段基地址则被设置为0xFFFF0000处,段长度为64K,IP程序计数器被设置为0xFFF0,因此此时CPU的代码指针指向0xFFFFFFF0,即4G空间的最后一个64K的最后16字节处。此处在系统bios的存储位置区域,而此处存储了一条跳转指令JMP跳转到BIOS代码中64KB范围内的某一条指令开始执行,由于现代PC机一般BIOS的容量都是1M-2M,并且存储在闪存中,因此为了执行访问BIOS中超出64K范围的BIOS代码或数据,BIOS程序首先会使用一种32位的大模式的技术把数据段寄存器的访问范围设置位4G,会后BIOS执行一系列硬件检测和初始化操作后,就会把与原来PC机兼容的64KBIOS代码和数据复制到内存低端1M末端的64K处,然后跳转到这个地方并且让cpu进入真正的实地址工作模式,最后BIOS从硬盘或其他块设备把操作系统引导程序加载到内存0x7C00处,并跳转到0x7C00继续执行

串行控制卡

1、异步串行通信原理

两台计算机/设备进行数据交换,即通信。计算机通信中,把计算机/设备与计算机/设备之间的语言称为通信协议。通信协议中传送一个有效数据长度单位的格式,通常用帧来表示这种格式,通信帧的一般结构包括起始同步信息、传输的实际数据、校验等信息。

linux内核完全注释之微型计算机组成结构

串行通信是指在线路上以比特数据流一次一个比特进行传输的通信方式。串行通信可以分为异步与同步,其主要区别在于传输时同步的通信单位或帧的大小不同。同步通信与异步通信的区别就好像两个人交谈,同步通信就像两个人你说一句我说一句。而异步通行就好像两个人交谈不在同一个频道,各说各的。(异步表示一个字符一个字符发送,且无需等待对端响应,同步则是一端一端(该段有特定的含义)发送,且可能需要等待对端给出响应后方才继续发送)

2、异步串行传输的格式

linux内核完全注释之微型计算机组成结构

在异步通信规范中,把传送1称为传号,传送0称为空号,当无数据传输时,发送端持续发送传号,而需要发送数据时,则发送端首先发送一个比特位时间间隔的空号。

接收方可能检测出三种错误:奇偶校验错误、过速错误、帧格式错误。