この記事は、UNIX に似たオペレーティング システムのサブシステムについて説明しています。一般的な概念と Windows NT カーネル HAL については、「 ハードウェアの抽象化」を参照してください。
この記事は、UNIX に似たオペレーティング システムのサブシステムについて説明しています。一般的な概念と Windows NT カーネル HAL については、「ハードウェアの抽象化」を参照してください。
この記事は 更新する必要があります。最近の出来事や新たに入手可能な情報を反映するためにこの記事を更新してください。 (2022年1月) |
安定版リリース | 0.5.14 / 2009 年 11 月 30 日; 12年前 |
---|---|
オペレーティング·システム | Linux、 FreeBSD、 NetBSD、 OpenSolaris、 Solaris |
プラットホーム | UNIX |
タイプ | システムソフトウェア |
ライセンス | GNU 一般公衆利用許諾書 および アカデミック無料ライセンス |
Webサイト | freedesktop.org/wiki/ソフトウェア/hal/ |
HAL (ハードウェア アブストラクション レイヤー 、または ハードウェア アノテーション ライブラリ) は、 ハードウェア抽象化を提供するUNIX 系 オペレーティング システム 用の ソフトウェアサブシステムです。
HAL は、 ほとんどの Linux ディストリビューションと FreeBSD で非推奨になりました。 機能は、 2008 ~ 2010 年の時点で Linux 上のudevと FreeBSD 上の devdにマージされています 。[要出典] 以前は、HAL は udev 上に構築されていました。[要出典]
HAL (ハードウェア アブストラクション レイヤー、またはハードウェア アノテーション ライブラリ) は、ハードウェア抽象化を提供するUNIX 系オペレーティング システム用のソフトウェアサブシステムです。
HAL は現在、ほとんどの Linux ディストリビューションと FreeBSD で非推奨になっています。2008 年から 2010 年にかけて、機能はLinux 上のudevと FreeBSD 上の devd に統合されました。[要出典] 以前は、HAL は udev 上に構築されていました。[要出典]
udev や devd のような代替手段がない他の OS では、依然として HAL を使用しています。
ハードウェア抽象化レイヤーの目的は、 基盤となるハードウェアの種類に関係なく、デスクトップ アプリケーションが、シンプルでポータブルな 抽象 API を通じてホスト システムの ハードウェアを 検出して使用できるよう にすることでした。[1]
Linux OS 用の HAL は、もともと Havoc Penningtonによって構想されました。これは freedesktop.orgプロジェクトとなり、 GNOME および KDE デスクトップ環境 のソフトウェア スタックの重要な部分となりました 。これは フリー ソフトウェアであり、 GNU General Public License と Academic Free License の両方に基づく二重ライセンスが付与されています 。[2]
HALは、割り込みルーティングなど、カーネル内のプラットフォーム固有のコア機能を処理するWindows NTカーネル HALの概念とは無関係です 。
udev や devd などの代替手段がない他のオペレーティング システムでは、依然として HAL が使用されています。
ハードウェア抽象化レイヤーの目的は、基礎となるハードウェアの種類に関係なく、デスクトップ アプリケーションが、シンプルでポータブルな抽象APIを通じてホスト システムのハードウェアを検出して使用できるようにすることです。[1]
Linux OS 用の HAL は、もともとHavoc Penningtonによって考案されました。これはfreedesktop.org プロジェクトとなり、 GNOMEおよびKDE デスクトップ環境ソフトウェア スタックの重要な部分となっています。これはフリー ソフトウェアであり、 GNU General Public LicenseとAcademic Free Licenseに基づいて二重ライセンスが付与されています。[2]
HAL は、割り込みルーティングなど、カーネル内のプラットフォーム固有のコア機能を処理する Windows NT カーネル HAL の概念とは何の関係もありません。
コンテンツ
理論的根拠
従来、 オペレーティング システム カーネルは 、システムが実行されるハードウェアに抽象インターフェイスを提供する役割を担っていました。アプリケーションは、 これらの抽象化を通じてハードウェアと通信するために、システム コールインターフェイスを使用するか、デバイス ノード 上で ファイル I/Oを実行します。初期のデスクトップ コンピューティングの単純なハードウェアにはこれで十分でした。
しかし、コンピュータ ハードウェアは複雑さを増しており、Unix カーネルによって提供される抽象化は、現在サーバー コンピュータとデスクトップ コンピュータの両方で一般的となっているデバイスや周辺機器の種類の急増に追いついていません 。最新の バスのほとんどはホットプラグ対応に なっており 、重要な トポロジを持つことができます。その結果、システム コール インターフェイスや Unix IPC を介して追跡するのが難しい方法でデバイスが検出されたり、状態が変更されたりすることがあります。その複雑さにより、アプリケーション作成者はハードウェア サポート ロジックを再実装する必要があります。[1]
一部のデバイスでは、使用を準備するために特権付きヘルパー プログラムも必要です。 これらは、多くの場合、Unix 権限モデルでは表現しにくい方法で呼び出す必要があります (たとえば、ユーザーがビデオ コンソールにログインしている場合にのみワイヤレス ネットワークに参加できるようにするなど )。[1]アプリケーション作成者 は、独自のアクセス制御と権限分離を提供するためにsetuid バイナリ を使用する か、サービスデーモンを実行することに頼っており、そのたびにセキュリティ ホールが発生する可能性があります。
基本的
従来、オペレーティング システム カーネルは、システムが実行されるハードウェアに抽象インターフェイスを提供する役割を担っていました。アプリケーションは、システム コールインターフェイスを使用するか、デバイス ノード上でファイルI/Oを実行して、これらの抽象化を通じてハードウェアと通信します。初期のデスクトップ コンピューティングの単純なハードウェアにはこれで十分でした。
しかし、コンピュータ ハードウェアの複雑さが増し、Unix カーネルによって提供される抽象化では、サーバーやデスクトップ コンピュータで一般的になったデバイスや周辺機器の種類の爆発的な数の増加に追いつくことができなくなりました。最新のバスのほとんどはホットプラグ対応でもあり、重要なトポロジを持つことができます。その結果、システム コール インターフェイスや Unix IPC を通じて追跡するのが難しい方法でデバイスが検出されたり、状態が変更されたりします。その複雑さにより、アプリケーション作成者はハードウェア サポート ロジックを再実装する必要があります。[1]
一部のデバイスでは、使用を準備するために特権ヘルパーが必要です。これらは、多くの場合、Unix 権限モデルでは表現するのが難しい方法で呼び出す必要があります (たとえば、ユーザーがビデオ コンソールにログインしている場合にのみワイヤレス ネットワークに参加できるようにするなど) 。[1]アプリケーション作成者は、独自のアクセス制御と権限の分離を提供するためにsetuidバイナリ を使用するか、サービスデーモンを実行することに頼っており、そのたびにセキュリティ ホールが発生する可能性があります。
デザイン
HAL は、ホスト コンピュータ上のほとんどのハードウェアへのアクセスの検出、列挙、仲介を担当する単一のデーモンです。アプリケーションは、オブジェクトベースのRPCメカニズム の背後にあるハードウェアを抽象化する D-Bus IPCメカニズムを通じて HAL と通信します 。
各論理ハードウェア デバイスは D-Bus オブジェクトとして表され、そのバス アドレスは一意の識別子として使用されます。デバイスには、 ディスク パーティション や可視ワイヤレス ネットワークなどの抽象化が含まれます。デバイスの機能は D-Bus インターフェイスを通じて公開され、その状態は キーと値のペアのセットであるプロパティを通じてアクセスされます。
HAL は、ハードウェア イベントを これらのオブジェクト上の信号としてブロードキャストします。アプリケーションは信号をリッスンし、信号が示すハードウェア イベント ( デジタル カメラ が差し込まれている、 光ディスクが 回転している、ラップトップ コンピューターの蓋が閉じているなどのイベント) に反応できます。[3] [4]
デザイン
HAL は、ホスト上のほとんどのハードウェアへのアクセスを検出、列挙、仲介する役割を担う単一のデーモン プロセスです。アプリケーションは、ハードウェアをオブジェクトベースのRPCメカニズムに抽象化するD-Bus IPCメカニズムを通じてHAL と通信します。
各論理ハードウェアデバイスは、バス アドレスが一意の識別子として使用される D-Bus オブジェクトとして表されます。デバイスには、ディスク パーティションや可視ワイヤレス ネットワークなどの抽象化が含まれます。デバイスの機能は D-Busインターフェイスを通じて公開され、その状態にはキーと値のペアのセットであるプロパティを通じてアクセスされます。
HAL は、これらのオブジェクト上の信号としてハードウェア イベントをブロードキャストします。アプリケーションは、信号をリッスンして、デジタル カメラの接続、ディスクの回転、ラップトップの蓋を閉じるなどのイベントなど、信号が表すハードウェア イベントに反応できます。[3] [4]
実装と陳腐化
Linux では、HAL は /sys
( Linuxシステム 用の 仮想ファイル システム ) を使用してハードウェアを検出し、カーネル ホットプラグ イベントをリッスンします。一部の Linux ディストリビューションでは、 新しいデバイス ノードが出現するたびに udev デーモンが HAL に通知できるようにするudevルールも提供しています。
実装と陳腐化
Linux では、HAL は
/sys
( Linux システムの仮想ファイルシステム) を使用してハードウェアを検出し、カーネルホットプラグイベントをリッスンします。一部の Linux ディストリビューションでは、新しいデバイス ノードが表示されたときに udev デーモンが HAL に通知できるようにするudevルールも提供しています。
廃止されました
2011 年の時点で、 Ubuntu、[5] Debian、[6] 、 Fedora などの Linux ディストリビューション、FreeBSD、[7]、 KDE、[8] GNOME、 X.orgなどのプロジェクトは、 HALを非推奨にする 過程にあります。 「巨大な一体化した維持不可能な混乱になった」。[5] プロセスはほぼ完了しましたが、HAL の使用が一部残っています – Debian スクイーズ (2011 年 2 月) と Ubuntu バージョン 10.04 では、基本システムとブート プロセスから HAL が削除されました。[9] Linux では、 udev へのマージが進行中です。 (main udev、libudev、および udev-extras) および既存の udev およびカーネル機能。FreeBSD などの非 Linux システムの代替となるのは devd です。
当初、新しいデーモン DeviceKit が HAL の特定の側面を置き換えることが計画されていましたが、2009 年 3 月に DeviceKit は非推奨となり、同じコードをパッケージ udev-extras として udev に追加することになり、一部の機能は現在 udev 本来の機能に移動しています。
廃止された
2011 年の時点で、Ubuntu、[5] Debian、[6]、Fedoraなどの Linux ディストリビューションと、FreeBSD、[7]、KDE、[8] GNOME、X.orgなどのプロジェクトは、HAL を非推奨にしています。巨大な、保守不可能な塊になってしまいました。」[5]プロセスはほぼ完了しましたが、HAL の使用が一部残っています - Debian Squeeze (2011 年 2 月) と Ubuntu バージョン 10.04 は、ベース システムとブート プロセスから HAL を削除します。[9] Linux では、既存の udev およびカーネル機能だけでなく、udev (メイン udev、libudev、および udev-extras)にマージされます。FreeBSD などの非 Linux システムの代替手段は devd です。
新しいデーモンDeviceKit は当初 HAL の一部を置き換える予定でしたが、2009 年 3 月に DeviceKit は非推奨となり、パッケージ udev-extras と同じコードを udev に追加することになり、一部の機能は udev に移動されました。自体。
こちらも参照
参考文献
- ^ ジャンプ先: a b c Pennington、Havoc (2003-07-10)、 Making Hardware Just Work
- ^ HAL ソース コード ライセンス テキスト、HAL は、Academic Free License バージョン 2.1 または GNU General Public License バージョン 2 の選択に基づいてライセンスされます。
- ^ Zeuthen、David (2009-11-01)、 HAL 0.5.14 仕様、 freedesktop.org、2017-01-15 取得
- ^ "ハル: ドキュメント/スペック" . 2010年3月16日。2017 年 1 月 15 日に取得。
- ^ ジャンプ先:a b 半切除術、 ubuntu.com、2013-05-10、2017-01-15 取得
- ^ “HALの除去” . debian.org。2011年6月28日。2017 年 1 月 15 日に取得。
- ^ “機能/HalRemoval” . フェドラプロジェクト。2012年1月9日。2017 年 1 月 15 日に取得。
- ^ "リビジョン 1206281: KDE ベースの機能" . KDE。2010年12月19日。2017 年 1 月 15 日に取得。
- ^ "技術概要: HAL の除去" . ubuntu.com。2010年5月17日。2017 年 1 月 15 日に取得。
参考文献
- ^ジャンプ先: a b c Pennington、Havoc (2003-07-10)、ハードウェアを動作させる
- ^ HAL ソース コード ライセンス テキスト、HAL は、Academic Free License バージョン 2.1 または GNU General Public License バージョン 2 の選択に基づいてライセンスされます。
- ^ Zeuthen、David (2009-11-01)、 HAL 0.5.14 仕様 、 freedesktop.org、 2017-01-15 取得
- ^ "hal: ドキュメント/仕様" . 2010 年 3 月 16 日取得。2017 年 1 月 15 日に取得。
- ^ジャンプ先: a b 半切除術 、ubuntu.com、2013-05-10、2017-01-15 取得
- ^ 「HAL の削除」 . debian.org . 2011年6月28日。2017 年 1 月 15 日に取得。
- ^ “機能/HalRemoval” . Fedora プロジェクト。2012年1月9日。2017 年 1 月 15 日に取得。
- ^ "リビジョン 1206281: KDE ベースの機能" . ケイド。2010 年 12 月 19 日。2017 年 1 月 15 日に取得。
- ^ "技術概要: HAL の除去" . ubuntu.com。2010-05-17. 2017-01-15 閲覧。
外部リンク
外部リンク