Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 视频存储器地址_Operating System_Kernel_Cpu_Processor_Video Memory - Fatal编程技术网

Operating system 视频存储器地址

Operating system 视频存储器地址,operating-system,kernel,cpu,processor,video-memory,Operating System,Kernel,Cpu,Processor,Video Memory,视频内存地址(0xB8000),谁将视频内存映射到此地址 从地址复制数据并放到屏幕上的例程,是处理器内置的功能吗(这个驱动程序是处理器自带的)当您向地址写入时会发生什么: 该地址空间区域未映射到RAM,而是通过系统总线发送到VGA卡。BIOS会在引导时使用VGA卡进行设置(许多地址范围被内存映射到各种设备)。当您写入地址空间的这个区域时,CPU上没有执行任何代码来绘制像素。VGA卡接收此信息而不是RAM,并自行执行此操作 如果需要,您可以查看BIOS函数调用并让它重新配置硬件,这样您就可以绘制像

视频内存地址(0xB8000),谁将视频内存映射到此地址

从地址复制数据并放到屏幕上的例程,是处理器内置的功能吗(这个驱动程序是处理器自带的)

当您向地址写入时会发生什么:

该地址空间区域未映射到RAM,而是通过系统总线发送到VGA卡。BIOS会在引导时使用VGA卡进行设置(许多地址范围被内存映射到各种设备)。当您写入地址空间的这个区域时,CPU上没有执行任何代码来绘制像素。VGA卡接收此信息而不是RAM,并自行执行此操作

如果需要,您可以查看BIOS函数调用并让它重新配置硬件,这样您就可以绘制像素而不是在视频地址上放置字符。您甚至可以探测它,看看它是否支持VESA,并切换到一个漂亮的1280*768 32bpp分辨率。然后BIOS会将您选择的地址空间的一个区域映射到VGA卡

有关BIOS的更多信息:

BIOS是主板附带的一个程序,CPU在首次通电时执行该程序。它设置所有硬件,映射所有内存映射设备,创建各种有用的表,分配IO端口,将中断挂接到它留在内存中的一组例程。然后从设备加载引导扇区并跳转到操作系统代码

遗留的例程和数据结构使您能够启动操作系统。您可以从磁盘加载扇区,将文本写入屏幕,获取有关系统的信息(内存映射、ACPI表、MP表等)。如果没有这些例程和数据结构,就很难(如果不是不可能的话)生成一个可接受的引导扇区,并拥有关于系统的所有信息来构建一个功能内核


然而,这些程序是过时的、缓慢的,并且有非常严格的限制。例如,内存中剩下的例程是16位实模式代码,因此,一旦切换到32位保护模式,就必须不断切换回或使用VM86模式访问它们(在64位模式下完全不可访问,但显然可以使用修改后的linux x86emu库模拟指令)。所以常规动作通常都很慢。因此,如果您不使用实模式编程,您将需要从头开始编写自己的驱动程序。

在大多数情况下,PC监视器是一种模式,它包括一种模式,用于从
0xB8000
的地址开始,通过
MMIO
设置
文本缓冲区(32 KB大小)

上图总结了MMIO的工作原理