対応ハードウェアの拡充は、適用範囲の拡大をもたらす。カーネル2.6では、より多くのCPUやデバイスをサポートするほか、電源管理機能などの大幅な強化が行われている。(編集局)
第1章では、RCU(Read-Copy Update)やスケジューラ、ファイルI/Oや仮想メモリなど、カーネル・コアの改良点について解説しました。次に、カーネル2.6における追加機能を3回に分けて解説します。
カーネル2.6では、以下のような機能が新たに追加されます。
●ハードウェアサポートに関する機能強化
●カーネルへの新機能追加
第2章ではハードウェア関係にフォーカスして、カーネル2.6の登場によりLinuxの適用可能分野が拡大することを紹介します。
LinuxはIA-32(IBM PC/AT互換機やPCサーバ)だけでなく、Compaq AlphaやPowerPCを搭載したMacintoshなど、さまざまな環境で動作します。また近年では、PC/サーバ系システムだけでなく、PDAなどの組み込み分野での利用も進んでいます。そして、カーネル2.6では以下のようなアーキテクチャサポートの拡充・強化がなされています。
Linuxは比較的初期のころからAlpha CPUをサポートしていたこともあり、現時点でもさまざまな64bit系CPUで動作しています。カーネル2.6では、64bit CPU対応がさらに強化されています。
●IA-64 CPU対応強化
IA-64とは、Itanium/Itanium2(McKinley)などのIntel系64bit CPUです。IA-32エミュレーション機構により、IA-64ネイティブのアプリケーションとIA-32のアプリケーションの両方が動作します。Linuxは、HP、SGI、Intel、Red Hat、SuSE、米国VA Linux Systems(編注)といった企業の協力により、カーネ2.4からIA-64をサポートしています。
編注:現VA Software。現在は、IA-64 Linuxの開発には参加していない。
カーネル2.4時はIA-64への移植を中心としたIA-64 Linux Project(http://www.linuxia64.org/)、現在はIA-64を搭載する大規模システムに必要な機能の実装に重点を移したAtlas project(http://atlas-64.sourceforge.net/)がIA-64版Linuxの開発を行っています。
IA-64版Linuxは、以下の環境で動作します。
カーネル2.6では、多くのバグフィックスやHuge TLBサポート、NUMA(Non-Uniform Memory Access)アーキテクチャ対応の強化(注)などがなされています。
注:カーネル2.5.59において、NUMA Aware Scheduler Extentionsが正式に取り込まれました。
●AMD系64bit CPUへの新規対応
カーネル2.6では、AMDのx86-64アーキテクチャ上でLinuxを動作させるための機能が追加されています。x86-64は、VLIW(Very Long Instruction Word)を採用しているIA-64とは異なり、現在のIA-32を64bitに拡張したアーキテクチャを採用しています。
x86-64アーキテクチャの特徴を以下に示します。
1.64bitのアドレス空間
x86-64は64bit CPUであり、64bit仮想アドレス空間をサポートしています。LinuxはI/O MMUサポート機能により、4Gbytes以上のメモリを既存の32bitデバイスで使用することができます。
2.64bit拡張レジスタ
x86-64は、高性能な64bit環境を実現するための独自の拡張システムレジスタ群に加え、現行のIA-32のレジスタを64bitに拡張した汎用レジスタセットを搭載しています。
また、x86-64ではほとんどの命令が32bitのオペランドを取るようになっており、命令プレフィクスを使用して、これらの拡張レジスタへアクセスするようになっています。
x86-64の主なレジスタを図1に示します。
3.レガシーモード/互換モードのサポート
従来のIA-32環境と同様の16/32bitアプリケーションおよびOSを動作させるためのレガシーモードや、64bit環境で従来の32bitアプリケーションを実行するための互換モードをサポートしており、既存のIA-32アプリケーションやOSを利用することが可能です(表1)。
モード | サブモード | 既存アプリの リコンパイル |
アドレス長 | オペランド長 | 拡張レジスタ の使用 |
|
---|---|---|---|---|---|---|
ロングモード (64bit OS環境) |
64bitモード | 必要 | 64bit | 32bit | 可能 | |
互換モード | 不要 | 32bit | 32bit | 不可能 | ||
16bit | 16bit | 不可能 | ||||
レガシーモード (16/32bit OS環境) |
プロテクトモード | 不要 | 16/32bit | 32bit | 不可能 | |
仮想86モード | 不要 | 16bit | 16bit | 不可能 | ||
リアルモード | 不要 | 16bit | 16bit | 不可能 | ||
表1 x86-64の動作モード |
4.NUMAアーキテクチャ対応
NUMAアーキテクチャに対応しており、ハイパフォーマンスなマルチプロセッサ環境の実現が期待されています。
現在、AMDやSuSE Linuxなど複数の企業が中心となって、AMD Hammer/x86-64アーキテクチャへの対応を行っています。
●PowerPC64系CPUへの対応強化
PowerPC64とは、その名のとおり64bit系のPowerPC CPUです。現在、IBM pSeries/iSeriesなどでPowerPC64が採用されています。
カーネル2.5系の現状を見る限りでは、カーネル2.6ではバグフィックスのほかにIBM pSeriesにおける非連続メモリサポートがなされる見込みです。
近年、PDAやセットトップボックス、インターネットラジオ、ルータなどのネットワーク関連機器の分野における組み込み用制御OSとして、Linuxを採用するケースが増えてきています。このような背景を受けて、カーネル2.6では以下のような組み込み系分野への対応強化がなされています。
●uCLinuxの統合
組み込み用途でLinuxを使用する場合にネックとなる事柄の1つが、Linuxは多重仮想メモリ空間をサポートしたOSであるということです。多重仮想メモリ空間サポートとは、CPUのメモリ管理ユニット(MMU)を適切に設定することで、プロセスごとに独立した仮想的なメモリ空間を提供する機能のことです。
しかしながら、組み込み分野ではメモリ管理ユニットを搭載していないCPUが採用されることが多いため、通常のLinuxおよびLinux上のアプリケーションを動作させることはできません。そこで、Linuxにいくつかの修正を加えることで、MMUを搭載していないCPUでもUNIX/Linuxのアプリケーションを利用できるようにしたのがuCLinuxです。
uCLinuxでは、以下のような修正が行われています。
1.メモリ管理系の置き換え
カーネルのmmディレクトリ配下に実装されている仮想メモリ管理関連処理を物理ページ管理関連関数を用いた処理に置き換えることで、MMUを持たないCPUで動作するように変更しています。
2.プロセス実行系の置き換え
uCLinuxは、MMUを持たないCPUでの動作を前堤としているため、すべてのアプリケーションは同一の空間を共有します。従って、プロセスの実行時アドレスがロードするたびに変化します。そこで、uCLinuxはユーザープログラムのファイルフォーマットとして、FLAT(bFLAT/zFLAT)フォーマットというリロケータブルファイルフォーマット(注)を採用し、プロセスのロード/起動時にアドレス解決を行います。
注:FLATは、リロケーション情報付きの変形a.outフォーマットです。
3.システムコールの変更
uCLinuxでは、MMUを前堤としている一部のシステムコール(mprotect/mlockなど)は使用できません。
uCLinuxの構成を図2に示します。
カーネル2.6では、uCLinuxの統合の一環としてモトローラのMC68EZ328やMCF5206などのMMU未搭載の68系CPUやNEC V850(注)に対する対応が取り入れられる予定です。
注:NEC V850は日本電気の組み込み用CPUです。LinuxのV850サポートはThe Midas labs社のRTE-V850E/MA1-CB評価ボードやGDB(GNU Debugger)のV850シミュレータ環境などで動作させることができます。
●組み込み系CPUへの対応
組み込み分野で利用されるCPUへの対応として、IBM PowerPC 405GPやIntel XScale系のCPUサポートが標準カーネルに統合されました。IBM PowerPC 405GPは、IBMが開発しているMMUを搭載した組み込み用途のPowerPCです。
PowerPC 4xx系CPUへの移植は、組み込み系Linux企業であるMontaVista Software社が中心となって行っています。また現在、PowerPC用Linuxの開発リポジトリでは、PowerPC 405PR/405LP/440などのCPUへの対応が進められており、カーネル2.6系のいずれかの時点でこれらのCPUに対応する可能性もあります。
一方、XScaleはCompaqのiPAQなど多くのPDAで採用されている組み込み用CPUです。カーネル2.4のころからiPAQなどのXScale搭載PDAでLinuxを動作させるためのカーネルパッチが出回っていましたが、カーネル2.6ではARM系MPU対応の一環としてXScale対応部が標準カーネルに取り込まれています。
Copyright © ITmedia, Inc. All Rights Reserved.