Windows内核--HAL在抽象什么?(3.4)

news2025/7/19 19:11:49

        From: HAL在Kernel和硬件之间 

HAL在抽象什么?

        HAL位于内核最底层。“与硬件直接打交道“的这一层被称为硬件抽象层。顾名思义,Windows内核希望把硬件相关的代码放在HAL模块,而这似乎与WRK众多amd64或x86目录相违背。

        注意,任何代码期望做到完美的抽象也许是不合理的。HAL只是在抽象和硬件最相关的处理器、中断、电源管理等,对于更上层的执行体,没办法全部取代。正如执行体中依然会在多处对于x86和amd64架构分别处理,这些并不适合放在HAL.

        例如KeGetCurrentThread函数:

        

        

        官方解释: Windows Kernel-Mode HAL Library

Windows runs on many different configurations of the personal computer. Each configuration requires a layer of software that interacts between the hardware and the rest of the operating system. Because this layer abstracts (hides) the low-level hardware details from drivers and the operating system, it is called the hardware abstraction layer (HAL).

HAL像是主板驱动

        对于不同主板,对应着不同厂商,同时处理器、中断、电源管理和IO接口等都是特定的,HAL就像是在适配主板。当然把HAL比作了"主板驱动"并不完全合适,因为主板驱动真的包含驱动程序。

谁在调用HAL?

        Ntoskrnl.exe导入表查看调用HAL哪些API. 内核和驱动程序都会使用HAL.

内核和驱动程序如何访问硬件?

        按照HAL的定义,内核和驱动程序并不能直接访问硬件,比如用IO指令访问显存或启动CPU.

这些访问硬件的动作被封装在HAL里面。

HAL以什么形态存在?

        DLL.

%WINDOWS%\system32\hal.dll    (不同硬件平台有差异)

        在Windows Vista和Windows Server 2008之前,不同平台的HAL DLL是确定的,这之后,HAL是在启动过程动态确定的。具体参考:Vista and later 内核和HAL

不同类型的HAL

        

         From: Windows内核原理与实现

         不同HAL差异在于: 单核/多核、中断控制器、电源接口、IO接口

HAL和内核需要匹配

        对于Windows XP和Windows Server 2003, HAL和内核文件必须是匹配的,否则,可能出现不能启动。

  • The operating system image and HAL must be kept in sync at all times. Therefore, if you use a checked version of the operating system image, you must also use the checked version of the HAL (and vice versa). Failure to keep a system's operating system image and HAL coordinated can make the system unbootable.

具体参阅: Installing Just the Checked Operating System and HAL (For Windows XP and Windows Server 2003)

Android HAL

        不要和它混淆了,Android HAL是因为Linux内核GPL license必须开源会损坏厂商利益,在用户模式以动态链接库达到隐藏代码的目的,和Windows HAL有很大差异.

HAL API

        Windows内核--WRK和真实的Windows内核源代码差多少?(1.3) 有提到wrkamd64.exe导入表中依赖HAL API如下。

        

HAL内部实现

        可参阅ReactOS提供HAL的源代码。

        

        例如x86架构Flush TLB的HAL实现如下,里面读写了x86架构相关的寄存器,如cr3, cr4等。

VOID
NTAPI
HalpFlushTLB(VOID)
{
    ULONG_PTR Flags, Cr4;
    INT CpuInfo[4];
    ULONG_PTR PageDirectory;

    //
    // Disable interrupts
    //
    Flags = __readeflags();
    _disable();

    //
    // Get page table directory base
    //
    PageDirectory = __readcr3();

    //
    // Check for CPUID support
    //
    if (KeGetCurrentPrcb()->CpuID)
    {
        //
        // Check for global bit in CPU features
        //
        __cpuid(CpuInfo, 1);
        if (CpuInfo[3] & 0x2000)
        {
            //
            // Get current CR4 value
            //
            Cr4 = __readcr4();

            //
            // Disable global bit
            //
            __writecr4(Cr4 & ~CR4_PGE);

            //
            // Flush TLB and re-enable global bit
            //
            __writecr3(PageDirectory);
            __writecr4(Cr4);

            //
            // Restore interrupts
            //
            __writeeflags(Flags);
            return;
        }
    }

    //
    // Legacy: just flush TLB
    //
    __writecr3(PageDirectory);
    __writeeflags(Flags);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何优雅的终止线程 Java

目录 终止线程的方法 打断sleep函数 打断正常执行的线程 两阶段终止模式 错误的方法 使用线程对象的 stop() 方法停止线程 使用 System.exit(int) 方法停止线程 正确的方法:使用 interrrupt 终止线程的方法 XXXThread.interrupt(); 在线程的 run函数中对该线…

NFT+体育,卡塔尔世界杯有哪些NFT看点!

有人说没有冷门的世界杯不是真正的世界杯!11月22日,卡塔尔世界杯小组赛C组第1轮比赛中,沙特爆冷2:1逆转阿根廷队,成了今年世界杯的第一个冷门。世界排名第51位的沙特队战胜了排名第3的阿根廷队,结束了阿根廷队此前的36…

vue拖拽删除实现

拖拽删除 背景 自营上传图片,但是需要排序和删除功能,所以用到了h5的拖拽 源元素: 即被拖拽的元素。 目标元素: 即合法的可释放元素。 每个事件的事件主体都是两者之一。 拖拽事件 触发顺序及次数 被拖拽元素,事…

day5-day6【代码随想录】螺旋矩阵II

文章目录前言一、螺旋矩阵||(力扣59)二、螺旋矩阵(力扣54)前言 坚持循环不变量原则。 模拟顺时针画矩阵的过程: 填充上行从左到右 填充右列从上到下 填充下行从右到左 填充左列从下到上 由外向内一圈一圈这么画下去 一、螺旋矩阵…

大三保研夏令营须知及前期准备工作

前言 对于大三保研学生而言,学期将近结束;接踵而来的是接下来的保研准备。保研阶段通常可以分为:夏令营、预推免、九推(捡漏)。很多同学往往都是在前两个阶段就能获得满意的offer。 对于计算机专业来说,经历过2022年的“推免季”&…

项目实战——匹配系统(下)

目录 一、整体梳理 二、创建SpringCloud目录 三、创建子项目 四、实现接口 五、config网关配置 六、放行API 七、封装后端逻辑 八、对接匹配系统 九、修改数据库 十、实现匹配之后的逻辑 十一、线程锁 十二、匹配函数 上节课知识梳理: 用户浏览器打开之…

天津专升本报名时的报名点

2023年天津专升本报名区县及应届生、往届生报名点 天津市在校大三应届生报名点选自己的专科院校,往届生及在外省就读的应届生选户籍所在区招办。 退役士兵从天津入伍的选择学校作为报名点,外省市入伍的选择区招办。

slambook2(ch2)—— Ubuntu20.04 使用cmake + make自动化编译过程

slambook2(ch2)—— Ubuntu20.04 使用cmake make自动化编译过程主函数库函数libhello.cpplibhello.hCMakeLists.txt编译重新编译vim加行号主函数 main.cpp 库函数 libhello.cpp libhello.h CMakeLists.txt 编译 mkdir build && cd build c…

ASEMI肖特基二极管MBR30100CT特征,MBR30100CT应用

编辑-Z ASEMI肖特基二极管MBR30100CT参数: 型号:MBR30100CT 最大重复峰值反向电压(VRRM):100V 最大平均正向整流输出电流(IF):30A 峰值正向浪涌电流(IFSM&#xff0…

通达信l1l2行情接口-十档行情有哪些优势?

据提供系统或用户编制的条件选股公式进行选股选定一个条件选股公式或多个组合条件后,计算机自动帮您选出当时或历史上某一段时间内满足条件的所有股票十档行情 英文,列在行情下载显示窗口,同时可保留成板块。 那通达信l1l2行情接口-十档行情…

map容器(20221125)

一、map/multimap容器 1、map基本概念 map中所有元素都是pair; pair第一个元素为key(键值),起到索引的作用,第二个元素为value(实值); 所有元素会根据元素的键值(key)自动排序。 map/multi…

论文阅读笔记 | 三维目标检测——PartA2算法

如有错误,恳请指出。 文章目录0. 前言与补充知识1. 背景2. 相关工作3. 网络结构3.1 Part-aware stageAnchor-free Proposal GenerationAnchor-based Proposal GenerationDiscussion Two Proposal Generation Strategies3.2 Part-aggregation stageROI-aware feature…

ORB-SLAM2 ---- Frame::ComputeBoW函数(TrackReferenceKeyFrame调用版)

目录 1.函数作用 2.什么是BowVec和FeatVec 3.代码 3.1 Frame::ComputeBoW解释 3.2 transform主函数:将一幅图像所有的特征点转化为BowVector和FeatureVector 3.3 transform:将描述子转化为Word id, Word weight,节点所属的…

[毕业设计]机器学习水域检测标注算法

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投…

uniapp里接入lottie-miniprogram详细指南

包工头:小张啊,我们页面里那几个gif也太low了,你能不能追求远大点。ui妹子:软件推荐可以用lottie实现。我:这玩意我耍过,交给我了。 牛逼已经吹出去了,开干, 遇到问题有&#xff0…

基于MxNet实现目标检测-YoloV3【附部分源码及模型】

文章目录前言目标检测发展史及意义一、数据集的准备1.标注工具的安装2.数据集的准备3.标注数据4.解释xml文件的内容二、网络结构的介绍三、代码实现0.工程目录结构如下1.导入库2.配置GPU/CPU环境3.数据加载器4.模型构建YoloV3-tinyYoloV35.模型训练1.学习率设置2.优化器设置3.损…

XSS绕过安全狗WAF

今天继续给大家介绍渗透测试相关知识,本文主要内容是XSS绕过安全狗WAF。 一、测试环境搭建 我们使用Vmware虚拟机搭建靶场环境。在Vmware虚拟机上,安装有PHPStudy,如下所示: 然后安装安全狗WAF,安全狗WAF有一系列的…

深度学习入门(五十二)计算机视觉——风格迁移

深度学习入门(五十二)计算机视觉——风格迁移前言计算机视觉——风格迁移课件样式迁移易于CNN的样式迁移教材1 方法2 阅读内容和风格图像3 预处理和后处理4 抽取图像特征5 定义损失函数5.1 内容损失5.2 风格损失5.3 全变分损失5.4 损失函数6 初始化合成图…

【瑞萨RA4M2】开发环境搭建和点灯指南

【瑞萨RA4系列开发板体验】开发环境搭建和新手点灯指南 文章目录【瑞萨RA4系列开发板体验】开发环境搭建和新手点灯指南一、简单开箱二、芯片简介三、开发环境搭建2.1 安装FSP(RASC)2.2 安装Keil MDK2.3 安装RA4M2 Keil Pack2.4 安装RFP(瑞萨烧录工具)三、新手点灯指南3.1 创建…

hoops编程指南:04.4用户交互突出显示

user interaction highlighting 1.突出显示 在执行选择之后,通常需要向用户提供关于所选内容的视觉反馈。例如,场景可能包含由多个几何体表示的飞机机翼的图片。然而,HOOPS Visualize对飞机机翼这一独特概念一无所知。因此,如果…