reactos操作系统实现(25)

在操作系统里,有时候需要从保护模式转换为实模式来调用BIOS一些功能。因此在硬件抽象层里,就需要提供这样的函数支持,这个函数代码如下:

#001 BOOLEAN

#002 NTAPI

#003 HalpBiosdisplayReset(VOID)

#004 {

#005 ULONG Flags = 0;

#006

保存cpu所有状态寄存器,然后关闭中断。

#007 /* disable interrupts */

#008 Ke386SaveFlags(Flags);

#009 _disable();

#010

映射内存到虚拟8086的实模式。

#011 /* Map memory available to the V8086 real-mode code */

#012 HalpMapRealModeMemory();

#013

切换到实模式的中断处理。

#014 /* Use special invalid opcode and GPF trap handlers */

#015 HalpSwitchToRealModeTrapHandlers();

#016

配置实模式的IOPMTSS

#017 /* Configure the IOPM and TSS */

#018 HalpSetupRealModeIoPermissionsAndTask();

#019

现在开始在实模式里调用BIOS功能

#020 /* Now jump to real mode */

#021 HalpBiosCall();

#022

恢复中断处理函数

#023 /* Restore kernel trap handlers */

#024 HalpRestoreTrapHandlers();

#025

恢复TSSIOPM

#026 /* Restore TSS and IOPM */

#027 HalpRestoreIoPermissionsAndTask();

#028

恢复低端内存。

#029 /* Restore low memory mapping */

#030 HalpUnmapRealModeMemory();

#031

恢复保存的状态寄存器。

#032 /* Restore interrupts if they were prevIoUsly enabled */

#033 Ke386RestoreFlags(Flags);

#034 return TRUE;

#035 }

上面函数是保存了现场状态后,就切换到虚拟8086实模式,这样才可以调用BIOS功能,这是由于在保护模式下不能运行BIOS的程序决定的。

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...