资源描述
Slide Title,Body Text,Second Level,Third Level,Fourth Level,Fifth Level,*,*,熊海泉,熊海泉,Slide Title,Body Text,Second Level,Third Level,Fourth Level,Fifth Level,*,*,2024/11/17,1,主要内容,PC,系统及,X86,模拟器,模拟主控模块,系统板的模拟,内存模块的模拟,CPU,的模拟,I/O,模块的模拟,Bochs,模拟器初始化启动过程,基于,Bochs,的实验环境,下一步工作思路,参考资料,Bochs X86 PC,模拟器原理与启动流程分析,2023/10/61主要内容PC系统及X86模拟器Bochs,2024/11/17,2,典型,PC,系统构成,PC,系统及,X86,模拟器,2023/10/62典型PC系统构成PC系统及X86模拟器,2024/11/17,3,常见,X86,模拟器,比较典型的,X86,模拟器,Bochs,PTLsim,COTson,Qemu,PC,系统及,X86,模拟器,2023/10/63常见X86模拟器比较典型的X86模拟器P,Bochs,模拟器,Bochs,是一个,X86 PC,的模拟器,它可以模拟几乎所有类型的,X86 CPU,,包括,16,位,,32,位和,64,位,(X86_64),,内存以及,I/O,设备,在其上可以运行,Linux,,,Windows,等操作系统。,其中模拟的,X86_64,的工作方式包括以下两类:,IA-32,模式,:,包括实模式,保护模式和虚拟,8086,模式三个子模式,IA-32e,模式,:,包括长模式和兼容模式,4,PC,系统及,X86,模拟器,Bochs模拟器Bochs是一个X86 PC的模拟器,它可以,Bochs,模拟器基本构成,5,PC,系统及,X86,模拟器,Bochs模拟器基本构成5PC系统及X86模拟器,模拟主控模块,为用户提供交互的系统配置信息更改以及控制,Bochs,模拟器的运行,根据用户的配置信息在模拟主控对象中建立配置信息参数树并初始化,为,Bochs,系统硬件的初始化提供输入,启动,Bochs,模拟器并进入客户操作系统的引导,将宿主机的外部事件如,键盘键击,鼠标移动等通过信号量机制从而触发,Bochs,模拟器相应设备进行响应,(,理解不一定正确,),6,模拟主控模块,模拟主控模块为用户提供交互的系统配置信息更改以及控制Boch,2024/11/17,7,系统板主要功能,为系统外设,系统板等,模块提供工作时钟,从,而驱动各功能模块的正,常工作,负责为外设向,CPU,模块,触发中断控制信号,总,线请求信号等功能,负责提供,CPU,系统复,位,外设复位以及,A20,地址线开启与关闭,,I/O,端口读写的相关功,能,系统板的模拟,2023/10/67系统板主要功能为系统外设,系统板等负责为,2024/11/17,8,系统板的实现模型,64,个定时器资源,定时器实现的控制字段,其中,currCountdown,为,0,时将触发,CountdownEvent,时间,从而执行某一个定时器函数,这个函数通常是,I/O,设备注册的回调函数,系统板定时器实现的激励来源,I/O,设备初始化时注册的定时器回调函数,实现一些系统控制功能的字段,如,HRQ,代表示否向,CPU,发出总线请求等,系统板的模拟,2023/10/68系统板的实现模型64个定时器资源定时器实,系统板与,CPU,及,I/O,模块的相互关系,set_HRQ(,用于,DMA,向系统发出总线请求,),set_INTR(,调用,CPU,的,set_INTR),MemoryMappingChanged,(,TLB,刷新),invlpg,(清除页表),Reset,(,CPU,复位,),在,CPU,每次指令执行循环,cpu_loop,中通过调用调用,系统板的,tick,来实现系统板上各个定时器,系统复位,Reset,或,CPU,的中断响应,IAC,向系统板注册工作驱动的定时器及中断,9,系统板的模拟,系统板与CPU及I/O模块的相互关系set_HRQ(用于D,2024/11/17,10,系统板初始化,此时可以建立的概念就是,系统板的定时器资源已经生成,可以供,I/O,设备注册使用,同时,I/O,设备通过系统板向,CPU,发送系统控制信号的功能已经准备就绪,系统板的模拟,2023/10/610系统板初始化此时可以建立的概念就是,系,内存模块的基本功能,根据系统配置,一次性的向宿主机分配一片存储空间,(,应该不是物理内存,),,建立一套与实际机器类似的内存空间映像,在,X86,中,有些,I/O,设备可能以内存映射的方式存取而不是通过传统的,in,或,out,指令实现,如果有这需求,相应的,I/O,设备必须向内存模块注册,I/O,读写程序,这样当使用,readPhysicalPage,等接口时会判断是否是,I/O,设备空间而进行不同的存取操作,内存的一个主要功能就是向,CPU,提供存取指令和数据,以便,CPU,能够不停的取指,执行及回写,实现各种指令的功能,在,Bochs,硬件初始化时向,Bochs,模拟的内存空间的,ROM,地址空间加载可运行的,BIOS,二进制程序,以为后序,Bochs,复位运行作准备,11,内存模块的模拟,内存模块的基本功能根据系统配置,一次性的向宿主机分配一片存储,内存模块的实现模型,2024/11/17,12,2,,记载目前系统内存使用情况的一些字段,用于实现内存的分配管理,3,,实现,I/O,内存映射的注册管理服务,其中包含了地址信息,当系统通过,readPhyicalPage,writePhysicalPage,等存取函数时会判断是否是一个,I/O,内存映射,如果是则执行,I/O,内存映射处理函数,1,,初始化时,根据,.bochsrc,配置文件中的,(memory guest=512 host=256),从宿主机中预先分配好,Bochs,模拟器所需的内存,并用,vector,rom,等保存相应的起始地址,4,,内存模块为,CPU,提供了存取指令数据以及为,I/O,提供了内存映射服务,内存模块的模拟,内存模块的实现模型2023/10/6122,记载目前系统内存,内存模块与,CPU,及,I/O,交互关系,为,CPU,模块提供的服务,数据和指令的存取,MMU,地址变换,为,I/O,提供的服务,I/O,内存映射读写处理注册管理,实现,I/O,内存映射的存取,13,内存模块的模拟,内存模块与CPU及I/O交互关系为CPU模块提供的服务13内,内存模块的初始化,2024/11/17,14,为,Bochs,模拟器准备好了内存空间,可以为,CPU,提供存取指令数据服务,同时也为需要实现,I/O,内存映射的设备准备好了注册使用功能,内存模块的模拟,内存模块的初始化2023/10/614为Bochs模拟器准备,CPU,模块的主要功能,根据,X86,指令的逻辑功能分别实现各类,X86,指令,大部分指令按其功能分别用不同的源代码文件实现,通过,prefetch,,,fetchDecode,以及具体指令处理函数及异常处理等实现,Bochs,指令执行循环逻辑,为,CPU,指令的执行提供数据和指令地址的变换,安全保护等功能,最终实现对内存模块的存取,具体主要通过,translate_linear,,,access_linear,,,dtranslate_linear,,,itranslate_linear,主要包括系统复位,系统初始化等功能,实现,X86,系统的各类系统寄存器和通用寄存器以及其状态的变换逻辑,在系统中设置一个全局标志信息表示异步中断异常是否有发生,相应的异常请发生只要将其进行相应设置即可,15,CPU,的模拟,CPU模块的主要功能根据X86指令的逻辑功能分别实现各类X8,X86,架构,CPU,的模拟,-,实现逻辑结构,CPU,的核心逻辑就是指令执行循环,16,CPU,的模拟,X86架构CPU的模拟-实现逻辑结构CPU的核心逻辑就是指令,CPU,指令循环,检测系统是否有异常、中断等事件发生,这种事件的来源有,APIC,,,INIT,,,SMI,,,INTR,,,reset,,,bx_stop_simulation,,系统板,DMA,总线请求以及某些产生异常的指令,根据逻辑地址获取线性地址,再由线性地址变换到物理地址,这样就准备好了,CPU,存取一条指令,IP,地址指针,可以由,CPU,通过内存模块获取指令了,根据上一步获取的地址开始从内存模块中获取指令并译码填充在待处理的指令变量,i,中,供下一步调用,对译码好的指令进行调研执行,完成指令的逻辑功能,驱动系统板中的定时器,从而为驱动,Bochs,其余设备等模块工作。,17,CPU,的模拟,CPU指令循环检测系统是否有异常、中断等事件发生,这种事件的,CPU,模块的初始化,2024/11/17,18,CPU,会在,bx_init_hardware,中由系统板复位触发,CPU,的复位,从而使得,CPU,中各寄存器回到,Intel,手册上关于处理器初始化的初值,之后系统将会从,0XFFFFFFF0,处开始执行,CPU模块的初始化2023/10/618CPU会在bx_in,I/O,模块的主要功能,负责,Bochs,模拟设备实例的创建与初始化,到底要创建哪些设备是根据模拟主控对象初始化时收集的系统配置信息决定,在,X86,架构中有专门的,I/O,指令,负责对各类设备寄存器的操作,此功能就是提供,I/O,地址空间管理的,为不同的端口根据设备需要提供不同的读写函数,负责外部设备资源的分配管理,供各外设使用,为,CPU I/O,指令提供的具体实现,各类具体外设的功能的逻辑模拟,一般包括初始化,复位,以及设备专用功能的模拟,I/O模块的主要功能负责Bochs模拟设备实例的创建与初始化,Bochs I/O,模块的实现模型,作为与其它,Bochs,模块如,CPU,,系统板的接口,通过它可以找到所有,Bochs,的设备,此外也在其中集中实现了,I/O,地址空间的管理,具体设备的模拟实现,根据各设备功能,为每一个设备单独构建一个,C+,类来实现,20,I/O,模块的模拟,Bochs I/O模块的实现模型作为与其它Bochs模块如C,Bochs,模拟器设备基本结构,向设备集注册,I/O,地址空间、中断以及向系统板注册定时器资源,将设备复位至到其初始化的状态,为,CPU,执行,I/O,指令时提供的具体的设备读写函数,设备的具体功,能函数服务接,口,21,I/O,模块的模拟,Bochs模拟器设备基本结构向设备集注册I/O地址空间、中断,Bochs I/O,设备集,2024/11/17,22,I/O,模块的模拟,I/O,地址空间资源,共,65536,,分读写各一个向量数组,每个元素指向相应端口号的读写处理函数,各种外设在初始化时会在其中注册它们的端口资源,I/O,端口资源的处理数据结构,每个外设对应的读写处理不一样,各自具体实现,中断资源注册,各外设如有需求也会在其中申请注册相应的中断资源,根据系统配置创建的设备实例,在设备集中存储有这些实例的指针,以便,Bochs,其它模块可以存取,某些典型设备在没有初始化时,缺省的设备实例,提供集中管理各具体设备的功能,此外还管理,I/O,地址空间的功能,Bochs I/O设备集2023/10/622I/O模块的模,Bochs I/O,设备、设备集与系统板的逻辑关系,23,I/O,模块的模拟,Bochs I/O设备、设备集与系统板的逻辑关系23I/O模,Bochs I/O,设备、设备集与系统板的逻辑关系,1,,,通过调用设备集,init,初始化方法创建系统配置时的设备并保存各设备的指针,以使得,Bochs,可以通过设备集访问到所有,I/O,设备,init,init,init,24,I/O,模块的模拟,Bochs I/O设备、设备集与系统板的逻辑关系1,通过调用,Bochs I
展开阅读全文