JP4298728B2 - 複数のプログラムセグメントを実行する装置 - Google Patents

複数のプログラムセグメントを実行する装置 Download PDF

Info

Publication number
JP4298728B2
JP4298728B2 JP2006207207A JP2006207207A JP4298728B2 JP 4298728 B2 JP4298728 B2 JP 4298728B2 JP 2006207207 A JP2006207207 A JP 2006207207A JP 2006207207 A JP2006207207 A JP 2006207207A JP 4298728 B2 JP4298728 B2 JP 4298728B2
Authority
JP
Japan
Prior art keywords
routine
stack
code
object code
software
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.)
Expired - Fee Related
Application number
JP2006207207A
Other languages
English (en)
Other versions
JP2006331450A (ja
Inventor
ディー. ムーレイ、ジーンチャールス
アール. パレント、シーン
ケー. ジョーンズ、ブルース
ダブリュ. リリック、アラン
エル. エイツ、エリック
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of JP2006331450A publication Critical patent/JP2006331450A/ja
Application granted granted Critical
Publication of JP4298728B2 publication Critical patent/JP4298728B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

この発明はコンピュータシステム、より詳細にはコンパチブルでないオブジェクトコードで書かれたコードを実行するために同一プログラム中にミックスすることを可能にするコンピュータシステムに関する。
新しいプロセッサ(コンピュータプロセッサ)が開発されると、それまでのプロセッサでは正しく実行されていた従来のアプリケーションやプログラム(以下、「アプリケーション」)は、当該新しいプロセッサでは正しく実行されないことが起こり得る。こうした古い、つまり新しいプロセッサにとっては非ネイティブなアプリケーションは、一般には新プロセッサで実行するために「移植」、つまり書き直されるか翻訳される。このアプリケーションの移植が実行されるまで、普通は新しいプロセッサの有益な諸特性を利用することができない。アプリケーションを移植するのに要求される作業量次第では、アプリケーションが新しいプロセッサから受けることができる利点よりも、その作業量に費やされる時間の方が大となるおそれもある。
普通、新しいプロセッサを有するコンピュータシステムは、古いプロセッサのために書かれた「古い」アプリケーションを動かすための別個の環境を有している。こうした環境は「コンパチビリティ ボックス」と呼ばれる。こうしたシステムでは、コンパチビリティ ボックスと新しいプロセッサ環境間に、「ネイティブ」環境と呼ばれるような相互作用は実質的に少しもない。その為に「古い」アプリケーションは、ネイティブの環境下であれば利用可能であった当該改良後の高い処理能力や、その他の有益な諸特性を全く利用することができない。
ある種のコンピュータシステムは、そのコンピュータシステムにとってネイティブなプロセッサ以外のプロセッサのために書かれたコードを実行するコンピュータシステムを可能にするエミュレータを有している。典型的には、こうしたエミュレータは1個のルーチン環境を前提にしているのであり、換言すれば、プログラム手続を呼出し、スタック操作を実行する規約がネイティブ及び非ネイティブつまりエミュレートされたコードの双方に共通していることを前提にしている。USA4813975はエミュレータおよびモードスイッチング機構に連動されていて具体的な指示があると作動する。USA4084235はエミュレーション装置に連動されていて、そこでオプションマスクがターゲットシステムの特徴や性質を定義するようになっている。こうしたエミュレータは典型的には、出された指示を変更させるだけであって、異なるルーチン呼出し及びスタック操作規約を有しているプログラムのオブジェクトコードの2種の異なるタイプを取り扱う構造になっていない。例えば、これらのエミュレータは,Motorola68000(以下「68K」)のようなCISC(Complex Instruction Set Computer)とか、(IBM PowerPC IBM RISC System/6000のような)RISC(Reduced Instruction Set Computer)(以下「RISC」)を取り扱うには機能的に不十分であった。PowerPC,IBM RISC System/6000は、International Business Machines Corporation, Armonk, N.Y.が登録した商標である。
CISC機に関する背景知識についてはAddison−Wesley Publishing Co.,1985−1991刊行の「Inside Macintosh」, 第1〜6巻を参照のこと。IBM社のRISC System/6000機に関する背景知識はIBM Journal of Research and Development, 1990年1月刊行の第34巻, No.1のGregory F. Grokoskiによる「Machine organization of the IBM RISC System/6000 processor」 pp.37−58, 及びR.R. OhelerとR.D.Grovesによる「IBM RISC System/6000 processor architecture」 pp.23−36を参照のこと。
IBM社のRISCサブルーチンリンケージ規約に関する背景知識についてはニューヨーク州, アーモンクのInternational Business Machines Corporation,1992年9月刊行の「AIX XL FORTRAN Compiler/6000 User’s Guide Version 2.3」 第10章及びIBM Journal of Research of Development, 1990年1月刊行の第34巻, No. 1, pp.98−104, Marc A. Auslanderによる 「Managing programs and libraries in AIX Version 3 for RISC System/6000 processors」 参照のこと。なお、AIXはInternational BusinessMachines Corporationの商標である。
68K環境では手続ポインタは68Kルーチンをアドレスするが、RISCのようなその他の環境下では手続ポインタは、データ構造とか、その他の情報中にそのルーチンのアドレスを含む実行可能なコードのような構造をアドレスする。RISC System/6000環境では、構造はそのルーチンへの入口点のアドレスと、そのルーチンが拘束されるモジュールの内容を示すテーブルと、ポインタを必要とする言語環境を示すポインタとを有する。RISCコードが68Kルーチンモデルに合うように一致させられているとすれば、RISC指示セットの利点は何も利用され得ない。
従来のある種のコンピュータシステムで、1プロセッサ上にさまざまな呼出し規約をもつ2つ又は3つ以上のプログラミング言語を実行するには、各使用ごとにそのプログラミング言語を共通にするベースラインの呼出し規約に変更されている。その他の従来システムでは、プログラミング言語は、他の言語のさまざまな呼出し規約を明示的に取り扱うように構成されている。
典型的には、新しいネイティブプロセッサをサポートするだけでなく従来のコンピュータをエミュレートもするコンピュータシステムは、1時に1環境のみをサポートするにすぎない。換言すれば、同時進行するアプリケーションは同じプロセッサ環境またはモードで実行されている。例えば、多数のアプリケーションが同時に実行されるときは、そうしたアプリケーションのうちの一つだけが非ネイティブな処理環境用に書かれており、その他の全てのアプリケーションがネイティブ環境用に設計されていたとしても、それらアプリケーションの全部は、その一つの非ネイティブなアプリケーションに適した環境にエミュレートされて実行される。したがってこれらアプリケーションのどれ一つも、この新しいネイティブなプロセッサが提供してくれる利点を享受することができない。
なお、関連するその他の文献としては以下のものがある。
特開平4−322327号公報 特開平4−336327号公報 特開平4−309135号公報 特開昭61−52769号公報 特開昭63−180129号公報 特開平2−81227号公報 可児賢二・他、「Vシリーズマイクロコンピューター」、丸善株式会社、1987年4月30日、pp.104−109(特許庁CSDB文献番号:単行本1997−00409−001、ISBN:4−621−03157−0) 「ユーザーズ・マニュアル MC68040 MC68040UMJ/AD」,日本モトローラ株式会社、1992年12月1日,第1版、pp.226、227、234−240(特許庁CSDB文献番号:マニュアル2000−03185−001)
本発明は、1アプリケーションまたは1プログラムがどんなプロセッサモードにもアクセスすることができるよう複数のプロセッサモードをスイッチングする即応型機構を提供することが主目的である。
本発明のもう一つの目的は、特定のプロセッサモードに明示的にアクセスするアプリケーション用の機構を提供することにある。
本発明のもう一つの目的は、特定のプログラムセグメントを実行するのに適したプロセッサモードを同定する機構を提供することにある。
本発明のもう一つの目的は、ほぼ同時に多数の環境における多数のアプリケーションをサポートすることにある。
本発明のもう一つの目的は、部分的に複数のプロセッサをベースとしているシステムソフトウエアを実行するコンピュータシステムを可能にすることにある。
本発明のもう一つの目的は、第1のプロセッサモードから第2のプロセッサモードへプログラムコードを変更することなく変更するようにプログラムの実行を可能にすることにある。
本発明は特許請求の範囲に記載のとおりの構成を採用することにより上述の課題を解決する。以下、特許請求の範囲に記載の構成について補充的に説明を行なう。
本発明は、プログラム手続を呼出したり、スタック操作を行うためのさまざまに異なる規約を有する複数のオブジェクトコードタイプの実行間のスイッチングとなる方法及び装置を提供するものである。本発明はまた、1オブジェクトコードタイプになっている2つまたは3つ以上の異なる呼出し規約をスイッチングするのにも使われる。概説すれば、本発明によれば、コンピュータシステムは1又は2以上のコードタイプのための指示を実行する手段と、ルーチン記述子と、スタックスイッチフレームと、プロセッサタイプ又はコードタイプ、すなわち本書では単に「モード」と言うが、同士をスイッチングするモードスイッチング機構とを有する。本発明は、また、ルーチン記述子中に情報を作り出し、操作し、セッティングし、そして特定のルーチン記述子に関連する情報にアクセスするための機構を有している場合もある。指示を実行する手段としては、例えば、1個のCPUと1個のエミュレータ、複数のCPU、または複数のオペレーションモードを有する1個のCPUがある。指示実行手段は、さらに、指示を実行するのに使われる関連ソフトウエアを含む場合もある。
ルーチン記述子は、プログラムセグメント、またはそのプロセッサのようなコードの一部分もしくはコードタイプ及び呼出し規約の特徴を記述するものである。あるいは、ルーチン記述子は、実質的に同一な機能を行うが、異なるプロセッサタイプまたはコードタイプ及び呼出し規約に備えられている複数のプログラムセグメントを記述する場合もある。記述目的のため、「プロセッサ環境」という用語はプロセッサ及び/又はプログラムの環境を示すのに用いられる。ルーチン記述子は、違法命令や違法記憶アドレスのような具体的な所定の値に向けて設定された「ミックスモード」域も有している。ミックスモード域の値は、命令実行手段や行われているスイッチングオペレーションタイプの如何により変更されるものである。さらにルーチン記述子は、プログラムセグメントを呼出し、適切なスタック操作を行うための規約を示す「手続情報域」も有している。ミックスモード域は、モード中の少なくとも1モードに装備されていない、つまり違法な、命令を示す値に向けて設定されていてもよい。例えば、命令実行手段が1個のCPUと1個のエミュレータである場合は、ミックスモード域はそのエミュレータによってだけ装備された命令に向けて設定され、その他のルーチン環境またはモードによって装備されていなくてよい。エミュレータがこの命令に遭遇すると、制御はそのモードスイッチング機構に移動させられる。
同様に命令実行手段が複数のCPUの場合にも、ミックスモード域は少なくとも1個のCPUに装備されていない命令に向けて設定されていてもよい。
しかし、ミックスモード域が合法命令に向けられる場合も起こり得る。例えば、1コードタイプに関する2または3以上の呼出し規約間をスイッチングするために本発明を実施したとき、「ミックスモード」域は、例えば、分岐命令またはトラップ命令のようなコードタイプの合法命令の実行がモードスイッチングオペレーションを行うことができるプログラムセグメントを呼び出すように、分岐命令またはトラップ命令のようなコードタイプの合法命令に向けることができる。
ルーチンが別のスタックモデルをもつルーチンを呼び出すとき、そのモードスイッチング機構は2つの異なるスタックタイプ間に遷移をもたらすスタックスイッチフレームを使う。適切なスタックスイッチフレームが呼出人のスタックフレームと被呼出人のスタックフレーム間のスタックに配置される。
本発明の1実施例のコンピュータシステムにおいては、異なるオブジェクトコードタイプのプログラムセグメントを有するか、または異なるプロセッサ用に設計されたアプリケーションは、各プログラムセグメントがそのコード及びプロセッサタイプに適したモードで実行されるように1個のプロセッサで実行することができる。したがってネイティブなコードはネイティブプロセッサの利点ある特徴の利益を享受し、同時に、非ネイティブなコードはほぼ通常通りに作動し、ネイティブコードの存在を知っていなくても、あるいはネイティブコードを修正しなくてもネイティブコードから明示的に利益を享受することができる。
本発明のもう一つの利点は、ネイティブなアプリケーションがプログラムセグメントまたはコードセグメントは複数のコードタイプのうちのどれかであることを知っているかもしれないが、従来の非ネイティブなアプリケーションシステムのソフトウエア又はプログラムセグメントの特徴に、その非ネイティブなアプリケーションシステムソフトウエア又はプログラムセグメントの正確なコードタイプを知らなくてもアクセスすることができることである。しかも非ネイティブなアプリケーション又はシステムソフトウエアは、それにアクセスするのにネイティブなアプリケーション用に修正される必要はない。
本発明はまた、第1タイプのコードが第2タイプのコードを実行できるようにし、あるいは実行されている実際のコードタイプについて予備知識なしでも第1タイプのコードが実行できるようにする。これは言わば、実質的にどんなタイプのコードでも、そのコードのコードタイプについて予め知っておらずに実質的に別のコードとなるコードで実行することを意味する。
図1において、10は少なくとも一つの中央処理装置(以下、「CPU」)12と、スタック14と、そして記憶装置16とを有するコンピュータの全体である。スタック14は記憶装置16内に配置されていることもある。あるいは、コンピュータ10は1個または2個以上のレジスタ17を有することもある。記憶装置16は複数のコードセグメント即ちコード18の各部を有している。図面上記憶装置16は第1のコードセグメント18a、第2のコードセグメント18b、及び第3のコードセグメント18cを持っている。記憶装置16は又、ルーチン記述子20、及び好ましくは、コンピュータ10が複数のCPU12を持っているとき、又はコンピュータ10が多数モードのCPU1個を持っているときは、エミュレータ21をも持っている。
[ルーチン記述子]
図2に示すように、ルーチン記述子20は好ましくはミックスモード域28と選択域29を有している。又、ルーチン記述子20は手続情報域30と、1つのペア31又は2つのペア31以上を有するリスト27とを持っている。これら各ペア31はコードタイプ域32と手続ポインタ33を有している。さらにルーチン記述子20はインジケータ域34、バージョン域35及びカスタムパラメータ手続域36をも有している。図2はルーチン記述子20の具体化を簡単に図示したに過ぎない。ルーチン記述子20内のこれら諸域の正確な配列はさまざまに変化し得る。
ミックスモード域28は、ときとして第1域と呼ばれることもあるが、プロセッサモード間を識別する。アプリケーションがネイティブアプリケーションのとき、またはネイティブコードを実行する非ネイティブアプリケーションのときは、ミックスモード28はエミュレータまたは少なくとも1つのプロセッサモードに違法な命令によってはじめて具体化される。例えばこの値は不使用の命令であることもあり、不使用のA−Trapあるいは不使用のF−line命令であることもある、別言すれば、非ネイティブモードで合法命令でない値なら何でもなり得る。
あるいはミックスモード域28は、プログラムまたはコードセグメントが複数のコードタイプのうちのどれかであることをネイティブなアプリケーションが知らないことができるように値を設定してもよい。ミックスモード域28の前半はRISC命令に設定され、後半はRISC違法命令または分岐でもよい。命令はモードのスイッチング機構その他、例えばルーチン記述子を作ったり動かしたりするような機構を呼び出すのに使われる。
選択域29は、ときとして第3域とも呼ばれるが、実行されるべきモードスイッチングオペレーションのタイプを示す値を有している。選択域29は本発明の実施例に特有なサービスまたは機能を限定することができる。
好ましくは選択域29はロード及び実行、実行、またはリターンオペレーションを表示する値を持っている。ロード及び実行オペレーションは非ネイティブなコードタイプに合致する方法で非ネイティブコードタイプのコードによってロードされるネイティブコードタイプのプログラムセグメントを可能にする。次に、選択域29がロード及び実行オペレーションを指定すると、モードスイッチング機構が、リロケーション、ランタイムバインディング、初期化などのネイティブアプリケーションのコードタイプに特有のオペレーションを行う。
手続情報域30は、ときとして第4域と呼ばれることもあるが、ルーチン記述子によって言及されたルーチンが使う呼出し規約やパラメータに関する情報を供給する。
リスト27はルーチン記述子が実質的に同一機能を行うがさまざまなプロセッサ又はコードのタイプや呼出し規約を装備されている複数のプログラムセグメントの記述を可能にする。場合によっては、現在のルーチン又はプロセッサ環境にとって最適なプログラムやコードセグメントを選択できるように2つ又は3つ以上のコードタイプで書かれた同一機能を行うプログラム又はコードセグメントを持つことが望ましい。実行速度、あるいは利用可能な特徴やプロセッサその他のファクタは、どのプログラムまたはコードセグメントタイプを実行するかを決定するとき考慮される。
リスト27がペア31を一つ以上持っていてルーチン記述子が呼び出されたとき、好ましいコードタイプが複数のペア31中のコードタイプ域32から選択される。この好ましいとされるコードタイプは具体的なコンピュータシステム10の利点を最大に利用するようなコードタイプである。こうしてルーチン記述子とそれに付随するプログラムセグメントは、本発明のさまざまな実施例である複数のコンピュータシステムに修正なしに呼び出すことができる。例えば、リスト27が68Kを表示しているコードタイプ域のあるペア31とRISCを表示しているコードタイプ域のあるもう一つのペア31とを含むルーチン記述子20が、68Kだけしかないコンピュータと68Kエミュレータを有しているRISCコンピュータとの両方に実行できる二重68K/RISCルーチン記述子のようなものである。68Kだけのコンピュータでは、68Kコードタイプが選択され、RISCコンピュータでは、そのより良いパフォーマンスその他の利点のためにRISCコードタイプが選択される。選択基準はさまざまあり得るが、好ましくは選択はパフォーマンスおよびさまざまなコードタイプの利用可能性に基づき行われるのがよい。
コードタイプ域32は、ときとして第1部とも呼ばれるが、ルーチンが書き込まれているコードまたはプロセッサのタイプを示す。
プロセッサポインタ33は、ときとして第2部とも呼ばれるが、ルーチンの自然のコードのタイプに適した方法でルーチン記述子20により記述されたルーチンを指し示す。
ルーチン記述子インジケータ域34は、ときとして第5域とも呼ばれるが、メモリ16のその部分をルーチン記述子として同定する。
バージョン域35は、ときとして第6域とも呼ばれるが、ルーチン記述子のバージョンを示す。これはルーチン記述子の構造が新しいバージョンで変更された場合に有益である。
カスタムパラメータ手続域36は、ときとして第7域とも呼ばれるが、ルーチン記述子が作られたとき付与される手続を指し示すのに使われる。この手続は呼出人ルーチンのコードタイプと被呼出人ルーチンのコードタイプ間の遷移[transition]を如何に行うかを知っている。カスタムパラメータ手続域36は一般に、手続情報域によって容易に定義できない特殊なケースを取り扱うのに用いられる。しかしルーチン記述子20はカスタムパラメータ手続域36を有していなくてもよいのであって、手続情報域30はそうした特殊なケースを取り扱うのに使われてもよく、2オブジェクトコードタイプ間の遷移手続を間接的に同定する。
手続情報域30の実際の内容は呼出されるルーチンによって使われる呼出し規約次第で決められる。各場合において、手続情報域30(図3)は、そのルーチン、つまりパスカルとCスタックベースのルーチン、レジスタベースのルーチン、スタックベースのディスパッチルーチン、そしてレジスタベースのディスパッチルーチンによって使われる呼出し規約を表示する呼出し規約域40を有している。
呼出し規約は、一つのソフトウエアルーチンを援用するのに使われるメカニズムである。「コンピュータ操作に関するIBM辞典」(第9版、1991年)は、呼出し規約を「データ交換のためのルーチン及びサブルーチンに関する具体的方法」と定義している。「援用するメカニズム」という用語は、呼出し規約という言葉と差し替え自在に使うことができ、あるいは場合によっては、呼出し規約プラス実際の数字やパラメータのフォーマットに関する追加的知識からできあがっている。その違いは、呼出し規約がパラメータのどんな組合せにも適用できる一般的メカニズムしか記述しないのに対して、援用メカニズムはそのパラメータ、特に数字とサイズに関する知識を有していることである。
例えばパスカルとCスタックベースのルーチンにつき、図4に示されるように、手続情報域30は、ルーチンにより戻ってきたバイト数を示す結果サイズ域42、及び各パラメータのサイズを記述しているパラメータサイズ域43も有している。このパラメータサイズ域43はゼロ値で終了するパラメータサイズ値のリストである。図5は、レジスタベースのルーチンのために手続情報域30が、ネイティブインターフェイス内のパラメータと同じ順番にレジスタをリストするレジスタパラメータ域44を有していることを示している。レジスタパラメータ域44は1個または2個以上の入力パラメータ及び出力パラメータを有している。例えば、レジスタパラメータ域44は2個の出力パラメータとそれに従う4個の入力パラメータを有するなどである。
図6は、スタックベースのディスパッチルーチン、すなわち単一の入口を経由してルーチンディスパッチャ(図示せず)にアクセスできるルーチンを示す。手続情報域30は、そのルーチンによって戻ってくるバイト数を示す結果サイズ域46、セレクタのサイズを示すセレクタサイズ域47、及び各パラメータのサイズを記述しパラメータサイズ域43と同一のフォーマットを有しているパラメータサイズ域48を有する。
図7に示すように、レジスタベースのディスパッチルーチン、すなわちパラメータがレジスタ中にパスし、セレクタがスタック上にパスするルーチンにとって、手続情報域30は、スタック上のセレクタサイズを示すセレクタサイズ域50、及びレジスタパラメータ域44と同じフォーマット中のパラメータを記述するレジスタパラメータ域51も有している(図5)。
図8は上記以外の場合を取り扱うための手続情報域30を示す。手続情報域30は、呼出し規約域40とユーザ定義可能域52を有する。ユーザ定義可能域52はルーチン記述子20によって記述されるルーチンに適した方法で構成される。
図9に示すように、各パラメータのためにレジスタパラメータ域44は、レジスタサブ域53とパラメータサイズサブ域54を有している。
「古」すなわち非ネイティブコードタイプのプログラムまたはコードセグメントがそれらと連動するルーチン記述子の存否を実行する。しかし「新」すなわち「ネイティブ」コードタイプのプログラムまたはコードセグメントは普通、それと関係するルーチン記述子を有している。
ルーチン記述子はプログラムセグメントが複数のコードタイプのいずれでもよい。プログラムセグメントが具体的なコードタイプであってその他のコードタイプではないことが知られているときは、サブルーチンまたはライブラリコールがミックスモード域28を使わずに直接にモードスイッチング機構にアクセスするために使うことができる。
[アプリケーションインターフェイス]
ルーチン記述子は、プログラムがオブジェクトコードにコンパイルされ、オブジェクトコードセグメントをまとめて結合し実行可能なプログラムを形成するランタイムリンカーによって解読されるとき、静的に作り出すことができる。しかしそれ以外のときは、ルーチン記述子を動的に割り当てて放出し、ルーチン記述子中の情報にアクセスし、そしてルーチン記述子中の情報をセットするか変更することが好ましい。
したがって好ましくは、インターフェイスはルーチン記述子を作り出しリリースするアプリケーションの手段を提供する。例えばルーチン記述子を作り出す命令は好ましくは次のパラメータを受けるのがよい。すなわち、ルーチンのポインタ、手続タイプの同定、手続情報、及び任意選択可能なカスタムパラメータ手続ポインタ、現時点のモードを指し示すモードインジケータ、又は任意選択可能にそれが現時点のモードと違っていたら適当なプロセッサモード、及びルーチン記述子又はそれへのポインタを戻す。Cプログラミング言語においてのこの命令の実施は次のようになるであろう。
RoutineDescriptor=NewRoutineDescriptor(ProcPtr theProc,ProcInfoType procInfo,CodeType executionMode)
同様に、ルーチン記述子を出し、それに割り当てられた記憶装置を解放せよ、との命令は、ルーチン記述子またはそれのポインタを受ける。例えばこの命令は次のようにものである。
DisposeRoutineDescriptor(RoutineDescriptor *theRoutine)
インターェイスはまたアプリケーションがルーチン記述子に関する情報にアクセスすることを可能にする。例えば特定のルーチンにつきそれが書かれているコードのタイプ、それに関連する手続情報、あるいはそれに関連するカスタムパラメータ手続などを見つけ出す命令がある。例えばGetCodeType(RoutineDescriptor *theRoutine)が、記述されたルーチンが書かれているコードのタイプにアクセスするのに使われる。
さらにインターフェイスはアプリケーションがルーチン記述子中の情報を変更するのを可能にする。例えば命令は手続ポインタが変更されること、または、手続情報域が設定されることを可能にする。OSErr=SetProcInfo(RoutineDescriptor *theRoutine,ProcInfoType procInfo)のような命令が、ルーチン記述子の手続情報域を所定のprocInfoに変更する。
68Kのような「古い」すなわち非ネイティブなコードタイプのプログラムセグメントまたはコードセグメントは、それがそのネイティブなコードを呼出していることを知らずにルーチン記述子を介してネイティブなプログラムセグメントまたはコードセグメントを呼出し得る。68Kのこのような場合は、ルーチン記述子は、恰もそれが68K手続ポインタであるかのように直接に呼出され、命令にパスされたパラメータはそのルーチンにパスされる。もしルーチンが68Kならば、そのルーチン記述子は実際に68K手続ポインタであって、それがポイントする手続が呼出される。もしルーチンがネイティブならば、あるいはそれが呼出人のルーチンの予定している呼出し規約とは違う68Kルーチンならば、そのルーチン記述子はモードスイッチング機構をトリガーするミックスモード値を有するミックスモード域28からスタートするネイティブまたは68Kルーチン記述子である。
必須的に、ミックスモード域は有しており、非ネイティブコードタイプのコードとして扱われるので、ルーチン記述子20の言及と、68Kのような非ネイティブコードタイプのあるコードまたはプログラムセグメントの直接の言及とは相互交換可能である。非ネイティブコードタイプ環境では、ルーチン記述子は実行されるコードセグメントまたはプログラムセグメントとして扱われるが、新しい、即ちネイティブな、コードタイプ環境では、ルーチン記述子はデータにアクセスする手段によって使われるそうしたデータとして扱われる。このように、非ネイティブコードの言及はルーチン記述子にアクセスするための手段と交換することができる。
好ましくはアプリケーションインターフェイスはアプリケーションまたはプログラムセグメントがルーチン記述子を呼出すことを可能にする。この命令は所与のルーチン記述子によって記述されたルーチンを呼出し、何らかの結果をパスバックする。この命令の目的はアプリケーションまたはプログラムセグメントをして何らかのコードタイプのルーチンを呼出すことを可能にすることである。例えば、このメカニズムはネイティブコードがモードスイッチング機構にアクセスすることを可能にする。本発明の第1実施例では、ルーチン記述子を呼出す命令はルーチン記述子、手続情報、及びパラメータのリストを受け取る。例えば、CallRoutineDescriptor(RoutineDescriptor *theRoutine,ProcInfoType procInfo,shortnumParams,...)が、所与のルーチン記述子によって記述されたルーチンを呼出すのに使うことができる。
しかしある種のRISC環境では、ルーチン呼出しがされたときかなりな量のパラメータ移動[shifting]が起こり得る。CallRoutineDescriptor命令の実行中に、その命令の各パラメータは別個に設けられたレジスタ中に置かれ、手続情報パラメータがそのルーチン記述子によって記述されているルーチンのためパラメータをトランスフォームするのに使われる。そのルーチン記述子によって記述されているルーチンのための各パラメータは、次に、また別のレジスタに置かれる。しかし、CallRoutineDescriptorを呼出すときにルーチン記述子によって記述されるルーチンのためのパラメータが置かれるレジスタは、そのルーチンがそのパラメータを見付け出すことを予定されているレジスタとは違うことがあり得る。このようにそのルーチンを実行するには、これらのパラメータは正しいレジスタ中に移動されていなければならない。このパラメータ移動[shifting]は時間がかかるものであり、特にモードスイッチが実際に起こらないときは不必要、不具合なものである。
したがって好ましい実施例では、そうしたパラメータを記述している情報はルーチンが呼出される前はカプセルに封じ込められたものとしている。例えば、これを達成する命令は次のようなものである。SetUpMixedMode(RoutineDescriptor *theRoutine,ProInfoType procInfo,&parameter block) このSetUpMixedMode命令で始まるプログラムまたはコードセグメントと、そのルーチン記述子で同定されるプログラムまたはコードセグメントとが同じコードタイプのときは、SetUpMixedMode命令はそのルーチン記述子によって同定されたプログラムまたはコードセグメントに有効なポインタを戻す。SetUpMixedMode命令を出したプログラムまたはコードセグメントは次に、そのルーチン記述子によって同定されたルーチン、例えば(*P)(parameter1,parameter2,...)を直接呼出し、これによってパラメータの移動量を減らしパフォーマンス速度を速める。
SetUpMixedMode命令を開始するプログラムまたはコードセグメントがネイティブなコードタイプを持ち、そのルーチン記述子によって同定されるプログラムまたはコードセグメントが非ネイティブなコードタイプを有しているときは、SetUpMixedMode命令は呼出されたときこのルーチンが&parameter blockパラメータで同定されたパラメータブロックのポインタを見つけることができるように、ポインタをルーチンに戻す。基本的にはパラメータブロックとは利用可能なメモリのブロックである。ルーチン記述子とSetUpMixedMode命令のパラメータとしてパスされた手続情報とはパラメータブロック中にストアされる。SetUpMixedMode命令を開始するプログラムまたはコードセグメントは、次にルーチンを実行する。
[スタックスイッチフレーム]
図10は、さまざまなスタックモデルと呼出し規約を有する異なる2プログラムセグメント間の遷移[transition]を供給するスタックスイッチフレーム60aを示す。このスタックスイッチフレーム60aは、異なる2つのスタック規約間に遷移域を提供することによって異なる2タイプのスタックフレームが1つのスタックポインタ58のある1つのスタックモデル上に共存することを可能にする。 あるプログラムセグメント(呼出人)が別のプログラムセグメント(被呼出人)を呼出すが、被呼出人が呼出人とは違うスタックモデルまたは呼出し規約を使うときは、スタックスイッチフレーム60aが呼出人のスタックフレーム61と被呼出人のスタックフレーム62間のスタック14に位置される。呼出人のスタックフレーム61は、そのコードまたはプロセスタイプに適したスタックフォーマットになっているのに対し、被呼出人のスタックフレーム62は、その自分のコードまたはプロセスタイプに適したスタックフォーマットになっている。
スタックスイッチフレーム60aは、被呼出人のコードまたはプログラムセグメントが実行終了すると制御を即座に呼出人に戻すことができるようにされた呼出人のスタックフレーム61に言及する情報を有する第1セグメント63と、呼出人のフォーマットから被呼出人のフォーマットへ変更するパラメータがある第2セグメント64と、期待される、つまり、被呼出人が取り扱うことができる1フォーマットでスタックスイッチフレーム60aを構成するのに適した内容を有する第3セグメント65と、を有する。
図11は、68KルーチンがネイティブなRISCルーチンを呼出すとき使われるスタックスイッチフレーム60bを示す。スタック横に記された矢印は、スタックフレームがスタックに追加されていくにつれ増大していくスタックの増大方向を示している。スタックスイッチフレーム60bは、好ましくは(68Kパラメータから派生する)68K入力パラメータ66、広域変数の内容表(“TOC”)[table of contents]のポインタ67、及び前記スタックフレームを再言及するポインタ68を有している。ポインタ68中のロービット[low bit]が1に設定され、スタックスイッチフレームであることを示している。スタックスイッチフレーム60bは、被呼出人ルーチンが非揮発性レジスタ値を保存することができるように、保管レジスタ領域69も有している。
図12は、RISCルーチンが68Kルーチンを呼出すとき使われるスタックスイッチフレーム60cを示す。スタックスイッチフレーム60cは、インジケータ70、RISCレジスタ保管領域72、保管された手続情報74、ルーチン記述子領域76、68Kレジスタ保管領域78、68Kの結果スペース80、68Kのパラメータ82、及びリターンアドレス84を有している。インジケータ70は、フレームポインタにとって非有効な値である値、つまり0、−1または奇数値にセットされる。RISCレジスタ保管領域72は、モードスイッチが作動するたびにスタックにRISCの非揮発性レジスタを保管するため使われる。ルーチン記述子領域76は、好ましくは、ミックスモード域28及び選択域29(図2)を有している。68Kの結果スペース80及び68Kパラメータ82は、68K被呼出人の呼出し規約に依存して、必要なときにスタック14上にプッシュされる。68Kパラメータ82はRISC入力パラメータから派生し変換される。リターンアドレス84は、68Kコードが実行を完了したとき呼出されるルーチンのアドレスを含んでいる。
[モードスイッチング機構]
あるルーチンが異なるスタックモデルを持つ別のルーチンを呼出すときは、呼出人はスタック14上のスタックフレームをプッシュする。するとモードスイッチング機構がスタック14上のスタックスイッチフレームをプッシュする。するとスタックポインタ58がスタックスイッチフレームの底をポイントするようにセットされる。もしそれがスタックスイッチフレーム60cなら、68Kスタックポインタがスタックスイッチフレームの底をもポイントするようセットされる。 スタックスイッチフレーム60bは、スタックポインタ58をポインタ68の値にセットし、レジスタ17のポインタ68により言及された被呼出人のスタック中のロケーションに記憶されたリターンアドレスを記憶することにより、スタック14からリリースされる。スタックスイッチフレーム60cは、保管された非揮発性レジスタを復元し、スタックポインタをこれに従ってリセットすることによりリリースされる。
スタック14は、スタック中にスタックスイッチフレーム60bまたは60cがあるとしてもフレームからフレームへとトラバースすることができる。スタックスイッチフレーム60bにとって、ポインタ68のロービットが1にセットされたら、それはスタックスイッチフレームであって、そのポインタ68中の残りのビットは被呼出人のスタックフレームポインタをポイントする。もしスタックスイッチフレーム60cにとって、インジケータ70がフレームポインタにとって有効でない値に等しいなら、それはスイッチフレームである。
使用に当たっては、コードが実行されルーチンまたはファンクション呼出しが実行されるときは、その呼出しに関係するポインタは68Kコードまたはルーチン記述子をポイントする。モードスイッチが作動するか否かを決定するのには、ルーチン記述子中のコードタイプ域が使われる。図13〜図16は68KモードとPowerPC RISCモード間をスイッチングするモードスイッチング機構について示す。図13及び図14は68KモードからRISCモードへスイッチングするときに関与するステップについて示し、図15及び図16はRISCモードから68Kモードへスイッチングするときに関与するステップについて示す。
図13、図14に示されるように、ミックスモード域28がミックスモード値に等しいか、モードスイッチがそれ以外のものを表示しているときは、ルーチン記述子が有効なルーチン記述子であることを確認するため検査する。もしそれが有効なら、選択域がどちらのオペレーションが行われるべきかをみるため検査される。
もしそれが実行オペレーションなら、手続情報域がレジスタベースのルーチンか、スタックベースのルーチンかを判断するため解釈される。もしそれがレジスタベースのルーチンなら、スタックスイッチフレームが立てられる。もしRISCルーチンがレジスタを修飾するか、レジスタ中の結果をリターンするなら、スイッチフレームがスタックスイッチフレーム上に保存されたスペースに68Kレジスタからパラメータを移すことによってセットされる。次に、いずれの場合も、パラメータがRISCレジスタに移される。
もしそれがスタックベースのルーチンなら、手続情報域によって定義されたパラメータ全てが68Kスタックを取り払い[taken off the 68K stack]、RISCレジスタ中におかれる。それからスタックスイッチフレームが立てられる。
図14に示されるように、それがスタックベースのルーチンであろうとレジスタベースのルーチンであろうと、ルーチン記述子からのターゲットアドレスはRISCコードへジャンプするために使われる。そのコードを実行後、ルーチンがレジスタベースかスタックベースかをみるため検査する。もしレジスタベースなら、出力パラメータをスタックスイッチフレームから68Kレジスタに出力パラメータを戻す。しかしもしスタックベースなら、リターン値をコピーし、もし少しでも手続情報域に存在するなら、RISCレジスタから68Kスタックへ戻す。いずれの場合も、スタックスイッチフレームをリリースして68Kコードへジャンプして戻す。
図13に示すように、もしそれがロードで実行オペレーションなら、非ネイティブコードによって既に行われたオペレーション以上のその他のローディングオペレーションが行われる。これらのローディングオペレーションは、例えば、リロケーション、ランタイムバインディング、初期化などを含む。次に手続情報が解釈され、実行オペレーションにつき記載したのと同じステップが行われる。
もしそれがリターンオペレーションなら、リターン結果が68Kスタックから外され[pull off]、ネイティブなRISCリターンレジスタに入力される。保管されていた非揮発性レジスタが復元され、スタックスイッチフレームがリリースされる。コントロールが次に呼出しコードに戻る。
図15及び図16は、RISCコードと68Kコード間のスイッチング機構を示す。ルーチン記述子を上記の変形実施例のいずれかを使って呼出す。次にスタックスイッチフレームを割り当て、RISC非揮発性レジスタの全てを後で記憶するためスタックスイッチフレーム中に保管する。
次にそれがレジスタベースかスタックベースかを決定し、それがレジスタベースなら、入力パラメータをネイティブなレジスタから引き出し、68Kレジスタに入力する。
次に68Kスタックフレームが立てられる。もし68Kルーチンがある値をリターンするなら、そのためのスペースがスタックフレーム中に割り当てられる。RISCコードから入ってきたパラメータが68Kスタックフレームに入力される。リターンアドレスがリターン値に等しい選択域を有している特別なルーチン記述子をポイントする値にセットされる。
ルーチンアドレスをルーチン記述子から取り出し、エミュレータが呼出される。エミュレータはそのコードを実行し、これが終了したとき、特別なルーチン記述子の始めとなるようにセットされたリターンアドレスを実行するべく試みる。エミュレータがそれを実行しようとすると、コントロールがモードスイッチング機構に戻される。モードスイッチング機構は選択域を検査するもので、リターンオペレーションと等しく、また、上述のような適当な動作をする。
[1オブジェクトコードタイプの多数の呼出し規約]
本発明はまた、1つのオブジェクトコードタイプ内の異なる呼出し規約間をスイッチングするのにも使うことができる。例えば本発明はFORTRANとPASCALとをスイッチングするのに使うことができる。この場合、モードスイッチング機構は、実行またはコードタイプモードスイッチングは何も起こらないことを除けばほぼ同一で、むしろ呼出し規約の変形だけが行われる。また、スイッチングはコードタイプ間では発生せず呼出し規約間でだけしか発生しないので、スタックスイッチフレームも簡素化できる。
[1ルーチン内の多数の呼出し規約]
本発明はまた、ルーチン、つまり多数の呼出し規約を持っているコードまたはプログラムセグメントでも使うことができる。例えば、あるルーチンは第1のパラメータがセレクタ[selector]でその他のパラメータは数、大きさ、内容及びタイプのそれぞれでその選択値[selector value]に左右されて変化するファンクションであることがある。図17は記憶装置16が複数の域92のあるルックアップテーブル90を有している好ましい実施例を示す。ルーチン記述子20は有効な各選択値と関係し、そのルーチン記述子はその選択値に対応するプログラムまたはコードセグメントを照合する。ルックアップテーブル90中の第1域92aは、ルーチンに対応するルックアップテーブル中の適切な域92を探索[look
up]するプログラムセグメントまたはコードセグメントに分岐せよとする指示を有している。当該域92は選択値と結合して、どのルーチン記述子を使用し、それによってどのコードセグメントまたはプログラムセグメントを実行するかを決定するのに使われる。
例えば、あるルーチンは1、2、または3という3つの異なる有効値を持つことができるセレクタの第1パラメータを持っていて、そのセレクタの値次第でそれぞれ従う1、2、または3のパラメータを持つことができる。即ち、もし選択値が1なら、1パラメータがそのセレクタに従うが、もし選択値が2なら、2つのパラメータがそのセレクタに従う。各選択値にとって、1ルーチン記述子20は正しいパラメータ数だけそのルーチンを行うように1コードセグメントまたは1プログラムセグメントに関連している。
ルーチンがルックアップテーブル90中に探索されると、どのルーチン記述子を使い、それによってどのコードセグメントまたはプログラムセグメントを実行するかを決定するため選択値が使われる。
最後に、上述実施例の技術的な特徴についてまとめておく。
第1の技術的な特徴は、1プロセッサ環境中にさまざまなオブジェクトコードタイプを有する複数のプログラムセグメントを実行する装置であって、つぎの構成要素を含むことを特徴とする装置にある。
(a)プロセッサー。
(b)メモリー。
(c)該プロセッサーがアクセスできるスタック。このスタックは、第1スタックフレームと第2スタックフレームを備え、該第1スタックフレームは第1オブジェクトコードタイプを有する第1コードセグメントに関係付けられ、第2スタックフレームは第2オブジェクトコードタイプを有する第2コードセグメントに関係付けられる。第1及び第2のオブジェクトコードタイプは互換性がないので第1及び第2のスタックフレームを異なるフォーマットになるようにされる。上記第1コードタイプは第1の呼出メカニズムに関係付けられ上記第2コードタイプは第2の呼出メカニズムに関係付けられ、これら第1及び第2の呼出メカニズムも互換性がないものとされている。
(d)スタックスイッチフレーム。このスタックスイッチフレームは、上記スタックにおいて、上記第1及び第2スタックフレーム間に配置される。さらにこのスタックフレームスイッチは、第1スタックフレームを参照する第1セグメントと、第1スタックフレームのフォーマットから第2スタックフレームのフォーマットに変換されたパラメータを持つ第2セグメントと、スタックスイッチフレーム本体が第2スタックフレームにより参照可能なフォーマットになるようにする第3セグメント情報とを有するものと、
(e)第1モードから第2モードへ切り換えるスイッチを示す指示手段。
(f)複数のオブジェクトコードタイプのうちの1つを有するコードセグメントを実行する実行手段。
上記実行手段は、上記第1コードセグメントを上記第1モードで実行し、上記第2コードセグメントを上記第2モードで実行する。上記指示手段は、上記第1コードセグメントが上記第1呼出メカニズムを使って上記第2コードセグメントを呼び出したとき起動される。
(g)第1モードから第2モードへ切り換えるスイッチ手段。このスイッチ手段は、上記指示手段によって作動される。
上記実行手段は、上記第1コードセグメントの実行時に上記スタック上に上記第1スタックフレームを割り当て、上記スイッチ手段が第1モードから第2モードへ切り換えたとき上記スタックスイッチフレームと上記第2スタックフレームを上記スタックに割り当てて上記第2呼出メカニズムを使って上記第2コードセグメントを実行する。
(h)上記第1モードに戻る戻り手段。この戻り手段は、上記第2コードセグメントの実行を終えたら作動する。
第2の技術的な特徴は、同一のオブジェクトコードタイプを持つが互換性のない呼出メカニズムとなっている複数のソフトウエアルーチンを呼び出す複数のメカニズムを実行する装置であって、つぎの構成要素を含むことを特徴とする装置にある。
(a)プロセッサー。
(b)上記プロセッサーがアクセスできるメモリー。
(c)該プロセッサーがアクセスできるスタック。このスタックは、第1スタックフレームと第2スタックフレームを備え、該第1スタックフレームは第1オブジェクトコードタイプを有する第1コードセグメントに関係付けられ、第2スタックフレームは第2オブジェクトコードタイプを有する第2コードセグメントに関係付けられる。第1及び第2のオブジェクトコードタイプは互換性がないので第1及び第2のスタックフレームを異なるフォーマットになるようにされる。上記第1コードタイプは第1の呼出メカニズムに関係付けられ上記第2コードタイプは第2の呼出メカニズムに関係付けられ、これら第1及び第2の呼出メカニズムも互換性がないものとされている。
(d)スタックスイッチフレーム。このスタックスイッチフレームは、上記スタックにおいて、上記第1及び第2スタックフレーム間に配置される。さらにこのスタックスイッチフレームは、第1スタックフレームを参照する第1セグメントと、第1スタックフレームのフォーマットから第2スタックフレームのフォーマットに変換されたパラメータを持つ第2セグメントと、スタックスイッチフレーム本体が第2スタックフレームにより参照可能なフォーマットになるようにする第3セグメントとを有する。
(e)第1ソフトウエアルーチンと第2ソフトウエアルーチンを特定する特定手段。該第1ソフトウエアルーチンと第2ソフトウエアルーチンは同一のオブジェクトコードタイプを有し、第1ソフトウエアルーチンは第1呼出メカニズムで呼び出すことができ第2ソフトウエアルーチンは第2呼出メカニズムで呼び出すことができる。第1呼出メカニズムは第2呼出メカニズムと互換性がない。
(f)上記第1ソフトウェアルーチンが上記第1呼出メカニズムを使用して上記第2ソフトウェアルーチンを呼び出そうとしたことに応答して、上記第2呼出メカニズムを利用して上記第2ソフトウェアルーチンを呼び出す第2呼出メカニズム利用手段。第2呼出メカニズム利用手段は、上記スタックスイッチフレームと上記第2スタックセグメントを上記スタックに割り当て、上記第2ソフトウエアルーチンを実行する。
(g)上記第1モードに戻る戻り手段。この戻り手段は、上記第2ソフトウエアルーチンの実行を終えたら作動する。
第3の技術的な特徴は、複数の呼出メカニズムを有するソフトウエアルーチンを実行する装置であって、該ソフトウエアルーチンは1または2以上のパラメータを持ち、第1パラメータはセレクタで、他のパラメータは該セレクタの値によって数、サイズ、内容、及びタイプを異にするものであり:メモリーと;1または2以上のセレクタ値を特定する特定手段であって、これらセレクタ値は1または2以上のパラメータの具体的な構成に関係しているものと;複数のルーチン記述子であって、これら複数のルーチン記述子の1つ1つにセレクタ値各々を関連づけ、関連づけられたセレクタ値と関係する特定のパラメータ構成でソフトウエアルーチンを実装するコードセグメントを参照するものと;セレクタ値を特定する特定手段と;上記メモリー中のテーブルであって複数のフィールドを備え、該フィールド中には、テーブル中のフィールドの値を取り出すためにプログラムを分岐するインストラクションを参照する第1フィールドと、他の複数のフィールドとが含まれ、これら他のフィールド各々は各々有効に特定されたセレクタ値を有してルーチン記述子と関連づけられているものと;特定のセレクタ値に従って上記テーブル中のセレクタ値のフィールドから値を取り出す手段と;該特定のセレクタ値のフィールドに関連づけられたルーチン記述子によって識別されたコードセグメントを実行する実行手段とをを有することを特徴とする装置にある。
第4の技術的な特徴は、プロセッサーとメモリーを備えた、1プロセッサー環境中の複数のオブジェクトコードタイプを実行する装置であって、これら複数のオブジェクトコードタイプは少なくとも第1のオブジェクトコードタイプと第2のオブジェクトコードタイプを有し、該第1及び第2のオブジェクトコードタイプは互換性がないものであって:上記第1オブジェクトコードタイプを有する第1ソフトウエアルーチンを特定する特定手段と;上記第2オブジェクトコードタイプを有する第2ソフトウエアルーチンを特定する特定手段と;上記第1オブジェクトコードタイプから上記第2オブジェクトコードタイプへ切り換えるスイッチを指定する指定手段であって、上記第1ソフトウエアルーチンに透過的なものと;上記第1ソフトウエアルーチンの実行中に上記指定手段に遭遇したとき上記第1オブジェクトコードタイプから上記第2オブジェクトコードタイプへ切り換えるスイッチ手段であって、この切替が上記第1ソフトウエアルーチンに透過的に実行されるものと;上記第2ソフトウエアルーチンを実行する実行手段であって、上記第1オブジェクトコードタイプから第2オブジェクトコードタイプへ切り換えられたとき作動するように上記スイッチ手段に接続されたものと;上記第2ソフトウエアルーチンの実行が終わったら上記第1オブジェクトコードタイプに戻る戻り手段であって、上記第1ソフトウエアルーチンの実行を再開するものとを有することを特徴とする装置にある。
第5の技術的な特徴は、1プロセッサー環境中でさまざま異なるオブジェクトコードタイプの複数のソフトウエアルーチンを実行する装置であって;ソフトウエアルーチンを記述するルーチン記述子と;該ルーチン記述子中に置かれるモード間を差別化するミクストモード域と;上記ミクストモード域を特定の所定値にセットするセット手段と;上記ルーチン記述子中に置かれるプロシージャポインタであって、ソフトウエアルーチンを指定するものと;上記ルーチン記述子に配置され、特定されたソフトウエアルーチンのオブジェクトコードタイプを指定する指示手段と;上記特定されたソフトウェアルーチンのオブジェクトコードタイプを特定するために上記指示手段をセットするセット手段と;上記特定されたソフトウエアルーチンが、当該特定されたソフトウェアルーチンと互換性のないオブジェクトコードタイプの他のソフトウエアルーチンから呼び出されるときに上記特定されたソフトウェアルーチンを実行する実行手段とを有することを特徴とする装置にある。
第6の技術的な特徴は、同一のオブジェクトコードタイプだが互換性のない呼出メカニズムのソフトウエアルーチンを呼出すための複数のメカニズムを実行する装置であって:プロセッサと;該プロセッサがアクセスできるメモリーと;第1ソフトウエアルーチンと第2ソフトウエアルーチンとを特定する特定手段であって、該第1ソフトウエアルーチンと第2ソフトウエアルーチンは同一のオブジェクトコードタイプを持ち、第1ソフトウエアルーチンは第1呼出メカニズムにより呼び出されることができ、第2ソフトウエアルーチンは第2呼出メカニズムにより呼び出されることができるが、これら第1呼出メカニズムと第2呼出メカニズムとは互換性がないものと;上記第1ソフトウェアルーチンが上記第1呼出メカニズムを使用して上記第2ソフトウェアルーチンを呼び出そうとしたことに応答して、上記第2呼出メカニズムを利用して上記第2ソフトウェアルーチンを呼び出す第2呼出メカニズム利用手段であって、上記第2ソフトウエアルーチンを実行するものと;上記第1モードへ戻す戻し手段であって、上記第2ソフトウエアルーチンの実行が完了したら作動するものとを有することを特徴とする装置にある。
第7の技術的な特徴は、少なくとも1つのプロセッサとメモリーとを備えたコンピュータシステムにおけるプロセッサ環境中で複数のモードを実行する方法であって、該モード各々は該プロセッサにより実行することができる関連する一組の有効なインストラクションを持つものであり、以下のステップを有する方法にある。
(a)メモリーにルーチン記述子を割り当てるステップ。
(b)ルーチン記述子のアドレスにポインタをセットするステップ。
(c)第1モードでは無効なインストラクションに等しい内容にルーチン記述子中の第1域をセットするステップ。この第1域はルーチン記述子をポイントするポインタが第1域の内容をポイントするように配置されている。
(d)ルーチン記述子中のプロシージャポインタ域の内容を第1モード以外のモードで実行できるソフトウエアルーチンのアドレスにセットするステップ。
(e)上記第1域の内容を第1モードで実行するステップ。
(f)第1モードでは無効なインストラクションを実行したときモードを切り換えて、該第1モードと異なる第2モードであってソフトウエアルーチンを実行できるものにするステップ。
(g)第2モードへ切り換えた後、プロシージャポインタ域でアドレスされたルーチンを実行するステップ。
第7の技術的な特徴は、1ルーチン中に1ソフトウエアルーチンを呼び出す複数のメカニズムを実行する方法であって:複数域を有するルックアップテーブルを作成し;該複数域中にモード切り換えメカニズムを特定するため上記複数域中に第1域をセットし;ルーチンにとって有効なセレクタ値をそれぞれ取り扱うコードまたはプログラムのセグメントを書き込み;該コードまたはプログラムのセグメント各々のためのルーチン記述子を作成し;それら各々のルーチン記述子のためのルックアップテーブル中に域をセットし;セレクタ値に基づきルックアップテーブル中に具体的な域を探索し;該具体的域により指定されたルーチン記述子により記述されたルーチンを実行するステップを有することを特徴とする方法にある。
本発明に従ってミックスモードを実行するのに適した各構成部分を有するコンピュータシステムを示す。 ルーチン記述子を示す。 手続情報域の内容を示す。 手続情報域の内容を示す。 手続情報域の内容を示す。 手続情報域の内容を示す。 手続情報域の内容を示す。 手続情報域の内容を示す。 レジスタパラメータ域の内容を示す。 スタックスイッチフレームの1構成を示す。 スタックスイッチフレームの1構成を示す。 スタックスイッチフレームの1構成を示す。 68KモードからRISCモードへスイッチングするときに関係するステップを示す。 図13の続き(68KモードからRISCモードへスイッチングするときに関係するステップを示す。) RISCモードから68Kモードへスイッチングするときに関係するステップを示す。 図15の続き(RISCモードから68Kモードへスイッチングするときに関係するステップを示す。) 多数の呼出し規約があるルーチンを取り扱うのに好ましい実施例を示す。
符号の説明
12 CPU
14 スタック
16 記憶装置
20 ルーチン記述子
40 呼出し規約域
42 結果サイズ域
44 レジスタパラメータ域
46 結果サイズ域
48 パラメータサイズ域
50 セレクタサイズ域
52 ユーザ定義可能域

Claims (2)

  1. 異なるオブジェクトコードタイプを有する複数のソフトウェアルーチンをプロセッサが実行する装置であって、該プロセッサは、少なくとも対応するソフトウェアルーチンのオブジェクトコードタイプとそのタイプの実行モードと該実行モードの切り換えに関わるソフトウェアルーチンのオブジェクトコードタイプに応じた切り換え動作とを記述している各ルーチン記述子であってメモリに格納されたそれぞれのルーチン記述子の情報に基づいて実行する手段を有しており、この手段が、
    第1オブジェクトコードタイプの第1ソフトウェアルーチンを実行するための第1実行モードから第2オブジェクトコードタイプの第2ソフトウェアルーチンを実行するための第2実行モード、前記ルーチン記述子に記述された切り換え動作にしたがって選択されたスイッチフレームにしたがって切り換えを行う手段を有しており、
    さらに、前記スイッチフレームは、前記第1実行モードで実行される第1ソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットの第1スタックフレームと前記第2実行モードで実行される第2ソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットの第2スタックフレームとの間に配置されるスタックスイッチフレームであり、このスタックスイッチフレームが、前記第2実行モードが終了した段階で制御を第1実行モードに戻すことができるようにするために該第1実行モードの情報を有する第1セグメントと、第1実行モードで実行される第1ソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットから第2実行モードで実行される第2ソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットに変換されたパラメータを有する第2セグメントと、前記スタックスイッチフレームへの前記第2スタックフレームによる参照を可能にする情報を有する第3セグメントとを有することを特徴とする装置。
  2. プロセッサー環境中でさまざま異なるオブジェクトコードタイプの複数のソフトウエアルーチンを実行する装置であって、
    ソフトウエアルーチンを記述するルーチン記述子と、
    該ルーチン記述子中に置かれるモード間を差別化するミクストモード域と、
    前記ミクストモード域を特定の所定値にセットするセット手段と、
    前記ルーチン記述子中に置かれる、実行されるべきモード切り換え動作のタイプを示す値を有した選択域と、
    前記ルーチン記述子中に置かれた、ソフトウエアルーチンを指定するプロシージャポインタと、
    前記ルーチン記述子に配置され、特定されたソフトウエアルーチンのオブジェクトコードタイプを指定する指示手段と、
    前記特定されたソフトウェアルーチンのオブジェクトコードタイプを特定するために前記指示手段をセットするセット手段と、
    前記特定されたソフトウエアルーチンが、当該特定されたソフトウェアルーチンと互換性のないオブジェクトコードタイプの他のソフトウエアルーチンから呼び出されるときに、前記選択域に保持された値に応じた切り換え動作を経て前記特定されたソフトウェアルーチンを実行する実行手段と、
    を有し、
    前記切り換え動作が、呼出側のソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットの第1スタックフレームと被呼出側のソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットの第2スタックフレームとの間にスタックスイッチフレームを配置することを含み、かつ、このスタックスイッチフレームが、前記被呼出側のソフトウェアルーチンが終了した段階で制御を呼出側のソフトウェアルーチンに戻すことができるようにするために被呼出側のソフトウェアルーチンの情報を有する第1セグメントと、呼出側のソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットから被呼出側のソフトウェアルーチンのオブジェクトコードタイプに適したフォーマットに変換されたパラメータを有する第2セグメントと、前記スタックスイッチフレームへの前記第2スタックフレームによる参照を可能にする情報を有する第3セグメントとを有することを特徴とする装置。
JP2006207207A 1992-12-18 2006-07-28 複数のプログラムセグメントを実行する装置 Expired - Fee Related JP4298728B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/993,923 US5452456A (en) 1992-12-18 1992-12-18 Apparatus for executing a plurality of program segments having different object code types in a single program or processor environment

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2005018957A Division JP3968377B2 (ja) 1992-12-18 2005-01-26 1プログラムまたは1プロセッサ環境中にさまざまなオブジェクトコードタイプがある複数のプログラムセグメントを実行する装置および方法

Publications (2)

Publication Number Publication Date
JP2006331450A JP2006331450A (ja) 2006-12-07
JP4298728B2 true JP4298728B2 (ja) 2009-07-22

Family

ID=25540073

Family Applications (4)

Application Number Title Priority Date Filing Date
JP51525494A Expired - Lifetime JP3508775B2 (ja) 1992-12-18 1993-12-14 一つのプログラムの中でまたは1つのプロセッサ環境に於て、夫々のオブジェクトコードタイプが異なる複数のプログラムセグメントを実行するための装置
JP2003277282A Expired - Lifetime JP3705547B2 (ja) 1992-12-18 2003-07-22 1プログラムまたは1プロセッサ環境中にさまざまなオブジェクトコードタイプがある複数のプログラムセグメントを実行する装置
JP2005018957A Expired - Lifetime JP3968377B2 (ja) 1992-12-18 2005-01-26 1プログラムまたは1プロセッサ環境中にさまざまなオブジェクトコードタイプがある複数のプログラムセグメントを実行する装置および方法
JP2006207207A Expired - Fee Related JP4298728B2 (ja) 1992-12-18 2006-07-28 複数のプログラムセグメントを実行する装置

Family Applications Before (3)

Application Number Title Priority Date Filing Date
JP51525494A Expired - Lifetime JP3508775B2 (ja) 1992-12-18 1993-12-14 一つのプログラムの中でまたは1つのプロセッサ環境に於て、夫々のオブジェクトコードタイプが異なる複数のプログラムセグメントを実行するための装置
JP2003277282A Expired - Lifetime JP3705547B2 (ja) 1992-12-18 2003-07-22 1プログラムまたは1プロセッサ環境中にさまざまなオブジェクトコードタイプがある複数のプログラムセグメントを実行する装置
JP2005018957A Expired - Lifetime JP3968377B2 (ja) 1992-12-18 2005-01-26 1プログラムまたは1プロセッサ環境中にさまざまなオブジェクトコードタイプがある複数のプログラムセグメントを実行する装置および方法

Country Status (8)

Country Link
US (2) US5452456A (ja)
EP (1) EP0674783B1 (ja)
JP (4) JP3508775B2 (ja)
AT (1) ATE171554T1 (ja)
AU (1) AU5801294A (ja)
CA (1) CA2152041C (ja)
DE (1) DE69321255T2 (ja)
WO (1) WO1994015283A1 (ja)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199200B1 (en) * 1994-04-15 2001-03-06 International Business Machines Corporation Method and system for supporting dual conventions for methods that return structures
CN1183841A (zh) * 1995-02-13 1998-06-03 英特特拉斯特技术公司 用于安全交易管理和电子权利保护的系统和方法
US5748963A (en) * 1995-05-12 1998-05-05 Design Intelligence, Inc. Adaptive binding
US5696956A (en) * 1995-11-08 1997-12-09 Digital Equipment Corporation Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents
US6091897A (en) 1996-01-29 2000-07-18 Digital Equipment Corporation Fast translation and execution of a computer program on a non-native architecture by use of background translator
US6535903B2 (en) * 1996-01-29 2003-03-18 Compaq Information Technologies Group, L.P. Method and apparatus for maintaining translated routine stack in a binary translation environment
US5784638A (en) * 1996-02-22 1998-07-21 International Business Machines Corporation Computer system supporting control transfers between two architectures
US5835958A (en) * 1996-10-29 1998-11-10 Sun Microsystems, Inc. Method and apparatus for dynamically sizing non-contiguous runtime stacks
US5961639A (en) * 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US5896522A (en) * 1996-12-31 1999-04-20 Unisys Corporation Selective emulation interpretation using transformed instructions
US6012129A (en) * 1997-03-31 2000-01-04 International Business Machines Corporation Apparatus and method allocating virtual memory upon demand
US5946695A (en) * 1997-10-20 1999-08-31 Micron Electronics, Inc. Method for viewing and providing to a user parameter-specific information
US6026431A (en) * 1997-10-20 2000-02-15 Micron Electronics, Inc. System for providing a user with parameter-specific information
US6295640B1 (en) * 1998-05-08 2001-09-25 Apple Computer, Inc. Method and apparatus for distinguishing reference values from non-reference values in a runtime environment
US6279082B1 (en) 1998-10-14 2001-08-21 Telefonaktiebolaget Lm Ericsson (Publ) System and method for efficient use of cache to improve access to memory of page type
US8065504B2 (en) 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US8074055B1 (en) * 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
JP2001142692A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法
JP4277396B2 (ja) * 1999-11-30 2009-06-10 株式会社デンソー 電子制御装置
US7765581B1 (en) 1999-12-10 2010-07-27 Oracle America, Inc. System and method for enabling scalable security in a virtual private network
GB2358261B (en) * 2000-01-17 2004-06-09 Advanced Risc Mach Ltd Data processing with native and interpreted program instruction words
AU2001257566A1 (en) 2000-05-08 2001-11-20 Transilica, Inc. Priority in a portable thread environment
US6961934B2 (en) * 2000-05-08 2005-11-01 Microtune (San Diego), Inc. Portable thread environment
US6651132B1 (en) 2000-07-17 2003-11-18 Microsoft Corporation System and method for emulating the operation of a translation look-aside buffer
US7069205B1 (en) * 2000-07-17 2006-06-27 Microsoft Corporation System and method for emulating the operation of a video graphics adapter
US7506265B1 (en) 2000-07-17 2009-03-17 Microsoft Corporation System and method for displaying images of virtual machine environments
US7085705B2 (en) * 2000-12-21 2006-08-01 Microsoft Corporation System and method for the logical substitution of processor control in an emulated computing environment
US6980946B2 (en) * 2001-03-15 2005-12-27 Microsoft Corporation Method for hybrid processing of software instructions of an emulated computer system
US6968350B2 (en) * 2001-04-07 2005-11-22 Microsoft Corporation Method for establishing a virtual hard drive for an emulated computer system running on a host computer system
US20020154635A1 (en) * 2001-04-23 2002-10-24 Sun Microsystems, Inc. System and method for extending private networks onto public infrastructure using supernets
US6907519B2 (en) * 2001-11-29 2005-06-14 Hewlett-Packard Development Company, L.P. Systems and methods for integrating emulated and native code
JP4042527B2 (ja) * 2002-10-29 2008-02-06 株式会社日立製作所 呼出規約変換処理の生成方法
US8271976B2 (en) * 2004-06-30 2012-09-18 Microsoft Corporation Systems and methods for initializing multiple virtual processors within a single virtual machine
JP2008518300A (ja) * 2004-10-25 2008-05-29 ローベルト ボッシュ ゲゼルシャフト ミット ベシュレンクテル ハフツング 少なくとも2つの実行ユニットを備えるコンピュータシステムにおけるプログラムコードの処理分割方法および装置
US20080313384A1 (en) * 2004-10-25 2008-12-18 Ralf Angerbauer Method and Device for Separating the Processing of Program Code in a Computer System Having at Least Two Execution Units
GB2424092A (en) 2005-03-11 2006-09-13 Transitive Ltd Switching between code translation and execution using a trampoline
WO2006095155A1 (en) * 2005-03-11 2006-09-14 Transitive Limited Execution control during program code conversion
US10317892B2 (en) * 2014-10-15 2019-06-11 Brigham Young University System and method for concurrent multi-user computer-aided manufacturing
US10181030B2 (en) 2015-07-24 2019-01-15 Citrix Systems, Inc. Blocking routine redirection
US10977101B2 (en) 2018-12-12 2021-04-13 International Business Machines Corporation Interoperability between programs associated with different addressing modes
US11249760B2 (en) 2019-04-10 2022-02-15 International Business Machines Corporation Parameter management between programs
US11294695B2 (en) 2020-05-28 2022-04-05 International Business Machines Corporation Termination of programs associated with different addressing modes
US11231918B1 (en) 2020-08-31 2022-01-25 Microsoft Technologly Licensing, LLC Native emulation compatible application binary interface for supporting emulation of foreign code
US11403100B2 (en) 2020-08-31 2022-08-02 Microsoft Technology Licensing, Llc Dual architecture function pointers having consistent reference addresses
US11042422B1 (en) * 2020-08-31 2021-06-22 Microsoft Technology Licensing, Llc Hybrid binaries supporting code stream folding
US11947993B2 (en) 2021-06-22 2024-04-02 International Business Machines Corporation Cooperative input/output of address modes for interoperating programs
US11556356B1 (en) 2021-09-23 2023-01-17 International Business Machines Corporation Dynamic link objects across different addressing modes

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4084235A (en) * 1975-04-14 1978-04-11 Honeywell Information Systems Inc. Emulation apparatus
US4589087A (en) * 1983-06-30 1986-05-13 International Business Machines Corporation Condition register architecture for a primitive instruction set machine
JPS6017539A (ja) * 1983-07-11 1985-01-29 Hitachi Ltd エミユレ−シヨン方式
US4825358A (en) * 1985-04-10 1989-04-25 Microsoft Corporation Method and operating system for executing programs in a multi-mode microprocessor
US5027273A (en) * 1985-04-10 1991-06-25 Microsoft Corporation Method and operating system for executing programs in a multi-mode microprocessor
US4779187A (en) * 1985-04-10 1988-10-18 Microsoft Corporation Method and operating system for executing programs in a multi-mode microprocessor
US4766566A (en) * 1986-08-18 1988-08-23 International Business Machines Corp. Performance enhancement scheme for a RISC type VLSI processor using dual execution units for parallel instruction processing
US4974159A (en) * 1988-09-13 1990-11-27 Microsoft Corporation Method of transferring control in a multitasking computer system
JP2655615B2 (ja) * 1988-12-08 1997-09-24 日本電気株式会社 情報処理装置
US5146593A (en) * 1989-03-06 1992-09-08 International Business Machines Corporation Procedure call interface
EP0414624B1 (en) * 1989-08-24 1996-12-18 International Business Machines Corporation System for calling procedures on a remote network node
US5754855A (en) * 1994-04-21 1998-05-19 International Business Machines Corporation System and method for managing control flow of computer programs executing in a computer system

Also Published As

Publication number Publication date
ATE171554T1 (de) 1998-10-15
WO1994015283A1 (en) 1994-07-07
DE69321255T2 (de) 1999-05-27
JP3508775B2 (ja) 2004-03-22
US5452456A (en) 1995-09-19
US6256658B1 (en) 2001-07-03
AU5801294A (en) 1994-07-19
CA2152041A1 (en) 1994-07-07
JP3968377B2 (ja) 2007-08-29
JPH08506195A (ja) 1996-07-02
JP3705547B2 (ja) 2005-10-12
EP0674783B1 (en) 1998-09-23
EP0674783A1 (en) 1995-10-04
JP2006331450A (ja) 2006-12-07
JP2004046881A (ja) 2004-02-12
CA2152041C (en) 1999-03-16
DE69321255D1 (de) 1998-10-29
JP2005149532A (ja) 2005-06-09

Similar Documents

Publication Publication Date Title
JP4298728B2 (ja) 複数のプログラムセグメントを実行する装置
EP0752646B1 (en) Data access implementation of device driver interface
US5835768A (en) Computer operating system providing means for formatting information in accordance with specified cultural preferences
EP1385090B1 (en) Program code conversion for variably sized registers
AU2004200608B2 (en) Extreme pipeline and optimized reordering technology
US6766513B2 (en) Method and system of memory management using stack walking
CA2082409C (en) Improved system and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment
KR100503077B1 (ko) 자바 실행 장치 및 자바 실행 방법
CA1319439C (en) System for processing data to facilitate the creation of executable images
JPH08339296A (ja) 動的リンク・ライブラリをプログラムにリンクする方法
EP0822486B1 (en) Emulation of asynchronous signals using a branch mechanism
CA1172375A (en) Program call method
US7003768B2 (en) Method and apparatus for class intialization barriers and access to class variables in multitasking virtual machines
US6199117B1 (en) Generalized control for starting of tasks (processes and threads)
US5581769A (en) Multipurpose program object linkage protocol for upward compatibility among different compilers
US7219337B2 (en) Direct instructions rendering emulation computer technique
WO2002097552A2 (en) Method for fast compilation of preverified java bytecode to high quality native machine code
JP3293821B2 (ja) 動的リンクシステム
Montuelle CUFOM: the CERN Universal Format for Object Modules
Feriozi AC programming model for OS/2 device drivers
Thomas Mite: a fast and flexible virtual machine

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080201

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20080201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080520

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080820

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080825

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080922

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081028

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090122

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090324

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090415

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120424

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees