説明

ユーザレベルDMAとメモリアクセス管理を提供する方法と装置

【課題】ユーザプロセスによる周辺機器の制御効率を向上させる。
【解決手段】メモリアクセス制御装置300は、DMA転送のために使用されるメモリ領域であるDMAアドレス空間を対象として、DMAリクエスタ336からIOIDを含むアクセス要求コマンドを受信し、アクセスの可否を判定し、許可の場合には、アクセスを実行させる。PU112上のOSは、ユーザプロセスの論理アドレス空間とDMAアドレス空間との対応関係をMMU334設定する。ユーザプロセスから、論理アドレスの指定によりDMAアドレス空間へのアクセスを指示されたときには、MMU334は論理アドレスをDMAアドレス空間の物理アドレスに変換する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリアクセスを制御するための技術、特に、ユーザプロセスからのメモリアクセスを制御するための技術、に関する。
【背景技術】
【0002】
近年のコンピュータゲームやデジタル放送などの分野に利用されるコンピュータグラフィックス技術や画像処理技術の著しい進歩にともない、コンピュータ、ゲーム機器、テレビなどの情報処理装置には、より高精細の画像データをより高速に処理する能力を求められている。そのためには、演算処理自体の高速化が必要であることはもちろんであるが、複数の処理装置間でタスクを好適に分散することも同様に重要である。
【特許文献1】米国特許出願公開第2007/0208885号明細書
【発明の開示】
【発明が解決しようとする課題】
【0003】
各処理装置は、タスクの実行に際して適宜メモリにアクセスする。このとき、処理装置Aの処理のために確保されたメモリの領域に対して、処理装置Bのアクセスを許してしまうと、情報処理装置全体としての動作安定性が損なわれる。特に、周辺機器を制御するためのI/Oデバイスの場合、デバイスドライバが直接物理アドレスを指定してメモリを制御することも多い。このようなデバイスドライバのプログラムミスは、情報処理装置の動作安定性に対して深刻な影響を及ぼす可能性がある。
【0004】
更に、ユーザプロセスは、周辺機器を制御するときにはデバイスドライバに実行を依頼するが、このような設計の場合、デバイスドライバの処理効率が全体の処理効率に大きく影響する。
【0005】
本発明は、このような課題に鑑みてなされたものであり、その主たる目的は、ユーザプロセスによる周辺機器の制御効率を向上させるための技術、を提供することにある。
【課題を解決するための手段】
【0006】
本発明のある態様は、メモリアクセス制御システムに関する。
このシステムは、I/Oアクセス制御装置とプロセス制御装置を備える。
I/Oアクセス制御装置は、DMA(Direct Memory Access)転送のために使用されるメモリ領域であるDMAアドレス空間を対象として、外部のDMA転送要求主体からアクセス対象となるアドレスとDMA転送要求主体を識別するためのIDを含む制御コマンドを受信し、DMA転送要求主体による該当領域へのアクセスの可否を判定し、許可の場合には、アクセスを実行させる。
プロセス制御装置は、ユーザプロセスの論理アドレス空間とDMAアドレス空間とを対応づけるマッピングテーブルを設定し、ユーザプロセスから、論理アドレスの指定によりDMAアドレス空間へのアクセスを指示されたときには、ユーザプロセスをDMAアドレス空間に直接アクセスさせるために、マッピングテーブルを参照して論理アドレスをDMAアドレス空間の物理アドレスに変換する。
【発明の効果】
【0007】
本発明によれば、ユーザプロセスによる周辺機器の制御効率を向上させる上で効果がある。
【発明を実施するための最良の形態】
【0008】
図1は、情報処理装置100の機能ブロック図である。
情報処理装置100は、統括制御部110、画像処理部120、メインメモリ140およびI/Oデバイス160を含む。また、情報処理装置100は表示装置150と接続されている。表示装置150は、統括制御部110および画像処理部120の処理の結果得られた画像、映像を出力する。I/Oデバイス160は、サウスブリッジのように他のデータ処理装置とのI/Oインタフェースとなる装置である。I/Oデバイス160では、USB(Universal Serial Bus)コントローラ、HDD(Hard Disk Drive)コントローラ、イーサネットコントローラ等が、後述するコマンド送信補助装置200に接続される。情報処理装置100と接続されるI/Oデバイス160は、複数個、また、複数種類であってよい。統括制御部110や画像処理部120はそれぞれワンチップの電子デバイスとして形成されており、お互いは物理的に分離されている。統括制御部110と画像処理部120があわせて、ワンチップの電子デバイスとして形成されてもよい。
【0009】
図1などにおいて、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他のLSI(Large Scale Integration)で構成することができ、ソフトウェア的には、メモリにロードされた予約管理機能のあるプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
【0010】
また、この情報処理装置100では、情報処理装置100を効率よく使用するための機能、環境を提供し、装置全体を統括的に制御するオペレーティングシステム(以下、単に「OS(Operating System)」とよぶ)が実行される。OS上で複数のアプリケーションソフトウェアが実行される。本実施例における情報処理装置100のOS階層は、上位から、ユーザ層、カーネル層、ハイパーバイザ(Hypervisor)層の3階層となっている。以下、ハイパーバイザ層を管理するソフトウェアのことを「特権ソフトウェア」とよぶことにする。ユーザ層、カーネル層とハイパーバイザ層のソフトウェアが一体となって、情報処理装置100の広義としての「OS」として機能している。
【0011】
統括制御部110は、主制御装置としての1つのPU(Processing Unit)112と副制御装置としての複数のSPU(Synergistic-Processing Unit)116、メモリコントローラ142およびI/Oアクセス制御装置300を含む。PU112およびSPU116、メモリコントローラ142、I/Oアクセス制御装置300はバス118により相互通信可能である。メモリコントローラ142には、メインメモリ140が接続される。また、情報処理装置100はバス118を介して別の情報処理装置100とも接続可能である。
【0012】
PU112は、各アプリケーションにおける基本処理単位としてのタスクを各SPU116に割り当てる。あるいは、PU112自身がタスクを実行してもよい。PU112は、演算実行主体としてメインプロセッサ148を含む。各SPU116が割り当てられたタスクを実行することにより、複数のタスクが並列処理される。SPU116は、演算実行主体としてのサブプロセッサ146とローカルな記憶領域としてローカルメモリ144を含む。OSはPU112により実行される。
【0013】
統括制御部110の中でPU112の管理下にあるメモリ空間はメインメモリ140と複数のローカルメモリ144により形成されることになる。以下、このような「PU112の管理下にあるメモリ空間」のことを単に「管理空間」とよぶことにする。詳しくは後述するが、USBコントローラや画像処理用DMAC(Direct Memory Access Controller)122、ディスプレイコントローラ126のように、統括制御部110の外部に存在するDMA転送要求主体は、I/Oアクセス制御装置300を介して管理空間にアクセスできる。すなわち、USBコントローラや画像処理用DMAC122は、コマンド送信補助装置200とI/Oアクセス制御装置300を介して管理空間へのデータのREAD/WRITEを実行する。以下、情報処理装置100の外部から管理空間に直接アクセスする装置のことをまとめて「DMAリクエスタ」とよぶことにする。
【0014】
PU112により実行される処理のことを「メインプロセス」、SPU116により実行される処理のことを「サブプロセス」とよぶ。本実施例におけるPU112は、複数種類のOS、各種デバイスドライバ、あるいは、ユーザプロセスを実行する。また、SPU116は、ユーザプロセスを実行するが、OSやデバイスドライバは実行しない。
【0015】
SPU116に含まれる図示しないDMACは、画像処理部120に内蔵されるグラフィックスメモリ128や、メモリコントローラ142を介して接続されるメインメモリ140との間のデータ転送、データ退避などをPU112またはSPU116からの命令によって制御する。
【0016】
I/Oアクセス制御装置300は、DMAリクエスタからのアクセス要求コマンドを統括的に制御する。ここでいうアクセス要求コマンドとは、先述したようにPU112の管理空間に対するデータの書き込みや管理空間のデータの読み出しを要求するコマンドである。アクセス要求コマンドについては、次の図2に関連して詳述する。PU112の管理空間は、メモリコントローラ142に接続されるメインメモリ140と各SPU116のローカルメモリ144にマッピングされる。この管理空間には、他の記憶領域、たとえば、別の情報処理装置100の記憶領域がマッピングされてもよい。DMAリクエスタがPU112の管理空間にアクセスするときには、I/Oアクセス制御装置300に対してアクセス要求コマンドを送信する。I/Oアクセス制御装置300は、アクセス要求コマンドを受け取り、管理空間に対するREAD/WRITEを制御する。
【0017】
メインメモリ140は、管理空間の一部にマッピングされる記憶領域である。メインメモリ140には、タスクの実行状態に関連するデータが格納される。たとえば、統括制御部110によりコンピュータグラフィックスに関する座標計算が実行されて得られた座標データなどが一時的に格納される。また、このメインメモリ140には、画像処理部120により生成されたデータが退避される場合もある。ローカルメモリ144も、管理空間の一部にマッピングされる記憶領域であり、主としてサブプロセス実行のための作業用データを格納する。
メインメモリ140やローカルメモリ144の一部は、DMA転送のためのデータを保持するための領域となる。このような領域を「DMAアドレス空間」とよぶ。DMAアドレス空間は管理空間の一部として形成される。
【0018】
画像処理部120は、画像処理を専用に実行するユニットであり、たとえば、レンダリング処理を実行する。画像処理部120は、統括制御部110からの指示により画像処理を実行する。画像処理部120は、統括制御部110により処理されるそれぞれのタスクに関連する画像処理を行い、生成した画像、映像を表示装置150に出力する。画像処理部120は、複数の画像処理を時分割して並列的に実行してもよい。
【0019】
画像処理部120は、メモリコントローラ138、グラフィックスメモリ128、画像処理用DMAC122、演算ユニット130、ディスプレイコントローラ126、制御ブロック124およびコマンド送信補助装置200を含む。これらのユニット同士も、バス118で接続されており、各ユニット間で相互通信可能である。グラフィックスメモリ128はメモリコントローラ138を介してバス118に接続される。演算ユニット130は、画像処理用DMAC122を介してバス118に接続される。
【0020】
グラフィックスメモリ128は、画像処理部120により使用、管理されるグラフィックスデータを記憶するためのメモリ領域である。グラフィックスメモリ128には、画像フレームデータが格納されるフレームバッファやZバッファに加えて、画像フレームデータを描画する際に参照される基本データである頂点データ、テクスチャデータ、カラールックアップテーブルなどのデータに対応する領域が用意されている。
【0021】
制御ブロック124は、画像処理部120全体を制御するブロックである。制御ブロック124は、演算ユニット130、グラフィックスメモリ128、ディスプレイコントローラ126を統括的に制御し、各ブロック間のデータ転送の同期管理やタイマー管理等を行う。
【0022】
画像処理用DMAC122は、管理空間とグラフィックスメモリ128の間のデータ転送、データ退避などを制御ブロック124からの命令によって制御する。
【0023】
ディスプレイコントローラ126は、水平および垂直同期信号を生成し、表示装置150の表示タイミングにしたがって、グラフィックスメモリ128に格納されるフレームバッファから画像フレームデータのピクセルデータをライン状に順次読み込んでいく。さらにディスプレイコントローラ126は、ライン状に読み込まれたピクセルデータを、RGB(Red-Green-Blue)のカラー値からなるデジタルデータから表示装置150に対応したフォーマットに変換して出力する。
【0024】
演算ユニット130は、制御ブロック124からの命令にしたがって、グラフィックスに関するさまざまな演算処理を行う。その処理の一例としては、3次元モデリングデータをもとに座標変換、陰面消去、シェーディングを行って画像フレームデータを作成し、フレームバッファに書き込む一連のレンダリング処理などが挙げられる。
【0025】
演算ユニット130は、特に3次元グラフィックスに関する処理を高速に行うために、ラスタライザ132、シェーダユニット134、テクスチャユニット136などの機能ブロックを含む。
【0026】
ラスタライザ132は、描画する基本物体(以下、「プリミティブ」とよぶ)の頂点データを統括制御部110から受け取り、3次元空間上のプリミティブを投影変換により描画平面上の図形に変換するビュー変換を行う。さらに、描画平面上の図形を、描画平面の水平方向に沿ってスキャンしながら、一列ごとに量子化されたピクセルに変換するラスタ処理を行う。このラスタライザ132によってプリミティブがピクセル展開されて、各ピクセルごとにピクセル情報を算出する。このピクセル情報には、RGBカラー値、透明度を表すα値、視点からの奥行きを表すZ値が含まれる。
【0027】
ラスタライザ132は、スキャンラインに沿って所定の大きさのピクセル領域を生成し、シェーダユニット134、テクスチャユニット136へと出力する。ラスタライザ132から出力されるピクセル領域は、一度キューにスタックされ、シェーダユニット134はスタックされたピクセル領域を順に処理していく。
【0028】
シェーダユニット134は、ラスタライザ132により算出されたピクセル情報をもとにシェーディング処理を行い、テクスチャユニット136により得られたテクセル情報をもとに、テクスチャマッピング後のピクセル色を決定し、グラフィックスメモリ128内のフレームバッファにシェーディング処理後の画像フレームデータを書き込む。さらにシェーダユニット134はフレームバッファに書き込まれた画像フレームデータに対してフォギング、アルファブレンディング等の処理を行い最終的な描画色を決定してフレームバッファの画像フレームデータを更新する。
【0029】
テクスチャユニット136は、シェーダユニット134からテクスチャデータを指定するパラメータを受け取り、要求されたテクスチャデータをグラフィックスメモリ128内のテクスチャバッファを読み出し、所定の処理を行った後にシェーダユニット134に対して出力する。
【0030】
画像処理部120はプリミティブの頂点データなど画像生成のために必要な基本情報や画像生成の開始指示を統括制御部110から与えられると、統括制御部110とは独立して画像処理を実行する。画像処理用DMAC122は、画像処理部120により生成されたデータをグラフィックスメモリ128や管理空間に転送する。
【0031】
画像処理部120内のDMAリクエスタがDMAアドレス空間にデータを転送するとき、画像処理部120に含まれるコマンド送信補助装置200は、画像処理部120から統括制御部110のI/Oアクセス制御装置300に対して、アクセス要求コマンドを送信する。コマンド送信補助装置200は、アクセス先となる管理空間の論理アドレス、DMAリクエスタを識別するためのID情報(以下、「IOID(Input/Output device ID)」とよぶ)、コマンド(READ/WRITE)をパケット化したアクセス要求コマンドを送信する。書き込み指示の場合、アクセス要求コマンドにつづいて、書き込み対象のデータも送信される。I/Oアクセス制御装置300は、受信したアクセス要求コマンドにしたがって、DMAリクエスタからのDMAアドレス空間に対するアクセスを制御する。
【0032】
コマンド送信補助装置200は、画像処理部120のみならず、I/Oデバイス160にも搭載される。I/Oデバイス160に搭載されるコマンド送信補助装置200も、I/Oデバイス160から統括制御部110に対して、アクセス要求コマンドを送信する。画像処理部120においてDMAリクエスタとなるのは画像処理用DMAC122やディスプレイコントローラ126である。I/Oデバイス160についてDMAリクエスタとなるのは、先述したUSBコントローラや、HDDコントローラ、イーサネットコントローラ等である。コマンド送信補助装置200は、各種DMAリクエスタがDMAアドレス空間へのアクセスを要求するときに、所定フォーマットのアクセス要求コマンドを生成して、統括制御部110に送信する装置である。I/Oアクセス制御装置300は、さまざまなコマンド送信補助装置200を介してさまざまなDMAリクエスタからのアクセス要求を受け取り、DMAアドレス空間へのアクセスを制御する装置である。
【0033】
コマンド送信補助装置200の詳細については、図2以降、特に図5に関連して詳述する。
【0034】
図2は、アクセス要求コマンド162のデータ構造図である。
同図に示すアクセス要求コマンド162は、コマンド送信補助装置200からI/Oアクセス制御装置300に対して送出される。IOID領域172は、コマンド送信補助装置200がDMAリクエスタを一意に識別するために付与するIOIDを示す。IOIDは、情報処理装置100において各DMAリクエスタを一意に識別するIDである。コマンド領域179は、READやWRITEなどのコマンド内容を示す。アドレス領域170は、アクセス先のアドレスを示す。このアドレスは、論理的なアドレスであって物理アドレスを直接的に指定するものではない。論理アドレス空間は、セグメントに分割されており、セグメントはページに分割される。各ページにおける具体的なアドレスはオフセットにより指定される。アドレス領域170は、セグメント領域174、ページ領域176、オフセット領域178を含む。セグメント領域174はセグメントを指定するセグメント値、ページ領域176はページを指定するページ値、オフセット領域178はそのページ内におけるオフセット値を示す。
【0035】
アクセス要求コマンド162のうち、アドレス領域170については図6や図7に関連しても後述する。
【0036】
図3は、アクセス要求コマンドにより示された論理アドレスを物理アドレスに変換する過程を説明するための模式図である。
【0037】
このような変換処理はI/Oアクセス制御装置300において実行される。I/Oアクセス制御装置300は、アクセス要求コマンド162のアドレス領域170を抽出する。まず、セグメント値を抽出する。セグメント値に対して、予め定められたベース値が加算される。ベース値はOSにより割り当てられてもよいし、固定値であってもよい。このセグメント値に対するベース値の加算値が第1インデックス値となる。第1変換テーブル180は、第1インデックス値とページベース値を対応づけたデータテーブルである。第1変換テーブル180によりページベース値が特定される。
【0038】
第1変換テーブル180のうち、第1インデックス欄184は、第1インデックス値を示す。ページベース欄185は、ページサイズを示す。ページベース値欄186は、ページベース値を示す。第1変換テーブル180により特定されたページベース値にページ領域176のページ値が加算される。この加算値が第2インデックス値となる。
【0039】
第2変換テーブル182は、第2インデックス値とページ番号等を対応づけたデータテーブルである。第2変換テーブル182のうち、第2インデックス欄188は、第2インデックス値を示す。ページ番号欄190は、ページ番号を示す。IOID欄192は、各ページについてアクセスを許可されるべきDMAリクエスタをIOIDにより示す。また、アクセス条件欄194は、該当ページにおけるアクセス属性情報を示す。アクセス属性情報については、後述する。なお、第1変換テーブル180や第2変換テーブル182は、OSの特権ソフトウェアによって設定される。
【0040】
第2インデックス値により、アクセス先のページ番号が特定される。特定されたページについて、アクセス要求コマンド162から抽出されるIOIDと、IOID欄192のIOID値が一致すれば、当該ページに対するアクセスが許可される。アクセス許可されたとき、特定されたページのアドレスにオフセット値を加算して最終的に、具体的な物理アドレスが特定される。そして、アクセス条件欄194に示されるアクセス属性情報にしたがってアクセスが実行される。
【0041】
アクセス属性情報とは、管理空間に対するアクセス方法を条件付けるための情報であり、具体的には、以下のようなものがある。
1.アクセス順序の強制をするか否か
【0042】
通常、記録媒体に対するアクセスは必ずしもアクセス要求順に実行されるのではなく、メモリコントローラが実行しやすい順序でアクセスが実行される。このような処理方法は、一般にはアウトオブオーダー実行(Out of Order Execution)、あるいは、ウィークリーオーダー実行(Weakly Order Execution)とよばれている。アクセス条件欄194においては、アウトオブオーダー実行ではなく、アクセス要求順にしたがってアクセスすべきか否かを指定するための情報がアクセス属性情報として含まれる。アクセス順序が強制される設定のページの場合、そのページに対するアクセスは、すべてアクセス要求がなされた順に実行されるように処置される。このようにアクセス順序を強制する処理方法は、インオーダー実行(In Order Execution)、あるいは、ストリクトリィオーダー実行(Strictly Order Execution)とよばれる。アクセス順序の制御方法は、IOIDごとに設定可能である。たとえば、IOID=0022のDMAリクエスタが、ページAを介してある物理アドレスにアクセスし、IOID=0023のDMAリクエスタはページAとは異なるページBを介して同じ物理アドレスにアクセスするとする。ここで、第2変換テーブル182において、ページAからのアクセスはストリクトリィオーダー実行、ページBからのアクセスはアウトオブオーダー実行として設定すれば、同一の物理アドレスであっても、DMAリクエスタに応じて異なるアクセス順序制御が可能である。
2.キャッシュコヒーレンシ維持が必要か否か
【0043】
メインメモリ140のようないわゆる主記憶のデータは、キャッシュメモリを介してアクセスされる。キャッシュメモリは、PU112やSPU116に内蔵される。PU112やSPU116はメインメモリ140よりも高速アクセスが可能なキャッシュメモリを利用して処理を実行することもできる。キャッシュメモリに書き込まれたデータは、メインメモリ140に反映される。ただし、その反映のタイミングによっては、キャッシュメモリとメインメモリ140との間でデータが一致しない期間が発生する。
【0044】
外部からのアクセス要求に際し、キャッシュメモリのデータとメインメモリ140やローカルメモリ144のデータとの一貫性、いわゆるキャッシュコヒーレンシ(Cache Coherency)の維持が必要か否かを示す情報がアクセス属性情報として含まれる。
【0045】
キャッシュコヒーレンシ維持設定されたページの場合、たとえば、スヌープ方式(Cache Snooping)により、どのキャッシュメモリに最新のデータが存在するかを検知した上で、各キャッシュメモリが必要なときに最新データを取得できるように自身の状態を変更する。そのほかにも、ディレクトリ方式(Directory-based Protocol)や共有キャッシュ(Shared Cache)のような、既知の方法によりキャッシュコヒーレンシを維持してもよい。
3.ページに対する書込を許可するか否か
【0046】
該当ページに対して、READだけが許可されるか、READ/WRITE共に許可されるかを示す情報がアクセス属性情報として含まれる。
【0047】
図4は、管理空間とアクセス可否との関係を説明するための模式図である。
【0048】
DMAリクエスタのうち、画像処理用DMAC122のIOIDが「0021」、ディスプレイコントローラ126のIOIDが「0022」であるとして説明する。管理空間のうち、アクセス不能領域198とアクセス不能領域199は、画像処理用DMAC122もディスプレイコントローラ126もアクセス不可として設定されている領域である。これらの領域は、ローカルメモリ144にマップされているかもしれないし、メインメモリ140にマップされているかもしれない。IOID「0021」の画像処理用DMAC122は、アクセス可能領域196とアクセス可能領域201にアクセスできる。すなわち、第2変換テーブル182において、アクセス可能領域196とアクセス可能領域201にマッピングされているページについては、IOID欄192においてIOID「0021」が指定されている。
【0049】
第2変換テーブル182により特定されたページについてIOID「0021」が指定されているか否かを参照することにより、画像処理用DMAC122のアクセスが禁じられている領域へのアクセスを防ぐことができる。このように、情報処理装置100において各DMAリクエスタを一意に識別するIOIDをチェックする方法によって、管理空間にマップされているメインメモリ140やローカルメモリ144を不正アクセスから保護している。
【0050】
アクセス可能領域201は、IOID「0021」とIOID「0022」のそれぞれのDMAリクエスタについて、別々のページから2重にマッピングされている。一方のページAはIOID「0021」の画像処理側DMAC122からアクセスされ、他方のページBはIOID「0022」のディスプレイコントローラ126からアクセスされる。第2変換テーブル182において、ページAにはIOID「0021」が設定され、ページBにはIOID「0022」が設定されている。したがって、IOID「0021」の画像処理側DMAC122もIOID「0022」のディスプレイコントローラ126も、アクセス可能領域201へのアクセスを許可される。ただし、画像処理側DMAC122がアクセス可能領域201へアクセスするために介するページと、ディスプレイコントローラ126が同じくアクセス可能領域201にアクセスするためのページは別々である。このように、第2変換テーブル182には、管理空間についてページ単位でIOIDごとのアクセス可否が設定される。すなわち、管理空間についてページ単位でDMAリクエスタに応じたアクセス条件を設定できるため、不正アクセスを防止しやすくなっている。
【0051】
仮にIOID「0021」の画像処理側DMAC122について、セグメント値=100、ページ値=10、オフセット値=0であるとする。また、IOID「0022」のディスプレイコントローラ126について、セグメント値=200、ページ値=10、オフセット値=200であるとする。それぞれが指定するページは、共に、ページサイズが4KBで、アクセス可能領域201内の同じ物理アドレス「23450000」を指すとする。IOID「0021」の画像処理側DMAC122は物理アドレス=23450000をアクセス対象とし、IOID「0022」のディスプレイコントローラ126は、物理アドレス=23450200(=23450000+200)をアクセス対象とする。2つの異なるDMAリクエスタは、共に、アクセス可能領域201にアクセスを許可されることになる。
【0052】
変形例として、一つのページに対して、2つ以上のIOIDを設定できてもよい。たとえば、アクセス可能領域201にマッピングされているページAについて、IOID「0021」とIOID「0022」の両方がIOID欄192に設定されているとする。このとき、IOID「0021」の画像処理側DMAC122とIOID「0022」のディスプレイコントローラ126は、共に、ページAを介してアクセス可能領域201にアクセスできる。
【0053】
仮に、アクセス要求コマンド162が指定するアドレスが物理アドレスを直接指定するものであっても、IOIDによるチェックは有効に機能する。本実施例においては、アクセス要求コマンド162が指定するアドレスを物理アドレスを直接指定するものではない論理アドレスとし、独立したアドレス空間を使用できるため、さらに不正アクセスに対する堅牢性が向上する。
【0054】
なお、アクセス可能領域196に含まれるページであっても、アクセス属性情報として書込禁止設定されているアドレス領域に対しては、正当なIOIDをもつアクセス要求主体であっても書込処理は禁止されることはもちろんである。
【0055】
図5は、コマンド送信補助装置200の機能ブロック図である。
コマンド送信補助装置200は、コマンド送信部202、IOID/セグメントアドレス追加部204およびコマンド取得部206を含む。
【0056】
コマンド取得部206は、DMAリクエスタからコマンドを取得する。DMAリクエスタは、管理空間におけるアクセス先を指し示すアドレス(以下、「原アドレス」とよぶ)とREADまたはWRITEを示すコマンド、後述するDMAリクエスタID(以下、「DMARID」とよぶ)をコマンド取得部206に渡す。DMARIDとはDMAリクエスタを識別するためのIDであるが詳しくは後述する。コマンド取得部206は、コマンドと原アドレス、DMARIDを取得する。
【0057】
IOID/セグメントアドレス追加部204は、コマンド取得部206から、コマンド、原アドレス、DMARIDを受け取り、アクセス要求コマンド162を生成する。ここで、IOID/セグメントアドレス追加部204は、DMAリクエスタを特定するためのIOIDをアクセス要求コマンド162に追加する。また、後述するセグメントアドレスをも追加する。コマンド送信部202は、こうして、少なくともIOID、アクセス先の論理アドレス、コマンド、を含むアクセス要求コマンド162をI/Oアクセス制御装置300に対して送信する。コマンド送信部202は、アクセス要求コマンド162をI/Oアクセス制御装置300に送信する。
【0058】
図6は、IOID/セグメントアドレス追加部204の処理内容を示す模式図である。
IOID/セグメントアドレス追加部204は、UC_ADDR_TRANS_UARレジスタ250、マスクコントローラ252、変換部254、UC_ADDR_TRANS_TABLEレジスタ256を含む。
【0059】
DMAリクエスタが指定する原アドレスはコマンド取得部206を介してマスクコントローラ252に入力される。各DMAリクエスタにはDMARIDとよばれるIOIDとは異なるIDが付与されている。DMARIDは、コマンド送信補助装置200がDMAリクエスタを一意に識別できるIDであればよい。ただし、各DMAリクエスタのDMARIDは、製品のシステム構成や製造時期によって異なるかもしれない。たとえば、システム構成Aにおけるディスプレイコントローラ126のDMARIDは「10225」、システム構成Bにおけるディスプレイコントローラ126のDMAIDは「00452」かもしれない。また、同じシステム構成Aのディスプレイコントローラ126であっても、製造時期によってDMARIDは異なるかもしれない。これに対して、IOIDはディスプレイコントローラ126の種類や製造時期にかかわらず、ディスプレイコントローラ126を他のDMAリクエスタから識別するためのIDである。DMARIDはIOID変換テーブル260によりIOIDに変換される。システム構成Aのディスプレイコントローラ126もシステム構成Bのディスプレイコントローラ126も、IOID変換テーブル260により共にIOID「0022」に変換されてもよい。すなわち、IOIDは、情報処理装置100において、DMAリクエスタの種類を特定するIDである。IOID「0022」のDMAリクエスタとはディスプレイコントローラ126であるという対応付けは、OSにより設定可能である。
【0060】
統括制御部110のI/Oアクセス制御装置300は、先述したようにIOIDによって管理空間へのアクセス可否を判定する。I/Oアクセス制御装置300は、このIOIDの代わりにDMARIDをベースとしてアクセス可否判定してもよい。しかし、DMARIDをベースとしてアクセス制御するためには、I/Oアクセス制御装置300はDMAリクエスタとしてどのようなDMAリクエスタが導入されているか、どのようなDMARIDが登録されているかを知る必要がある。これに対して、本実施例のI/Oアクセス制御装置300は、あらかじめDMAリクエスタの種類に対応づけられたIOIDをベースとして動作するため、そのIOIDによって特定されるDMAリクエスタが具体的にどのような製品であるかについて関知する必要がない。いわば、IOIDは情報処理装置100においてグローバルに特定されるIDである。IOID変換テーブル260は、さまざまなDMARIDをIOIDに変換するためのテーブルである。IOID変換テーブル260により、アクセス要求コマンド162の受信側である統括制御部110からみたシステム構成を抽象化できる。IOID変換テーブル260の変換規則はUC_ADDR_TRANS_TABLEレジスタ256を介してOSの特権ソフトウェアにより設定可能である。したがって、UC_ADDR_TRANS_TABLEレジスタ256によりIOID変換テーブル260を設定変更するだけで、システムの構成変更に対応できる。
【0061】
同様にして、セグメント選択テーブル262ではDMARIDに基づいて8ビットのセグメントアドレス(SEG_ADDR)が選択される。マスク変換テーブル264では、5ビットのDMARIDに基づいて4ビットのマスクビット(MA_MASK)が選択される。特権ソフトウェアはUC_ADDR_TRANS_TABLEレジスタ256を介してセグメント選択テーブル262やマスク選択テーブル264の値を設定できる。IOID変換テーブル260により変換されたIOIDは、先述のようにアクセス要求コマンド162の一部となる。8ビットのSEG_ADDR、4ビットのMA_MASK、DMAリクエスタが元々指定していたアクセス先の32ビットの原アドレス(ADDR)、UC_ADDR_TRANS_UARレジスタ250の28ビットの設定値がマスクコントローラ252に入力される。マスクコントローラ252は、次の図7に示す処理方法により、64ビットの中間アドレス(INT_ADDR)を生成する。IOID/セグメントアドレス追加部204は、このINT_ADDRに11ビットのIOIDとコマンドを追加してアクセス要求コマンド162を生成する。
【0062】
図7は、中間アドレス(INT_ADDR)の生成方法を示す模式図である。
中間アドレス(INT_ADDR)は64ビットであり、第0ビットから第27ビットまでにはUC_ADDR_TRANS_UARレジスタ250から出力された設定値となる。特権ソフトウェアはUC_ADDR_TRANS_UARレジスタ250も設定可能である。第28ビットから第31ビットまでの4ビットは、SEG_ADDRの上位4ビットである。第36ビットから第63ビットまでの28ビットはADDRの下位28ビットである。第32ビットから第35ビットまでは、ADDRの上位4ビットとMA_MASKの論理積である4ビット値にSEG_ADDRの下位4ビットを論理和したものである。こうして、計64ビットの中間アドレスが生成される。本実施例においては、中間アドレス(INT_ADDR)の第0ビットから第27ビットまでは予約領域であり、第28ビットから第63ビットまでがアドレス領域170となる。
【0063】
図8は、中間アドレス(INT_ADDR)のうち、アドレス領域170におけるセグメント、ページ、オフセットの関係を示す図である。
【0064】
ページサイズが4KBのときには、ページアドレス幅は16ビットとなり、ページ数は65536となる。ページサイズが64KBのときには、ページアドレス幅は12ビットとなり、ページ数は4096となる。ページサイズが1MBのときには、ページアドレス幅は8ビットとなり、ページ数は256となる。ページサイズが16MBのときには、ページアドレス幅は4ビットとなり、ページ数は16となる。使用されるページサイズは、第1変換テーブル180のページサイズ欄185によって決まる。このように、アクセス要求コマンド162においては複数のページサイズをサポートできる。
【0065】
図9は、I/Oアクセス制御装置300の機能ブロック図である。
I/Oアクセス制御装置300は、コマンド受信部302、アクセス判定部304、アドレス変換部306、キャッシュ処理部308、部分情報保持部310およびアクセス処理部312を含む。
【0066】
コマンド受信部302は、コマンド送信補助装置200から送信されたアクセス要求コマンド162を受信する。キャッシュ処理部308は、アドレス情報保持部314から図3に示した第1変換テーブル180や第2変換テーブル182の一部のデータを部分情報保持部310にロードする。
【0067】
アドレス情報保持部314は、メインメモリ140の一部として構成されてもよい。また、部分情報保持部310は、アドレス情報保持部314よりも高速にアクセスが可能な内蔵キャッシュメモリとして構成されてもよい。以下、アドレス情報保持部314に保持される第1変換テーブル180や第2変換テーブル182のことを、まとめて「アドレス変換テーブル」とよぶ。また、部分情報保持部310にロードされるアドレス変換テーブルの一部のことをアドレス変換テーブルと区別するために「部分変換テーブル」とよぶ。
【0068】
キャッシュ処理部308による部分情報保持部310とアドレス情報保持部314の間のデータ転送操作のことを「リフィル(Refill)」ともよぶ。
【0069】
アドレス変換部306は、部分情報保持部310に保持されている部分変換テーブルを参照して、論理アドレスを物理アドレスに変換する。変換方法については、図3に示した通りである。部分情報保持部310に保持される部分変換テーブルにおいて、論理アドレスを物理アドレスに変換するためのデータが含まれていないときには、キャッシュ処理部308は、該当部分を含む部分変換テーブルをアドレス情報保持部314から部分情報保持部310に新たにリフィルする。アドレス変換により特定された物理アドレスは、アクセス処理部312やアクセス判定部304に通知される。
【0070】
アクセス判定部304は、アドレス変換部306において特定されたページについて、IOIDが一致するか、すなわち、アクセスが可能な領域であるか否かを判定する。判定結果は、アクセス処理部312に通知される。アクセス処理部312は、アクセス判定部304によりアクセス許可されたことを条件として、アドレス変換部306から通知された物理アドレスに対して指定されたコマンドにより管理空間へのアクセスを実行する。このとき、アクセス判定部304は、ページについて指定されたアクセス属性情報にしたがって、アクセスを実行する。アクセス処理部312のアクセス先は、メインメモリ140やローカルメモリ144など、PU112の管理空間にマップされている記録媒体である。
【0071】
アクセス処理部312は、さまざまなDMAリクエスタのアクセス要求のうち、有効なものをキューに保持する。アクセス処理部312は、キューからアクセス要求を順次取り出して管理空間へのアクセスを実行する。アクセス処理部312は、DMAリクエスタAによるメインメモリ140へのアクセスを実行しているときに、DMAリクエスタBによるローカルメモリ144へのアクセスを実行することもできる。このようにアクセス処理部312は、複数のDMAリクエスタによる複数種類のアクセスを並列実行することができる。
【0072】
なお、I/Oアクセス制御装置300は、アドレス情報保持部314に相当する部分を含んで構成されてもよい。
【0073】
図10は、I/Oアクセス制御装置300によるアクセス制御過程を示すフローチャートである。
コマンド受信部302は、受信したアクセス要求コマンド162からIOIDを抽出する(S10)。アドレス変換部306は、論理アドレスを物理アドレスに変換する(S12)。アクセス判定部304は、アクセス要求コマンド162のIOIDが、第2変換テーブル182において特定されたページのIOIDと一致するか判定する(S14)。一致すれば(S14のY)、アクセス処理部312はアクセス属性情報にしたがって、管理空間へのアクセスを実行する(S16)。一致しなければ(S14のN)、アクセス処理部312は送信元のコマンド送信補助装置200に対してエラーを通知する(S20)。エラー通知は、OSに対してエラーメッセージとしてイベント通知されてもよい。この場合には、アクセスは拒否される。
【0074】
図11は、ユーザプロセスとDMAリクエスタ、デバイスドライバの一般的な関係を示す模式図である。
PU112やSPU116上で実行されるユーザプロセスは、その実行過程においてさまざまなDMAリクエスタを制御する。ユーザプロセスはDMAリクエスタに対してさまざまなデータを転送し、DMAリクエスタもユーザプロセスに対してさまざまなデータを転送する。こういったデータ転送のため、メインメモリ140には、転送対象となるデータを一時的に置くための領域が確保される。このような領域に対応するメモリ空間が「DMAアドレス空間」である。DMAアドレス空間は、管理空間の一部である。
【0075】
一般的な構成におけるユーザプロセスは、DMAアドレス空間に直接アクセスできない。デバイスドライバ以上に多種多様なユーザプロセスが、DMAアドレス空間へ直接アクセスすると、1つのユーザプロセスの不正動作が情報処理装置100全体の動作安定性に対して深刻な影響を及ぼすためである。たとえば、ユーザプロセスAがDMAリクエスタaにデータDを送るため、DMAアドレス空間の所定領域にデータDを書き込み、転送を指示したとする。しかし、このユーザプロセスAが誤って、DMAリクエスタbに対応づけられたDMAアドレス空間の領域にデータDを書き込んでしまうと、DMAリクエスタbが不正なデータに基づいて動作してしまう。ユーザプロセスの設計がしっかりしていればこのような問題は起こらないが、膨大なユーザプロセス全ての動作を検証することは現実的ではない。
【0076】
このため、一般的なユーザプロセスは、デバイスドライバを介して、DMAアドレス空間に間接的にアクセスする。OSと一体となって動作するデバイスドライバであれば、ユーザプロセスはOSを経由してDMAアドレス空間にアクセスすることになる。デバイスドライバまでもが不正動作をしてしまうと同じ問題が生じるが、情報処理装置100に導入されるデバイスドライバの種類は情報処理装置100で実行され得るユーザプロセスの種類に比べると格段に少ないので、管理しやすい。更に、上述したように、デバイスドライバのDMAアドレス空間へのアクセスをIOIDによって厳密に管理すれば、DMAアドレス空間に対する不正アクセスをいっそう防止しやすくなる。
【0077】
一般的なDMA転送の仕組みをより具体的に説明すると以下のとおりである。ユーザプロセスがデバイスドライバにDMA転送を依頼する。このとき、ユーザプロセスは、メモリ上に送信データを置き、そのアドレスをデバイスドライバに通知する。デバイスドライバは、該当アドレスから送信データを取得し、DMAリクエスタ制御用のレジスタを操作し、DMA転送を実行する。転送結果を示す結果データは、メモリの所定領域(以下、「DMA転送データ領域」とよぶ)に一時的に保存される。そのあと、デバイスドライバは、この結果データを、ユーザプロセスにマッピングされている所定のメモリ領域にコピーする。DMA転送において主要な役割を果たすデバイスドライバは特権レベルで動作するため、デバイスドライバの誤動作はOSや他のユーザプロセスのデータにも悪影響を及ぼす可能性がある。そこで、先述したIOIDの仕組みにより、デバイスドライバからメモリへのアクセスを管理することにより、このような問題に対処している。
【0078】
ユーザプロセスがデバイスドライバを介してDMAアドレス空間に間接的にアクセスするという一般的な設計は、情報処理装置100の動作安定性という面からは好ましいが、反面、動作効率という点では必ずしも最適とはいえない。ユーザプロセスがDMAリクエスタを制御するとき、常に、デバイスドライバやOSに一時的に制御権が移るため、このためのオーバヘッドが発生してしまうためである。特に、デバイスドライバが結果データをDMA転送データ領域から他のメモリ領域にコピーするときのオーバーヘッドや、コンテキストスイッチ発生時のオーバーヘッドが大きい。ユーザプロセスが、デバイスドライバ等を介さずにDMAリクエスタにデータ転送する方が、動作効率の面からは好ましい。
このためには、ユーザプロセスがDMAアドレス空間に直接アクセスできるとしても、不正なアクセスを未然に防止する仕組みが必要である。図12以降においては、このような仕組みについて説明する。
【0079】
なお、本実施例における情報処理装置100のように、1つのPU112と複数のSPU116を含む、いわゆるマルチコアシステムにおいて、OSやデバイスドライバといった基幹ソフトウェアを実行するのはPU112である。このような構成においては、デバイスドライバの介在にともなうオーバヘッドの影響が特に顕在化しやすい。たとえば、ユーザプロセスAがSPU116a、ユーザプロセスBがSPU116b上にて同時並行実行されているとする。ここで、ユーザプロセスAがデータDaをDMAリクエスタa、ユーザプロセスBがデータDbをDMAリクエスタbにそれぞれDMA転送しようとしたとする。このときには、ユーザプロセスAとユーザプロセスBは共にPU112のデバイスドライバ群に処理を依頼することになり、PU112において各依頼がシリアライズされてしまう。複数のSPU116が複数のユーザプロセスを同時並行実行しても、複数のユーザプロセスがデバイスドライバを必要とする頻度が高くなると、PU112がボトルネックとなりかねない。この結果、折角のマルチコアとしての優位性が好適に発揮されなくなる。このあたりの問題点については、図15に関連して後に詳述する。本実施例の情報処理装置100のようなマルチコアシステムの場合、SPU116上のユーザプロセスがデバイスドライバを介さずに、いいかえれば、PU112に頼らずに独自にDMAアドレス空間にアクセスできれば、全体としての処理性能を特に向上させやすい。
【0080】
図12は、ユーザプロセスとDMAリクエスタ、デバイスドライバの本実施例における関係を示す模式図である。
本実施例においては、ユーザプロセスはDMAリクエスタ専用の論理アドレス空間(以下、「DMAリクエスタ空間」とよぶ)に直接アクセスできる。ユーザプロセスには、互いに独立した論理アドレス空間が割り当てられる。この論理アドレス空間の一部は、DMAアドレス空間にマッピングされる。DMAアドレス空間は、通常、メインメモリ140上に形成される物理アドレス領域である。DMAアドレス空間は、更に、DMAリクエスタ空間にマッピングされる。いわば、DMAアドレス空間に対して、DMAリクエスタのためのDMAリクエスタ空間およびユーザプロセスのための論理アドレス空間が2重にマッピングされる。ユーザプロセスは、論理アドレスを指定することにより、デバイスドライバやOSなどの他のソフトウェアを介することなく、直接、DMAアドレス空間を介してDMAリクエスタ空間にアクセスできることになる。DMAアドレス空間を介してDMAリクエスタにデータを直接転送できる。このため、PU112の動作状況に左右されることなく、各SPU116上の各ユーザプロセスが複数のDMAリクエスタに対して同時並行的にDMA転送できる。
【0081】
より具体的には、ユーザプロセスはローカルメモリ144の所定領域に転送したいデータDを書き込む。この領域はメインメモリ140上のDMAアドレス空間にマッピングされている。SPU116に内蔵されているDMACは、データDをこのDMAアドレス空間に転送する。DMAリクエスタは、アクセス要求コマンドにより、DMAアドレス空間からデータDを読み出す。このときにはメモリアクセス制御装置300によるIOIDのチェックにより、該当するDMAリクエスタによる読み出しのみが許可される。
【0082】
DMAリクエスタは、受け取ったデータDに基づいて所定の処理を実行し、アクセス要求コマンドによって処理結果を示すデータRをメインメモリ140のDMAアドレス空間に書き込む。DMAリクエスタによる書き込み動作はIOIDによってチェックされる。SPU116のDMACは、メインメモリ140のDMAアドレス空間からローカルメモリ144にデータRをDMA転送させる。こうして、ユーザプロセスはデータRを取得する。
【0083】
図13は、ユーザプロセスの論理アドレス空間とDMAアドレス空間のマッピングを示す模式図である。
DMAリクエスタ空間325は、あるDMAリクエスタaのDMA転送用領域のアドレス(原アドレス)により形成されるアドレス空間を示す。物理アドレス320は、管理空間の物理アドレスを示す。管理空間は、各種レジスタやローカルメモリ144、メインメモリ140の集合として形成される物理アドレス空間であり、その一部はDMAアドレス空間を形成する。論理アドレス322、324は、それぞれ、ユーザプロセスAの論理アドレス、ユーザプロセスBの論理アドレスを示す。
【0084】
CPU・MMU設定レジスタ326として示される物理アドレス範囲は、論理アドレス322と物理アドレス320のマッピングや、論理アドレス324と物理アドレス320のマッピングを設定するためのレジスタに対応する。CPU・MMU設定レジスタ326は、各SPU116やPU112に内蔵される。図14に関連して後述する。
【0085】
IOID・MMU設定レジスタ328として示される物理アドレス範囲は、DMAリクエスタ空間325と物理アドレス320、いいかえれば、DMAリクエスタ空間325とDMAアドレス空間の対応を設定するためのレジスタに対応する。具体的には、図6のUC_ADDR_TRANS_UARレジスタ250やUC_ADDR_TRANS_TABLEレジスタ256が該当する。IOID・MMU設定レジスタ328は、メモリアクセス制御装置300にも内蔵される。
これらのレジスタの値は、OS、より詳しくはハイパーバイザーにより設定される。また、CPU・MMU設定レジスタ326やIOID・MMU設定レジスタ328にアクセスできるのはOSなどの特権レベルソフトウェアのみである。
【0086】
DMAリクエスタ設定レジスタ330は、ユーザプロセスがDMAリクエスタを制御するためのパラメータを書き込むためのレジスタである。デバイスドライバは、DMAリクエスタ設定レジスタ330のパラメータにしたがって、各DMAリクエスタを制御する。
【0087】
データ領域332は、DMAリクエスタとやりとりするためのデータを記憶するための領域である。DMAリクエスタ設定レジスタ330とデータ領域332によりDMAアドレス空間が形成される。
【0088】
同図において、データ領域332はm0〜m3の4つの領域を含む。これらの領域は、IOID・MMU設定レジスタ328により、DMAリクエスタアドレス326におけるd0〜d3の4つの領域と対応づけられる。DMAリクエスタは、原アドレスによりd0〜d3のいずれかをアクセス先として設定したアクセス要求コマンドを発行する。このとき、DMAリクエスタは、DMARIDと原アドレスをコマンド送信補助装置200に送る。コマンド送信補助装置200は、IOID変換テーブル260により、DMARIDをIOIDに変換する。また、IOID・MMU設定レジスタ328の設定にしたがって、原アドレスを中間アドレスに変換する。中間アドレスは、メモリアクセス制御装置300において、アクセス先となるDMAアドレス空間のアドレス、すなわち、メインメモリ140における物理アドレスに変換される。d0〜d3のアドレスをm0〜m4のいずれかのアドレスに変換することにより、管理空間における物理アドレスが特定される。メモリアクセス制御装置300は、IOIDをチェックすることにより、該当するm0〜m3へのアクセス可否を判定する。m0〜m3以外の領域へのアクセスは許可されない。
【0089】
一方、CPU・MMU設定レジスタ326により、ユーザプロセスAの論理アドレス空間における領域u10とu11は、それぞれ、物理アドレス320におけるm2とm1にマッピングされている。同様に、ユーザプロセスBの論理アドレス空間における領域u20とu21は、それぞれ、物理アドレス320におけるm0とm3にマッピングされている。
【0090】
なお、ユーザプロセスAやユーザプロセスBによりアクセス対象となるDMAアドレス空間とOSによりアクセス対象となるDMAアドレス空間は別領域となっている。いいかえれば、物理アドレス320においてユーザプロセスからのアクセス対象となり得る領域と、OSからのアクセス対象となり得る領域(以下、「OS領域」とよぶ)は分離されている。このため、ユーザプロセスのDMAリクエスタに対する不正動作が発生しても、OSは独自にDMAリクエスタを制御できる。また、DMAリクエスタは、OS領域の全部または一部へのアクセスが禁止されている。これは、たとえば、先述したIOIDの仕組みにより実現される。このような設計によれば、DMAリクエスタの不正動作により、OS領域のデータが破壊され、OSの挙動がDMAリクエスタにより不安定化するのを防ぐことができる。
【0091】
本実施例における処理内容をより具体的にまとめると、以下の通りである。すなわち、特権レベルのソフトウェア、たとえば、OSがDMAリクエスタ設定レジスタ330を論理アドレス322、324等にマッピングする。これにより、ユーザプロセスは、MMUの仕組みを介して、DMAリクエスタ設定レジスタ330にアクセス可能となる。そして、特権レベルのソフトウェアであるOSは、データ領域332に対してDMAリクエスタ空間325をマッピングし、更に、同データ領域332に対して論理アドレス322、324等をマッピングする。こうして、データ領域332は、ユーザプロセスの論理アドレスとDMAリクエスタのDMAリクエスタ空間325の双方からマッピングされることになる。ユーザプロセスは、DMAリクエスタ設定レジスタ330を操作し、DMA転送を実行する。結果データはデータ領域332に置かれる。このように、いったんマッピングが完了すれば、ユーザプロセスはデバイスドライバの仲介を要することなく、DMA転送を自ら実行できる。
【0092】
仮に、ユーザプロセスがDMAリクエスタに誤った指示を出しても、DMAリクエスタのメモリアクセスはIOIDにより厳密に管理されるため、ユーザプロセス主体のDMA転送であってもシステム全体としての堅牢性を担保できる。また、デバイスドライバを介さないDMA転送であるため、図11に関連して説明した一般的な方法に比べてオーバーヘッドを低減できる。さまざまなサードパーティが高効率なユーザプロセスを作成しやすくなり、かつ、システム全体としての安定性を確保しやすい構成となる。
【0093】
図14は、情報処理装置100におけるDMA転送を説明するための模式図である。
PU112やSPU116、そして、これらにおいて実行されるOSやデバイスドライバ、ユーザプロセスが、「プロセス制御装置」として機能する。また、このプロセス制御装置と、メモリアクセス制御装置300により、「メモリアクセス制御システム」が形成されている。
【0094】
DMA転送は、(1)DMAリクエスタ336とDMAアドレス空間の間でのDMA転送と、(2)ユーザプロセスとDMAアドレス空間の間でのDMA転送の2種類の分けることができる。
(1)DMAリクエスタ336とDMAアドレス空間の間でのDMA転送
【0095】
たとえば、DMAリクエスタ336aは、DMARIDと原アドレスをコマンド送信補助装置200に送る。コマンド送信補助装置200は、IOID変換テーブル260により、DMARIDをIOIDに変換する。また、IOID・MMU設定レジスタ328の設定にしたがって、原アドレスを中間アドレスに変換する。中間アドレスは、メモリアクセス制御装置300において、アクセス先となるDMAアドレス空間のアドレス、すなわち、メインメモリ140における物理アドレスに変換される。DMAリクエスタ336aは、グラフィックスメモリ128等に保持されているデータを、メインメモリ140の該当物理アドレスに宛ててDMA転送する。こうして、DMAリクエスタ336aは、データをメインメモリ140のデータ領域332に送る。
(2)ユーザプロセスとDMAアドレス空間の間でのDMA転送
【0096】
SPU116で実行されるユーザプロセスは、DMA転送の宛先を示す論理アドレスをSPU116に内蔵されるMMU334に通知する。MMU334は、CPU・MMU設定レジスタ326を内蔵する。CPU・MMU設定レジスタ326は、論理アドレスとDMAアドレス空間の物理アドレスの対応関係を定めるマッピングテーブルが登録されている。MMU334は、「プロセス制御装置」の「アドレス変換部」として機能する。また、このマッピングテーブルを登録するOSは、「プロセス制御装置」の「マッピング部」として機能する。
【0097】
論理アドレスを通知されると、MMU334は、OSにより設定されたマッピングテーブルを参照し、論理アドレスをDMAアドレス空間の物理アドレスに変換する。そして、SPU116の図示しないDMACは、該当物理アドレスに宛ててDMA転送を実行する。こうして、ユーザプロセスは、デバイスドライバを介さずに、メインメモリ140上に形成されるDMAアドレス空間にDMA転送する。
【0098】
たとえば、図13に示したユーザプロセスAが、領域u10の論理アドレスをMMU334に通知し、転送したいデータDを送出すると、MMU334のアドレス変換機能により、このデータDは、DMAアドレス空間のm2に転送される。m2はメインメモリ140上の領域である。領域m2は、DMAリクエスタaのd3に対応づけられているため、DMAリクエスタaはd3を対象とするデータDの書き込みを検出すると、アドレスd3を指定して、データDを読み出すためのアクセス要求コマンドを発行する。こうして、DMAリクエスタaはデータDを取得する。
【0099】
また、DMAリクエスタaが処理結果を示すデータRの送信先をd2に設定し、書き込み指定のアクセス要求コマンドを発行すると、コマンド送信補助装置200は、IOIDをチェックした上で、データRをDMAアドレス空間のm1に転送する。領域m1は、ユーザプロセスAの論理アドレス空間において領域u11に対応づけられているため、SPU116等に内蔵されるDMACが領域m1への書き込みを検出すると、該当するユーザプロセスAにイベント通知する。ユーザプロセスAは、m2からデータRを取得する。
【0100】
図15は、マルチOS環境におけるユーザプロセスとDMAリクエスタ、デバイスドライバの一般的な関係を示す模式図である。
同図においては、ハイパーバイザ上において、OSAとOSBという2つのOSが実行されている。ハイパーバイザは特権ソフトウェアであり、PU112にて実行される。ハイパーバイザは、時分割方式にて、OSAとOSBを定期的にコンテキストスイッチさせる。OSAの実行時にはデバイスドライバAやユーザプロセスAが実行され、OSBの実行時にはデバイスドライバBやユーザプロセスBが実行される。したがって、ユーザプロセスがデバイスドライバを介してしかDMA転送をできない一般的な設計の場合、OSAからOSBへのコンテキストスイッチが発生すると、ユーザプロセスAはデバイスドライバAを使えなくなってしまうため、DMA転送を実行できなくなる。
【0101】
ユーザプロセスAがデバイスドライバAを使ってDMA転送を実行している最中に、OSAからOSBへのコンテキストスイッチさせる場合には、ハイパーバイザはDMA転送が完了するのを待たなければならない。
【0102】
DMA転送に際し、ユーザプロセスはまず、自らが依拠するOS上で動作しているデバイスドライバに処理を依頼する。ユーザプロセスAであれば、まず、デバイスドライバAに処理を依頼する。ここで、ハイパーバイザには、「仮想デバイスドライバ」が実装されている。この仮想デバイスドライバは、一のDMAリクエスタに対する複数のアクセス要求を調停する。たとえば、OSA上のユーザプロセスAとOSB上のユーザプロセスBが同時にDMAリクエスタaを使用しようとする状況において、各ユーザプロセスからアクセス要求をシリアライズすることにより、複数のユーザプロセスが同時に一つのDMAリクエスタにアクセスするのを防ぐ。
【0103】
このように、マルチOS環境下においてユーザプロセスがデバイスドライバを介してDMAリクエスタにアクセスするための一般的なモデルにおいては、仮想デバイスドライバの構築が必要となる。OSA上のユーザプロセスAとOSB上のユーザプロセスBが、別々のDMAリクエスタを同時に使用したいという状況であっても、必ず仮想デバイスドライバがユーザプロセスAやBのアクセス要求をいったん受け取るため、仮想デバイスドライバの存在がボトルネック、ひいては、オーバーヘッドの源となる。また、OSをスイッチするときにも、仮想デバイスドライバのコンテキストスイッチによるオーバーヘッドが発生する。
【0104】
図16は、マルチOS環境におけるユーザプロセスとDMAリクエスタ、デバイスドライバの本実施例における関係を示す模式図である。
同図においても、ハイパーバイザ上において、OSAとOSBという2つのOSが実行されている。ただし、図12と同様、ユーザプロセスはデバイスドライバを介さずにDMAアドレス空間にアクセスできる。OSAの実行時にはデバイスドライバAやユーザプロセスAが実行され、OSBの実行時にはデバイスドライバBやユーザプロセスBが実行される。ユーザプロセスAは、デバイスドライバAを介さずにDMA転送を実行できるため、OSAからOSBへのコンテキストスイッチが発生すると、ユーザプロセスAはデバイスドライバAを使えなくなってしまうが、DMA転送を継続できる。
【0105】
ユーザプロセスAがデバイスドライバAを使わずにDMA転送を実行している最中に、OSAからOSBへのコンテキストスイッチさせる場合には、ハイパーバイザはDMA転送が完了するのを待たなくてもよい。このため、SPU116a上のユーザプロセスAによるDMAリクエスタaに対してのDMA転送とSPU116b上のユーザプロセスBによるDMAリクエスタnに対してのDMA転送を同時並行的に実行することも可能である。
【0106】
より具体的には、ハイパーバイザはIOIDを管理する機能(以下、「IOID管理ドライバ」とよぶ)を備える。このIOID管理ドライバは、先述した通りの方法にて、各OSのデバイスドライバにIOIDを割り当てておく。DMA転送に際し、ユーザプロセスはまず、自らが依拠するOS上で動作しているデバイスドライバに処理を依頼する。各OSのデバイスドライバは、別OSの動作に関わらず、IOIDで許可された範囲でDMAリクエスタを操作できる。ハイパーバイザは、たとえばシステム起動時に、あるDMAリクエスタd1とあるユーザプロセスu1を同じデータ領域332にマッピングしておく。この初期設定をしておけば、以後、このユーザプロセスu1とDMAリクエスタd1はデバイスドライバやOSを介さずにDMA転送を直接実行できる。また、別のユーザプロセスu2がこのDMAリクエスタd1の使用を要求したときには、ハイパーバイザはDMAリクエスタd1がマッピングされているデータ領域332に対して、ユーザプロセスu2をマッピングすればよい。
【0107】
このようなモデルによれば、OSAのユーザプロセスAとOSBのユーザプロセスBが同一のDMAリクエスタを使用する場合であっても、IOIDの仕組みにより互いの操作権限を明確に管理できるため、仮想デバイスドライバが不要となる。したがって、仮想デバイスドライバを原因とするオーバーヘッドを排除できる。また、OSA上のユーザプロセスAとOSB上のユーザプロセスBが、別々のDMAリクエスタを同時に使用したいという状況において、ユーザプロセスAやBのアクセス要求を同時並行実行できる。このため、マルチコアシステムにおいてその並列性をいっそう高めることができる。更に、OSのスイッチに際してもIOID・MMU設定レジスタ328やIOID変換テーブル260等の書き換えは不要である。
【0108】
以上、本実施例に示す方法によれば、I/Oアクセス制御装置300にてDMAリクエスタをIOIDによって一元的に管理できる。そのため、I/Oアクセス制御装置300は、外部のDMAリクエスタからの不正なアクセスを未然に防止することができる。情報処理装置100に導入されているDMAリクエスタが、どのような製品で、どのようなポリシにてDMARIDを設定されていても、コマンド送信補助装置200は、管理下のDMAリクエスタに対して一意なIOIDを付加できる。図6に関連して説明したように特権ソフトウェアを介して、IOIDやSEG_ADDR、MA_MASKを任意に設定可能である。そのため、I/Oアクセス制御装置300は、外部にどのようなDMAリクエスタが存在しても、アクセス要求コマンド162のIOIDを参照することにより、各DMAリクエスタを統合管理できる。
【0109】
このような処理方法によれば、特権ソフトウェアがDMAリクエスタを制御するデバイスドライバをコントロール下におくことができる。従来の、カーネル層とユーザ層という2階層OSモデルの場合、デバイスドライバはユーザ層よりも下位層に位置するため、物理アドレスを直接指定して記憶領域にアクセスしていた。これに対して、本実施例のような3階層モデルであれば、論理アドレスにより管理空間にアクセスすることになる。デバイスドライバが直接記憶領域にアクセスするのではなく、特権ソフトウェアとは異なるソフトウェア階層で動作するためである。特権ソフトウェアは、カーネル層で動作するOSの種類に応じて、アドレス領域170の論理アドレスを設定する。たとえば、カーネル層の上で、OS−AとOS−Bが動作するとする。OS−A動作時においては、特権ソフトウェアはOS−Aに対応してアドレス情報保持部314の第1変換テーブル180や第2変換テーブル182変換部254の各テーブルを設定し、OS−B動作時においては、OS−Bに対応して設定してもよい。このようなマルチOS環境において、DMAリクエスタが指定する論理アドレスをOSに応じて異なる物理アドレスに変換することができる。
【0110】
デバイスドライバのプログラマにとっても、開発効率が向上するメリットがある。デバイスドライバなどI/Oデバイス160を制御するためのプログラムを作成するときには、論理アドレスを使用し、更に、IOIDというスキームにしたがっていれば、他のソフトウェアから独立していて、かつ、抽象化された環境が提供されるため、開発負担が軽減される。
【0111】
また、特権ソフトウェアが、第1変換テーブル180、第2変換テーブル182を設定すると、ページ単位で、IOIDによるアクセス可否や、アクセス属性情報によるアクセス条件を管理できるので、I/Oアクセス制御装置300にてきめ細かく管理空間のアクセス方法を制御できる。
【0112】
近年、商業用プログラムは多くのプログラマ、あるいは、多くのサードパーティから提供されるソフトウェアモジュールの集合体となっており、メモリに対するアクセス制御についてはますます精密な設計が必要となってきている。そのため、本実施例にて示した方法は、このような要請を解決する上で有効である。
【0113】
また、デバイスドライバが論理アドレスを使用できるため、ユーザ層のソフトウェアが確保した物理アドレス上ではページ単位では不連続だが、論理アドレス上では連続しているデータ転送用の領域に対して、DMAリクエスタがダイレクトに連続してデータ転送を行うことができる。
【0114】
従来の方法においては、DMAリクエスタは物理アドレスのみを使用できるため、データ転送用の領域がページ単位としては物理アドレス上において不連続であった場合、DMAのデータ転送をこの不連続領域にあわせて区切る必要があった。あるいは、あらかじめDMAリクエスタが使用するデータ転送用の領域については物理アドレスが連続となるように、OSが領域管理する必要があった。
【0115】
さらに、アドレス変換テーブルとして示した第1変換テーブル180や第2変換テーブル182は、IOIDによるアクセス可否判定やアクセス方法を決定づけるアドレス属性情報を含むことにより、アドレス変換や、アクセス可否判定などの各処理を効率的に実行できる。なぜならば、リフィルされた部分変換テーブルにおいてアドレス変換に必要なデータが含まれていれば、その部分変換テーブルによってアクセス可否判定やアクセス条件の特定といった処理が可能だからである。
【0116】
また、ユーザプロセスは、デバイスドライバ等の他のソフトウェアを介することなく、直接DMA転送を制御できる。このため、ユーザプロセスによるDMA転送を高速化できる。どのユーザプロセスがDMAアドレス空間のどの領域にアクセスしてよいかは、OSによりMMU334等に設定される。この設定により、ユーザプロセスのDMAアドレス空間へのアクセス範囲を限定し、情報処理装置100全体としての動作安定性を担保している。まとめると、CPUの特権レベルで動作するデバイスドライバを使用することなく、ユーザプロセスがDMA転送を直接制御できながら、システム全体としての堅牢性を維持できる。特に、マルチコアシステムにおいては、ユーザプロセスが独自にDMA転送を実行することにより、複数のDMA転送の並行実行が可能となる。また、複数OSの使用時においても、IOIDに基づく仕組みにより、仮想デバイスドライバを構築することなく、安全かつ低オーバヘッドにてDMA転送を実現できる。
【0117】
以上、本発明を実施例をもとに説明した。この実施例はあくまで例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【図面の簡単な説明】
【0118】
【図1】情報処理装置の機能ブロック図である。
【図2】アクセス要求コマンドのデータ構造図である。
【図3】アクセス要求コマンドにより示された論理アドレスを物理アドレスに変換する過程を説明するための模式図である。
【図4】管理空間とアクセス可否との関係を説明するための模式図である。
【図5】コマンド送信補助装置の機能ブロック図である。
【図6】IOID/セグメントアドレス追加部の処理内容を示す模式図である。
【図7】中間アドレス(INT_ADDR)の生成方法を示す模式図である。
【図8】中間アドレス(INT_ADDR)のうち、アドレス領域におけるセグメント、ページ、オフセットの関係を示す図である。
【図9】I/Oアクセス制御装置の機能ブロック図である。
【図10】I/Oアクセス制御装置によるアクセス制御過程を示すフローチャートである。
【図11】ユーザプロセスとDMAリクエスタ、デバイスドライバの一般的な関係を示す模式図である。
【図12】ユーザプロセスとDMAリクエスタ、デバイスドライバの本実施例における関係を示す模式図である。
【図13】ユーザプロセスの論理アドレス空間とDMAアドレス空間のマッピングを示す模式図である。
【図14】情報処理装置におけるDMA転送を説明するための模式図である。
【図15】マルチOS環境におけるユーザプロセスとDMAリクエスタ、デバイスドライバの一般的な関係を示す模式図である。
【図16】マルチOS環境におけるユーザプロセスとDMAリクエスタ、デバイスドライバの本実施例における関係を示す模式図である。
【符号の説明】
【0119】
100 情報処理装置、 110 統括制御部、 112 PU、 116 SPU、 118 バス、 120 画像処理部、 122 画像処理側DMAC、 124 制御ブロック、 126 ディスプレイコントローラ、 128 グラフィックスメモリ、 130 演算ユニット、 140 メインメモリ、 142 メモリコントローラ、 144 ローカルメモリ、 148 メインプロセッサ、 150 表示装置、 160 I/Oデバイス、 162 アクセス要求コマンド、 170 アドレス領域、 172 IOID領域、 174 セグメント領域、 176 ページ領域、 178 オフセット領域、 179 コマンド領域、 180 第1変換テーブル、 182 第2変換テーブル、 184 第1インデックス欄、 186 ページベース値欄、 188 第2インデックス欄、 190 ページ番号欄、 192 IOID欄、 194 アクセス条件欄、 196 アクセス可能領域、 198 アクセス不能領域、 200 コマンド送信補助装置、 202 コマンド送信部、 204 IOID/セグメントアドレス追加部、 206 コマンド取得部、 250 UC_ADDR_TRANS_UARレジスタ、 252 マスクコントローラ、 254 変換部、 256 UC_ADDR_TRANS_TABLEレジスタ、 260 IOID変換テーブル、 262 セグメント選択テーブル、 264 マスク変換テーブル、 300 メモリアクセス制御装置、 302 コマンド受信部、 304 アクセス判定部、 306 アドレス変換部、 308 キャッシュ処理部、 310 部分情報保持部、 312 アクセス処理部、 314 アドレス情報保持部、 320 物理アドレス、 322 論理アドレス、 324 論理アドレス、 325 DMAリクエスタアドレス、 326 CPU・MMU設定レジスタ、 328 IOID・MMU設定レジスタ、 330 DMAリクエスタ設定レジスタ、 332 データ領域、 336 DMAリクエスタ、 334 MMU。

【特許請求の範囲】
【請求項1】
DMA(Direct Memory Access)転送のために使用されるメモリ領域であるDMAアドレス空間を対象として、外部のDMA転送要求主体からアクセス対象となるアドレスと前記DMA転送要求主体を識別するためのIDを含む制御コマンドを受信するコマンド受信部と、
前記DMAアドレス空間におけるアドレスと、そのアドレスにて指定される領域についてアクセスを許可されるべきDMA転送要求主体のIDとを対応づけたアクセス可否判定テーブルを参照して、前記DMA転送要求主体によるアクセスの可否を判定するアクセス判定部と、
前記アクセス判定部に許可されたことを条件として、前記DMA転送要求主体の前記DMAアドレス空間に対するアクセスを実行するアクセス処理部と、
を備えるI/Oアクセス制御装置と、
ユーザプロセスの論理アドレス空間と前記DMAアドレス空間とを対応づけるマッピングテーブルを設定するマッピング部と、
ユーザプロセスから、論理アドレスの指定により前記DMAアドレス空間へのアクセスを指示されたときには、前記ユーザプロセスを前記DMAアドレス空間に直接アクセスさせるために、前記マッピングテーブルを参照して前記論理アドレスを前記DMAアドレス空間の物理アドレスに変換するアドレス変換部と、
を備えるプロセス制御装置と、
を含むことを特徴とするメモリアクセス制御システム。
【請求項2】
前記プロセス制御装置の前記マッピング部は、OS(Operating System)によりアクセス対象となる前記DMAアドレス空間の領域とユーザプロセスによりアクセス対象となる前記DMAアドレス空間の領域が重ならないように、ユーザプロセスの論理アドレス空間と前記DMAアドレス空間を対応づけることを特徴とする請求項1に記載のメモリアクセス制御システム。
【請求項3】
前記I/Oアクセス制御装置の前記アクセス判定部は、OS(Operating System)用に確保されている所定のメモリ領域に対する前記DMA転送要求主体からのアクセスを排除することを特徴とする請求項1または2に記載のメモリアクセス制御システム。
【請求項4】
前記プロセス制御装置は、メインプロセスを実行する主制御装置、および、前記メインプロセスの実行中に前記主制御装置により割り当てられたユーザプロセスをサブプロセスとして実行する副制御装置を備え、
前記プロセス制御装置の前記アドレス変換部は、前記副制御装置の一部として構成され、前記副制御装置において実行されるユーザプロセスから前記DMAアドレス空間へのアクセスが指示されたときには、前記主制御装置において実行されるメインプロセスを介さずに、前記ユーザプロセスを前記DMAアドレス空間へアクセスさせることを特徴とする請求項1から3のいずれか記載のメモリアクセス制御システム。
【請求項5】
前記主制御装置は、メインプロセスとして複数種類のOSを時分割にて切り換えながら実行し、
前記副制御装置は、前記副制御装置において実行されるユーザプロセスから前記DMAアドレス空間へのアクセス中に、OSの切り換えが発生しても、前記アクセスを継続させることを特徴とする請求項4に記載のメモリアクセス制御システム。
【請求項6】
DMA(Direct Memory Access)転送のために使用されるメモリ領域であるDMAアドレス空間を対象として、外部のDMA転送要求主体からアクセス対象となるアドレスと前記DMA転送要求主体を識別するためのIDを含む制御コマンドを受信するステップと、
前記DMAアドレス空間におけるアドレスと、そのアドレスにて指定される領域についてアクセスを許可されるべきDMA転送要求主体のIDとを対応づけたアクセス可否判定テーブルを参照して、前記DMA転送要求主体によるアクセスの可否を判定するステップと、
前記アクセス判定部に許可されたことを条件として、前記DMA転送要求主体の前記DMAアドレス空間に対するアクセスを実行するステップと、
ユーザプロセスの論理アドレス空間と前記DMAアドレス空間とを対応づけるマッピングテーブルを設定するステップと、
ユーザプロセスから、論理アドレスの指定により前記DMAアドレス空間へのアクセスを指示されたときには、前記マッピングテーブルを参照して前記論理アドレスを前記DMAアドレス空間の物理アドレスに変換し、前記ユーザプロセスを前記DMAアドレス空間に直接アクセスさせるステップと、
を備えることを特徴とするメモリアクセス制御方法。
【請求項7】
DMA(Direct Memory Access)転送要求主体のアドレス空間をメモリの所定領域にマッピングする機能と、
前記DMA転送要求主体の制御権を付与すべきユーザプロセスのアドレス空間を前記メモリの前記所定領域に更にマッピングする機能と、
前記ユーザプロセスから前記DMA転送要求主体に対するアクセスが発生するときには、前記ユーザプロセスと前記DMA転送要求主体のプロセス以外のプロセスを介することなく、前記ユーザプロセスおよび前記DMA転送要求主体の双方からマッピングされている前記所定領域を介したデータ送受を実行させる機能と、
を備えることを特徴とするメモリアクセス制御プログラム。
【請求項8】
複数のユーザプロセスのうちのいずれかのユーザプロセスが複数のDMA転送要求主体のうちのいずれかのDMA転送要求主体の制御権を要求するとき、要求対象となる前記DMA転送要求主体のアドレス空間にマッピングされている前記メモリの領域に対して要求元である前記ユーザプロセスのアドレス空間をマッピングすることにより、前記ユーザプロセスと前記DMA転送要求主体のデータ送受を実行させることを特徴とする請求項7に記載のメモリアクセス制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公開番号】特開2010−152527(P2010−152527A)
【公開日】平成22年7月8日(2010.7.8)
【国際特許分類】
【出願番号】特願2008−328251(P2008−328251)
【出願日】平成20年12月24日(2008.12.24)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】