JP2001520416A - 仮想メモリサブシステムから物理メモリのコンテンツにアクセスして実行する方法及び装置 - Google Patents

仮想メモリサブシステムから物理メモリのコンテンツにアクセスして実行する方法及び装置

Info

Publication number
JP2001520416A
JP2001520416A JP2000516281A JP2000516281A JP2001520416A JP 2001520416 A JP2001520416 A JP 2001520416A JP 2000516281 A JP2000516281 A JP 2000516281A JP 2000516281 A JP2000516281 A JP 2000516281A JP 2001520416 A JP2001520416 A JP 2001520416A
Authority
JP
Japan
Prior art keywords
bios
memory
instruction sequences
virtual
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2000516281A
Other languages
English (en)
Inventor
マシュー イー. ジルマー
クァン ファン
Original Assignee
フィーニックス テクノロジーズ リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by フィーニックス テクノロジーズ リミテッド filed Critical フィーニックス テクノロジーズ リミテッド
Publication of JP2001520416A publication Critical patent/JP2001520416A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 本発明は、プロセッサベースシステムの仮想メモリから物理メモリの命令シーケンスにアクセスして実行する装置及び方法である。装置は、プロセッサベースシステムが処理される命令シーケンスを格納するためのメモリを有し、メモリは、物理メモリと仮想メモリとを含む。装置は、格納された命令シーケンスを実行するプロセッサも有する。格納された命令シーケンスは、プロセッサに以下の動作を生じさせるプロセスステップを含む。すなわち、物理メモリから仮想メモリへの複数の所定命令シーケンスのマップと、仮想メモリにて前記複数の所定命令シーケンスの1つに対するオフセットの判別と、複数の所定命令シーケンスの1つを実行する命令の受け入れと、複数の所定命令シーケンスのうちの1つへの制御の転送と、仮想メモリから複数の所定命令シーケンスの1つの処理とである。

Description

【発明の詳細な説明】
【0001】
【発明の背景】
【0002】
【技術分野】
本発明は、プロセッサベースシステムのメモリに関し、特に仮想記憶サブシス
テムから物理メモリのコンテンツにアクセスして実行するための装置および方法
に関する。
【0003】
【関連技術の説明】
仮想記憶サブシステムにおいて、仮想記憶アドレス指定は、ソフトウェアプロ
グラムにおいて使用されるメモリアドレスが、物理メモリの位置に間接的にマッ
プされる場合に使用される。物理アドレスへの変換は、大抵はプロセッサによっ
てなしとげられる。そして、かかる物理アドレスは、ユーザモードソフトウェア
および基本入出力システム(BIOS)にアクセス不能である。
【0004】 かかる仮想記憶サブシステムの一例は、Windows NTにより使用され るものである。尚、Windows NTは、マイクロソフトによって製造され て販売されている。特に、Windows NTは、デマンドページ仮想メモリ サブシステムを取り入れる。Windows NTオペレーティングシステムで 動作しているプログラムに提供されるメモリアドレス空間は、他のプログラムが
他のユーザモードプログラムから保護されているように、他のユーザモードプロ
グラムから保護されている。これは、ユーザモードサービスおよびアプリケーシ
ョンが、お互いのメモリに書き込んだり、またはお互いの指示を実行しないこと
を保証するものである。カーネルモードサービスおよびアプリケーションは、同
様の方法で保護されている。プログラムの割当られた仮想空間の外側のメモリに
アクセスしようとする場合、プログラムが終了されるとともに、ユーザに通知さ
れる。
【0005】 仮想記憶サブシステムも、物理メモリアドレスや、コンピュータシステムの一
部である入出力装置へのユーザモードソフトウェアによる直接アクセスを防ぐ。 仮想記憶サブシステムを使用しているオペレーティングシステムを実行できる
コンピュータシステムの入出力装置の使用に対する傾向が増加している。かかる
システムでは、BIOSファンクション等のプログラムの仮想記憶空間の外側で
メモリにアクセスするための手段が無い。この課題に対する1の方法は、装置用
の命令を含むファイルを読み込むデバイスドライバをインストールすることであ
る。ドライバは、ファイルを読み込んで、これらの命令を装置のメモリに書き込
む(またはダウンロードする)。しかし、このタイプのデバイスドライバは、メ
モリに対する限られたアドレス指定能力及び入出力動作のみを許容する。更に、
それは、物理メモリ空間でのシステムのプロセッサ命令の実行を許可しない。
【0006】 したがって、仮想記憶サブシステムから物理メモリのコンテンツをアクセスし
て実行するための装置および方法に対する技術に需要が存在する。そして、これ
は、メモリ用の増大したアドレス指定能力および入出力動作を容易にするととも
に、物理メモリから直接にプロセッサ命令の実行を許容する。
【0007】
【発明の簡単な概要】
本発明は、プロセッサベースシステムの仮想メモリから物理メモリの命令シー
ケンスにアクセスして実行する装置および方法である。この装置は、プロセッサ
ベースシステムが処理される命令シーケンスを格納するためのメモリを有し、メ
モリは、物理メモリと仮想メモリとを含む。装置は、格納された命令シーケンス
を実行するためのプロセッサも有する。格納された命令シーケンスは、プロセッ
サに以下の動作を生じさせるプロセスステップを含む。すなわち、物理メモリか
ら仮想メモリへの複数の所定命令シーケンスのマップと、仮想メモリの複数の所
定命令シーケンスのうちの1つに対するオフセットの判別と、複数の所定命令シ
ーケンスのうちの1つを実行する命令の受け入れと、複数の所定命令シーケンス
のうちの1つへの制御の転送と、仮想メモリから複数の所定命令シーケンスのう
ちの1つの処理とである。
【0008】
【好ましい発明の詳細な説明】
本実施例を、プロセッサシステム10に関して記載する。図1は、本発明の処
理を実行する典型的なプロセッサシステム10を示す。プロセッサシステム10
は、CPU12とメモリモジュール14とを含む。メモリモジュール14は、ラ
ンダムアクセスメモリ(RAM)16と、リードオンリーメモリ(ROM)18
とを含む。一実施例において、メモリモジュール14は、メインメモリ、すなわ
ちダイナミックランダムアクセスメモリ(DRAM)を含む。CPU12および
メモリモジュール14は、システムバス20に接続されている。プロセッサシス
テム10は、さまざまなI/Oおよび周囲モジュールを(MISC,I/O # 1, #2... #N)も含むことがある。これらのさまざまなI/Oおよび周 囲モジュールは、システムバス20に接続されているI/Oバスに沿って接続さ
れている。周囲モジュールは、一例として、コンソール、プリンタ、マウスから
なる。
【0009】 本発明は、処理システム10にインストールされるオペレーティングシステム
に関しても記載する。図2は、本発明の装置および方法を使用している処理シス
テム10の構造を示している全体のファンクションブロック図である。処理シス
テム10は、アプリケーションプログラム32及びサービス34をサポートする
オペレーティングシステム30と、基本入出力システム(BIOS)36と、シ
ステムハードウェア38とからなる。BIOS36は、例えばコンソール(キー
ボードおよびディスプレイ)等のハードウェア装置、一般的なプリンタ、補助装
置(シリアルポート)、コンピュータの時計、ブートディスク装置に対する、ド
ライバやソフトウェアインタフェース等の集合である。BIOS36は、大抵、
プログラマブルなリードオンリーメモリ(PROM)に埋め込まれている。しば
しば、BIOSファンクションそれ自身が、RAM16のより高速のアクセスタ
イムを利用することによって、PROMからRAM16に実際にコピーされる。
これは、BIOS36の「シャドウイング」として公知である。何となれば、B
IOS36の2個のコピーが、結果として、PROMのもの(これはもはや使用
されない)と、RAM16のものとをとを生じるからである。BIOS36を格
納するRAM16の一部は、BIOSシャドウ空間として公知である。Wind
ows NT等のオペレーティングシステムは、オペレーティングシステムが起 動して動作したあとは、BIOS36を使用しない。Windows NTオペ レーティングシステムのカーネルレベルドライバは、直接システムハードウェア
とインターフェースする。本発明は、システムハードウェア38とオペレーティ
ングシステム32との間のインタフェースとして、BIOS36の使用を容易に
する。
【0010】 オペレーティングシステム30は、アプリケーションプログラム32とサービ
ス34とにインタフェースするクラスドライバ40と、I/Oマネージャー42
とを含む。I/Oマネージャー42は、適切に順番付けられた呼出しへとクラス
ドライバ40を介して作成されるアプリケーションプログラム32およびサービ
ス34からのI/O要求を、カーネル44に位置するさまざまなドライバルーチ
ンに変換する。特に、I/Oマネージャー42にI/O要求が入力されるときに
、それは、カーネル44に位置するドライバの複数のディスパッチルーチンのう
ちの1つを呼出す要求のファンクションコードを使用する。カーネル44は、ハ
ードウェアから独立したファンクションを提供する。これは、システムファンク
ションと呼ばれ、ソフトウェア割り込みによってアクセスされる。カーネル44
により提供されるファンクションは、とりわけ、ファイルおよびディレクトリ管
理、メモリ管理、文字装置入出力、時間および日付サポートを含む。一実施例に
おいて、オペレーティングシステムは、Windows NTオペレーティング システムである。他の実施例において、オペレーティングシステム30は、ソラ
リス(Solaris)、すなわちAIXオペレーティングシステム、またはデマ
ンドページ仮想記憶サブシステムに基づいた他のオペレーティングシステムを含
む。
【0011】 本発明は、カーネル44内に配置されたアクセスドライバ46を提供する。ア
クセスドライバ46は、BIOS36に位置するBIOSデータにアクセスした
り、BIOS36を介してシステムハードウェア38のデータにアクセスするこ
とに、責任を負うものである。アクセスドライバ46は、関係するBIOSファ
ンクションの実行と同様に、BIOSファンクションアドレスの位置にアクセス
することに対しても責任を負うものである。好ましい一実施例において、アクセ
スドライバ44は、C言語にて書かれるソースコードから成る。なお、他のアセ
ンブリ言語を、アクセスドライバ44のファンクションを実行する際に使用して
も良い。BIOSデータおよびアドレスは、大抵物理メモリ50(多くの場合R
AM14a、図1参照)に配置され、アクセスドライバ46によってBIOSイ
ンタフェース48を介してアクセスされる。一実施例において、アクセスドライ
バ46は、BIOSシャドウ空間にて、多くの場合物理アドレス0x000E0000−0
x000FFFFFで、コードを実行する。
【0012】 例えば、アクセスドライバ46は、アドレス0x00000000の物理メモリにて位 置するBIOSファンクションにアクセスする必要がある。それは、物理アドレ
ス0x00000000から0x00000FFFまでのメモリ空間を仮想記憶空間にマップするこ
とをそれに要求しながら、I/Oマネージャ42に呼出しを作る。次に、I/O
マネージャ42は、アクセスドライバ46の仮想記憶空間、例えば0xfd268000 へのポインタを戻す。アクセスドライバは、0xfd268000を有するその仮想アド レスを基数としたり(basing)または参照することによって、物理アドレス0x000
00000のアドレス空間を参照する。このように、物理アドレス0x400に位置する アクセスファンクションは、使用される仮想アドレスは、0xfd268400である。
【0013】 好ましい実施例において、一組のエントリポイント、またはファンクション呼
出しは、アプリケーションプログラム30、サービス32、または、アクセスド
ライバ46を使用するクラスドライバ40に利用可能である。アクセスドライバ
46は、オープンしたり、クローズしたりして、エントリポイントを介して入力
・出力(¨I/O¨)制御コード(”IOCTLs”)を取り込むことができる。表
1は、アクセスドライバ46用の構造、エントリポイント、アプリケーションを
示す。
【0014】 図3は、本発明の原理に従って設けられるようなアクセスドライバ46の初期
化処理を示しているブロック図である。一般に、アクセスドライバ46が最初に
ロードされるとき、そのDriverEntryファンクション(表1を参照の
こと)が実行される。多数の他の初期化がこのファンクションで起こるが(例え
ばさまざまなリソースの割当てや、アクセスドライバ46の通常動作のための目
的)、2つの特別に基本(essential)初期化が起きる。すなわち、(a)物理メモリ
50に位置するBIOSシャドウ領域60(これはBIOSサービスディレクト
リ62を含む)と、(b)物理メモリ50に位置するBIOSデータ領域64と
が、アクセスドライバ46の仮想メモリ(BIOSシャドウ領域70(これはB IOSサービスディレクトリ72を含む)及びBIOSデータ領域74として図
3に示す)へと両方ともマップされる。その結果、アプリケーションプログラム 32やサービス34は、クラスドライバ40によって、仮想アドレス指定を使用
して、BIOSファンクションにアクセスしこれを実行する。なお、BIOSフ
ァンクションの実行は、アクセスドライバ46から起こらなければならない。何
となれば、BIOS36の物理アドレス空間がアクセスドライバ46だけにマッ
プされるからである。更に、アクセスドライバ46は、付録Aに詳細に説明する
ように、32ビットのBIOSパワーマネジメントサービスインタフェースの実
施を介して使用される。当業者には、BIOSパワーマネジメントサービスイン
タフェースも、64ビット、128ビット、256ビット構成に対して実行され
ることは明らかである。アクセスドライバ46も、64ビット、128ビット、
256ビット構成にて動作できる。
【0015】 特に、アクセスドライバ46は、初期化の間、物理メモリ50に位置するBI
OSシャドウ領域60及びBIOSデータ領域64を探索する。BIOSシャド
ウ領域60およびBIOSデータ領域64は、アクセスドライバ46の仮想アド
レス空間にマップされる。次に、アクセスドライバ46は、BIOSサービスデ
ィレクトリ72のヘッダの検索を実行する。アクセスドライバ46は、BIOS
サービスディレクトリ72を見つけて確認すると、即座に、BIOSサービスデ
ィレクトリ72のヘッダの仮想アドレスを得る。そして、それは、BIOSシャ
ドウ領域70のベース仮想アドレスから、BIOSサービスディレクトリ72の
ヘッダの仮想アドレスのオフセットを提供する。
【0016】 他の実施例において、アクセスドライバは、初期化の間、物理メモリ50に位
置するBIOSシャドウ領域60と、BIOSデータ領域64と、BIOS R OM領域とを検索する。BIOSシャドウ領域60と、BIOSデータ領域64
と、BIOS ROM領域とは、アクセスドライバ46の仮想アドレス空間にマ ップされる。次に、アクセスドライバ46は、BIOSサービスディレクトリ7
2のヘッダの検索を実行する。アクセスドライバ46は、BIOSサービスディ
レクトリ72を見つけて確認すると、即座に、BIOSサービスディレクトリ7
2のヘッダの仮想アドレスを得る。この他の実施例において、アクセスドライバ
46の仮想メモリ空間のBIOS ROM領域の有効性によって、アクセスドラ イバ46は、フラッシュROMのデータを読んだりまたはデータを書いたりする
ことができる。その結果、BIOS ROMは、リフラッシュしたり、書き直す ことができる。更に、ハードウェアとインタフェースできる外部アプリケーショ
ンプログラムは、付録Bにおいて提供されるフェニックスフラッシュ(Phoe nixPhlash)NT仕様書に記載されているような、ソフトウェア機構に
よってBIOS ROM領域にアクセスする。
【0017】 後で、アクセスドライバ46の実行ファンクションに対する呼出しは、BIO
Sシャドウ領域70およびオフセットのベース仮想アドレスを使用して、BIO
Sの要求されたエントリポイントを呼び出す。尚、アプリケーションプログラム
32やサービス34によって、BIOSの仮想アドレス空間に適宜存在するBI
OSファンクションは、BIOSサービスディレクトリ72を介してのみだけで
はなく、実行することができる。
【0018】 一実施例において、BIOSの要求されたエントリポイントを呼び出すために
呼ばれる実行ファンクションは、IOCTL_BIOS_EXECファンクショ
ンであり、それは表1に記載されている。IOCTL_BIOS_EXECファ
ンクションは、メインメモリやDRAMに位置するバッファ(それは、呼び出し
ているアプリケーションプログラム32やサービス34により指定される)にレ
ジスタスタックをつくる。スタックのコンテンツは、BIOSファンクションが
呼び出される時の所望のレジスタ値である。アクセスドライバ46は、呼び出し
ているアプリケーションプログラム32やサービス34からレジスタスタックを
パスする。プロシージャ呼出しそのものは、BIOSサービスディレクトリ72
にて指定されるファンクションへのポインタを使用して実行される。一実施例に
おいて、IOCTL_BIOS_EXECによって呼ばれるBIOSファンクシ
ョンは、4バイトのシグネチャを引数として受け取って、シグネチャと関連する
BIOSを探す。呼び出しているアプリケーションプログラム32またはサービ
ス34にパスされる値は、BIOSファンクションのベース仮想アドレスと、サ
ービスのエントリポイントのベースアドレスからのオフセットとを含む。
【0019】 アクセスドライバ46用の構造と、エントリファンクションと、アプリケーシ
ョンとの一般的な議論を行う。
【0020】
【表1】
【0021】
【表2】
【0022】 A.アクセスドライバ46ファンクションの詳細な説明 1. 「DriverEntry」ファンクション このエントリポイントによって、ドライバはその変数を初期化し、BIOSシ
ャドウおよびデータ領域にマップし、リソースをその通常の動作に割り当てる。
各々のリソースまたはオブジェクトが割り当てられるように、それは、可変の「
phResAndFlags」に表にされ、これによって、ドライバに対してい
かなる理由がアンロードされようとも、ドライバにより使用されるリソースをフ
リーにする単一のファンクション(「freeResources」)が可能に
なる。割り当てられたりまたは接続されるリソースは、次の通りである。 a.装置オブジェクトの作成−システムによって装置オブジェクトおよび名前の
決定。 b.エラーログの初期化−イベントログサービスへのリンクの作成。 c.主たるファンクションエントリポイントのセットアップ。 d.シンボリックリンクの作成−サービスまたはアプリケーションレイヤによる
使用に対して。 e.BIOSシャドウのマップ−仮想メモリにアクセス可能なこのメモリ空間を
ドライバに作成。 f.BIOS ROMのマップ−仮想メモリアドレス空間にアクセスできるRO M領域を作成。 g.BIOSデータのマップ−仮想メモリにアクセス可能なこのメモリ空間をド
ライバに作成。 h.このドライバによって使用されるBIOS 32-ビットエントリポイントの
検索。
【0023】 一実施例において、装置オブジェクト名前は、「ラップトップ」であり、それ
は、マイクロソフトOEM適合キット(OAK)によって要求されるネクサス(n
exus)ファンクションをサービスするために必要になる。対応するシンボリック リンク名前は、「PhoenixAD」である。 2. AccessDriverCreateClose このファンクションは、アプリケーションプログラム32またはサービス34
が、装置ハンドル用のシステムに要求を作るとき、または、すでに得られたハン
ドルを閉じるときに、ドライバ46に知らせるために使用される。アクセスドラ
イバ46は、うまく要求を終了するがドライバ46の状態変数が全く変化しない
ことによって、このディスパッチエントリポイントに反応する。 3. AccessDriverUnload このディスパッチエントリポイントは、システムからドライバを除去するのに
必要なとき(装置が(SCM)から閉じる)に、サービス制御マネージャ(SC M)やほかのアプリケーションに代わってカーネルによって呼ばれる。このファ
ンクション呼出しの結果は、「phResAndFlags」に表にされたリソ
ースの全てが、システムに対してフリーにされ、要求がうまく完了されることで
ある。 4. AccessDriverReg アクセスドライバ46のドライバは、OEM適合キット(OAK)の一部とし
て提供されるパワーマネジメントモデルのための「ネクサス処理」を実行するフ
ァンクションを有する。このファンクションは、OAK制御法を使用する要求及
び知識を有するOEM及び標準装置のパワーマネジメントのエミュレーションに
集積されている。AccessDriverRegファンクションは、装置をリ
ンクされたリストに記録する。それは、要求に関して選択的に「記録解除する(d
eregisters)」装置である。典型的なOAK準拠デバイスドライバは、そのDr iverEntryファンクションが実行されるときに(最初にロードされると
きに)、登録用に呼出しを行う。そして、DriverUnloadファンクシ
ョンの一部として、各登録済み装置は、呼出しを行って、パワーマネジメントサ
ービスを必要としている装置のアクセスドライバ46のリンクリストから、それ
自体を除去する。 5. IOCTLファンクション サービスやアプリケーションレイヤとBIOSとの間のあらゆるインタフェー
スは、アクセスドライバ46のドライバのIOCTLファンクションによって処
理される。各IOCTL転送がバッファ付きモードで実行され、その結果、ドラ
イバへの入力データとその出力データとは、共通のシステムバッファにより転送
される。このバッファ空間へのポインタは、Irp>AssociatedIr
p.SystemBufferとして入出力(I/O)要求パケットにおいて与
えられる。与えられた制御であると、即座に、IOCTL(ドライバ内)は、シ
ステムバッファアドレスを得て、そのコンテンツを使用して要求を実行する。I
OCTLファンクション実行の結果は、入力用に使用されたように、同じシステ
ムバッファに置かれる。
【0024】 アクセスドライバ46のドライバにて実行される各々のIOCTLは、IOC
TL入力データ用の、そして、その出力データ用の固有データフォーマットを有
する。ファンクションが後述されるので、それらのデータバッファフォーマット
および各フィールドの説明が与えられる。バッファオフセットは、バイトで与え
られる。各ファンクションに対して与えられる最小バッファサイズは、アプリケ
ーションプログラムのユーザバッファに対して使用する推薦されるマロック(mal
loc())サイズである。システムバッファサイズは、ユーザバッファから自動的に
導かれる。 6. IOCTL_Locate IOCTL_Locateファンクションは、ドライバ46が初期化した後、
アプリケーションプログラム32またはサービス34によって呼ばれる第1のデ
ィスパッチエントリポイントである。ファンクションは、フラットモデル仮想ア
ドレスフォーマット(32ビットアドレス)にて、BIOS32サービスインタフ
ェースのアドレス、BIOSシャドウ領域のベースアドレス、BIOSデータ領
域のベースアドレスを戻す。尚、BIOS32サービスインタフェースは、ドライ
バレベルやカーネルスレッド(付録Aを参照のこと)から実行されるBIOSフ
ァンクションの全てに対するシングルエントリポイントである。BIOS32サー
ビスインタフェースは、ドライバレベルまたはカーネルスレッド(付録Aを参照
のこと)から実行されるBIOSファンクションの全てに対するシングルエント
リポイントである。これらのアドレス空間は、アクセスドライバ46のドライバ
がロードされている期間に(のみ)、このドライバにアクセス可能と保証されてい
る。
【0025】
【外1】
【0026】 7. IOCTL BIOS_Read IOCTL BIOS_Readファンクションは、BIOS ROM、シャ
ドウ領域、またはデータ領域のうちのいずれかの多目的リーダ(reader)である。
【0027】
【外2】
【0028】 注:BIOS領域へのオフセットが、マップされたBIOSメモリの端部ととも
にオーバラップを指定したので「short read」が生じる場合は、戻さ
れる誤差はない。その代わりに、「actual data read」フィー
ルドは、正確に、どれだけのデータがシステムバッファにて有効であるかを示し
ている。 8. IOCTL_BIOS_Write IOCTL_BIOS_Writeファンクションは、BIOS ROM、シ ャドウ、またはデータ領域のうちのいずれかの多目的ライター(writer)である。
【0029】
【外3】
【0030】 注:ショート書込は、データ汚染の可能性のために許可されない。 9. IOCTL_BIOS_Exec IOCTL_BIOS_Execファンクションは、BIOS32サービスイン
タフェースによってBIOSファンクションを実行するために使用される。起動
記録は、システムバッファの値によってパスされる。ARは、BIOSへのエン
トリポイントの起動時に、ベース構造レジスタコンテンツを判別する。首尾良く
終了したときに、ARは、BIOS呼び出し側に通常戻されるベース構造コンテ
キストを含む。
【0031】
【外4】
【0032】 10. IOCTL_RTC_Read IOCTL_RTC_Readファンクションは、CMOS RAMのRTC レジスタのコンテンツを読むために使用される。この原子読取り(atomic read) からのデータは、SYSTEMTIME構造と同様にフォーマットされて、シス
テムバッファのユーザに戻される。
【0033】
【外5】
【0034】 注: RTCのイヤーフィールドは、8ビット長である。RTCのイヤーフィ
ールドのコンテンツは、今年、西暦(AD)の全体の値を含むSYSTEMTI ME.YEAR16ビットフィールドに再計算される。例えば、RTC=00、Y
ear=1980;RTC=23,Year=2003。また、レガシー(legacy)RT
C装置がそれらのレジスタのミリセカンドフィールドを提供しないことに注意す
る。これのため、このファンクションのための出力データの現在のミリセカンド
フィールドは、常にゼロに設定される。 11. IOCTL_Version IOCTL_Versionファンクションは、呼び出し側のメジャー、アク
セスドライバ46のドライバのマイナーバージョンに戻る。更に、ドライバのこ
のバージョンにより実行されるファンクションは、ビットマップに列挙される。
ビットマップの目的は、サービスや高レベルのドライバが、ドライバのこのバー
ジョンをそれらの目的のために使用することができるか否かを(多くはインスト
ール時に)評価することである。
【0035】
【外6】
【0036】 12. IOCTL_PM_Suspend IOCTL_PM_Suspendファンクションによって、IRP_MJ_
PNP_POWERとIRP_MN_LT_SUSPEND IRP’sとが、
アクセスドライバDriverRegエントリポイントを使用してそれ自体を登
録した装置の各々に送られる。
【0037】
【外7】
【0038】 13. IOCTL_PM Resume IOCTL_PM_Resumeファンクションによって、IRP_MJ_P
NP_POWER、IRP_MN_LT_RESUME IRP’sが、アクセ
スドライバDriverRegのエントリポイントを使用してそれ自体を登録し
た装置の各々に送られる。
【0039】
【外8】
【0040】 B.アクセスドライバ46によって戻されるエラーコード 以下の表は、RPの終了が失敗したりまたは部分的に終了されるときに戻され
るエラー状況を定義する。ファンクションの終了の条件が、同様に与えられる。
この表は、必要である。何となれば、オペレーティングシステムによって公知の
NTSTATUS値と、アクセスドライバ46のデバイスドライバにより使用さ
れるものとの間に、1対1の対応が必ずしも必要でないからである。アプリケー
ションライターやエンドユーザによって使用できるストリングへとコードを逆に
変換するために、NTSTATUSエラーコードのみが使用されることが必須で
ある。
【0041】
【表3】
【0042】 C.BIOS 32ビットエントリポイント仕様 BIOS用のエントリポイントを見つけるIOCTL_Locateのために
、BIOS 32-ビットサービスディレクトリが使用される。BIOS 32-
ビットサービスディレクトリの説明を、付録Cに記載する。BIOSファンクシ
ョンを検索したり実行するときにアクセスドライバ46が使用するシグネチャは
、「32」とするものである。
【0043】 WinntEntry(BIOS32サービスディレクトリ)構造が上記の状態
を受けていることが見いだされなければ、アクセスドライバ46のドライバは、
ロード時間で失敗し、そして、DriverEntryは、表2に示すように、
初期化ができなかったことを示す。 D.リアルタイムクロックハードウェアアクセス IOCTL_RTC_Readファンクションを実行するために、RTCのレ
ジスタとアクセスの方法とを定義することが必要である。RTCレジスタは、C
MOS RAMのI/Oアドレス空間に位置する。RTCレジスタのみを、表3 に示す。レジスタは、CMOS RAMアドレスをポート0x70に出力して、次 にポート0x71で主体の8ビットレジスタを読み込むことによって、アクセスさ れる。すべてのRTCが読まれたあと、CMOS RAMアドレスは0x0Dを指
すように設定される。
【0044】
【表4】
【0045】 図4Aは、本発明の初期化処理の一実施例を示しているフローチャートである 。スタート状態から始まり、プロセスS100は、プロセスステップS110に進み、
呼び出しプログラム(すなわちI/Oマネージャ42)の変数が初期化される。
初期化ステップS110の詳細を、図4Bおよび添付のテキストに提供する。プロセ
スS100は、次にプロセスステップS120へ進み、そこで、アクセスドライバ46 をロードする。アクセスドライバの変数の初期化が、次に起きる。初期化ステッ
プの間、2の特に不可欠な初期化が起きる。すなわち、(a) 物理メモリ50に位
置するBIOSシャドウ領域60(これはBIOSサービスディレクトリ62を
含む)と、(b)物理メモリ50に位置するBIOSデータ領域64とが、両方
ともアクセスドライバ46のアクセスドライバ46の仮想メモリ(仮想メモリは
、図3に示すようにBIOSシャドウ領域70(これはBIOSサービスディレ
クトリ72を含む)とBIOSデータ領域74として示される)にマップされる
【0046】 プロセスS100は、次にプロセスステップS130へ進み、そこにおいて、ポイン
タの初期化が起きる。プロセスステップS130の詳細を、図4Cおよび添付のテキ
ストに提供する。プロセスS100は、次にプロセスステップS140へ進み、そこに
おいて、初期化が終了する。プロセスS100は、次に終わる。 図4Bは、プロセスステップS110の詳細を示しているフローチャートである。
プロセスS110は、スタート状態から始まると、プロセスステップS112に進み、
そこにおいて、I/Oマネージャ42からの呼び出しプログラムは、システムバ
ッファの指定されたメモリ構造に対してメモリを割り当てる。プロセスS110は 、次にプロセスステップS114へ進み、そこにおいて、I/Oマネージャ42か らの呼び出しプログラムは、多数のBIOSファンクションの位置、それらの対
応するエントリポイント、長さ、オフセットを判別する。一実施例において、こ
れは、BIOSファンクションの仮想アドレスを有する対応するBIOSファン
クションのために指定されたメモリ構造のアドレスフィールドに入ることによっ
て、そして、各々のBIOSファンクションを識別する4バイトのASCIIス
トリングを提供することによって、なしとげられる。次に、呼び出しプログラム
の初期化が終わる。
【0047】 図4Cは、図4AのプロセスステップS130の詳細を示しているフローチャート である。プロセスステップS132に示すように、呼び出しアプリケーションプロ グラム32またはサービス34は、スタート状態から始まり、クラスドライバに
よって、IOCTL_Locateに呼出しを行う。応えて、プロセスステップ
S134に示すように、アクセスドライバ46は、BIOSサービスディレクトリ 72のヘッダの検索を実行する。BIOSサービスディレクトリ72を見つけて
確認すると、即座に、アクセスドライバ46は、BIOSサービスディレクトリ
72のヘッダの仮想アドレスを得る。そして、これは、BIOSシャドウ領域7
0のベース仮想アドレスから、BIOSサービスディレクトリ72のヘッダ仮想
アドレスのオフセットを提供する。次に、プロセスS130は、呼び出しアプリケ ーションプログラム32またはサービス34に制御を戻す。
【0048】 図5Aは、本発明の呼び出し実行プロセスを示しているフローチャートである 。スタート状態から開始して、プロセスS200は、プロセスステップS210に進み
、そこにおいて、呼び出しプログラムが、アクセスドライバ46に、それが実行
を開始したいBIOSファンクションのアドレスを与えることによって、BIO
Sファンクションを呼び出す。プロセスS200は、次にプロセスステップS220へ
進み、そこにおいて、アクセスドライバ46は、I/Oマネージャ42から、I
OCTL命令を介してBIOSファンクションにディスパッチ呼出しを受け取る
(図2を参照のこと)。プロセスS200は、次にプロセスステップS230へ進み、
そこにおいて、アクセスドライバ46は、エントリポイントアドレスの範囲チェ
ックを行う。特に、アクセスドライバ46は、エントリポイントアドレスが、サ
ービスディレクトリヘッダを除く、BIOSシャドウ領域にマップされたアドレ
スの範囲内にあるか否かを判別する。そうでない場合には、アクセスドライバ4
6は、開始仮想アドレスが、物理メモリから仮想メモリまでマップされたアドレ
スの範囲内にないことを示す。これは、フラグの使用によって示される。範囲チ
ェックがうまくいっている場合、プロセスS200はプロセスステップS240へ進み
、そこにおいて、アクセスドライバ46は、呼ばれたBIOSファンクションを
実行する。次に、プロセスS200は終わる。
【0049】 図5Bは、図5AのプロセスステップS240の詳細を示しているフローチャート である。スタート状態から始まり、プロセスS240は、プロセスステップS242に
進み、そこにおいて、アクセスドライバ46は、I/Oマネージャ42からのプ
ログラムによって以前に指定されたシステムバッファにレジスタスタックをつく
る。プロセスS330は、次にプロセスステップS244へ進み、そこにおいて、アク
セスドライバ46は、実行されるBIOSファンクションのアドレスを保持する
レジスタスタックにポインタを提供する。プロセスS240は、次にプロセスステ ップS246へ進み、そこにおいて、I/Oマネージャ42からの呼出しプログラ ムは、仮想メモリにマップされるような物理アドレスを使用して、開始アドレス
がポインタにより示されているファンクションを呼び出して実行する。そして、
プロセスS240は終わる。
【0050】 アクセスドライバ46のIOCTL_BIOS_EXECファンクションのユ
ーティライゼーションの一例を提供する。まず最初に、アプリケーションプログ
ラム32またはサービス34は、命令IOCTL_Locateを使用してアク
セスドライバ46に呼出しを行う。アクセスドライバ46により戻されるデータ
は、BIOSシャドウ領域ベース仮想アドレス、BIOSシャドウ領域ベース仮
想アドレスからのBIOSサービスディレクトリオフセット、BIOSデータ領
域ベース仮想アドレスを含む。
【0051】 次に、以下のステップは、BIOSサービス、そのエントリポイント、長さ、
アドレスオフセットの存在を判別するために使用される。I/Oマネージャ42
からの呼び出しプログラムは、最初にIOC_EXEC1などのレジスタ構造に
対してメモリを割り当て、次に、IOCTL_Locateファンクションによ
って与えられる仮想アドレスを有する構造のbiosFunctionフィール
ドに充填する。他のレジスタ値が、次のように満たされる。BIOSサービスを
識別している4バイトのASCIIストリングは、eaxレジスタへとロードさ
れ、ゼロはebxレジスタへとロードされる。
【0052】 次に、呼び出し側は、IOCTL呼出しのためのシステムバッファにコピーさ
れたIOC_EXEC1構造のコンテンツを有するアクセスドライバ46のIO
CTL_BIOS_Execファンクションを呼び出す。次に、BIOSファン
クションが実行される。アクセスドライバ46のIOCTL_BIOS_Exe
cファンクションは、戻り、eax、ebx、ecx、edx用のレジスタ値は
、それぞれサービスディレクトリからの反応を含む。次に、I/Oマネージャ4
2の呼び出しプログラムは、サービスディレクトリから戻る情報を取り、システ
ムバッファのbiosFunctionエントリポイントと構造とを作成する。
次に、それは、アクセスドライバ46のIOCTL_BIOS_Execファン
クションを使用して、BIOSファンクションを呼び出す。戻されたデータは、
同じIOC_EXEC1構造においてパスされる。
【0053】 図4A、図4B、図5A、図5Bに示すプロセスの例を付録D1―D3に示す。特
に、付録D1は、クラスドライバ46を介してBIOSファンクションを呼ぶ際 に使用される、アプリケーションプログラム32、サービス34、またはクラス
ドライバ40用の典型的なソースコードを示す。付録D2およびD3は、アクセス
ドライバ46用の典型的なソースコードを示す。付録D2は、シャドウ領域のB IOSファンクションを実行するための典型的なソースコードを示す。その一方
で、付録D3は、レジスタスタックを作成するとともに、BIOSファンクショ ンを実行するためのエントリポイントを呼ぶための典型的なソースコードを示す
【0054】 本発明を使用すると、仮想メモリサブシステム物理メモリのコンテンツにアク
セスして実行する装置及び方法が提供される。この装置及び方法は、メモリおよ
び入出力動作のための増加したアドレス指定機能を容易にし、更に、物理メモリ
空間のプロセッサ命令の実行を許可する。 本発明は、特定の好ましい実施例に関して記載したが、当業者に明らかな他の
実施例も、本発明の範囲内である。したがって、本発明の範囲は、以下に続く請
求項のみによって定義されるものである。
【図面の簡単な説明】
【図1】 図1は、本発明の装置および方法が使用される典型的なプロセッサシステムの
システムブロック図である。
【図2】 図2は、本発明の装置および方法を使用するオペレーティングシステムの構造
を示している全体的な機能ブロック図である。
【図3】 図3は、本発明の原理に従って提供されるようなアクセスドライバ46の初期
化プロセスを示しているブロック図である。
【図4A】 図4Aは、本発明の初期化プロセスの一実施例を示しているフローチャートで
ある。
【図4B】 図4Bは、図4AのプロセスステップS110の詳細を示しているフローチャ
ートである。
【図4C】 図4Cは、図4AのプロセスステップS130の詳細を示しているフローチャ
ートである。
【図5A】 図5Aは、本発明の実行プロセスを示しているフローチャートである。
【図5B】 図5Bは、図5AのプロセスステップS240の詳細を示しているフローチャ
ートである。
【付録A】
付録 A Windows Nt 4.0用BIOSパワー管理サービス はしがき 4 関連文書 4 用語 4 アーキテクチャの概要 5 BIOS32サービス・ディレクトリの変更 5 BIOS32サービス・ディレクトリ・ヘッダ 5 BIOSサービス・ディレクトリ 6 32−ビットBIOSパワー管理サービス・インターフェース 7 コーリング・パラメータ 7 32−ビットAPMとの相違 8 ソフトウエア要件 9 開発ソフトウエア要件 9 ソフトウエア要件 9はしがき この文書は、32ビットBIOSパワー管理サービス・インターフェース(B
PMSI)用インターフェースを提供する。このインターフェースは、APMを
認識するアプリケーションに対してパワー管理サービスを提供する、Windo
ws NTパワー管理カーネル・ドライバによって使用される。 用語 AMP BIOS APM仕様(現在改訂レベル1.2)に準拠するパワー管理機能を備えるシス
テムBIOS。 カーネル・モード NTシステム・コードが走る特権プロセッサ・モード。カーネル・モード・ス
レッドは、全てのI/Oおよびシステム・メモリにアクセスすることができる。 パワー管理カーネル・ドライバ(PMドライバ) サービスのために、BIOS ROM、BIOSデータ・エリア、および32
ビット・サービスへのアクセスを与える。 パワー管理サービス(PMサービス) アプリケーションおよびその他のドライバにパワー管理サービスを提供する。
パワー管理カーネル・ドライバ(PMドライバ)が提供するインターフェースを
用いて、それらの要求をBIOSパワー管理サービス・インターフェースへのク
エリに変換する。 PowerPAL システムおよびデバイス・パワー管理機構に対するシステム・レベルのアクセ
スを与えるPhoenixのAPM BIOS拡張版。 システム・アイドル PMサービスがアプリケーション・レベルにおいて最少処理を検出した状態。
この状態では、アイドル優先度で走るスレッドのみが実行され、上位優先度クラ
スで走るいずれかのスレッドによって先取りされる。 ユーザ・モード アプリケーション・コードが走る非特権プロセッサ・モード。ユーザ・モード
・スレッドはI/Oおよびシステム・メモリにアクセスすることはできない。アーキテクチャの概要 Windows NTパワー管理に対応するBIOSの拡張は次の2つの部分
から成る。 (a)BIOS32サービス・ディレクトリの変更。PMドライバがBIOSパ
ワー管理サービス・インターフェースに対するエントリを発見することを可能に
するエントリを追加した。 (b)APM32ビット・インターフェースを模した新たな32ビットBIOS
パワー管理サービス。多少の相違があり、それを以下に記す。新たなインターフ
ェースは、安全度を増しWindows NTに一層適した0:32コーリング
方法を提供する。 PMカーネルがBIOSサービスを使用する場合、以下のステップを実行しな
ければならない。 1.BIOS32サービス・ディレクトリ・ヘッダを見つける。 2.BIOS32サービス・ディレクトリ・コーリング・インターフェースをコ
ールし、32ビットBIOSパワー管理サービス・インターフェース・エントリ
・ポイントを指定する。 3.32ビットBIOSパワー管理サービス・インターフェース・エントリ・ポ
イントをコールし、APM接続を求める。 BIOS32サービス・ディレクトリの変更 32ビットBIOSサービス・ディレクトリは、Phenix BIOS内に
ある既存構造であり、32ビット保護モード・アプリケーションまたはオペレー
ティング・システムが、特定の32ビット・サービスに対するエントリ・ポイン
トを見つけることを可能にする。この仕様は、新たな標準的な32ビットBIO
Sサービスを定義する。 BIOS32サービス・ディレクトリは、PMドライバが検出可能な固定構造
、および特定のサービスに対するアドレスを返す1つの関数から成る。 BIOS32サービス・ディレクトリ・ヘッダ BIOS32サービス・ディレクトリを実現するBIOSは、物理アドレス範
囲0E0000h−0FFFFFh内のどこかに、特定の隣接16バイト・パタ
ーンを埋め込まなければならない。このパターンは、パラグラフで位置合わせさ
れていなければならない(即ち、16バイトの境界で始まらなければならない)
。このパターンは、BIOS32サービス・ディレクトリ・ヘッダとして知られ
ている。 ヘッダは6つの個別フィールドで構成されている。以下の表に各フィールドに
ついて説明する。
【表5】 BIOS32サービス・ディレクトリのクライアントは、最初にヘッダを突き
止めてその存在を判定しなければならない。これは、パラグラフずつ進めながら
0E0000hないし0FFFF0hを走査し、各パラグラフの最初の4バイト
においてサインの一致(”_32_”)を探す。サインが検出されたなら、クラ
イアントはヘッダ内の全バイトのチェックサムを求める。(パラグラフ内のヘッ
ダ長は、オフセット9hで分かる)。ヘッダ内の全バイトを互いに加算し、その
結果が0hにならなければならない。チェックサムが有効な場合、32ビット・
エントリ・ポイント・フィールドは、BIOS32サービス・ディレクトリ・コ
ーリング・インターフェースのアドレスとして使用することができる。ヘッダが
見つからない場合、BIOS32サービス・ディレクトリはそのプラットフォー
ム上には存在しないことになる。 BIOS32サービス・ディレクトリ・エントリ・ポイント、ならびにそれに
関連するコードおよびデータは、4Gb物理アドレス空間内のどこに位置しても
よい。しかしながら、物理的に隣接しており(即ち、ROMまたはFLASH空
間に送出される)、2ページ内に納まる(即ち、3ページには跨がらない)こと
を保証する。BIOSサービス・ディレクトリ BIOS32ビット・パワー管理サービス・インターフェースへのエントリ・
ポイントを得るためには、PMドライバは、以下のパラメータを用いてBIOS
サービス・ディレクトリをコールしなければならない。 IN: EAX ”NTPM”または0x4E54504D EBX 0x00000000 OUT:AL エラー・コード:0x00=なし、0x81=サービス存在せず EBX 32ビットパワー管理サービス・コードの基底アドレス。 ECX 32ビットパワー管理サービス・コードの長さ(EBXより) EDX 32ビット・パワー管理サービス・コード・エントリ・ ポイントのオフセット(EBXより) 32ビット・パワー管理サービス・コード・エントリ・ポイントのエントリ・
ポイントはFAR(即ち、セグメントおよびオフセット双方をスタック上にプッ
シュする必要がある)である。 CS:基底アドレスは、エントリ・ポイントを含むページの(4KB)ページ・
アドレス以下でなければならない。例えば、エントリ・ポイントが0FFF81
234hであるとすると、基底アドレスは0FFF81000h以下でなければ
ならない。このリミットは、基底アドレスにこのリミットを加算すると、エント
リ・ポイントを含むページに続く(4KB)ページ上の最後のアドレスに等しく
なるようにしなければならない。例えば、エントリ・ポイントが0FFF812
34Hであるとすると、基底アドレスにリミットを加算した結果は0FFF82
FFFh以上でなければならない。単純に言えば、基底アドレスおよびリミット
は、エントリ・ポイントを含むページおよび次のページ双方に「跨がらなければ
」ならない。 セグメント・コードは、100b(コード、実行のみ)または101b(コー
ド、実行/リード)でなければならない。しかしながら、サービス・ディレクト
リのインプリメンタは、CSコード・セグメントへのリード・アドレスを引き受
けることができない。システム・バイトは、1(非システム・セグメント)でな
ければならない。記述子特権レベル(DPL)を0とすることを推奨する(CS
記述子DPLは、現特権レベル即ちCPLとなる)。CPLが0でない場合、O
Sは、リング0特権命令に対して、トラップおよび仮想化サービスを提供しなけ
ればならない。また、このフィールドのEFLAGS(章0を参照)内のIOP
Lフィールドに対する依存性にも注意すること。 デフォルト・サイズ・ビットは1(32ビット)でなければならない。 DS: 基底アドレスはCS基底アドレスに等しくなければならない。リミット
はCSリミット以上でなければならない。 セグメント・コードは、000b(データ、リードのみ)または001b(デ
ータ、リード/ライト)でなければならない。しかしながら、サービス・ディレ
クトリのインプリメンタは、DSコード・セグメントへのライト・アドレスを引
き受けることができない。システム・バイトは、1(非システム・セグメント)
でなければならない。記述子特権レベル(DPL)は、CPL(章0のDPLフ
ィールドを参照)以上でなければならない。 SS:セグメント・コードは、011b(データ、リード/ライト、下方展開)
または001b(データ、リード/ライト、上方展開)でなければならない。シ
ステム・バイトは、1(非システム・セグメント)でなければならない。記述子
特権レベル(DPL)は、CPL(章0のDPLフィールドを参照)以上でなけ
ればならない。デフォルト・サイズ・ビットは1(32ビット)でなければなら
ない。粒度ビットは1(4Kb)でなければならない。 前述の設定値は、少なくとも4kbのスタック・サイズを確保することに注意
すること。少なくとも1kbの使用可能な未使用スタックがあることを確保する
のは、コール側の責任である。 ページング:ページングは、イネーブルしてもしなくてもよい。ページングをイ
ネーブルする場合、CSおよびDCセレクタによって記述されるアドレス空間は
、線形的に隣接していなければならない。即ち、ROMまたはFLASH内で見
出されるコーリング・インターフェースの元々の物理的隣接性を保存しなければ
ならない(コーリング・インターフェース・コードおよびデータは、場所に依存
せず、EIPに関係するように書かれる)。 IOPL:コーリング・インターフェースがI/O命令を実行するためには、E
FLAGS内のI/O特権レベル(IOPL)フィールドは、CPL(章0のD
PLフィールドを参照)以上でなければならない。 その他:BIOSデータ・エリア、拡張BIOSデータ・エリア、および固定位
置ROMデータ・テーブルは、ページングのために、実行コードの使用に供する
と仮定することはできない。BDAにアクセスするには、コール元が与えるポイ
ンタを用いればよい。 32ビットBIOSパワー管理サービス・インターフェース 一般に、32ビットBIOS管理インターフェースは、32ビットAPMエン
トリ・ポイントと同じ機能性を与える。コーリング・パラメータを受け渡す方法
、およびあるAPM接続機能に対応する方法という2つの領域に相違がある。 コーリング・パラメータ APM32ビットインターフェースはCPUレジスタ内の全てのパラメータを
受け渡す。BIOSパワー管理サービス・インターフェースは、スタック上のパ
ラメータを受け渡す。同等のC−型の宣言では、以下のようになる。
【外9】 実際のAPM関数およびそのビヘービャは、対応するレジスタ・フィールドに
書き込まれた値によって決定される。pBDAフィールドは、カーネル・ドライ
バがBIOSデータ・エリアをマップした仮想アドレスへのポインタであるので
、サービス・エントランスによってこれにアクセスすることができる。 エラーが発生した場合、regFlagsのビット0は1となり、エラー・コ
ードがregEAXのビット8−15に入る。それ以外の場合、regFlag
sのビット0は0であり、regEAXのビット8−15も0である。エラー・
コードは、APM1.2仕様において見られるものと同一である。ソフトウエア要件 開発ソフトウエア要件 PMサービスを構築するには、以下のソフトウエア開発ツールが必要となる。 ・MicrosoftのMASM6.11cアセンブラ ・コードをデバッグするためのPhenix PhDebug ソフトウエア要件 PMサービスは、以下の環境で実行する必要がある。 ・WindowsNT 4.0 ・PowerPALに対するNT BIOSインターフェースに対応するP
henix NoteBIOSを備えたシステム。 ・システムにインストールされたPMドライバ 移植に関する変更 次の章では、Core、Miserおよびチップセット・コードにおいて修正
されたファイルについて説明する。また、通常のBIOSを移植しNT対応を含
ませるために必要な変更についても説明する。
【付録B】
付録 B PhoenixPhlash NT ウインドウズNT用フラッシュROMプログ
ラミングユーティリティー 付録Bに言及されているフェニックスADドライバは、アクセスドライバ46
である。 1.0 概要 5 ハードウェアにアクセスするためCドライバを用いる。 5 2.0 オペレーションモード 7 2.1 Win32コンソール 7 2.3 完了コード 11 2.4 デバイス依存モジュール 12 2.4.1. 自動検出 13 2.4.2 ゼロ 13 2.4.3 消去 13 2.4.4 プログラム 13 2.5 サポートされるデバイス 13 3.0 PLATFORM.DDLの詳細 15 3.1 ファイル書式 15 3.2 ファイルヘッダ書式 15 3.3 ブロックテーブル書式 17 3.3.3 多重フラッシュブロック 18 3.3.4 ブートブロック及びESCD記憶の処理 18 3.3.5 ブロックテーブルの例 19 3.4 PLATFORM.DDL関数 19 3.4.1 関数EnableFlash() 20 3.4.2 関数DisableFlash() 20 3.4.3 関数BeginFlash(DWORD Block_Index) 21 3.4.4 関数EndFlash(DWORD Block_Index) 21 3.4.5 関数GetBlock(DWORD Index, DWORD Buffer_Address) 21 3.4.6 関数CmdLine(char far *szOptions) 22 3.4.7 関数AutoSense() 22 3.4.8 関数IsFlashable(char far*szErrorMsg) 23 3.4.9 関数Reboot() 23 3.4.10 関数CheckSum() 23 3.4.11 関数GetBIOSFileSize() 23 3.4.12 関数GetManufactID() 24 3.4.13 関数GetPartlD() 24 3.4.14 関数GetFlags() 24 3.4.15 関数GetlmageBuf() 24 3.4.16 関数GetMfglDAddr() 24 3.4.17 関数GetPartlDAddr() 25 3.4.18 関数GetRetryCount() 25 3.4.19 関数GetblockTableSize() 25 3.4.20 関数GetpartTypesSize() 25 3.4.21 関数GetBlockTable() 25 3.4.22 関数GetpartTypes() 26 3.4.23 関数GetDLLVersion() 26 3.4.24 関数GetROMFileName() 26 3.4.25 関数GetDDLFuncDefine() 26 4.0 BIOS.ROMの詳細 27 5.0 一般的実装の指針 28 付録B1 − 将来の強化 29 キーボードLEDを伴う完了コード 29 付録B2 − PHLASHNT.H 完了及びエラーコード 30 付録B3 − PLATFORM.DDLサンプルソースコード 31 PLATFORM.CPP 311.0 概要 PhoenixPhlashフラッシュユーティリティーは、AT互換性システム内で、フラ ッシュROM中にBIOS画像をプログラムするために使用されるものである。ユーテ ィリティーは以下のファイルで構成されることになる: PHLASHNT.EXE − フラッシュROMをプログラムするために使用される PLATFORM.DLL − プラットフォーム依存機能を実行するために使用される BIOS.ROM − フラッシュROM中にプログラムされるべき現在のBIOS画像 本付属書は、PHLASHNT.EXEプログラムに関する機能性の詳細な説明を提供する
ものである。PLATFORM.DLL及びBIOS.ROMはプラットフォームに特定的なものであ
ることから、本書中では、これら2つのファイルの一般的な書式のみが網羅され ている。 PhoenixPhlashは、Win32のコンソールアプリケーションとして実行されるもの
である。 この設計プロジェクトについては、柔軟性、適合性及びサポート性に高い優先
度が与えられている。PHLASHNT.EXEを修正することなく数多くの異なるプラット
フォーム及び環境設定をサポートすることができるようにPLATFORM.DLLファイル
には可能な限り多くのカスタム化能力が組み込まれる予定であることから、Phoe
nixpPhlashは、単一のフラッシュROM部分を伴う複数のプラットフォーム、並び に多数のフラッシュROMを伴うプラットフォームをサポートすることになる。ブ ートブロックデバイス及び任意の多重フラッシュ可能領域構成を伴うデバイスを
含め、1Mビットから4Mビットあるいはそれ以上のフラッシュROMが収容される 。 サポートされている各部分について、特定のフラッシュROM部分に特定的なす べてのコード(例えば、Intel28Fxxxx)が、PHLASHNT.EXEモジュールの一部とな
る。プラットフォームに特定的なすべてのコードおよびパラメーター(例えば、
フラッシュイネーブルコード及びフラッシュROMアドレスレンジ)が、PLATFORM.
DLLモジュールの一部となる。 PheonixPhlashユーティリティーの主モジュール、PHLASHNT.EXEは、プラット フォームとは独立したすべてのコードを包含することになる。これは、ユーザー
インターフェースコード、PLATFORM.DLLファイルをロードし確認するためのコー
ド、フラッシュデバイスをプログラムするためのコードのプラットフォーム独立
部分を含むことになる。 PHLASHNT.EXEは、MicrosoftC++V4.2またはそれ以降のもの使用して生成された
、Win32で実行可能なファイルである。 ハードウエアにアクセスするためのCドライバの使用 PHLASHNT.EXEは、I/Oポートにアクセスするため;BIOSデータ及びコード部域 にアクセスするため;及びBIOS32サービスを実行するためにウインドウズNTユー
ザーモードアプリケーションをイネーブルするべくPhoenixADドライバと組み合 わさって作動するCドライバC++クラスを用いる。Cドライバクラスは、アプリケ ーションプログラムとPhoenixADドライバとの間に単純かつ柔軟性のあるインタ ーフェースを提供する。 Cドライバは、ユーザーモードアプリケーションプログラムに対して下記の機 能を提供するためにPhoenixADドライバと組み合わさって作動する。 I/Oポートにアクセスする。 BIOS32サービスを実行する。 BIOS画像にアクセスする。 BIOSデータ部域にアクセスする。 システムのReal Time Clockを読取る。 Cドライバクラスは、ウインドウズNTアプリケーションとPhoenixAdドライバの
間の薄いラッパーインターフェースとしての役割を果たす。これはドライバへの
インターフェースをカプセル封じし、アプリケーション及びカーネルドライバ設
計の両方に柔軟性を提供する。 将来の互換性を確保するために、PHLASHNT.EXEは、PhoenixADドライバを直接 呼び出さず、その代わりに、Cドライバクラスの中の方法を呼び出す。2.0 オペーレーションモード 2.1 Win32コンソール PHLASHNT.EXEは、ウインドウズNTのウインドウからスタートし、この後に(も
しあれば)オプションのコマンドラインフラグが続くことになる。 コマンドラインフラグには以下のものが含まれる予定である(大文字及び小文
字の両方が許容可能): /A AUTODETECT OFF− 部品からIDを読取らない。デフォルトによって、プロ グラムは、メーカーID及び部品IDからから読取られたIDが、PLATFORM.DLLフ ァイル内で規定されたIDと整合することを確認し、2つのIDが異なる場合は 部品から読取られたIDが使用される。これによって、いくつかの異なる部品 について2つのファイルのいずれかを修正することなく同じPLATFORM.DLL及 びBIOS.ROMを使用することが可能になる。このフラグが未設定の場合、IDは 部品から「読取り可能」であると仮定される。このフラグが設定済みの場合 、部品からのIDは使用されず、その代わりに、PLATFORM.DLL内に規定されて いる値が使用される。 /B=filename BINARY FILE− デフォルトプラットフォームにに特定的なバイナリーフ ァイルをオ−バーライドする。このオプションは、フルパス仕様が必要とさ れる場合、及び/又はバイナリーファイルがPLATFORM.DLL以外の名前を有し ている場合に必要とされる。 /BU=filename BACKUP− 消去前に、BIOS画像の先行バージョンをfilenameファイル内に セーブする。Filenameはオプションである。即ち、特定されない場合は、先 行画像がBIOS.BAK中に記憶される。数多くのBIOSのバージョンが、シャドー メモリーや圧縮解除といったプラットフォーム依存機能を使用することから 、ファイル内に書き込まれないうちにBIOS画像を検索するのにPLATFORM.DLL 内でプラットフォーム依存コードを使うことが往々にして必要である。 /C COMS UPDATE− Flashが更新された後にCMOSチェックサムをクリアする 。AUTO_UPDATE機能が新しいBIOS画像中に導入された場合、BIOSは自動的に すべてのCMOSフィールドを次のブートでそのデフォルト値にセットする。AU TO_UPDATE機能がロードされない場合、BIOSは次のブートでCMOSチェックサ ムエラーメッセージを表示し、ユーザーに対してSetupを実行して手動で機 械を再構成するべくF2ボタンを押すようプロンプトする。 /CS CHECKSUM BIOS ROM− BIOS ROM画像上でチェックサムを計算する。チェッ クサムがゼロでない場合、あるいはオプションのPLATFORM.DLL関数CheckSum が機能しない場合、プログラムはエラーメッセージで終了する。 /H USAGE− プログラム名、バージョン、著作権及びヘルプスクリーンを表示 する。このオプションのためには/?も同様に使用することができる。 /I IMAGE SIZE VERIFICATION− ROM画像ファイルサイズがフラッシュ部分 のサイズと同じ場合にのみ行なわれる。 /MODE=n OPERATION− PHLASHNTのためのオペレーティングモードを選択する。現在 は、下記のオペレーティングモードがサポートされている。 0 BIOS画像のみ更新する(正規オペレーティングモード)。このモードで は、PHLASHNTは現行のBIOS画像を新しい画像と置換する。BIOSシステム内 のDMI情報は維持される。これはデフォルトモードであり、/MODEコマン ドラインフラグが存在しない場合又はオペレーティングモードが特定され いてない場合に選択される。 1 DMI情報のみを更新する。このモードでは、PHLASHNTは、Flashに対す るDMIコマンドラインフラグを経由して特定されたストリングの書き込み を行う。新しいDMIストリングがコマンドライン上で特定されない限り、 BIOSシステム内のDMI情報は維持される。 2 BIOS及びDMI情報の両方を更新する(システムDMIストリングを保存す る)。このモードでは、PHLASHNTは、現行のBIOS画像の置換及びFlashに 対するDMIコマンドラインフラグを経由して特定されたストリングの書き 込みの両方を行う。新しいDMIストリングがコマンドライン上で特定され ない限り、BIOSシステム内のDMI情報は維持される。 3 BIOS及びDMI情報の両方を更新する(システムDMIストリングをリセッ トする)。このモードでは、PHLASHNTは、現行のBIOS画像の置換及びFlas hに対するDMIコマンドラインフラグを経由して特定されたストリングの 書き込みの両方を行う。BIOSシステム内のDMI情報は、新しいBIOS ROMか らのDMIストリング及び/又はコマンドライン上で特定された新DMIスト リングで置換される。 これらのオプションは、機密保護上の理由からヘルプ(/H)オプションでは
表示されない。 /N NEW(異なるもの)− BIOS ROMの異なるバージョンについてのみ行なわ れる。BIOSバージョン及び構築データと時間を含むBCPSYSでのデータ構造が 、BIOS.ROMファイル内の対応する構造と同一である場合には、プログラムは フラッシングなく終了する。 /O OVERRIDE PLATFORM.DLL OPTIONS− PLATFORM.DLL内のすべてのフラグ設 定をディスエーブルする。このスイッチがない場合、PLATFORM.DLL内で設定 されたオプションは、コマンドライン上で特定されたオプションと組合され る。このスイッチが使用される場合は、コマンドラインオプションのみが使 用される。 /P PRODUCTION− フラッシングのスピードを最大にする。すべてのユーザー フィードバックは、最小限に削減される(音なし、又は画面更新)。これが 生産環境内の部分のフラッシュに必要な時間を短縮するために使用される。 最終的な成功/失敗のみが報告される。 /PN BIOS PART NUMBER CHECK− BIOS.ROM内のBIOS部品番号が現行BIOS内の部 品番号と同一の場合にのみ行なわれる。 /PF=“list of options” プラットフォーム依存モジュールPLATFORM.DLLに移行させられるべきコマ ンドラインオプション。一部のプラットフォームでは、コマンドラインオプ ションをプラットフォーム依存手続に移行させることが望ましい場合がある 。これは関数CmdLine()を経由して行われる。CmdLine()アドレスが非 ゼロであり、かつこのコマンドラインオプションが存在する場合、等号の直 後のストリングはPLATFORM.DLLに移行させられることになる(ストリングが スペースを含む場合は、ストリングを2重引用符でくくる)。 /Rn RETRY− 1つのブロックのフラッシングに失敗した場合、アボートせず にn回再試行する。PLATFORM.CPP内でPsiRetryCountを望まれる再試行計数 でセットすることによって危機モードで/Rnオプションを使用することがで きる。 /S SILENT− オーディオフィードバックのない消音オペレーション /V VERIFY− 各ブロックがプログラミングされた後、フラッシュ部分アドレ ススペース内のデータは、BIOS.ROMファイル内のデータと比較される。不一 致があればそれが報告され、(プロンプトに対する応答に応じて)プログラ ムが同一ブロックのプログラミングを再試行するかあるいはシステムが停止 するかのいずれかが起きる。フラッシュメモリーが消去された後にチェック が行われるために、システムは非常に不安定になり、ユーザーに適正に通知 して回復することが不可能になることがある。 /Z ZERO BLOCKS− 消去前のゼロフラッシュブロック filename BIOS ROM画像ファイル名。 先行バックスラッシュのないいずれかのコマ ンドラインオプションはすべて、BIOS ROM画像ファイル用のファイル名とし て解釈されることになる。ROM BIOS画像用のフルパスを特定するのに必要な 場合及び/又はROM BIOS画像ファイルがBIOS.ROMと異なっている場合にのみ ファイル名が要求される。 @filename 応答ファイル。 上述のコマンドラインオプションのうちの任意のものを、 応答ファイル内に置くことができる。PHLASHNTはファイルを読取り、あたか もコマンドライン上に入力されたかのようにオプションを処理する。オプシ ョンは、単一のライン上又は個別のライン上に置くことができる。各ライン は、最高で1024文字の長さをもつことができる。 下記のコマンドラインフラグは、Phoenixデスクトップマネージメントインタ ーフェース(DMI)を通じて後日検索する目的でFlashに対して情報を書き込むた
めに使用される。標的BIOS画像がDMIインターフェースをサポートしていない(D
MI BCP構造を導入させていない)場合又はPHLASHNTオペレーションモードがBIOS
のみの場合(上記を参照)DMIコマンドラインフラグは無視される。 すべてのフラグは、書式/DxxStringを有しており、ここでxxは特定のDMIスト
リングを識別する1つ又は2つの文字である(下記を参照)。DMIコマンドライ ンフラグはオプションである。即ち、一定のあたえられたDMIコマンドラインフ ラグが特定されない場合、PLATFORM.DLL内でデフォルトストリングが特定されな
い限り対応するDMIストリングバッファーの先行するコンテンツは修正されない 。この場合、PHLASHNTは常にデフォルトストリングを対応するDMIストリングバ ッファーに書き込む。DMIコマンドフラグがStringフィールドなしで特定される 場合、対応するDMIストリングバッファーはクリア(空ストリングにセット)さ れる。Stringは印刷可能なASCII文字のみを含むことができる。Stringがスペー スを含む場合は、このStringを引用符でくくらなければらない。各DMIストリン グの最大な長さは、プラットフォームに特定的なものである。移行させられたス
トリングが対応する標的バッファーよりも長い場合、PHLASHNTはエラーを戻す。
現在サポートされているのは下記のDMIファイルである。これらのオプションは 、機密保護上の理由からヘルプ(/H)オプションにより表示されない。 /DSS・String システムの通し番号ストリングを特定する。 /DMS・String システムメーカー名ストリングを特定する。 /DPS・String システム製品(モデル)識別ストリングを特定する。 /DVS・String システムバージョンストリングを特定する。 /DSM・String マザーボード通し番号ストリングを特定する。 /DMM・String マザーボードメーカー名ストリングを特定する。 /DPM・String マザーボード製品(モデル)識別ストリングを特定する。 /DVM・String マザーボードバージョンストリングを特定する。 /DSC・String シャーシ通し番号ストリングを特定する。 /DMC・String シャーシメーカー名ストリングを特定する。 /DPC・String シャーシ製品(モデル)識別ストリングを特定する。 /DVC・String シャーシバージョンストリングを特定する。 /DO1・String OEMストリング1を特定する。 /DOn・String OEMストリングnを特定する。 システム及びシャーシスイッチは、DMIバージョン2.0でのみ入手可能である。 下記に示されているコマンドラインスイッチのより古い形式は、元来DMI1.2用
であったもので、互換性目的のために維持されている。これらはそれぞれ/DSM、
/DMM、/DPM及び/DVMと等価である。 /DS・String マザーボード通し番号ストリングを特定する。 /DM・String マザーボードメーカー名ストリングを特定する。 /DP・String マザーボード製品(モデル)識別ストリングを特定する。 /DV・String マザーボードバージョンストリングを特定する。 次に、フラッシュプログラムがPLATFORM.DLLをロードし、フラッシングのため
プラットフォームを準備するべくPLATFORM.DLL内のプラットフォーム依存関数En
ableFlash()を呼び出す。PLATFORM.DLLは、BIOS ROM画像がメモリー内でロー ドされるべきメモリー領域を表示し、フラッシュデバイス用としてどのメモリー
領域を使用すべきかを表示することになる。メモリー領域は従来のメモリー内で
もあるいは拡張メモリー内でもよい。ROM画像がメモリー領域内にロードされた 後に、デバイスプログラミングが開始する。 プログラムすべきフラッシュROMの各ブロックについて、 1) PLATFORM.DLL内でBeginFlash()が呼び出される。 2) PHLASHNT.EXE内の適正なフラッシュアルゴリズムが実行される。 3) PLATFORM.DLL内でEndFlash()が呼び出される。 このプロセスは、PLATFORM.DLL内で特定された各フラッシュブロックについて
反復される。こうして、単一プラットフォーム上の複数のデバイス、1つのデバ イス内の複数のブロック及び各ブロックについてのブロック依存初期化/終了コ
ードが可能になる。これはまた、ブートブロックといったメモリ領域の自動セー
ブ及び回復も可能とする。 フラッシングの間、進捗情報がユーザーに提示される。 1) 生産モードが選択されない場合、適正なメッセージウインドウがスクリー ン上に表示され、これには時刻、ガスメータ型式の進捗インジケータ及びス テータスラインメッセージが含まれる。 2) およそ毎秒1回ずつ、短いブザー音が鳴る。 3) 各ステップの開始及び完了時に適切なコードがデバッグポートに送られる
。 ビデオは毎秒1回以上更新されることになる。サウンドは、およそ毎秒1回生成
される。製作環境内で進捗更新がデイスエーブルされる可能性があることに留意
されたい。 フラッシングが完了した後、DisableFlash()がPLATFORM.DLLファイルから実
行される。2つの異なるサウンドの内の一方がフラッシュプロセスの成功又は失 敗を表示する目的で生成されることになる。ビデオが利用可能な場合、適切なメ
ッセージウインドウが表示される。短時間の休止の後にシステムは、再ブートさ
れる。 2.3 完了コード プログラムは数多くのステップを通して進行し、ユーザに対して各ステップで
の状態を報告する能力をもつことになるが、3つの主要段階のみが、サウンド及
びキーボードLEDコードにより識別される。これらの3つの主要段階とは以下のも
のである。 1) PLATFORM.DLLファイルを読み込みかつ点検する。 2) プラットフォームに特定的な初期化を実施する。 3) 部分をプログラミングする。 プログラムが、フラッシングプロセスの主な3つの段階のいずれかを完了でき
なかった場合、プログラムは、プログラムがどの段階で不首尾であったかをユー
ザーに通知するべく異なるサウンドシーケンス及びキーボードLEDを使用する。 プログラムのスタート時点で、キーボード上のCAPS_LOCK,NUM_LOCK及びSCROLL_L
OCKのLEDが点灯する。3つの段階の各々における不首尾は以下のとおり表示され る。
【外10】 段階1− PLATFORM.DLLの位置決め以前に不首尾が発生。一番考えられる原因
は、PLATFORM.DLLファイル書式内のエラーである。システムは安定モードにあり
、BIOSにはいかなる変更も行われなかった、再ブートは必要とされない。 段階2− プラットフォーム依存初期化の間の不首尾。システムは不安定であ り、再ブートが必要とされる。BIOSにはいかなる変更も行われなかった。 段階3− フラッシュメモリープログラミングの間の不首尾。システムは不安
定で、BIOSフラッシュメモリーは汚染されている。危機管理ディスケットでシス
テムを再スタートさせなければならない。 プログラムは同様に、各ステップにおいてエラー検知も実行することになる。
PRODUCTIONオプションによって明らかにディスエーブルされたのでないかぎり、
プログラムの進捗につれて、これは、現在進行中のステップのステップ番号ある
いはエラーコードのうちの1つのいずれかをスクリーン及びデバッグポート上で
報告する。エラー及びプログラムステップについてのコード番号は、付属書のB2
においてさらに定義されている。 フラッシュメモリー部分に何らかの変更が行われる前にエラーが検知された場
合、プログラムはユーザーに対する通知を試み、その後に適正なエラーメッセー
ジと共にPHLASHNTを退出することになる。フラッシュメモリーが一旦修正されて
しまった場合、エラーはプログラムの停止を発生させることになる。 2.4 デバイス依存モジュール サポートされているフラッシュメモリーの各タイプについて、以下のことを実
行する部品に特定的なモジュールが存在することになる。 1) 部品を識別してメーカーID及び部品IDを戻す。 2) フラッシュメモリーの1レンジをゼロにする(すべてのビットをゼロにセ
ットする)。 3) フラッシュメモリーの1レンジを消去する(すべてのビットを1にセット
する)。 4) フラッシュメモリーの1レンジをプログラミングする。 2.4.1 自動検出 このモジュール中には、フラッシュメモリー部分からメーカーID及び部品IDを
読み取るのに必要なコードが存在することになる。IDを決定することができない
場合は、ゼロ復帰させられる。PLATFORM_DLLファイル内に関数AutoSense()が 備えられている場合は、内蔵式自動検知モジュールは使用されず、その代わりに
、備えられている関数AutoSense()が使用されることになる。 2.4.2 ゼロ プログラミング可能となる前にフラッシュメモリーをゼロにセットすることを
必要とする部品タイプがいくつか存在する。このモジュールには、メモリーレン
ジをゼロにセットするために必要なコードが存在することになる。 2.4.3 消去 大半のフラッシュメモリー部分は、その部分をプログラミングできるようにな
る前にフラッシュメモリーをオール1にセットすることを必要とする。これらの
部分は往々にして、単一の書込みオペレーションでフラッシュメモリー全ブロッ
クの消去を可能にする。このモジュール内には、メモリーレンジを1にセットす
るために必要なコードが存在することになる。 PLATFORM.DLLファイル内でブロックディスクリプタが定義される場合、ディス
クリプタは、フラッシュメモリ中の各「消去可能」ブロックについて少なくとも
1つのディスクリプタが存在するような形でセットアップされなければならない 。例えば、Intel28F004フラッシュメモリー中には、16kバイトのBOOTブロックが
1つ、8kバイトのPARAMETERブロックが2つ、96kバイトのMAINブロックが1つ
と128kバイトのEXTENDEDブロックが3つ存在する。7つのブロック各々が単一の 書込みで消去可能であり、7つのブロック各々について少なくとも1つのデスクリ
プタが存在しなければならない。 2.4.4 プログラム このモジュール中には、BIOS ROM画像からデータバイトを読取るため及びそれ
らをフラッシュ部分中にプログラミングするために必要なコードが存在すること
になる。 2.5サポートされるデバイス PHLASHNT.EXEによってサポートされるフラッシュメモリデバイスの初期セット は、以下の表に列記されている部品を含むことになる。各部品のタイプについて
、メーカと部品のID及び部品の説明が列記される。新しい部品が入手可能になる
ため、フラッシュアルゴリズムの新しいタイプが与えられるように(新規のAuto
Detect()、Zero()、Erase()、及びProgram()の機能)、PHLASHNT.EXE にさらなるモジュールを追加することが必要であろう。新しい部品のために、存
在するアルゴリズムの1つを使用することが可能であり、メーカID及び部品IDの
みを変更することが可能である場合、PLARTFORM.DLL fileにそれを示すことが
でき、PHLASHNT.EXEの変更は不要である(さらなる詳細についてはPartTypesの
項を参照のこと)
【表6】 3.0 プラットフォーム.DLL詳細 このモジュールは、特別なプラットフォーム上のフラッシュデバイスをプログ
ラムするに必要なコードとパラメタに依存する全てのプラットフォームを含む。 3.1 ファイルフォーマット PLATFORM.DLLは、PLATFORM.CPP(マイクロソフトビジュアルC++4.2以降)を編
集することによって作られるウィンドウズDLLである。それは特定のプラットフ ォームデータと実行可能なコードを含む。PLATFORM.CPPファイルのサンプルソー
スコードはアペンディクスB3に含まれている。 PLATFORM.DLLのファイルバージョンはバージョン“NT 1.00”で始まる。バー ジョンはPLATFORM.DLLに含まれるszVersion変数の中に指定されている。 3.2 ファイルヘッダフォーマット PLATFORM.DLLファイルは以下に記されているフォーマットを有する。
【表7】 dwFileSize バイオスロムファイル中のバイト数 bManufactID 製造者ID bPartID パートID dwFlags オプションフラッグ。以下の値のコンビネーションでなければな らない: FLAG_AUTOSENSEOFF パートからIDを読まない FLAG_BACKUP バックアップシステムバイオスロム FLAG_NEWBIOSONLY 64KがF000:0で同一ならフラッシュせず FLAG_PRODUCTION 最大速度(サウンドビデオオフ) FLAG_SILENT 音を発生させず FLAG_VERIFY フラッシュの後各ブロックをベリファイ FLAG_PLATFORMCMD プラットフォームオプションstrプレゼント FLAG_BIOSPARTNUM 同じバイオスパートナンバーの時のみフラッシュ FLAG_CHECKSUM バイオスロムチェックサム FLAG_CMOS CMOSチェックサムクリヤ FLAG_IMAGESIZE フラッシュパートにマッチするイメージサイズを ベリファイ dwImageBuf 拡張メモリ中のバイオスロムイメジのアドレス。このフィールド はイメジが読み込まれるバッファのリニアアドレスを決定する。 このエリアは又、SAVEオプションが指定されるときに使われる。セーブさ
れるどんなブロックもアドレスdwImageBuffer+dwFileSizeから始まるアドレス範
囲を使う。 dwMfgIDAddr dwPartIDAddr これら2つのオプションフィールドはフラッシュメモリIDバイト のリニアアドレスを含む。これらのフィールドがゼロの時、E0000hとE0001hのデ
フォルトアドレスが使われる。 bRetryCount フラッシングが失敗の場合のリトライ回数 szVersion PLATFORM.DLLのバージョン szROMFileName リザーブされたものは"BIOS.ROM"ストリングでなければな
らない。このフィールドはPLATFORM.DLLファイルのフォーマットを認識しベリフ
ァイするのに使用される。 dwDLLRFuncDefine PLATFORM.DLLにおいてプラットフォーム指定のどの機能が
定義されるかを示す。 hbBlockTable ブロックテーブルで描かれるブロック数 dwBlockTable フラッシュパートは一度に1つの隣接するブロックがプログラム される。プログラムされる各ブロックは対応するブロックディスクリプタを有し
なければならない。 bpartTypesSize 追加するフラッシュパート数 dwPartTypes サポートされるフラッシュパートのオプションテーブル。各テー ブルのエントリは以下のフォーマットを有する。
【表8】 デバイステーブルはゼロにセットされたwFlashType、cMfgID及びcPartID を有するディスクリプタによってターミネイトされる。 多数のプラットフォームは同一BIOS.ROMイメジをいくつかの異なるフラッ
シュパートで使用可能にする。このテーブルは新しいパートが入手される時に使
用され、該パート現在PHLASHNT.EXEでサポートされているパートの中にはなく、
該パートはサポートされたパートの1つとして同一のフラッシングアルゴリズム
を使用する。 procEnable フラッシングprocをエネーブルにする procDisable フラッシングprocをディセーブルにする procBegin フラッシングprocを開始する procEnd フラッシングprocを終了する procGetBlock バックアップprocのために次のBIOSブロックを得る procCmdLine プロセスカスタムコマンドラインオプションproc procSense カスタム自動検知proc procIsFlashable 前進okの場合カスタムOEMprocを決定 procReboot カスタムリブートproc procCheckSum BIOS ROMイメジチェックサムがゼロの場合カスタムチェックサムp
rocが使用される PLATFORM.DLLファイルのサンプルソースコードはAPPENDIX B3に示される。 3.3 ブロックテーブルフォーマット ブロックテーブルはブロックディスクリプタリストを含む。ブロックテーブル
中の各ブロックディスクリプタは以下のストラクチャで定義される。
【表9】 ブロックテーブルは、ゼロにセットされた全エントリを有するディスクリプタに
よってターミネートされている。 DWbLOCKsIZE バイトでのブロックサイズ。ブロックは隣接していなければなら ない。 dwFileOffset BIOS.ROMファイル中のこのブロックのオフセット dwLinerarAddress 32ビットアドレススペースでこのブロックのアドレスを始
める cMfgID 製造IDまたは自動検知にゼロ cPartID パートIDまたは自動検知にゼロ wBlockAttr このブロックのためのアクションを決定。以下のフラグのコンビ ネーションでなければならない。 ATTR_ZERO プログラミング前にこのブロックはゼロでなければならな
い ATTR_ERASE プログラミング前にこのブロックはゼロでなければならな
い ATTR_SAVE プログラミング前にこのブロックの内容をセーブ ATTR_PROG このブロックをプログラム ATTR_RESTORE プログラム後にこのブロック内容をレストア ATTR_SAVE、ATTR_PROG、ATTR_RESTOREの中の1のみが一度に使用可能。ア
トリビュート指定なき場合は、PHLASHNT.EXEブロックを不変にする。しかし、こ
れらの全てがオミットされても、プロシジャBeginFlash()及びEndFlash()は、2
つのブロックが異なったフラッシュデバイスにあるとき、あるいはブートブロッ
クが追加的機能をブロック書き込みのためにエネーブルしたりを要求したり次の
ブロックがプログラムされる前にそれをディセーブルする追加機能を要求すると
きに、使用可能である。BeginFlash()は又条件的ブロック処理に使用可能である
。BeginFlash()がノンゼロにもどる場合、現在のブロックは処理されない。 各ATTR_SAVEブロックは、他のATTR_SAVEブロックが使用可能である以前に
ATTR_RESTOREブロックによって従われなければならない。 与えられたフラッシュメモリレンジのために幾つかのブロックデスクリプ
タがあることに注目。例えば、64k消去可能フラッシュメモリブロク中の16kフラ
ッシュメモリブートブロックを保持するために、3つのブロックデスクリプタが
用いられる。第1のデスクリプタは16kブートブロックをセーブし、2番目は64k
を消去しプログラムし、そして3番目はそのブートブロックにレストアする。 フラッシングのための時間を減らすために、ATTR_ZEROフラグが使われな いのが推奨される、なぜなら、これはZEROステップとフラッシング時間を半分に
するのを回避する。そのパートに示唆されるわずかなより古いフラッシュメモリ
タイプのみが、再プログラムされる前にゼロ化される。大部分のパートはこの動
作を要求しない。 3.3.3 マルチプルフラッシュブロック ブロックテーブルはマルチプルデバイスフラッシングと、各デバイス内にある
マルチプルブロックをサポートするために使われる。その種のプラットフォーム
のためにROMイメジファイルは、全てのプログラムされるべきフラッシュパート のイメジを含まなければならなく、そして、そのブロックテーブルは、フラッシ
ュされるべきデータの各ブロックの好適なオフセットと長さを含まなければなら
ない。 各フラッシュブロックの前後のプラットフォームを好適に構成するために、フ
ァンクションPHLASHNT.EXEはBeginFlash(Block_Index)を呼び出してPLATFORM.DL
Lがどんなそのようなセットアップも実行するようにさせることができる。いか なる初期化又はターミネーションをも必要に応じてブロック間で実行することは
、BeginFlash()とEndFlash()のファンクションの役割である。 3.3.4 ブートブロック処理とESCDストーリッジ フラッシュメモリでメモリレンジをプログラムするために、同一メモリレンジ
に対して幾つかの異なったブロックデスクリプタが存在する必要がある。これは
、単一“消去”メモリレンジ内のESCDストーリッジ又はブートブロックを予約す
る必要がある。 多数のフラッシュパートは少数の書き込み動作、即ち各メモリブロックに対し
て1つ、によって消去される。例えばインテル28f400フラッシュメモリは7ブロ
ック(1つの16Kブートブロック、2つの8Kパラメタブロック、1つの64Kメイン
ブロック及び3つの128K拡張ブロック)を有する。このパートは7回の書き込み
動作のみで消去されうる。 他のパートに対しては、消去機能は64Kのフラッシュメモリを一度に消去し、 このレンジがブートとパラメタブロックに分かれているかどうかに関わらない。
そのような場合、この種の64Kメモリレンジに対して3つのブロックデスクリプ タが存在することが重要である。テーブルの第1ブロックデスクリプタはブート
ブロックをセーブするために使われ、第2ブロックデスクリプタはパラメタを消
去しプログラムするために使われ、第3デスクリプタはこの範囲内にブートブロ
ックをレストアするために使われる。 幾つかのパートは、追加的プラットフォーム従属アクションがブートブロック
がプログラムされる前に、取られなければならない。例えばインテルパートはVP
P電圧に加えてVHH電圧が好適に設定されることを要求する。そのような場合、ブ
ロックデスクリプタはBeginFlash()及びEndFlashu()プロシジャ(各ブロックの 前後と呼ばれる)のようなファンクションを有しなければならない。 3.3.5 ブロックテーブル例 以下の例のコードはPLATFORM.CPPの"blockTable”の中に置かれる。
【表10】 3.4 PLATFORM.DLLファンクション 現在サポートされているファンクションは以下の通りである。 以下のファンクションはPLATFORM.DLLに含められて、PHLASHNT.EXEによっ
てアクセスされて、プラットフォーム従属機能を実行する。 EnableFlash DisableFlash BeginFlash EndFlash GetBlock CmdLine AutoSense lsFlashable Reboot CheckSum 以下のファンクションによってPHLASHNT.EXEはPLATFORM.DLLに含まれる広
域変数とデータストラクチャにアクセスすることが可能になる。 GetBIOSFileSize GetManufactID GetPartID GetFlags GetImageBuf GetMfgIDAddr GetPartDAddr GetRetryCount GetblockTableSize GetPartsSize GetBlockTable GetpartTypes GetDLLVersion GetROMFileName GetDLLFuncDefine 3.4.1 ファンクションエネーブルフラッシュ() Entyr: なし Returns: エラーコード(即ちゼロ) このファンクションはPLATFORM.DLLにおいて存在しなければならない。それは
フラッシュメモリアクセスの全てのアテンプトの前にコールされる。このファン
クションによって一般に実行されるアクションは以下を含む。 メモリへのマップフラッシュデバイス ディセーブルキャッシュ、シャドイング及びパワーマネジメント フラッシュキャッシュ ディセーブルPCIブリッジ エネーブル書き込みのROM(VPPオン) 大部分のプラットフォームは、パートがフラッシングのためにエネーブルにな
る以前にジャンパは変えられることを要求する。EnableFlash()プロシジャは、 このジャンパセッティングが不正確であると判定した場合、ジャンパが除去され
エラーコードに戻るようにベリファイしなければならない。エラーコードについ
ては付録Bを参照。 3.4.2 ファンクションディセーブルフラッシュ() Entry: なし Returns: エラーコード(即ちゼロ) このオプションファンクションは、最終ブロックがプログラムされた(あるい
はエラーが検出された)後コールされる。それはPHLASHNT.EXEが存在(一般的に
はリブート前の最終コールとして)する直前に、コールされる。それは再起動(
Re-Action)をクリアに行うに必要な全てのファンクションを実行すべきであり 、一般的にこのファンクションを含む;即ち ディセーブルロム書き込み(VPPオフ) 3.4.3 BeginFlash(DWORD Block_Index)のファンクション Entry: プログラムされるブロック(又はテーブル不使用の場 合ゼロ)のインデクス Exit: なし Returns: エラーコード(VPPオフ) このオプションファンクションはPHLASHNT.EXEによって、フラッシュブロック
が処理される直前にコールされる。それは各ブロック(ブロックテーブル中に見
いだされる)ごとに、コールされる。 このファンクションによって実行されるアクションは、以下を含む: ブートブロックをそれが消去される前にセーブする 1つのデバイスから他のデバイスへ(複数デバイスを伴うプラットフォー
ム上で)スイッチする ブートブロックリプログラムのためにVHHをエネーブルにする 現行ブロックが処理されるべきかを判断する BeginFlash()が非ゼロに戻る場合、現行ブロックは処理されない。 3.4.4 EndFlash(Dword Block_Index)ファンクション Entry: プログラムされたブロック(テーブルのゼロは不使用)の
インデクス Returns: エラーコード(即ちゼロ) このオプションファンクションはPHLASHNT.EXEによって、フラッシュブロック
が処理された直後に、コールされる。それは各ブロック(ブロックテーブル内に
見いだされる)に対してコールされる。 このファンクションによって実行されるアクションは一般的に以下を含む: BeginFlash()ファンクションによってセーブされるBOOTブロックをレスト
ア 2つの異なったデバイスのプログラミング間をクリーンアップ ブートブロックがプログラムされた場合VHHをディセーブル 3.4.5 GetBlock(DWORD Index,DWOED Buffer_Address) Entry: コピーされるブロックのインデクス及び64kバッファのリニアアド
レス Exit: バッファは存在するバイオスロムイメジの次のブロックに満たさ れる Returns: ネガティブエラーコード、ゼロ又はポジティブ このオプションファンクションはPHLASHNT.EXEによって、BACKUPフラグが指定
されるたびにコールされる。GetBlock()は、フラッシュメモリが変化する前にフ
ラッシュメモリ内容がセーブされるとき、補助に使われる。多くのバイオスイメ
ジがシャドウラムに解凍されて入れられているので、PHLASHNT.EXEがバイオスロ
ムイメジにプラットフォーム従属システムをセットアップせずにアクセスするこ
とは常には可能ではない。GetBlockファンクションは、現在のバイオスロムイメ
ジの従属アクセスするプラットフォームを許可するために必要である。バイオス
ロムイメジは以下のステップを使用してPHLASHNT.EXEによってセーブされる: 1)インデクスをゼロにセットされたGetBlock(Index,Buffer)及び64kバッ ファをコールし、パラメタバッファによって向けられ、予め定義されたパタンで
満たされる。バッファのパタンがBIOS.BAKファイル中の第1の64kブロックとし てセーブされ、その後プログラムは次のステップに進む 2)GetBlack(Index,Bufer)を、インデクスを前回のGetBlock()のコール によって帰った値にセットして呼び出し、64kバッファをBIOS.BAKにセーブしそ してこれをGetBack()により帰る数が負になるまで繰り返す。 3)最後のGetBack()によって帰る値がゼロの場合、メモリをフラッシン グして進む。帰った値が負のエラーコードの場合、エラーをレポートし、BIOS.B
AKをデレートし、抜け出す。 GetBack()がプラットフォームが正常な状態でGetBack()をしてBIOS ROM イメジをバッファ内のコピーせしめること及びプラットフォームがGetBack() がPHLASHNT.EXE制御に戻る前にオリジナルモードに蓄えられるのを確かなものに
することは、GetBack()実行の役割である。特に、GetBack()は、EnableFlas
h()に対してコールがなされる前にコールされる。GetBack()に渡されたバッフ
ァポインタは常に640k以下のリアルメモリ範囲にあり、ディスクに直接移ること
が可能である。 3.4.6 Function CmdLine(charfar*szOptions) Entry: 含むペイロードら特定コマンドラインオプションを伴うストリン グへのポインタ Returns: エラーコード(即ち0) このオプションファンクションはPLATFORM.DLLが読み込まれた直後PHLASHNT.E
XEによってコールされる。それは全てのプラットフォーム特定コマンドラインパ
ラメタ(/PLATFORM=""コマンドラインにオプションを伴う等しいサインの直後に
特定される)を含むストリングアドレスを通過される。ストリングはリーディン
グとトレーリングのダブルクォートをもしあれば含む。 3.4.7 Function AutoSense() Entry: PLATRFORM.INIヘッダから検索された製造者及びデバイスID Returns: フラッシュパート(即ちゼロ)から検索されたID このファンクションはPLATFORM.DLL中のEnableFlash()ファンクションがコー ルされた直後PHLASHNT.EXEによってコールされる。AutoSense()機能は、”非標 準”のメモリ組織がフラッシュメモリに使われたときメモリフラッシュパートの
自動判定を可能にする。例えば2つの分離パートが偶数と奇数のBIOSアドレスに
使用されるとき(その場合従来の自動検出機構はフェールする)、この機構はそ
れぞれのパートのIDを獲得しベリファイするのに使われる。 IDは1バイトの長さでDWORDのなかにパックされ、製造IDをBYTE0及びデバイス
IDをBYTE1のなかに含む。 3.4.8 Function lsFlashable(char far*szErrorMsg) Entry: 戻ったエラーメッセージを含むストリングへのポインタ Exit: エラーメッセージストリングを含むszErrorMsg Returns: エラーコード(即ちゼロ) このオプションファンクションは、EnableFlash()が進んでも良いかどうか判 断する以前にコールされる。もしこの機能が非ゼロエラーコードに戻る場合、ス
トリングszErrorMsgが表示されプログラムは終了する。254バイト以上までター ミネーティングNULLがszErrorMsgの中に戻される。 これがどのように使用されかの例は以下の如くである:同じプラットフォーム
に対してはOEMは、プラグアンドプレー能力を持ったあるいは持たないシステム を販売している。lsFashable()機能は、現行システムがプラグアンドプレーを持
っているかどうか判定し、そしてすでに持っていないプラットフォーム上のプラ
グアンドプレーBIOSをフラッシュしない。 3.4.9 Function Reboot() Entry: なし Returns: なし このオプションファンクションはシステムをリセットしてプログラムが終了し
たあと、コールされる。提供される場合、PHLASHNTの自身のリブートコードに代
わってコールされる。 3.4.10 FunctionCheckSum() Entry: なし Returns: エラーコード(即ちゼロ) このオプショルファンクションは、プログラムがBIOSROMイメジがのchecksum が正しい可動か判定する前にコールされる。一般には、NuBIOSイメジのBIOSROM イメジチェックサムはゼロである。このルーティーンは、ROMイメジチェックサ ムがゼロでないと知られるとき、交互チェックサム検出方法を提供するために使
用される。この機能が非ゼロに戻ると、PHLASHNは終了する。 3.4.11 FunctionGetBIOSFilSize() Entry: なし Returns: BIOSイメジサイズ この機能は、PLATFORM.DLLからの広域変数dwFileSizenoの内容を戻す。 3.4.12 Function GetManufactID() Entry: なし Returns: 製造者ID この機能は、PLATFORM.DLLからの広域変数bManufactIDの内容を戻す。 3.4.13 Function GepartID() Entry: なし Returns: PrtID この機能は、PLATFORM.DLLからの広域変数PrtIDの内容を戻す。 3.4.14 Function GetFlags() Entry: なし Returns: オプションフラグ この機能は、PLATFORM.DLLからの広域変数dwFlagsの内容を戻す。 3.4.15 Function GetImageBuf() Entry: なし Returns: イメジバッファの位置 この機能は、PLATFORM.DLLからの広域変数dwImageBufの内容を戻す。 3.4.16 Function GetMfgIDAddr() Entry: なし Returns: 製造者IDが位置するアドレス この機能は、PLATFORM.DLLからの広域変数dwMfgIDAddrの内容を戻す。 3.4.17 Function GetPartIDAddr() Entry: なし Returns: パートIDが位置するアドレス この機能は、PLATFORM.DLLからの広域変数dwPartIDAddrの内容を戻す。 3.4.18 Function GetRetryCount() Entry: なし Returns: 障害が起きた場合フラッシングをリトライする回数 この機能は、PLATFORM.DLLからの広域変数bRetryCountの内容を戻す。 3.4.19 Function GetblockTableSize() Entry: なし Returns: ブロックテーブル中のブロックの個数 この機能は、PLATFORM.DLLからの広域変数blockTableSizeの内容を戻す。 3.4.20 Function GetpartTypesSize() Entry: なし Returns: PLATFORM.DLLが記述する追加的フラッシュパートの数 この機能は、PLATFORM.DLLからの広域変数GetpartTypesSizeの内容を戻す。 3.4.21 Function GetBlockTable() Entry: なし Returns: ブロックテーブルのアドレス この機能は、PLATFORM.DLLからの広域変数BlockTableの内容を戻す。 3.4.22 Function GetPartTypes() Entry: なし Returns: partTypesのアドレス この機能は、PLATFORM.DLLからの広域変数partTypesの内容を戻す。 3.4.23 Function GetDLLVersion() Entry: なし Returns: PLATFORM.DLLのバージョン この機能は、PLATFORM.DLLからの広域変数szVersionの内容を戻す。 3.4.24 Function GetROMFileName() Entry: なし Returns: BIOSROMファイル名称 この機能は、PLATFORM.DLLからの広域変数szROMBIOSFileの内容を戻す。 3.4.25 Function GetDLLFuncDefine() Entry: なし Returns: PLATFORM.DLL中のどんなプラットフォーム従属機能かを示す この機能は、PLATFORM.DLLからの広域変数dwDLLFuncDefineの内容を戻す。 4.0 BIOS.ROM詳細 ROMイメジファイルサイズは充分に大きく、プログラムされるべきフラッシュ デバイス中の全てのブロックを含む。ブートブロックスワッピングやデータ圧縮
のような必要とするBIOSイメジの事後処理は、ROMイメジファイルに予め組み込 まれていなければならない。 5.0 一般検索ガイドライン プログラムはマイクロソフトビジュアルC++バージョン4.2以降によって開 発される。 なぜならばこのプログラムは入手しうる最新のデバイスとして開発されること
及びコードサイズはクリティカルではないので、コーディングスタイルは実行可
能なコードのコンパクトさよりもコード読み取り可能性及び明晰さがより高い優
先度を有している。 しかしながら、プログラムは又製造環境で使用されるので、パートフラッシン
グのためには可能な最短時間を取り得るように構成されなければならない。特に
、ノンクリティカルユーザインタフェースがディセーブルされるモードを有する
べきである。そして、可能なときは時間消費フラッシング機能は最小のアセンブ
リ言語で記述されるべきである。付録B1−将来の拡張 キーボードLEDを有する完了コード プログラムが、フラッシングプロセスの3つの大きな段階のどこかで終了に失敗
すると、プログラムはキーボードLEDを使ってユーザにどの段階でプログラムが 失敗したかを知らせる。プログラムスタートにおいてキーボード上のCAPS LOCK,
NUM_LOCK,SCROLL_LOCKのLEDは点灯される。それぞれ3つの段階の障害が以下に 示される。 キーボードLEDがオン 記述 CAPS,NUM,SCROLL platform.dllの読み取り以前 CAPS,NUM platform initの以前 NUM platform initの以後 なし 成功裏に終了付録B2−PHLASHNT.H 終了とエラーコード FFh BIOS.BAKバッファのためのメモリアロケーション失敗 FEh BIOS.BAKがすでに存在(それをリネーム又はデレート) FDh BIOS.BAK上のFile Create失敗 FCh BIOS.BAK上のFile Write失敗 FBh BIOS.BAK上のFile Close失敗 FAh BIOSのバックアップがPLATFORM.DLL中にサポートされていない F9h PLATFORM.DLL上のFile Open失敗 F8h PLATFORM.DLL上のFile Read失敗 F7h PLATFORM.DLL上のFile Close失敗 F6h PLATFORM.DLL中のシグネチャバイト位置指定失敗 F5h サポートされていないPLATFORM.DLLファイルバージョン F2h PLATFORM.DLL中のデバイステーブルが多くのエントリを持ちすぎ F1h PLATFORM.DLL中のデバイステーブルがサポートされていないフラッシュタ
イプを有する F0h PLATFORM.DLLにおいて組み合わせられたSAVEやRESTOREの属性 EFh PLATFORM.DLL中のRESTOREブロックに合わないSAVEブロック ECh サポートパートのテーブルに見いだされないパートID EBh PLATFORM.DLLはコマンドパラメタライン中にエラーを発見した EAh BIOS ROMイメジへのアロケーション失敗 E9h BIOS ROMイメジファイル上にオープン失敗 E8h BIOS ROMイメジファイル上にリード失敗 E6h BIOS ROM上にファイルクローズ失敗 E4h フラッシュメモリID読み取り意図失敗 E3h PLATFORM.DLLはフラッシュメモリID戻り失敗 E2h BCPSYSブロックがBIOS ROMファイルイメジ中に発見できない E1h ファイルは同一BIOSパートナンバを含まない E0h ファイルは異なったBIOS ROMイメジバージョンを含まない DFh フラッシュに書かれるべきデータがBIOS ROMイメジに合わない DEh フラッシュメモリ書き込み失敗 DDh 失敗したフラッシュメモリブロックを消す DCh VPPは予定のレベルではない DBh 失敗したシーケンス消去 DAh 新しいDMIストリングが大きすぎ D9h BIOS ROMファイルはこのシステムでは使われていない D8h DMI OEMストリングのアロケーション失敗 D7h BIOS ROM中の指定されたDMI OEMストリングのスペースがない D6h DMI OEMストリングはサポートされていない(BCPDMI 0.1+を要求) D5h BIOS ROMファイルイメジ中のBCPDMIブロックが発見できない D3h BIOS ROMファイルが破壊された可能性(checksumはゼロでない) D2h BIOS ROMファイルサイズはフラッシュパートサイズに合わない D1h DMIシステムとシャーシストリングはBCPDMI2.1+を要求付録B3−PLATFORM.DLL サンプルソースコード
【表11】
【表12】
【表13】
【表14】
【表15】
【表16】
【付録C】
付録 C 要約: この文書は、BIOS32サービス・ディレクトリとして知られている
、新たなBIOSサービスについての提案について紹介する。この新たなサービ
スっは、32ビット・コード・セグメントで走るコール元のために設計された、
ばイ押す内のサービスに関する情報を提供する。(BIOS32サービス・ディ
レクトリ自体は、32ビットBIOSサービスである。)このサービスのクライ
アントとして考えられるのは、32ビット・オペレーティング・システムおよび
32ビット・デバイス・ドライバである。このサービスの提供者として考えられ
るのは、1つ以上の32ビットBIOSサービスを実施するBIOSベンダであ
る。1.はしがき BIOS32サービス・ディレクトリの提案は、周辺素子相互接続(PCI)
規格のために32ビット・コード・インターフェースを確定する試みの中で生ま
れた。解決すべき主要な問題は、32ビット・コール側はどのようにして32ビ
ットBIOSサービスの存在を判定するかということであった。機能的インター
フェース(即ち、制御を移管する先のエントリ・ポイント)の欠点は、機能性イ
ンターフェースが残っていない場合には明らかである。復元可能な方法があると
しても、機能性インターフェースが存在するという証拠として、サインの検索を
伴うと思われる。実際、最初のBIOS32ビット・サービスの1つであるEI
SAは、0F000hセグメント内の固定位置に存在サインを使用する。しかし
ながら、必要とされる32ビットBIOSサービスが増加し、存在するようにな
るに連れて、各々にサイン(およびエントリ・ポイント、セグメント要件等のよ
うなあらゆる関連情報)を設けることは、貴重なメモリ資源の浪費であることは
明白である。したがって、背後にある考えは、(訳注:文が途中で切れています
) BIOS32サービス・ディレクトリは、1つのサインを用いて汎用32ビッ
ト・サービスの存在を示し、具体的な32ビットサービス全てに関する情報を戻
す。 その場しのぎで問題を解決し続けることに対して、総合的な解決策を実現する
ことの正当性は、規格が業界に与える恩恵からも明らかである。コードの再利用
性、新たな32ビットBIOSインターフェースのモジュール化(「プラグ・イ
ン」を可能にする)実施、コール側環境要件についての全般的な仕様等は、考え
られる利点の一部である。 BIOS32サービス・ディレクトリは、ヘッダおよびコーリング・インター
フェースという2つの構成要素を有する。ヘッダは、サインを含み、既知のメモ
リ範囲内に位置する固定データ構造である。有効なヘッダが存在することは、コ
ーリング・インターフェースの存在を意味し、実際には、そのエントリ・ポイン
トを記述する。コーリング・インターフェースは、コードおよびデータの本体で
あり、ヘッダおよび個々の32ビットBIOSサービスのいずれからも離れた別
個のメモリ空間に存在する。これは、コール元が特定の32ビットBIOSサー
ビスに関する情報を受け取る際に用いる機能性インターフェースを提供する。(
章0には、ヘッダ、コーリング・インターフェース、および「XYZ」32ビッ
トBIOSサービスの仮説メモリ・マップについて説明がある。) コーリング・インターフェースの設計は、2つの次元で拡張可能である。第1
に、これは機能ベースのインターフェースである。今後のサービス改訂は、必要
となる毎に、新たな機構に組み込むことができる。第2に、個々の32ビットB
IOSサービスは、4バイト・コンポーネントIDによって表わされる。これに
よって、OSコール元およびBIOS32サービス・ディレクトリ・インプリメ
ンタ双方共、新たな32ビットBIOSサービスが使用できるようになる毎に、
これらを容易に追加することが可能となる。 BIOSサービス・ディレクトリに対するインターフェース、および例による概
2.BIOS32サービス・ディレクトリ・ヘッダ BIOS32サービス・ディレクトリを実現するBIOSは、物理アドレス範
囲0E0000h−0FFFFFh内のどこかに、特定の隣接16バイト・パタ
ーンを埋め込まなければならない。このパターンは、パラグラフで位置合わせさ
れていなければならない(即ち、16バイトの境界で始まらなければならない)
。このパターンは、BIOS32サービス・ディレクトリ・ヘッダとして知られ
ている。 ヘッダは6つの個別フィールドで構成されている。以下の表に各フィールドに
ついて説明する。
【表17】 BIOS32サービス・ディレクトリのクライアントは、最初にヘッダを突き
止めてその存在を判定しなければならない。これは、パラグラフずつ進めながら
0E0000hないし0FFFF0hを走査し、各パラグラフの最初の4バイト
においてサインの一致(”_32_”)を探す。サインが検出されたなら、クラ
イアントはヘッダ内の全バイトのチェックサムを求める。(パラグラフ内のヘッ
ダ長は、オフセット9hで分かる)。ヘッダ内の全バイトを互いに加算し、その
結果が0hにならなければならない。チェックサムが有効な場合、32ビット・
エントリ・ポイント・フィールドは、BIOS32サービス・ディレクトリ・コ
ーリング・インターフェースのアドレスとして使用することができる。ヘッダが
見つからない場合、BIOS32サービス・ディレクトリはそのプラットフォー
ム上には存在しないことになる。3.BIOSサービス・ディレクトリ・コーリング・インターフェース BIOS32サービス・ディレクトリの存在がわかったならば(前述のヘッダ
検査によって)、ヘッダ内にある32ビット物理アドレスを、コーリング・イン
ターフェースへのエントリ・ポイントとして用いることができる。クライアント
は、このアドレスにCALL FARしなければならない。クライアントのコー
ル環境は、以下の要件を有する。 3.1 コード・セグメント 以下の値を有するセグメント記述子を用いて、CSコード・セグメント・セレ
クタを設定しなければならない。 ・基底アドレスは、エントリ・ポイントを含むページの(4kb)ページ・ア
ドレス以下でなければならない。例えば、エントリ・ポイントが0FFF812
34hであるとすると、基底アドレスは0FFF81000h以下でなければな
らない。 ・このリミットは、基底アドレスにこのリミットを加算すると、エントリ・ポ
イントを含むページに続く(4KB)ページ上の最後のアドレスに等しくなるよ
うにしなければならない。例えば、エントリ・ポイントが0FFF81234H
であるとすると、基底アドレスにリミットを加算して0FFF82FFFh以上
でなければならない。 ・単純に言えば、基底アドレスおよびリミットは、エントリ・ポイントを含む
ページおよび次のページ双方に「跨がらなければ」ならない。 ・セグメント・タイプは、100b(コード、実行のみ)または101b(コ
ード、実行/リード)でなければならない。しかしながら、サービス・ディレク
トリのインプリメンタは、CSコード・セグメントへのリード・アドレスを引き
受けることができない。 ・システム・バイトは、1(非システム・セグメント)でなければならない。 ・記述子特権レベル(DPL)を0とすることを推奨する(CS記述子DPL
は、現特権レベル即ちCPLとなる)。CPLが0でない場合、OSは、リング
0特権命令に対して、トラップおよび仮想化サービスを提供しなければならない
。また、このフィールドのEFLAGS(章0を参照)内のIOPLフィールド
に対する依存性にも注意すること。 ・デフォルト・サイズ・ビットは1(32ビット)でなければならない。 BIOS32サービス・ディレクトリ・エントリ・ポイント、ならびにそれに
関連するコードおよびデータは、4Gb物理アドレス空間内のどこに位置しても
よい。しかしながら、物理的に隣接しており(即ち、ROMまたはFLASH空
間に送出される)、2ページ内に納まる(即ち、3ページには跨がらない)こと
を保証する。 3.2データ・セグメント 以下の値を有するセグメント記述子を用いて、DSデータ・セグメント・セレ
クタを設定しなければならない。 ・基底アドレスはCS基底アドレスに等しくなければならない。 ・リミットはCSリミット以上でなければならない。 ・セグメント・タイプは、000b(データ、リードのみ)または001b(
データ、リード/ライト)でなければならない。しかしながら、サービス・ディ
レクトリのインプリメンタは、DSコード・セグメントへのライト・アドレスを
引き受けることができない。 ・システム・バイトは、1(非システム・セグメント)でなければならない。 ・記述子特権レベル(DPL)は、CPL(章0のDPLフィールドを参照)
以上でなければならない。 ES、FS、およびGSデータ・セグメント・セレクタに関する要件はない。 3.3スタック・セグメント 以下の値を有するセグメント記述子を用いて、SSスタック・セグメント・セ
レクタを設定しなければならない。 ・セグメント・タイプは、011b(データ、リード/ライト、下方展開)ま
たは001b(データ、リード/ライト、情報展開)でなければならない。 ・システム・バイトは、1(非システム・セグメント)でなければならない。 ・記述子特権レベル(DPL)は、CPL(章0のDPLフィールドを参照)
以上でなければならない。 ・デフォルト・サイズ・ビットは1(32ビット)でなければならない。 ・粒度ビットは1(4Kb)でなければならない。 前述の設定値は、少なくとも4kbのスタック・サイズを確保することに注意
すること。少なくとも1kbの使用可能な未使用スタックがあることを確保する
のは、コール側の責任である。 3.4 ページング ページングは、イネーブルしてもしなくてもよい。ページングをイネーブルす
る場合、CSおよびDCセレクタによって記述されるアドレス空間は、線形的に
隣接していなければならない。即ち、ROMまたはFLASH内で見出されるコ
ーリング・インターフェースの元々の物理的隣接性を保存しなければならない(
コーリング・インターフェース・コードおよびデータは、場所に依存せず、EI
Pに関係するように書かれる)。 3.5 IOPL:コーリング・インターフェースがI/O命令を実行するため
には、EFLAGS内のI/O特権レベル(IOPL)フィールドは、CPL(
章0のDPLフィールドを参照)以上でなければならない。 BIOS32サービス・ディレクトリ・コーリング・インターフェースは、関
数を基本とし、全てのパラメータはレジスタにおいて受け渡しされる。レジスタ
がある関数の出力パラメータとして指定されていない場合、これは保存されるこ
とになる。全てのフラグは保存される。関数値は、レジスタBL内の入力パラメ
ータとして渡される。レジスタALにリターン・ステータスが戻される。リター
ン・ステータスが00hの場合、関数が成功したことを示す。リターン・ステー
タスが80hの場合、要求された関数(BLにおける)に対応しないことを示す
。その他のALリターン値は、個々の関数によって定義される。現在定義されて
いるBIOS32サービス・ディレクトリの関数は1つである。これを以下に詳
しく示す。 3.6 コンポーネント存在関数(BL=0h) コンポーネント存在関数は、特定の32ビットBIOSサービスが存在するか
否か、そして存在する場合、それが占めるメモリ空間についての情報を返す。 入力: BL,0h EAX,コンポーネントID コンポーネントIDは、32ビットBIOSサービスを一意に識別する
4バイトASCIIストリングである。個々のBIOSサービスについての仕様
は、それら自体のコンポーネントIDを定義する。(これらの仕様が、コンポー
ネントIDストリングは左から右にパックされるのか、あるいは右から左にパッ
クされるのかを定義することは重要である)。 EBX,予約済み、0hにセットされている。 出力: 要求された32ビット・サービスが存在しない場合、 AL=81h 要求された32ビット・サービスが存在する場合、 AL=0h EBX=32ビットBIOSサービスの基底アドレス ECX=23ビットBIOSサービスの長さ EDX=32ビットBIOSサービス・エントリ・ポイントのオフセット
(EBXより) EBX,ECX,およびEDXレジスタの残りは、個々の32ビットBIOS
サービス仕様によって異なる。即ち、これらは、セグメント・セレクタ、最小「
包含」値等を設定するための正確な値を表わすことができる。 3.7 将来の機能 将来のBIOS32サービス・ディレクトリの機能は、今後の本文書の改訂版
において定義されよう。機能パラメータ・インターフェースは、レジスタの受け
渡しに制約されず、スタック上の入出力パラメータを用いることができる。これ
は、スタックの静的な定義のために、実現可能である。 4.まとめ 本文書は、BIOSサービス・ディレクトリについて記載したものである。こ
れは、ヘッダおよびコーリング・インターフェースという2つの別個のメモリ・
コンポーネントを識別する。ヘッダは、メモリ範囲0E0000h−0FFFF
Fh内に位置するサイン・データのパラグラフである。コーリング・インターフ
ェースは、4Gbのアドレス空間内におけるメモリの物理的隣接セクションのい
ずれかを占めるコードの本体であり、長さが2ページ(8kb)未満である。ヘ
ッダは、コーリング・インターフェース・メモリ・エリアへのポインタを含む。 BIOS32サービス・ディレクトリ・コーリング・インターフェースの関数
は、特定の32ビットBIOSサービスに対してコードおよびデータを含む、追
加のメモリ・エリアを記述する。仮説的なヘッダ、コーリング・インターフェー
スおよび「XYZ」32ビットBIOSサービスのメモリ・マップは次の通りで
ある。
【表18】 本文書は、32ビットBIOSにアクセスする標準的な方法を提示するもので
ある。BIOS32サービス・ディレクトリ・コーリング・インターフェースの
拡張可能性を用いれば、新たな32ビットBIOSサービスが認識され実施され
る毎に、標準的な方法を容易に発展させていくことができる。
【付録D1】
【付録D2】
【付録D3】
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SZ,UG,ZW),EA(AM ,AZ,BY,KG,KZ,MD,RU,TJ,TM) ,AL,AM,AT,AU,AZ,BA,BB,BG, BR,BY,CA,CH,CN,CU,CZ,DE,D K,EE,ES,FI,GB,GD,GE,GH,GM ,HR,HU,ID,IL,IS,JP,KE,KG, KP,KR,KZ,LC,LK,LR,LS,LT,L U,LV,MD,MG,MK,MN,MW,MX,NO ,NZ,PL,PT,RO,RU,SD,SE,SG, SI,SK,SL,TJ,TM,TR,TT,UA,U G,US,UZ,VN,YU,ZW (72)発明者 ファン クァン アメリカ合衆国 カリフォルニア州 92782タスティン サラトガドライブ 13281 Fターム(参考) 5B005 JJ01 MM31 5B076 BA01

Claims (36)

    【特許請求の範囲】
  1. 【請求項1】 物理メモリ内の命令シーケンスを、プロセッサベースシステム内
    の仮想メモリからアクセス及び実行する装置であって、 プロセッサベースシステムの処理がなされる命令シーケンスを記憶し且つ物理
    メモリ及び仮想メモリを含むメモリと、 前記記憶済命令シーケンスを実行するプロセッサと、 前記記憶済命令シーケンスは、(a)前記物理メモリから前記仮想メモリ内に
    複数の所定の命令シーケンスをマップさせるステップと、(b)前記仮想メモリ
    内の前記複数の所定の命令シーケンスの1つに対してオフセットを決定させるス
    テップと、(c)前記複数の所定の命令シーケンスの1つを実行するためにイン
    ストラクションを受けせしめるステップと、(d)前記複数の所定の命令シーケ
    ンスの1つに制御を移動せしめるステップと、(e)前記仮想メモリからの前記
    複数の所定の命令シーケンスの1つを処理せしめるステップとを前記プロセッサ
    に処理せしめる処理方法を含むことを特徴とする装置。
  2. 【請求項2】 前記ステップ(c)において、前記インストラクションはアプリケ ーションプログラムにより作成されることを特徴とする請求項1に記載の装置。
  3. 【請求項3】 前記ステップ(c)において、前記インストラクションはクラスド ライバにより作成されることを特徴とする請求項1に記載の装置。
  4. 【請求項4】 前記ステップ(a)は、 (a.1)BIOSサービスディレクトリを含む複数のBIOS命令シーケンス
    を物理メモリから仮想メモリにマップするステップと、 (a.2)物理メモリから仮想メモリにBIOSデータをマップするステップと
    を含むことを特徴とする請求項1に記載の装置。
  5. 【請求項5】 前記ステップ(b)は、 (b.1)BIOSサービスディレクトリの開始仮想アドレスを決定するステッ
    プと、 (b.2)BIOSサービスディレクトリを参照する複数のBIOS命令シーケ
    ンスのうちの1つの開始仮想アドレスを決定するステップとを含むことを特徴と
    する請求項4に記載の装置。
  6. 【請求項6】 前記ステップ(d)は、 (d.1)記憶場所内にレジスタスタックを作成するステップと、 (d.2)前記レジスタスタック内の複数のBIOS命令シーケンスのうちの1
    つの開始仮想アドレス位置を識別するステップと、 (d.3)複数のBIOS命令シーケンスのうちの1つに対して制御を移動する
    ステップを含むことを特徴とする請求項5に記載の装置。
  7. 【請求項7】前記ステップ(d.1)において、前記記憶場所は、ダイナミック
    ランダムアクセスメモリ(DRAM)内のバッファに在ることを特徴とする請求項6
    に記載の装置。
  8. 【請求項8】前記ステップ(d.1)において、前記記憶場所は、主記憶装置内
    のバッファに在ることを特徴とする請求項6に記載の装置。
  9. 【請求項9】 前記ステップ(e)は、 (e.1)物理メモリから仮想メモリにマップされたアドレスの範囲内に開始仮
    想アドレスが含まれているか否かを決定するステップと、 (e.2)前記アドレスの範囲内に含まれている場合には仮想メモリから複数の
    BIOS命令シーケンスの1つを実行し、含まれていない場合には物理メモリか
    ら仮想メモリにマップされるアドレスの範囲内に開始仮想アドレスがないことを
    指し示すステップとを含むことを特徴とする請求項6に記載の装置。
  10. 【請求項10】 物理メモリ内の命令シーケンスを、プロセッサベースシステム
    内の仮想メモリからアクセス及び実行する方法であって、 (a)物理メモリから仮想メモリに複数の所定の命令シーケンスをマップするス
    テップと、 (b)仮想メモリ内の前記複数の所定の命令シーケンスのうちの1つに対してオ
    フセットを決定するステップと、 (c)前記複数の所定の命令シーケンスのうちの1つを実行するためにインスト
    ラクションを受け取るステップと、 (d)前記複数の所定の命令シーケンスのうちの1つに対して制御を移動するス
    テップと、 (e)前記仮想メモリからの前記複数の所定の命令シーケンスのうちの1つを処
    理せしめるステップと、 を含むことを特徴とする方法。
  11. 【請求項11】 前記ステップ(c)において、前記インストラクションはアプリ ケーションプログラムにより作成されることを特徴とする請求項10に記載の方
    法。
  12. 【請求項12】 前記ステップ(c)において、前記インストラクションはクラス ドライバにより作成されることを特徴とする請求項10に記載の方法。
  13. 【請求項13】 前記ステップ(a)は、 (a.1)BIOSサービスディレクトリを含む複数のBIOS命令シーケンス
    を物理メモリから仮想メモリにマップするステップと、 (a.2)物理メモリから仮想メモリにBIOSデータをマップするステップと
    を含むことを特徴とする請求項10に記載の方法。
  14. 【請求項14】 前記ステップ(b)は、 (b.1)BIOSサービスディレクトリの開始仮想アドレスを決定するステッ
    プと、 (b.2)BIOSサービスディレクトリを参照する複数のBIOS命令シーケ
    ンスのうちの1つの開始仮想アドレスを決定するステップとを含むことを特徴と
    する請求項13に記載の方法。
  15. 【請求項15】 前記ステップ(d)は、 (d.1)記憶場所内にレジスタスタックを作成するステップと、 (d.2)前記レジスタスタック内の複数のBIOS命令シーケンスのうちの1
    つの開始仮想アドレス位置を識別するステップと、 (d.3)複数のBIOS命令シーケンスのうちの1つに対して制御を移動する
    ステップとを含む請求項14に記載の方法。
  16. 【請求項16】前記ステップ(d.1)において、前記記憶場所は、ダイナミッ
    クランダムアクセスメモリ(DRAM)内のバッファに在ることを特徴とする請求項
    15に記載の方法。
  17. 【請求項17】前記ステップ(d.1)において、前記記憶場所は、主記憶装置
    内のバッファに在ることを特徴とする請求項15に記載の方法。
  18. 【請求項18】 前記ステップ(e)は、 (e.1)物理メモリから仮想メモリにマップされたアドレスの範囲内に開始仮
    想アドレスが含まれているか否かを決定するステップと、 (e.2)含まれている場合には仮想メモリから複数のBIOS命令シーケンス
    の1つを実行し、含まれていない場合には、物理メモリから仮想メモリにマップ
    されるアドレスの範囲内に開始仮想アドレスがないことを指し示すステップとを
    含むことを特徴とする請求項15に記載の方法。
  19. 【請求項19】物理メモリ内の命令シーケンスを、プロセッサベースシステム内
    の仮想メモリからアクセス及び実行するコンピュータに実行可能な処理方法であ
    って、 (a)物理メモリから仮想メモリに複数の所定の命令シーケンスをマップするス
    テップと、 (b)仮想メモリ内の前記複数の所定の命令シーケンスのうちの1つに対してオ
    フセットを決定するステップと、 (c)前記複数の所定の命令シーケンスのうちの1つを実行するためにインスト
    ラクションを受け取るステップと、 (d)前記複数の所定の命令シーケンスのうちの1つに対して制御を移動するス
    テップと、 (e)前記仮想メモリからの前記複数の所定の命令シーケンスのうちの1つを処
    理せしめるステップとを含むことを特徴とする方法。
  20. 【請求項20】 前記ステップ(c)において、前記インストラクションはアプリ ケーションプログラムにより作成されることを特徴とする請求項19に記載のコ
    ンピュータに実行可能な処理方法。
  21. 【請求項21】 前記ステップ(a)は、 (a.1)BIOSサービスディレクトリを含む複数のBIOS命令シーケンス
    を物理メモリから仮想メモリにマップするステップと、 (a.2)物理メモリから仮想メモリにBIOSデータをマップするステップと
    を含むことを特徴とする請求項19に記載のコンピュータに実行可能な処理方法
  22. 【請求項22】 前記ステップ(b)は、 (b.1)BIOSサービスディレクトリの開始仮想アドレスを決定するステッ
    プと、 (b.2)BIOSサービスディレクトリを参照する複数のBIOS命令シーケ
    ンスのうちの1つの開始仮想アドレスを決定するステップとを含むことを特徴と
    する請求項21に記載のコンピュータに実行可能な処理方法。
  23. 【請求項23】 前記ステップ(d)は、 (d.1)記憶場所内にレジスタスタックを作成するステップと、 (d.2)前記レジスタスタック内の複数のBIOS命令シーケンスのうちの1
    つの開始仮想アドレス位置を識別するステップと、 (d.3)複数のBIOS命令シーケンスのうちの1つに対して制御を移動する
    ステップとを含む請求項22に記載のコンピュータに実行可能な処理方法。
  24. 【請求項24】前記ステップ(d.1)において、前記記憶場所は、ダイナミッ
    クランダムアクセスメモリ(DRAM)内のバッファに在ることを特徴とする請求項
    23に記載のコンピュータに実行可能な処理方法。
  25. 【請求項25】前記ステップ(d.1)において、前記記憶場所は、主記憶装置
    内のバッファに在ることを特徴とする請求項23に記載のコンピュータに実行可
    能な処理方法。
  26. 【請求項26】 前記ステップ(e)は、 (e.1)物理メモリから仮想メモリにマップされたアドレスの範囲内に開始仮
    想アドレスが含まれているか否かを決定するステップと、 (e.2)前記アドレスの範囲内に含まれている場合には仮想メモリから複数の
    BIOS命令シーケンスの1つを実行し、含まれていない場合には物理メモリか
    ら仮想メモリにマップされるアドレスの範囲内に開始仮想アドレスがないことを
    指し示すステップとを含むことを特徴とする請求項23に記載のコンピュータに
    実行可能な処理方法。
  27. 【請求項27】 プロセッサベースシステムの仮想メモリからのアクセス及び物
    理メモリ内の命令シーケンスを実行する装置であって、 プロセッサベースシステムの処理がなされる命令シーケンスを記憶し且つ物理
    的なメモリ及び仮想メモリを含むメモリと、 前記記憶済命令シーケンスを実行するプロセッサと、 を有し、前記記憶済命令シーケンスは、(a)前記物理メモリから前記仮想メモ
    リ内に複数の所定の命令シーケンスをマップさせるステップと、(b)前記仮想
    メモリ内の前記複数の所定の命令シーケンスの1つに対してオフセットを決定さ
    せるステップと、(c)前記複数の所定の命令シーケンスの1つを実行するため
    にインストラクションを受けせしめるステップと、(d)前記複数の所定の命令
    シーケンスの1つに制御を移動せしめるステップと、(e)前記仮想メモリから
    の前記複数の所定の命令シーケンスの1つを処理せしめるステップとを前記プロ
    セッサに生じせしめる処理方法を含むことを特徴とする装置。
  28. 【請求項28】 前記ステップ(a)は、 (a.1)複数のBIOS 読み取り専用(ROM)命令シーケンス及びBIOSサー
    ビスディレクトリを含む、複数のBIOS命令シーケンスを物理メモリから仮想
    メモリにマップするステップと、 (a.2)物理メモリから仮想メモリにBIOSデータをマップするステップと
    を含むことを特徴とする請求項27に記載の装置。
  29. 【請求項29】 前記ステップ(b)は、 (b.1)BIOSサービスディレクトリの開始仮想アドレスを決定するステッ
    プと、 (b.2)BIOSサービスディレクトリを参照する複数のBIOS命令シーケ
    ンスのうちの1つの開始仮想アドレスを決定するステップとを含むことを特徴と
    する請求項28に記載の装置。
  30. 【請求項30】 前記ステップ(d)は、 (d.1)記憶場所内にレジスタスタックを作成するステップと、 (d.2)前記レジスタスタック内の複数のBIOS命令シーケンスのうちの1
    つの開始仮想アドレス位置を識別するステップとを含むことを特徴とする請求項
    29に記載の装置。
  31. 【請求項31】 前記ステップ(e)は、 (e.1)物理メモリから仮想メモリにマップされたアドレスの範囲内に開始仮
    想アドレスが含まれているか否かを決定するステップと、 (e.2)含まれている場合には仮想メモリから複数のBIOS命令シーケンス
    の1つを実行し、含まれていない場合には、物理メモリから仮想メモリにマップ
    されるアドレスの範囲内に開始仮想アドレスがないことを指し示すステップとを
    含むことを特徴とする請求項30に記載の装置。
  32. 【請求項32】 物理メモリ内の命令シーケンスを、プロセッサベースシステム
    内の仮想メモリからアクセスする方法であって、 (a)物理メモリから仮想メモリに複数の所定の命令シーケンスをマップするス
    テップと、 (b)仮想メモリ内の前記複数の所定の命令シーケンスのうちの1つに対してオ
    フセットを決定するステップと、 (c)前記複数の所定の命令シーケンスのうちの1つを実行するためにインスト
    ラクションを受け取るステップと、 (d)前記複数の所定の命令シーケンスのうちの1つに対して制御を移動するス
    テップと、 (e)前記仮想メモリからの前記複数の所定の命令シーケンスのうちの1つを処
    理せしめるステップとを含むことを特徴とする方法。
  33. 【請求項33】 前記ステップ(a)は、 (a.1)複数のBIOS 読み取り専用(ROM)命令シーケンス及びBIOSサー
    ビスディレクトリを含む、複数のBIOS命令シーケンスを物理メモリから仮想
    メモリにマップするステップと、 (a.2)物理メモリから仮想メモリにBIOSデータをマップするステップと
    を含むことを特徴とする請求項32に記載の方法。
  34. 【請求項34】 前記ステップ(b)は、 (b.1)BIOSサービスディレクトリの開始仮想アドレスを決定するステッ
    プと、 (b.2)BIOSサービスディレクトリを参照する複数のBIOS命令シーケ
    ンスのうちの1つの開始仮想アドレスを決定するステップとを含むことを特徴と
    する請求項33に記載の方法。
  35. 【請求項35】 前記ステップ(d)は、 (d.1)記憶場所内にレジスタスタックを作成するステップと、 (d.2)前記レジスタスタック内の複数のBIOS命令シーケンスのうちの1
    つの開始仮想アドレス位置を識別するステップとを含むことを特徴とする請求項
    34に記載の方法。
  36. 【請求項36】 前記ステップ(e)は、 (e.1)物理メモリから仮想メモリにマップされたアドレスの範囲内に開始仮
    想アドレスが含まれているか否かを決定するステップと、 (e.2)前記アドレスの範囲内に含まれている場合には仮想メモリから複数の
    BIOS命令シーケンスの1つを実行し、含まれていない場合には物理メモリか
    ら仮想メモリにマップされるアドレスの範囲内に開始仮想アドレスがないことを
    指し示すステップとを含むことを特徴とする請求項35に記載の方法。
JP2000516281A 1997-10-09 1998-10-09 仮想メモリサブシステムから物理メモリのコンテンツにアクセスして実行する方法及び装置 Pending JP2001520416A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US94799097A 1997-10-09 1997-10-09
US08/947,990 1997-10-09
PCT/US1998/021228 WO1999019796A1 (en) 1997-10-09 1998-10-09 Method and apparatus for accessing and executing the contents of physical memory from a virtual memory subsystem

Publications (1)

Publication Number Publication Date
JP2001520416A true JP2001520416A (ja) 2001-10-30

Family

ID=25487093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000516281A Pending JP2001520416A (ja) 1997-10-09 1998-10-09 仮想メモリサブシステムから物理メモリのコンテンツにアクセスして実行する方法及び装置

Country Status (5)

Country Link
JP (1) JP2001520416A (ja)
AU (1) AU9792998A (ja)
GB (1) GB2345996B (ja)
TW (1) TW425529B (ja)
WO (1) WO1999019796A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001060081A (ja) * 1999-06-18 2001-03-06 Fiinikkusu Technologies Ltd 不揮発性メモリに格納された画像を更新するための装置および方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10885211B2 (en) 2017-09-12 2021-01-05 Sophos Limited Securing interprocess communications

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5212633A (en) * 1989-08-18 1993-05-18 Sharedata System for transferring resident programs to virtual area and recalling for instant excution in memory limited DOS system using program control tables
JPH0799501B2 (ja) * 1991-11-18 1995-10-25 インターナショナル・ビジネス・マシーンズ・コーポレイション 複数アプリケーションの同時実行装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001060081A (ja) * 1999-06-18 2001-03-06 Fiinikkusu Technologies Ltd 不揮発性メモリに格納された画像を更新するための装置および方法

Also Published As

Publication number Publication date
GB0008472D0 (en) 2000-05-24
AU9792998A (en) 1999-05-03
WO1999019796A1 (en) 1999-04-22
GB2345996A (en) 2000-07-26
TW425529B (en) 2001-03-11
GB2345996B (en) 2003-04-09

Similar Documents

Publication Publication Date Title
US7934209B2 (en) Method for firmware variable storage with eager compression, fail-safe extraction and restart time compression scan
US6725178B2 (en) Use of hidden partitions in a storage device for storing BIOS extension files
KR100860447B1 (ko) 선택된 기능성을 갖는 오퍼레이팅 시스템 생성 및 이용을위한 방법 및 시스템
US7334227B2 (en) Device driver installing method
CN109478135B (zh) 计算机系统和用于重新引导计算机系统的方法
CN110032405B (zh) 系统开机码存储器管理方法、存储器装置与应用其的电子系统
KR100675518B1 (ko) 모듈식 바이오스 업데이트 메커니즘
US6564318B1 (en) Method and apparatus for execution of an application during computer pre-boot operation and post-boot under normal OS control
US8037292B2 (en) Method for accelerating BIOS running
JP2002525701A (ja) Bios−rom内の不揮発性記憶装置の使用を標準化する方法および装置
US6804774B1 (en) Software image transition aid comprising building a disk image based on identified hardware
US6560702B1 (en) Method and apparatus for execution of an application during computer pre-boot operation
US6944867B2 (en) Method for providing a single preloaded software image with an ability to support multiple hardware configurations and multiple types of computer systems
US20040230963A1 (en) Method for updating firmware in an operating system agnostic manner
JP2006196018A (ja) Biosをホスト・コンピュータに提供する方法と配置
US7536536B1 (en) Method, system, and computer readable medium for updating and utilizing the contents of a non-essential region of a memory device
US20040111707A1 (en) Debugger for multiple processors and multiple debugging types
JP2001075812A (ja) コンピュータプリ−ブート作動の際にアプリケーションを実行する方法と装置
US6725294B1 (en) Installation and access of a device handler for a peripheral device in a computer
JP2971267B2 (ja) フラッシュメモリをbios−romとして使用したパーソナルコンピュータ
WO2022199622A1 (zh) 一种电子设备的启动程序的运行方法和电子设备
JP2001520416A (ja) 仮想メモリサブシステムから物理メモリのコンテンツにアクセスして実行する方法及び装置
CN112667544A (zh) 一种控制主板插槽使能的方法、装置、系统及介质
JP2001142714A (ja) 通常のos制御下でコンピュータのプリ−ブート及びポスト−ブート作動の際にアプリケーションを実行する方法と装置
JP2002024024A (ja) 異なる操作モードを利用してアダプタ構成ルーチンを実行する方法およびシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051006

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081104

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090203

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090210

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090630