JP2008102915A - 情報処理装置及び情報処理プログラム - Google Patents
情報処理装置及び情報処理プログラム Download PDFInfo
- Publication number
- JP2008102915A JP2008102915A JP2007242960A JP2007242960A JP2008102915A JP 2008102915 A JP2008102915 A JP 2008102915A JP 2007242960 A JP2007242960 A JP 2007242960A JP 2007242960 A JP2007242960 A JP 2007242960A JP 2008102915 A JP2008102915 A JP 2008102915A
- Authority
- JP
- Japan
- Prior art keywords
- shared
- memory spaces
- program
- intermediate file
- information processing
- 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.)
- Withdrawn
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】 複数のメモリ空間に対応していないマルチタスクプログラムの変更量を抑えて複数のメモリ空間に対応しているマルチタスクプログラムで動作させる。
【解決手段】 複数のメモリ空間に対応していないマルチタスクプログラムの中間ファイルから予め前記入力手段により入力された共有シンボルを抽出し(ST102)、この抽出した共有シンボルから共有シンボル定義を中間ファイル毎に作成し(ST103)、この中間ファイル毎に作成した共有シンボル定義を新たな中間ファイルに割り当て(ST104)る。そして、共有シンボル定義と新たな中間ファイルとを利用して複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する。
【選択図】図2
【解決手段】 複数のメモリ空間に対応していないマルチタスクプログラムの中間ファイルから予め前記入力手段により入力された共有シンボルを抽出し(ST102)、この抽出した共有シンボルから共有シンボル定義を中間ファイル毎に作成し(ST103)、この中間ファイル毎に作成した共有シンボル定義を新たな中間ファイルに割り当て(ST104)る。そして、共有シンボル定義と新たな中間ファイルとを利用して複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する。
【選択図】図2
Description
本発明は、複数のメモリ空間に対応した共有シンボルを持つマルチタスクプログラムを有する情報処理装置及び情報処理プログラムに関する。
従来、プロセス間でシンボルを共有するための手法として、プログラムリンク時に、仮想アドレス上での配置位置を決める仮想アドレス配置プラン生成部と、仮想メモリ空間にロードする配置プラン対応ローダを備えることにより、共通のシンボルを複数のプロセス間で共有することが可能となるものが知られている(例えば、特許文献1参照)。
特開2006―48431
特許文献1に記載されたものでは、当初から複数のメモリ空間に対応しているマルチタスクプログラムを開発するためには有効であるが、複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応させるためにはソースコードに大きな変更を加える必要がある。
複数のメモリ空間に対応していないマルチタスクプログラムでは大域変数はすべてのタスクから参照することが出来る。しかし、複数のメモリ空間に対応しているマルチタスクプログラムでは、異なるメモリ空間上で動作するタスク間で、同一シンボルの大域変数を参照することが出来ない。
そのため、複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムに変更するためにはソースコードを大きく変更しなければならない。
しかし、プログラム開発において、開発期間を短縮するために既存のプログラムを出来るだけ利用することが重要となってくる。
本発明は上記事情に鑑みてなされたものであって、その目的は、複数のメモリ空間に対応していないマルチタスクプログラムのソースコードの変更量を抑えて、異なるメモリ空間で動作するマルチタスクプログラム間で、複数のメモリ空間に対応していないマルチタスクプログラムと同様に、同一シンボルの参照を可能にする情報処理装置及び情報処理プログラムを提供することにある。
本発明は、複数のメモリ空間に対応しているマルチタスクプログラムと複数のメモリ空間に対応していないマルチタスクプログラムを有するとともにデータを入力する入力手段を有する情報処理装置において、複数のメモリ空間に対応しているマルチタスクプログラムの第1の中間ファイルから予め前記入力手段により入力された共有シンボルを抽出し、この抽出した共有シンボルから前記第1の中間ファイル毎に共有シンボル定義を作成し、この第1の中間ファイル毎に作成した共有シンボル定義を第2の中間ファイルに割り当て、共有シンボル定義と第2の中間ファイルとを利用して複数のメモリ空間に対応していないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行するものである。
本発明によると、複数のメモリ空間に対応していないマルチタスクプログラムのソースコードの変更量を抑えることができる上、異なるメモリ空間で動作するマルチタスクプログラム間で、複数のメモリ空間に対応していないマルチタスクプログラムと同様に、同一シンボルの参照を可能にする情報処理装置及び情報処理プログラムを提供できる。
以下、本発明の最良の実施の形態について図面を参照して説明する。この実施の形態は、複数のメモリ空間に対応しているマルチタスクプログラムと複数のメモリ空間に対応していないマルチタスクプログラムとを有する情報処理装置及びその情報処理プログラムに、本発明を適用した場合である。なお、プログラムの言語の一例としてGNU Cを用いた場合で説明するがこれに限るものではない。
図1は、情報処理装置1の要部構成を概略的に示す図である。図1に示すように、情報処理装置1は、キーボードなどからの外部信号を入力するための入力装置10、ディスプレイなどの処理結果を出力するための出力装置12、後述する複数のメモリ空間に対応していないマルチタスクプログラムを使用して共有シンボルを設定するためのプログラムやその共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行するためのプログラム等の各種プログラムやデータを保存するための外部記憶装置13、外部記憶装置13に記憶されたプログラムを実行するCPU14、CPU14がプログラムを実行する際に必要となるデータを保存するメモリ15から構成される。
次に複数のメモリ空間に対応していないマルチタスクプログラムを使用して共有シンボルを設定する処理について説明する。図2は、複数のメモリ空間に対応していないマルチタスクプログラムを使用して共有シンボルを設定するための処理の要部を示すフローチャートである。
先ずCPU14は、ソースファイル(複数のメモリ空間に対応していないマルチタスクプログラム)のコンパイルを行い、複数のメモリ空間に対応しているマルチタスクプログラムの中間ファイルを作成する(ST101)。続いて、CPU14は作成された中間ファイルから共有したい共有シンボルを抽出する(ST102:抽出手段)。なお、抽出する共有シンボルは、予め入力装置11を用いて情報処理装置1のオペレータにより入力され、メモリ15の所定のエリアに記憶されている。このメモリ15に記憶されている共有シンボルと同一のシンボルがステップST101で作成された中間ファイルから抽出される。
また、シンボルを抽出するために、既存のソースファイル中で、シンボルを共有したい共有シンボルだけ、宣言を以下のように変更する。
extern int shared_sym1;
と宣言されている場合は
__attribute__(section(“.sampleshared”), unused, weak) int shared_sym1;
と変更する。このように、定義することにより、図3に示すように、GNU Cで使われるセクションテーブルT1において、“sampleshaerd”が固定の名前空間として付されたsampleshaerdセクションが追加され、共有したいシンボルをsamplesharedセクションに集めることが可能となる。これにより、sampleshaerdセクションに集められたシンボルを全て抽出することにより、全ての共有したいシンボルを抽出することが可能となる。又、前述の宣言ではexternの代わりに、__attribute__(section(“.sampleshared”), unused, weak)を記述しているが、記述を簡単にするために、#defineで定義しておくことにより、更に簡単に記述することができる。
と宣言されている場合は
__attribute__(section(“.sampleshared”), unused, weak) int shared_sym1;
と変更する。このように、定義することにより、図3に示すように、GNU Cで使われるセクションテーブルT1において、“sampleshaerd”が固定の名前空間として付されたsampleshaerdセクションが追加され、共有したいシンボルをsamplesharedセクションに集めることが可能となる。これにより、sampleshaerdセクションに集められたシンボルを全て抽出することにより、全ての共有したいシンボルを抽出することが可能となる。又、前述の宣言ではexternの代わりに、__attribute__(section(“.sampleshared”), unused, weak)を記述しているが、記述を簡単にするために、#defineで定義しておくことにより、更に簡単に記述することができる。
ここで、図4に示すように、中間ファイルAに共有したいシンボルとしてshared_sym1, shared_sym5, shared_sym6が、中間ファイルBに共有したいシンボルとしてshared_sym1, shared_sym2が、中間ファイルCに共有したいシンボルとしてshared_sym1, shared_sym4, shared_sym5が、中間ファイルDに共有したいシンボルとしてshared_sym2, shared_sym3, shared_sym6がステップST102により抽出されているとする。このときすべての中間ファイルAからDについてそれぞれ共有したいシンボルを定義して、共有シンボル定義を作成する(ST103:共通シンボル定義作成手段)。これにより、各中間ファイルAからDにおいて、共有シンボル定義が作成される。
次に抽出した共有シンボルのリンク先を同一にするために、新規中間ファイルを作成する、すなわち、中間ファイル毎に作成した共有シンボル定義を新規中間ファイルに割り当てる(ST104:割当手段)。なお、新規中間ファイルを作成するために、ソースファイル(プログラムAからD)では次のように宣言が行われている。
__attribute__(section(“.sampleshared”), unused) int shared_sym1;
__attribute__(section(“.sampleshared”), unused) char shared_sym2;
__attribute__(section(“.sampleshared”), unused) long shaerd_sym3;
__attribute__(section(“.sampleshared”), unused) long shaerd_sym4;
__attribute__(section(“.sampleshared”), unused) char shaerd_sym5;
__attribute__(section(“.sampleshared”), unused) char shared_sym6;
図5は、このように定義された各ソースファイル(プログラムAからD)の共有シンボルと新規中間ファイルにおける共有空間の共有シンボルとの関係を示すテーブルT2である。図4と対応して、異なるメモリ空間を用いるプログラムAからD(中間ファイルAからDのソースプログラム)のそれぞれに抽出された共有シンボルが格納されている。なお、この際、各プログラムにおいて同じ共有シンボルが抽出されているときはテーブルT2内の同じ行に格納される。例えば、“shared_sym1”はプログラムAとプログラムCの中間ファイルで抽出されているため、同じ行に格納される。また“shared_sym2”はshared_sym1”とは異なるシンボルであるため、“shared_sym1”が格納された行とは異なる行に格納される。このように、同テーブルT2の共有空間のエリアに各中間ファイルから抽出した異なるシンボル“shared_sym1”から“shared_sym6”が連続したメモリ空間にそれぞれ格納される。
__attribute__(section(“.sampleshared”), unused) char shared_sym2;
__attribute__(section(“.sampleshared”), unused) long shaerd_sym3;
__attribute__(section(“.sampleshared”), unused) long shaerd_sym4;
__attribute__(section(“.sampleshared”), unused) char shaerd_sym5;
__attribute__(section(“.sampleshared”), unused) char shared_sym6;
図5は、このように定義された各ソースファイル(プログラムAからD)の共有シンボルと新規中間ファイルにおける共有空間の共有シンボルとの関係を示すテーブルT2である。図4と対応して、異なるメモリ空間を用いるプログラムAからD(中間ファイルAからDのソースプログラム)のそれぞれに抽出された共有シンボルが格納されている。なお、この際、各プログラムにおいて同じ共有シンボルが抽出されているときはテーブルT2内の同じ行に格納される。例えば、“shared_sym1”はプログラムAとプログラムCの中間ファイルで抽出されているため、同じ行に格納される。また“shared_sym2”はshared_sym1”とは異なるシンボルであるため、“shared_sym1”が格納された行とは異なる行に格納される。このように、同テーブルT2の共有空間のエリアに各中間ファイルから抽出した異なるシンボル“shared_sym1”から“shared_sym6”が連続したメモリ空間にそれぞれ格納される。
このように定義を行うことにより、例えば、図5に示すように、各プロセスが、shared_sym1にアクセスした場合に、同一の領域を参照することが可能となる。また、この新規中間ファイルはこの実施の形態ではシンボル定義だけを行っているので、全てのソースファイルから参照される定義ファイルがあるならば、そこで、定義しても構わない。さらに、全てのソースファイルから参照できるのであれば、どのファイルに定義しても構わない。尚、中間ファイルA乃至Dを第1の中間ファイル、新規中間ファイルを第2の中間ファイルと呼んでもよい。
次に、ソースファイル(プログラムAからD)と、ステップST104で作成した新規中間ファイルのリンクを行い、複数のメモリ空間に対応してないマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムに対応させるための宣言を作成する(ST105)。ここで、共有シンボルのアドレスとサイズを指定するために、リンカスクリプトに、
.sampleshared 0x10000000( COPY ) :
{
shared_head = . ;
*(.sampleshared)
}
を追加する。これにより、samplesharedは0x10000000番地に定義される。また、shared_headを追加することにより、ソースファイルからシンボル指定で共有エリアの先頭にアクセスすることが可能となる。このリンカスクリプトの対応により、図6のテーブルT3に示すように、共有シンボルとなったシンボルのアドレスを“0x10000000”に集約することが出来る。また、共有空間をプログラムから利用するための、関数
void __attribute__((constructor)) shared_define_start(void)
{
g_shm_id = shmget((key_t)0x12345678, 64, IPC_CREAT|0666);
g_shm_ptr = shmat(g_shm_id, (void *)&shared_head, SHM_REMAP);
return;
}
が実行されることにより、図5のテーブルT2に設定された共有空間を複数のメモリ空間に対応しているマルチタスクプログラムから利用可能とすることができる。また、この関数は後述する図7のフローチャートに示すとおり、main関数の前に呼び出されるようにリンクを行う。
.sampleshared 0x10000000( COPY ) :
{
shared_head = . ;
*(.sampleshared)
}
を追加する。これにより、samplesharedは0x10000000番地に定義される。また、shared_headを追加することにより、ソースファイルからシンボル指定で共有エリアの先頭にアクセスすることが可能となる。このリンカスクリプトの対応により、図6のテーブルT3に示すように、共有シンボルとなったシンボルのアドレスを“0x10000000”に集約することが出来る。また、共有空間をプログラムから利用するための、関数
void __attribute__((constructor)) shared_define_start(void)
{
g_shm_id = shmget((key_t)0x12345678, 64, IPC_CREAT|0666);
g_shm_ptr = shmat(g_shm_id, (void *)&shared_head, SHM_REMAP);
return;
}
が実行されることにより、図5のテーブルT2に設定された共有空間を複数のメモリ空間に対応しているマルチタスクプログラムから利用可能とすることができる。また、この関数は後述する図7のフローチャートに示すとおり、main関数の前に呼び出されるようにリンクを行う。
次に共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する処理について説明する。図7は、共有シンボルが設定されたマルチタスクプログラムを複数のメモリ空間に対応しているマルチタスクプログラムで実行する処理の要部を示すフローチャートである。
プログラム実行の指示を取得したときには、CPU14は、最初に共有空間を使用可能にするための関数呼び出しを行う(ST201)。そして、CPU14は実行するmain関数を呼び出し(ST202)、main関数の中の処理を実行する(ST203,実行手段)。
この実施の形態によると、既存のコード、すなわち、複数のメモリ空間に対応していないマルチタスクプログラム中に宣言していたシンボル定義の定義方法を変更するだけで、共有シンボルを利用するための関数を使用して、複数のメモリ空間に対応しているマルチタスクプログラムで、大域変数を相互に参照することが可能となる。すなわち、複数のメモリ空間に対応していないマルチタスクプログラムのソースコードの変更量を抑えて、異なる複数のメモリ空間で動作するマルチタスクプログラム間で、複数のメモリ空間に対応していないマルチタスクプログラムと同様に、同一シンボルの参照を可能にすることができる。
また、中間ファイルから抽出させる共有シンボルを固定の名前空間にて定義するため、簡単に共有シンボルを抽出することが可能となる。
さらに、複数の共有シンボルを連続したメモリ空間に割り当てるものであるため、共有シンボルを使用可能にするための機能を1つにすることが可能となる。
さらに、複数のメモリ空間に対応しているマルチタスクプログラムを実行する前に、複数のメモリ空間に対応していないマルチタスクプログラムの共有空間を使用可能にするための関数を呼び出すため、main関数の処理を気にすることなく、複数のメモリ空間に対応していない既存のマルチタスクプログラムを利用することが可能となる。
なお、本実施の形態では、複数のメモリ空間に対応しているマルチタスクプログラムとして、異なるメモリ空間で動作するプログラムを例示した。ここで、メモリ空間が異なるという意味は、同一メモリ上の名前空間が異なる場合と同意である。すなわち、同一のメモリ上であっても、プログラムから見た場合に、異なる空間であれば、実メモリであってもあるいは仮想メモリであっても本発明を適用できるものである。
また、本実施の形態では情報処理装置1内部に発明を実施する機能が予め記録されている場合で説明したが、これに限らず同様の機能をネットワークから装置にダウンロードしても良いし、同様の機能を記録媒体に記憶させたものを装置にインストールしても良い。記録媒体としては、CD−ROM等プログラムを記憶でき、かつ、装置が読取り可能な記録媒体であれば、その形態は何れの形態であっても良い。またこのように、予めインストールやダウンロードにより得る機能は装置内部のオペレーティングシステム(OS)等と協同してその機能を実現させるものであっても良い。
なお、本発明は、上述した実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できるものである。
1…情報処理装置、11…入力装置、12…出力装置、13…外部記憶装置、14…CPU、15…メモリ、T1〜T3…テーブル
Claims (6)
- 複数のメモリ空間に対応しているマルチタスクプログラムと複数のメモリ空間に対応していないマルチタスクプログラムを有するとともにデータを入力する入力手段を有する情報処理装置において、
前記複数のメモリ空間に対応しているマルチタスクプログラムの第1の中間ファイルから予め前記入力手段により入力された共有シンボルを抽出する抽出手段と、
この抽出手段で抽出した共有シンボルから前記第1の中間ファイル毎に共有シンボル定義を作成する共通シンボル定義作成手段と、
この作成手段で前記第1の中間ファイル毎に作成した共有シンボル定義を第2の中間ファイルに割り当てる割当手段と、
前記共有シンボル定義と前記第2の中間ファイルとを利用して前記複数のメモリ空間に対応していないマルチタスクプログラムを前記複数のメモリ空間に対応しているマルチタスクプログラムで実行する実行手段とを具備することを特徴とする情報処理装置。 - 前記抽出手段は、前記第1の中間ファイルから抽出される共有シンボルを固定の名前空間にて定義することを特徴とする請求項1記載の情報処理装置。
- コンピュータに、
複数のメモリ空間に対応しているマルチタスクプログラムの第1の中間ファイルから予め外部から入力された共有シンボルを抽出させる抽出機能と、
この抽出機能で抽出させた共有シンボルから前記第1の中間ファイル毎に共有シンボル定義を作成させる共通シンボル定義作成機能と、
この作成手機能で前記第1の中間ファイル毎に作成させた共有シンボル定義を第2の中間ファイルに割り当てさせる割当機能と、
前記共有シンボル定義と前記第2の中間ファイルとを利用して前記複数のメモリ空間に対応していないマルチタスクプログラムを前記複数のメモリ空間に対応しているマルチタスクプログラムで実行させる実行機能とを実現させる情報処理クプログラム。 - 前記抽出機能は、前記中間第1のファイルから抽出させる共有シンボルを固定の名前空間にて定義するものである請求項3記載の情報処理プログラム。
- 前記割当機能は、前記複数の共有シンボルを連続したメモリ空間に割り当てるものである請求項3記載の情報処理プログラム。
- 前記実行機能は、複数のメモリ空間に対応しているマルチタスクプログラムの初期関数を実行する前に、前記共有シンボルを使用可能にするための関数を呼び出すものである請求項3記載の情報処理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007242960A JP2008102915A (ja) | 2006-09-20 | 2007-09-19 | 情報処理装置及び情報処理プログラム |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006254818 | 2006-09-20 | ||
JP2007242960A JP2008102915A (ja) | 2006-09-20 | 2007-09-19 | 情報処理装置及び情報処理プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008102915A true JP2008102915A (ja) | 2008-05-01 |
Family
ID=39437166
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007242960A Withdrawn JP2008102915A (ja) | 2006-09-20 | 2007-09-19 | 情報処理装置及び情報処理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008102915A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013533564A (ja) * | 2010-07-29 | 2013-08-22 | コリア ハイドロ アンド ニュークリア パワー カンパニー リミティッド | データベース化された共有メモリを利用した工学的分析用プログラム間の同期化された連係方法及びシステム |
-
2007
- 2007-09-19 JP JP2007242960A patent/JP2008102915A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013533564A (ja) * | 2010-07-29 | 2013-08-22 | コリア ハイドロ アンド ニュークリア パワー カンパニー リミティッド | データベース化された共有メモリを利用した工学的分析用プログラム間の同期化された連係方法及びシステム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI442235B (zh) | 記憶體交易群組 | |
JP5225003B2 (ja) | メモリ保護方法、情報処理装置、メモリ保護プログラム及びメモリ保護プログラムを記録した記録媒体 | |
JP2005032259A (ja) | 共有ライブラリーシステム及び前記システム構築方法 | |
US20090307669A1 (en) | Memory management for closures | |
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
JP2009020696A (ja) | 情報処理装置及びシステム | |
US20070271533A1 (en) | System lsi verification system and system lsi verification method | |
US20110209004A1 (en) | Integrating templates into tests | |
JP5489884B2 (ja) | 命令実行装置、命令実行方法、及び命令実行プログラム | |
JP2008003882A (ja) | コンパイラプログラム,リストベクトルの領域割当て最適化方法,コンパイル処理装置およびコンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
JP4319082B2 (ja) | プログラミングシステム | |
US9262136B2 (en) | Allocate instruction and API call that contain a sybmol for a non-memory resource | |
JP4870956B2 (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
JP2008102915A (ja) | 情報処理装置及び情報処理プログラム | |
JP2009020695A (ja) | 情報処理装置及びシステム | |
JP7295469B2 (ja) | 関数生成プログラム、関数生成方法、及び情報処理装置 | |
JP4760607B2 (ja) | プログラマブルコントローラ | |
US9753710B2 (en) | Resource allocation with hierarchical scope | |
US9223555B2 (en) | Hierarchical resource pools in a linker | |
JP6020071B2 (ja) | プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ | |
JP2019067227A (ja) | 情報処理装置、情報処理方法及びプログラム | |
JP6103972B2 (ja) | プログラム生成方法、プログラム実行方法、プログラム実行装置およびプログラム実行プログラム | |
JP2004192604A (ja) | 組込みソフトウェア開発装置及び組込みソフトウェア開発方法 | |
JP2011118830A (ja) | マルチタスクシステム、及び、プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100304 |
|
A761 | Written withdrawal of application |
Effective date: 20111207 Free format text: JAPANESE INTERMEDIATE CODE: A761 |