当前位置:   article > 正文

计算机体系结构整理 - 第七章:计算机系统启动过程分析_tlb初始化

tlb初始化

P.S.本书整理来自胡伟武老师的《计算机体系结构基础》

对于一台处理器来说,它的启动过程实际上是一个特定程序的执行过程,这个程序称为固件,也称为BIOS(Basic Input Output System,基本输入输出系统)。在启动过程中,需要对处理器核、内存、外设等各个部分进行初始化,再对必要的外设进行驱动管理。

7.1 处理器核初始化

7.1.1 处理器复位
处理器的第一条取指是由复位信号控制的,但受限于各种其他因素,复位信号没有对处理器内部的所有部分进行控制,例如TLB、Cache等复杂结构。
对于MIPS处理器来说,复位后的第一条指令会从固定的地址0xbfc00000的位置获取。对处理器进行复位时,需要对处理器核的STATUS和CAUSE寄存器进行初始化,并对后续软件将使用的栈地址进行初始化。
系统复位到操作系统启动的简要流程图:
在这里插入图片描述
7.1.2 调试接口初始化
什么是调试的接口?开机时听到的蜂鸣器响声、主板上的数码管显示,这些都是最基本的调试接口。
对串口的初始化操作实际上是处理器对串口执行一连串约定好的IO操作。
IO操作和内存访问操作的区别:
对于内存操作,线代高性能通用处理器都采用Cache方式进行访问,来提升访存行能。(存储器的内容不会自行修改)
对于IO设备来说,寄存器状态会碎工作状态变化而变化,如果缓存在Cache中则无法获得状态的更新,所以不能使用Cache进行访问,而需要使用Uncache,并且Uncache可以严格控制读写的访问顺序。

7.1.3 TLB初始化
TLB是地址映射的管理模块,主要负责操作系统里用户进程地址空间的管理,用来支持多用户多任务并发。
TLB初始化包含两部分:

  1. 将TLB每一项清空,以免程序中使用的地址被未初始化的TLB表项错误映射。
  2. 将BIOS中希望使用的地址映射填入TLB表,这样接下来的程序就可以通过这些预设的地址对更大的地址空间进行访问了。

7.1.4 Cache初始化
Cache的引入可以减小处理器执行和访存延迟之间的性能差异,即缓解存储墙的问题,提高处理器的整体运行效率。
Cache的组成主要包含标签(Tag)和数据(Data)两部分,Tag用于保存Cache块状态、Cache块地址等信息,Data保存数据内容。
对Cache的初始化就是对Tag的初始化,只需要把Cache的状态置为无效即可。在Cache初始化后,处理器便跳转到Cache空间去执行,大大增加了程序运行效率。跳转完成好后也标志着处理器内核心部分,或者说体系结构相关的初始化部分已经基本完成。

7.2 总线接口初始化

7.2.1 内存初始化
对内存的初始化实际上是根据内存配置信息对内存控制器进行初始化。与Cache初始化类似,内存初始化也不涉及其存储的数据。
内存控制器的初始化包括两部分:

  1. 根据内存的行地址、列地址等对内存地址映射进行配置。
  2. 针对协议对内存信号调整的支持方式对内存读写信号相关的寄存器进行训练,来保证传输时的数据完整性。

7.2.2 IO总线初始化
对于龙芯3A2000处理器,对应IO总线主要为HyperTransport总线。
IO总线初始化做了三件事:

  1. 对IO总线的访问地址空间进行了设置,划定了设备的配置访问空间、IO访问空间和Memory访问空间。
  2. 对IO设备的DMA访问空间进行规定,对处理器能接收的DMA内存地址进行设置。
  3. 对HyperTransport总线进行升频,并将总线宽度由8位升高至16位。

7.3 设备的探测及驱动加载

在PCI协议下,IO系统分为三个部分:配置空间、IO空间和Memory空间。
配置空间存储设备的基本信息,主要用于设备的探测和发现;IO空间较小,用于少量的设备寄存器访问;Memory空间可映射的区域较大,可以方便地映射设备所需要的大块物理地址空间。
对于HyperTransport总线来说,配置访问分为两种类型,Type0和Type1,如下所示:
在这里插入图片描述
为了实现所有设备的共同工作,还需要其他PCI协议特性的支持。引入基址寄存器(Base Address Register,简称BAR),这些BAR一方面用于告诉软件该设备所需要的地址空间类型及其大小,另一方面用于接收软件给其配置的基地址。
BAR寄存器定义如下:
在这里插入图片描述
IO标识:表示该BAR是IO空间还是Memory空间
只读0位:这些0的个数表示了该BAR所映射空间的大小
可写位:存储软件设置的基地址

7.4 多核启动过程

7.4.1 初始化时的多核协同
定义多核处理器中的一个核为主核,其他核定义为从核。主核除了对本处理器核进行初始化以外,还要负责对各种总线及外设初始化;而从核只需要对本处理器核的私有部件初始化。

7.4.2 操作系统启动时的多核唤醒
从核完成自身初始化后,如果没有其他工作需要进行,即跳转到一段等待的程序。
在操作系统中,主核在各种数据结构准备好的情况下就可以开始依次唤醒从核。

7.4.3 核间同步与通信
在Linux内核中,只需要使用核间中断即可完成各种核间同步和通信操作。
核间中断是利用一组IO寄存器实现的。内核中为每个核维护一个队列,当一个核想要中断其它核时,它将需要处理的内容加入目标核的这个队列,然后再向目标核发出核间中断。

(END)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/253003
推荐阅读
相关标签
  

闽ICP备14008679号