BIOS
以intel8086为例,8086有20根地址线。一共可以访问到0x00000 - 0xFFFFF的地址空间,刚好1MB范围,但并未全部用于访问DRAM。其中大部分用于访问DRAM,一小部分用于访问只读存储器ROM(那里固化了开机时需要执行的指令。)和外围的板卡。如图所示:
1.jpg8086加电或者复位时,CS = 0XFFFF,IP = 0X0000,所以第一条指令位于物理地址0xFFFF0正好位于ROM中,一般是一个跳转指令,跳转到ROM低端区域。ROM内容包括很多部分,主要进行硬件的诊断,检测和初始化。当它完成自己工作后,最后要做的就是从辅存中读取指令数据(内核自举代码),然后转到那里执行。
主引导扇区
接上文,BIOS要从辅存中加载指令数据,然后再跳转到那里加载的地址,执行指令。这里辅存以硬盘为例,硬盘的第一个扇区称之为主引导扇区,BIOS将把该扇区的内容加载到0X0000:0X7C00,即物理地址:0x07C00。然后判断该扇区是否有效,有效的主引导扇区最后的2字节内容是0x55和0xAA。如果有效就会使用jmp指令跳转至0x07C00。主引导扇区里面应该是内核自举的代码指令。然后内核接管一切,完成后续操作。
这里也有点意思,想像一下,我们的程序执行一定需要操作系统(内核)吗?不一定,假设主引导扇区内容不是内核,而是一段小程序。只要最后2字节数据是0x55和0xAA,那么这段程序依然能运行。所以程序使能够脱离操作系统(内核)而执行的。这也从另一个侧面说明了为什么操作系统会被发明出来。
显卡和显存
顺带说下显示的东西。
- 图形模式
显卡有自己的存储即显存,显存里面放的二进制数据,比如第1个字节对应屏幕左上角连续的8个像素,第二个字节对应后续的8个像素,以此类推。(1个二进制位对应像素的亮暗)。- - 文本模式
与之对应的还有中方式是:显存里第一字节存放字符编码(ACISS),第二字节存放编码控制字符显示样式。以此类推。
为了显示数据,CPU需要访问显存,但显存位于显卡上,访问显存则需要和显卡设备打交道,这样总会影响速度和效率。于是后来就决定把显存也映射至处理器可以直接访问的地址空间。传统上,0xB8000 ~ 0xBFFFF时留给显卡的。这样就可以直接用mov指令直接写数据。当我们把字符写在这一块时,屏幕上就会显示出我们想要的内容。
网友评论