ハードウェア抽象化レイヤー
[Wikipedia|▼Menu]
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方
出典検索?: "Hardware Abstraction Layer" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2020年12月)

Hardware Abstraction Layer (HAL、ハードウェア抽象化レイヤー) とは、コンピュータハードウェアとそのコンピュータ上で動作するソフトウェアの間に存在する、ソフトウェアで実装した抽象化レイヤーである。オペレーティングシステム (OS) のカーネルからハードウェア毎に異なる差異を隠蔽する機能を持ち、それによってカーネルコードは異なるハードウェアのシステム上で動作してもほとんど変更する必要がなくなる。PCにおいては、HALは基本的にマザーボード用ドライバの形態をとり、上位のプログラムがハードウェアに直接アクセスする下位のコンポーネントに指示できるようにする。
概要

多数存在するCPUアーキテクチャ毎の動作の違いなどがあっても、適切に設計されたHALを用意すれば動作できる。そのため、システムを開発するときにハードウェアの差異を意識することなく設計できる。これらはNTベースのMicrosoft Windows OSで用いられる技術である。NTベースのOSには、カーネル空間にHALがあり、カーネルやドライバや実行サービスとハードウェアの仲介をする[1][2]。これにより、Windows NT のカーネルモードのコードは各種の異なるメモリ管理ユニットのアーキテクチャのプロセッサに移植でき、各種I/Oバスアーキテクチャのシステムに移植できるようになっている。コードの大部分はそれらシステム上で、単にその命令セットアーキテクチャにコンパイルするだけでソースコードを修正することなく実行することができる。

BSDmacOSLinuxCP/MDOSSolaris といったOSにもHALに相当する部分は存在しているが、明確にHALとして認識・区別されていない。Linuxなどでは、動作中のカーネルに対してAdeosのようなHALを後から挿入することができる。NetBSDはHAL層を明確に区別しており、非常に移植性が高い。このシステムは ⇒uvm(9)、 ⇒pmap(9)、 ⇒bus_space(9)、 ⇒bus_dma(9) といったサブシステムから構成される。ISAEISAPCIPCI-Eなど、複数のアーキテクチャで使われているI/Oバスも抽象化されており、デバイスドライバも最小限の修正だけで移植可能である。

HALの極端な例として、System/38AS/400のアーキテクチャがある。これらシステム上のコンパイラの多くは抽象化された機械語コードを生成する。Licensed Internal Code (LIC) はそれを動作中のシステムのプロセッサ用コードに変換し実行させる。LIC層より上のアプリケーションやOSのコードはSystem/38からAS/400に移行する際に全く修正も再コンパイルも不要だった(System/38とAS/400では少なくとも3種類の全く異なるプロセッサが使われている)。

HALは、カーネルの代わりにハードウェアと直接やり取りするものであるため、そのインタフェースはOSのAPIよりも下位に存在する。したがって、HALの処理にかかる時間はAPI(システムコール)にかかる時間よりも短くなければならない。

HALが定義されたOSは各種ハードウェアに容易に移植可能である。これは非常に様々なプラットフォーム上で動作することを要求される組み込みシステムでは特に重要である。
DirectX

Windows向けのマルチメディア処理用APIであるDirectXにも、HALに対応したコンポーネントがいくつか存在する。

リアルタイム3次元コンピュータグラフィックスAPIであるDirect3Dには、ビデオカードなどのグラフィックスハードウェア (GPU) を抽象化するためのHALデバイス[3]が用意されている。ベンダー間の差異を吸収する層であるHALデバイスを利用することにより、ベンダー共通のDirect3D APIを用いてハードウェアの機能にアクセスできる。

なお、DirectDrawにはドライバーをユーザーモードでエミュレーションするためのHardware Emulation Layer (HEL) が用意されていた[4]

DirectSoundにもサウンドカードのハードウェア支援を利用するHALが用意されていたが、Windows Vista以降はソフトウェアエミュレーションに置き換えられた[5]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:40 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef