ReactOS,硬件抽象层,HAL概述

分析环境reactos0.3.4 ,i386体系]

 

ReactOS的硬件抽象层 HAL(Hardware Abstraction Layer)位于OS与硬件的中间,和windows的hal原理基本一致,硬件抽象层隐藏特定平台的硬件接口细节,为上层的系统提供标准的稳定的虚拟硬件平台,使商城系统具有与硬件无关的特性,从而达到可在多种平台上进行移植的目的。

 

既然硬件抽象层的功能是隐藏特定的硬件平台特性,那么这个硬件平台又是指什么呢?经过对HAL代码的阅读(主要是"hal"halx86"generic目录里的文件),以及在网上搜索了很多相关资料后,才了解到这个硬件平台是指:某种类型的计算机体系结构,比如说IBM PC机体系结构,也就是一般所指的x86 pc系统,或者PowerPC等。

 

而这些计算机虽然在构架上和技术上会有不同,但是也有相同的(我想应该这样)因为任何一台计算机都应该包含CPU系统总线、(地址总线、数据总线、PCI总线、很多其他总线吧,)还有就是一些可编成的控制器芯片,中断控制,设备驱动等等。这些相互搭配就够正了某种体系结构的计算机。

 

上面说的就是硬件平台,而Reactos对这些硬件制定了通用的抽象的硬件标准,这些标准组合在一起就构成了硬件抽象层。

 

微型计算机的硬件构成:

       微型计算机的硬件简单的说就是包含主机和外部设备这两部分,作为操作系统最关心的应该还是主机的内部硬件,其他的外设通过主板接口连接,搭配适当的驱动程序通过控制主板上的这些接口也就可以控制这些外部设备。

 

       那现在重点是主机内部的这些硬件设备,这些设备已在《微型计算机技术》中有相关的定义。

简单的说就是包括CPU、内存、总线、输入输出接口这几个部分,其实就我个人认为其实就是一块主板的体系结构。如下图的PC机主板体系结构。

 

 

 

通过上面这个图可以看出作为一台PC机的主板应该具备哪些硬件特性。而Reactos给计算机定义了一个比较基本的硬件标准,对于上层来说这就是计算机标准,那么作为ReactOS应该对上层提供那些基本的硬件标准呢:(一下是我对HAL的部分代码分析后得出的,这些其实就是计算机的硬件接口,而HAL主要就是通过这些接口来控制硬件)

1.         基本的电源管理

2.         主板BIOS/COMS数据管理

3.         计算机引导控制

4.         中央处理器控制

5.         总线控制(主要是PCI总线控制)

6.         存储器缓存控制器等

7.         系统时钟及时钟中断管理,时钟管理

8.         硬件及软件统一的中断管理(IRQL)

9.         直接内存存取(DMA)控制

10.     外部设备的I/O控制

11.     磁盘I/O存取控制

12.     共享数据同步访问IRQL,自旋锁(多处理器)

13.     杂项控制

软件和硬件IRQ 管理(MS定义的IRQL,以及在HAL级实现的DPC/APC软件中断,将硬件,软件引发的中断和在一起按照IRQL标准执行中断的嵌套调用)

[如需转载请注明出处:(雄)blog.csdn.net/mickey139]

转载于:https://www.cnblogs.com/binsys/articles/1303928.html

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

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

相关文章

[给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉...

这是我的文章备份,原文请看: [给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉 http://www.dotblogs.com.tw/mis2000lab/archive/2012/03/15/game_ove…

Java面试题19 牛客下面有关java的引用类型,说法正确的有?

Java面试题19下面有关java的引用类型,说法正确的有? A:对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中 B:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可…

MapReduce运行机制

相关链接 MapReduce中Shuffle机制详解——Map端Shuffle链接 MapReduce中Shuffle机制详解——Reduce端Shuffle链接MapReduce将作业job的整个运行过程分为两个阶段:Map阶段和Reduce阶段。按照时间顺序包括:输入分片(input split)、m…

sql优化【转】

转:http://blog.chinaunix.net/uid-540802-id-3419311.html explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如: exp…

WebService Software Factory 设计草图

以下是根据WSSF设计理念,按现公司的业务需求设计的接口项目拟稿,实现细分。仅供参考。(WSSF---ASMX版) 建议用1680*1050分辩浏览 转载于:https://www.cnblogs.com/RuiLei/archive/2008/10/05/1304160.html

Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系

Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间存在以下…

MapReduce计数器

原文链接:http://itfish.net/article/61067.html 1、MapReduce计数器是什么?计数器是用来记录job的执行进度和状态的。它的作用可以理解为日志。我们可以在程序的某个位置插入计数器,记录数据或者进度的变化情况。 2、MapReduce计数器能做什么…

编写“线围棋”程序-2-可开局

棋盘有了,怎么支持在上面落子呢? 只要解决下面3个问题就可以了: 1.响应鼠标点击事件,获得“下棋子”的动作源。 2.修改和记录棋局状态。 3.在棋盘上显示棋局的状态。 为此,直接增加一个“棋局类“,也就是对…

matlab绘制三维图形

原文地址:matlab绘制三维图形 作者:hotinko1 三维曲线 plot3函数与plot函数用法十分相似,其调用格式为: plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xn,yn,zn,选项n) 其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和…

Java面试题 21 下列说法正确的有()

下列说法正确的有() A 能被java.exe成功运行的java class文件必须有main()方法 B J2SDK就是Java API C:Appletviewer.exe可利用jar选项运行.jar文件 D能被Appletviewer成功运行的java class文件必须有main()方法 蒙蔽树上蒙蔽果,蒙蔽树下…

not enough arguments for format string

如果想要在格式化中显示百分号%, 需要写成%%,因此正确的写法是:item_add (%s test%%) % i

IIS 崩溃的后的感受

我的IIS 崩溃后,从控制面板中 重新安装也没有办法,系统在安装时仍然不能正确安装在控制面板中卸载掉,也是停在那里,无法删除。郁闷啊。找到下面的脚本,算是帮了自己的大忙。IIS.txt [Components] iis_commonon iis_ine…

[翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb

SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb 您是否曾经写过代码来处理数据库中的所有表?处理一个 SQL Server实例中的所有数据库的代码又该如何写?然则,您是否知道有多种方法可以解决这问题?您可以创建…

Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持

Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( ) A Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下 B 通…

sqlserver关键字

ROWCOUNT Transact-SQL 语句可以通过下列方式设置 ROWCOUNT 的值: 将 ROWCOUNT 设置为受影响或被读取的行的数目。可以将行发送到客户端,也可以不发送。 保留前一个语句执行中的 ROWCOUNT。将 ROWCOUNT 重置为 0 但不将该值返回到客户端。 执行简单分配的…

linux 执行sh 文件是遇到找不到cd '目录'

在linux中将多个php命令写到同一个sh文件中执行 #!/bin/bash/ cd /www/sf/ /usr/local/bin/php xxx.php /usr/local/bin/php xxx1.php /usr/local/bin/php xxx2.php 然后执行命令 sh xxx.sh 有的时候会出现 找不到/www/sf/目录 为什么呢,找了下资料,是…

Asp.Net Session 丢失的奇怪问题,求救!

Asp.Net Session 丢失的奇怪问题,求救我遇到一个很奇怪的 asp.net 问题,我有三个页面:login.aspx :实现输入帐号密码,将帐号(yh :用户)及权限 ( js_id :角色ID) 保存为 s…

java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?

java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有? A ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 B 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedL…

制作特殊字的脚本

<html> <head> <title>特殊文字的制作</title> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> </head> <body text#00ff00 bgColorblack οnlοade(d.q)> <center>特殊文字的制作…

cursor.execute(sql) 执行结果集是有记录的 但是num=cursor.rownumber 返回值为0

开始cursor.execute(.join(str(sql).strip())) #count cursor.rowcount; numcursor.rownumber修改后&#xff1a;cursor.execute(.join(str(sql).strip())) cursor.fetchall(); #count cursor.rowcount; numcursor.rownumber print(---------------) print (cursor.rownumber) …