[go: up one dir, main page]

JP7335591B2 - コンピューティングシステムおよび情報処理方法 - Google Patents

コンピューティングシステムおよび情報処理方法 Download PDF

Info

Publication number
JP7335591B2
JP7335591B2 JP2019134554A JP2019134554A JP7335591B2 JP 7335591 B2 JP7335591 B2 JP 7335591B2 JP 2019134554 A JP2019134554 A JP 2019134554A JP 2019134554 A JP2019134554 A JP 2019134554A JP 7335591 B2 JP7335591 B2 JP 7335591B2
Authority
JP
Japan
Prior art keywords
code
intermediate code
computing device
machine code
software development
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.)
Active
Application number
JP2019134554A
Other languages
English (en)
Other versions
JP2021018650A5 (ja
JP2021018650A (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.)
Connectfree Corp
Original Assignee
Connectfree Corp
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
Priority to JP2019134554A priority Critical patent/JP7335591B2/ja
Application filed by Connectfree Corp filed Critical Connectfree Corp
Priority to EP20844769.8A priority patent/EP4006716A4/en
Priority to PCT/JP2020/028185 priority patent/WO2021015182A1/ja
Priority to TW109124608A priority patent/TW202105171A/zh
Priority to US17/613,452 priority patent/US20220214867A1/en
Publication of JP2021018650A publication Critical patent/JP2021018650A/ja
Publication of JP2021018650A5 publication Critical patent/JP2021018650A5/ja
Priority to JP2023130821A priority patent/JP7592334B2/ja
Application granted granted Critical
Publication of JP7335591B2 publication Critical patent/JP7335591B2/ja
Priority to JP2024198004A priority patent/JP2025020384A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16YINFORMATION AND COMMUNICATION TECHNOLOGY SPECIALLY ADAPTED FOR THE INTERNET OF THINGS [IoT]
    • G16Y30/00IoT infrastructure

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本開示は、コンピューティングシステムおよび情報処理方法に関する。
近年の情報通信技術(Information and Communication Technology:ICT)の進歩は目覚ましく、インターネットなどのネットワークに接続されるデバイスは、従来のパーソナルコンピュータやスマートフォンといった情報処理装置に限らず、様々なモノ(things)に広がっている。このような技術トレンドは、「IoT(Internet of Things;モノのインターネット)」と称され、様々な技術およびサービスが提案および実用化されつつある。将来的には、地球上の数十億人と数百億または数兆のデバイスとが同時につながる世界が想定されている。このようなネットワーク化された世界を実現するためには、よりシンプル、より安全、より自由につながることができるソリューションを提供する必要がある。
IoTで利用されるデバイス(「エッジデバイス」とも称される。)のインテリジェント化に伴って、様々な種類のアプリケーションプログラムの作成が必要となっている。一方で、様々な種類のエッジデバイスが存在するとともに、ハードウェアの仕様なども頻繁に変更される事態が想定される。
例えば、特開2004-038956号公報は、様々なコンピューティングデバイスで利用可能なコンピューティングリソースを発見し示すための、またこうしたリソースをソフトウェアアプリケーションによってアドレス指定可能なサービスとして露出するためのシステムを開示する。
特開2004-038956号公報
このようなアプリケーションプログラムは、上述の特開2004-038956号公報(特許文献1)に開示されるように各コンピューティングデバイスが利用できるリソースを意識することなく、作成できることが好ましい。
本開示の典型的な目的は、コンピューティングデバイスのハードウェア構成を意識することなくアプリケーションプログラムを作成できるとともに、各コンピューティングデバイスのハードウェア構成に応じた処理の実行を可能にするソリューションを提供することである。
本開示のある形態に従うコンピューティングシステムは、プロセッサを含むコンピューティングデバイスと、コンピューティングデバイスで実行されるアプリケーションプログラムを作成するためのソフトウェア開発装置とを含む。ソフトウェア開発装置は、1または複数の命令と処理対象のデータとを含むソースをコンパイルして中間コードを生成する第1のコンパイラを含む。コンピューティングデバイスは、中間コードに含まれる1または複数の命令をコンピューティングデバイスのハードウェア構成を反映してマシンコードを生成する第2のコンパイラを含む。コンピューティングデバイスのプロセッサは、マシンコードの生成後に、当該生成されたマシンコードを実行する。
中間コードは、当該中間コードに対する電子証明書、および、当該電子証明書に基づく認証処理を実行するための認証命令を含んでいてもよく、マシンコードが実行されることで、認証命令により電子証明書に基づく認証処理が実現されてもよい。
中間コードは、コンテンツ、当該コンテンツの著作権管理するための著作権管理情報、および、当該著作権管理情報に基づく著作権管理を実行するための管理命令を含んでいてもよい。マシンコードが実行されることで、管理命令により著作権管理情報に基づいてコンテンツの利用可否が判断されてもよい。
第2のコンパイラは、第2のコンパイラが参照するデータを更新するための管理モジュールを含んでいてもよい。
中間コードは、第2のコンパイラでのマシンコードの生成を支援するための補助情報を含んでいてもよい。
本開示の別の形態に従えば、プロセッサを含むコンピューティングデバイス、および、コンピューティングデバイスで実行されるアプリケーションプログラムを作成するためのソフトウェア開発装置とを含むコンピューティングシステムにおいて実行される情報処理方法が提供される。情報処理方法は、ソフトウェア開発装置が、1または複数の命令と処理対象のデータとを含むソースをコンパイルして中間コードを生成するステップと、コンピューティングデバイスが、中間コードに含まれる1または複数の命令をコンピューティングデバイスのハードウェア構成を反映してマシンコードを生成するステップと、コンピューティングデバイスのプロセッサが、マシンコードの生成後に、当該生成されたマシンコードを実行するステップとを含む。
本開示によれば、コンピューティングデバイスのハードウェア構成を意識することなくアプリケーションプログラムを作成できるとともに、各コンピューティングデバイスのハードウェア構成に応じた処理の実行を可能にする。
本実施の形態に従うIoTシステムの全体構成の一例を示す模式図である。 本実施の形態に従うソフトウェア開発装置のハードウェア構成例を示す模式図である。 本実施の形態に従うコントローラのハードウェア構成例を示す模式図である。 本実施の形態に従うIoTシステムにおけるアプリケーションプログラムの実行に係る機能手順を説明するための模式図である。 本実施の形態に従うIoTシステムにおける中間コードの生成例を説明するための図である。 本実施の形態に従うIoTシステムにおける中間コードの一例を説明するための図である。 図6に示す中間コードからマシンコードの生成に係る処理を説明するための図である。 本実施の形態に従うIoTシステムにおいて実行される処理の処理手順を示すフローチャートである。 本実施の形態に従うIoTシステムにおける中間コードの一例を示す図である。 本実施の形態に従うIoTシステムにおける中間コードの別の一例を示す図である。 本実施の形態に従うIoTシステムにおけるコントローラの更新/追加の処理を説明するための模式図である。
本開示に係る実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰り返さない。
以下の説明においては、コンピューティングシステムの典型例として、エッジデバイス2およびソフトウェア開発装置100を含むIoTシステム1について説明するが、本開示のコンピューティングシステムはIoTシステム1に限らず任意のシステムに適用可能である。
<A.IoTシステム1>
まず、本実施の形態に従うソフトウェア開発装置100およびエッジデバイス2を含むIoTシステム1の全体構成について説明する。
図1は、本実施の形態に従うIoTシステム1の全体構成の一例を示す模式図である。図1を参照して、IoTシステム1においては、典型的には、ソフトウェア開発装置100においてエッジデバイス2で実行されるアプリケーションプログラム(中間コード)が生成される。生成されたアプリケーションプログラムは、ソフトウェア開発装置100からエッジデバイス2に含まれるコントローラ200へ転送される。コントローラ200は、中間コードからマシンコード(あるいは、アセンブラコード)を生成し、生成したマシンコードを実行する。
ソフトウェア開発装置100は、エッジデバイス2(に含まれるコントローラ200)で実行されるアプリケーションプログラムを作成するために用いられる。ソフトウェア開発装置100には、統合開発環境(IDE:Integrated Development Environment)が提供されており、ユーザは統合開発環境上で任意のアプリケーションプログラムを作成できる。
エッジデバイス2に含まれるコントローラ200は、コンピューティングデバイスの一例であり、プロセッサを含む。エッジデバイス2としては、どのようなデバイスであってもよいが、典型的には、工場設備、家庭内の各種装置、社会インフラ設備、車両などの移動体、任意の携帯デバイスなどが想定される。後述するように、コントローラ200は、プロセッサを有しており、ソフトウェア開発装置100からのアプリケーションプログラムを実行可能になっている。
IoTシステム1における処理手順の一例について説明する。まず、ユーザがソフトウェア開発装置100を用いてソースコードを作成する((1)ソースコード作成)。そして、作成されたソースコードは、ソフトウェア開発装置100においてコンパイルされ、中間コードが生成される((2)中間コード生成)。生成された中間コードは、エッジデバイス2のコントローラ200へ転送される((3)中間コード転送)。転送された中間コードは、コントローラ200でマシンコードに変換され((4)マシンコード生成)、コントローラ200で実行される((5)マシンコード実行)。
このような手順によって、ソフトウェア開発装置100において開発された任意のアプリケーションプログラムをコントローラ200において実行させることができる。
<B.ハードウェア構成例>
次に、本実施の形態に従うIoTシステム1に含まれるデバイスのハードウェア構成例について説明する。
(b1:ソフトウェア開発装置100)
ソフトウェア開発装置100は、典型的には汎用コンピュータで実現される。
図2は、本実施の形態に従うソフトウェア開発装置100のハードウェア構成例を示す模式図である。図2を参照して、ソフトウェア開発装置100は、主たるコンポーネントとして、プロセッサ102と、メインメモリ104と、入力部106と、ディスプレイ108と、ハードディスク110と、通信インターフェイス122とを含む。これらのコンポーネントは、内部バス120を介して接続されている。
プロセッサ102は、例えば、CPU(Central Processing Unit)やGPU(Graphics Processing Unit)などで構成される。複数のプロセッサ102が配置されてもよいし、複数のコアを有するプロセッサ102を採用してもよい。
メインメモリ104は、DRAM(Dynamic Random Access Memory)やSRAM(Static Random Access Memory)などの揮発性記憶装置で構成される。ハードディスク110は、プロセッサ102で実行される各種プログラムや各種データを保持する。なお、ハードディスク110に代えて、SSD(Solid State Drive)やフラッシュメモリなどの不揮発性記憶装置を採用してもよい。ハードディスク110に格納されたプログラムのうち、指定されたマシンコードがメインメモリ104上に展開され、プロセッサ102は、メインメモリ104上に展開されたマシンコードに含まれるコンピュータ可読命令(computer-readable instructions)を順次実行することで、後述するような各種機能を実現する。
典型的には、ハードディスク110には、ユーザが任意に作成するソースコード112と、統合開発環境を実現するためのソフトウェア開発プログラム114と、ソースコード112から生成される中間コード116とが格納される。ソフトウェア開発プログラム114は、ユーザが任意に作成するソースコード112から中間コード116を生成するものであり、アプリケーションプログラムの開発環境を提供するモジュールを含む。
入力部106は、ソフトウェア開発装置100を操作するユーザの入力操作を受け付ける。入力部106は、例えば、キーボード、マウス、表示デバイス上に配置されたタッチパネル、ソフトウェア開発装置100の筐体に配置された操作ボタンなどであってもよい。
ディスプレイ108は、プロセッサ102での処理結果などを表示する。ディスプレイ108は、例えば、LCD(Liquid Crystal Display)や有機EL(Electro-Luminescence)ディスプレイなどであってもよい。
通信インターフェイス122は、コントローラ200とのデータ交換を担当する。通信インターフェイス122は、例えば、USB(Universal Serial Bus)ポート、IEEE1394などのシリアルポート、レガシーなパラレルポートといった有線接続端子を含む。あるいは、通信インターフェイス122は、イーサネット(登録商標)ポートを含んでいてもよい。
なお、ソフトウェア開発装置100の全部または一部は、コンピュータ可読命令に相当する回路が組み込まれたASIC(Application Specific Integrated Circuit)などのハードワイヤード回路を用いて実現してもよい。さらにあるいは、FPGA(field-programmable gate array)上にコンピュータ可読命令に相当する回路を用いて実現してもよい。また、プロセッサ102およびメインメモリ、ASIC、FPGAなどを適宜組み合わせて実現してもよい。
ソフトウェア開発装置100は、コンピュータ可読命令を含むソフトウェア開発プログラム114を格納する非一過性(non-transitory)のメディアから、当該格納しているプログラムなどを読み出すためのコンポーネントをさらに有していてもよい。メディアは、例えば、DVD(Digital Versatile Disc)などの光学メディア、USBメモリなどの半導体メディアなどであってもよい。
なお、ソフトウェア開発プログラム114は、メディアを介してソフトウェア開発装置100にインストールされるだけではなく、ネットワーク上の配信サーバから提供されるようにしてもよい。
(b2:コントローラ200)
コントローラ200は、汎用コンピュータを用いて実現してもよいし、処理を実現するために必要なコンポーネントを含む半導体基板を用いて実現してもよい。
図3は、本実施の形態に従うコントローラ200のハードウェア構成例を示す模式図である。図3を参照して、コントローラ200は、主たるコンポーネントとして、演算処理部210と、無線通信モジュール212と、USBコントローラ214と、通信コントローラ216と、1または複数のパッド219と電気的に接続されたIOドライバ218とを含む。
演算処理部210は、プログラムを実行する演算部であり、主たるコンポーネントとして、プロセッサ202と、メインメモリ204と、フラッシュメモリ206とを含む。プロセッサ202は、例えば、CPUやGPUなどで構成される。複数のプロセッサ202が配置されてもよいし、複数のコアを有するプロセッサ202を採用してもよい。メインメモリ204は、DRAMやSRAMなどの揮発性記憶装置で構成される。フラッシュメモリ206は、プロセッサ202で実行されるプログラムや必要なデータを保持する不揮発性記憶装置である。フラッシュメモリ206に格納されたプログラムのうち、指定されたプログラムがメインメモリ204上に展開されて、プロセッサ202により実行されることで、各種機能が実現される。
典型的には、フラッシュメモリ206には、ソフトウェア開発装置100から提供される中間コード116と、中間コード116からマシンコード230を生成するといった処理を実現するためのシステムプログラム208とが格納される。
無線通信モジュール212は、他の任意のデバイスとの間の無線によるデータ交換を担当する。無線通信モジュール212は、デバイス、ルータ、移動体基地局などと無線通信するための処理回路およびアンテナなどを含んでもよい。無線通信モジュール212が対応する無線通信は、例えば、Wi-Fi(登録商標)、Bluetooth(登録商標)、ZigBee(登録商標)、LPWA(Low Power Wide Area)、GSM(登録商標)、W-CDMA、CDMA200、LTE(Long Term Evolution)、第5世代移動通信システム(5G)のいずれであってもよい。
USBコントローラ214は、ソフトウェア開発装置100とのデータ交換を担当する。通信コントローラ216は、他の任意のデバイスとの間の有線によるデータ交換を担当する。通信コントローラ216は、例えば、シリアル通信、パラレル通信、GPIO(General-purpose input/output)などの公知のデータ交換方式に対応するようにしてもよい。
IOドライバ218は、パッド219を介して電気的に接続された任意のデバイスとの間の電気信号の遣り取りを担当する。IOドライバ218は、演算処理部210からの指令に従って電気信号を出力する。また、IOドライバ218は、パッド219を介して与えられる電気信号を検知し、その検知結果を演算処理部210へ出力する。より具体的には、IOドライバ218は、信号生成回路、信号検知回路、バッファ回路などで構成される。
コントローラ200は、図示しないバッテリからの電力により駆動されてもよい。
<C.コントローラ200でのアプリケーションプログラムの実行>
本実施の形態に従うIoTシステム1においては、コントローラ200に対して中間コード116が提供され、コントローラ200が中間コード116からマシンコード230を生成して実行する。
本明細書において、「中間コード」は、コントローラなどの配布先において処理を実行するための命令および当該命令の実行に必要なデータを含む。「中間コード」は、配布先のコンピュータアーキテクチャおよび実行環境などに依存せず、予め定められた実行環境(典型的には、仮想的なプロセッサの実行環境)に適合するように生成される。すなわち、「中間コード」は、配布先のコンピュータアーキテクチャにかかわらず、同じコーディングルールに従って生成される。そして、配布先のコンピュータアーキテクチャに適合するように、「中間コード」からマシンコード230が生成される。「中間コード」は仮想的なプロセッサで実行することもできるが、一般的には「中間コード」から生成されるマシンコードを用いた方が、コンピュータリソースをより効率的に利用することができ、処理を高速化できる。「中間コード」の表現は、どのようなものであってもよい。「中間コード」を「中間表現」と称すこともある。
図4は、本実施の形態に従うIoTシステム1におけるアプリケーションプログラムの実行に係る機能手順を説明するための模式図である。図4を参照して、IoTシステム1においては、ソフトウェア開発装置100において生成されたアプリケーションプログラムに対応する中間コード116がコントローラ200へ提供され、コントローラ200においてマシンコード230に変換された上で実行される。
より具体的には、ソフトウェア開発装置100は、ソースコードコンパイラ1140を有している。ソースコードコンパイラ1140は、ソフトウェア開発装置100のプロセッサ102がソフトウェア開発プログラム114を実行することで実現されてもよい。
ソースコードコンパイラ1140には、ユーザが作成する命令列130および/またはデータ132が入力される。ソースコードコンパイラ1140は、命令列130の各々を解釈して、バイナリ形式の中間コード116を生成する。このように、ソースコードコンパイラ1140は、1または複数の命令からなる命令列130と処理対象のデータとを含むソースをコンパイルして中間コード116を生成する。生成された中間コード116は、任意の方法により、ソフトウェア開発装置100からコントローラ200へ送信される。
コントローラ200は、中間コードコンパイラ220およびAPI/ABI群224を含む。これらのコンポーネントは、システムプログラム208の一部に含まれており、コントローラ200のプロセッサ202がシステムプログラム208を実行することで提供される。
中間コードコンパイラ220は、中間コード116を解釈してマシンコード230を生成する。より具体的には、中間コードコンパイラ220は、中間コード116に含まれる1または複数の命令からなる命令列130をコントローラ200のハードウェア構成を反映してマシンコード230を生成する。中間コードコンパイラ220は、管理モジュール222を含んでおり、中間コード116に含まれる特殊命令などに従って、マシンコード230の生成に必要な処理を実行する(詳細な処理例については後述する)。
API/ABI群224は、中間コード116に記述されている命令やファンクションとシステムとを対応付けるAPI(Application Programming Interface)およびABI(Application Binary Interface)を提供する。中間コードコンパイラ220は、API/ABI群224を参照しながら、中間コード116を解釈してマシンコード230を生成する。API/ABI群224は、ハードウェアを制御するためのドライバや各種設定情報を含んでいてもよい。
生成されたマシンコード230は、コントローラ200のプロセッサ202で順次実行される。すなわち、コントローラ200のプロセッサ202は、マシンコード230の生成後に、当該生成されたマシンコード230を実行する。
図5は、本実施の形態に従うIoTシステム1における中間コード116の生成例を説明するための図である。図5(a)には、命令列130から中間コード116が生成される例を示す。図5(b)には、命令列130に加えて、処理に必要なデータ132から中間コード116が生成される例を示す。
データ132は、アプリケーションプログラムの目的および用途に応じて提供される。例えば、任意の画像を表示するようなアプリケーションプログラムを想定すると、命令列130には画像を内部的に生成するための命令および表示出力するための内容が記述される。また、データ132は、画像を規定するためのラスタデータあるいはベクトルデータを含んでいてもよい。
次に、図6および図7を参照して、中間コード116からマシンコード230への変換処理について説明する。
図6は、本実施の形態に従うIoTシステム1における中間コード116の一例を説明するための図である。図7は、図6に示す中間コード116からマシンコード230の生成に係る処理を説明するための図である。
一例として、図6および7には、データ132に規定される定義に従って描かれる図形を表示する処理の例を示す。なお、説明の便宜上、図6および図7には、疑似命令の形でコードを記述するが、実際にはバイナリ形式で処理されることになる。
中間コード116は、命令列130(図4参照)に対応する部分およびデータ132(図4参照)に対応する部分を含む。図6に示す中間コード116の一例は、いくつかの区分されたセクションを含む。
より具体的には、中間コード116は、タイプセクション1161と、インポートセクション1162と、ファンクションセクション1163と、エクスポートセクション1164と、スタートセクション1165と、コードセクション1166と、データセクション1167とを含む。
タイプセクション1161は、対象プログラム中で参照される型の定義といったファンクションシグニチャの指定を含む。インポートセクション1162は、対象プログラム中で参照される外部プログラムあるいは外部ライブラリの定義を含む。ファンクションセクション1163は、対象プログラムに規定されるファンクションの定義を含む。エクスポートセクション1164は、対象プログラムを外部プログラムなどから参照するときに、公開されるファンクションの定義を含む。スタートセクション1165は、対象プログラム内で参照されるファンクションのインデックスの定義を含む。コードセクション1166は、実質的に命令列130に対応する部分であり、1または複数の命令を含む。コードセクション1166には、任意の種類の命令を含めることができる。例えば、汎用的な演算処理、データアクセス、ファイルアクセスなどに加えて、他のコントローラやサーバなどとの間の通信(例えば、プロセス間通信など)を実現するための命令を含めることもできる。
データセクション1167は、コードセクション1166に規定された1または複数の命令による処理の対象となるデータの定義を含む。データセクション1167には、どのようなデータが含まれていてもよい。例えば、通信スタックを構成するための情報や電子証明書などの情報をデータセクション1167に含めるようにしてもよい。
図7を参照して、マシンコード230は、コントローラ200のプロセッサ202が解釈できる命令セットにより記述された1または複数の命令を含む。すなわち、コントローラ200のプロセッサ202の種類などに応じて、マシンコード230を規定する命令セットの種類などが決定される。
このように、本実施の形態に従うIoTシステム1においては、中間コード116を実行環境に応じたマシンコード230に変換した上で、各コントローラ200において実行されるので、同一のソースコードを用いて様々なコントローラ200で実行可能なアプリケーションプログラムを提供できる。また、コントローラ200の環境やハードウェアなどに応じて、実行可能なマシンコード230を生成するので、コントローラ200のハードウェア仕様が変更された場合であっても、互換性などを維持できる。
<D.処理手順>
次に、本実施の形態に従うIoTシステム1において実行される処理の処理手順について説明する。
図8は、本実施の形態に従うIoTシステム1において実行される処理の処理手順を示すフローチャートである。図8(a)には、ソフトウェア開発装置100において実行される処理手順を示し、図8(a)には、コントローラ200において実行される処理手順を示す。
図8(a)を参照して、ソフトウェア開発装置100は、ユーザによる操作に従って、ソースコード112を生成する(ステップS100)。そして、ソフトウェア開発装置100は、ユーザによる操作に従って、ソースコード112を解析して中間コード116を生成する(ステップS102)。より具体的には、ソフトウェア開発装置100は、1または複数の命令からなる命令列130および処理対象のデータ132を含むソースをコンパイルして中間コード116を生成する処理を実行する。
そして、ソフトウェア開発装置100は、ユーザによる操作に従って、生成した中間コード116を配布先のコントローラ200へ送信する(ステップS104)。
図8(b)を参照して、コントローラ200は、ソフトウェア開発装置100から送信された中間コード116をフラッシュメモリ206などに一端格納する(ステップS200)。そして、コントローラ200は、外部からの明示的な指示を受けて、あるいは、予め定められた条件が成立すると、中間コード116を解析してマシンコード230を生成する(ステップS202)。より具体的には、コントローラ200は、中間コード116に含まれる1または複数の命令からなる命令列130をコントローラ200のハードウェア構成を反映してマシンコード230を生成する処理を実行する。
そして、コントローラ200は、生成したマシンコード230を実行する(ステップS204)。すなわち、コントローラ200のプロセッサ202は、マシンコード230の生成後に、当該生成されたマシンコード230を実行する。プロセッサ202によるマシンコード230の実行(ステップS204の処理)は、予め定められた回数だけ繰り返されてもよい。
なお、中間コード116からマシンコード230が生成されると、生成されたマシンコード230はコントローラ200のハードウェア構成が変更されない限り利用できる。そのため、繰り返し実行されるアプリケーションの場合には、中間コード116を受信すると、マシンコード230を自動的に生成するようにしてもよい。
<E.認証処理>
コントローラ200へ提供される中間コード116に対するセキュリティを高めるために、中間コード116に対する認証処理を付加してもよい。
図9は、本実施の形態に従うIoTシステム1における中間コード116の一例を示す図である。図9に示す中間コード116は、ユーザにより作成された命令列130およびデータ132に加えて、ソフトウェア開発装置100あるいは中間コード116を提供する主体により付与された電子証明書134を含む。
電子証明書134は、中間コード116に電子証明書134を付与した主体が保持している電子証明書を用いて生成されたハッシュ値などを含む。
コントローラ200において、中間コード116から生成されるマシンコード230が実行されることで、中間コード116を認証してもよい。例えば、命令列130に認証命令1310を含ませておき、認証命令1310が実行されることで、電子証明書134を用いた認証処理を実行してもよい。
このように、中間コード116は、中間コード116に対する電子証明書134、および、電子証明書134に基づく認証処理を実行するための認証命令1310を含んでいてもよい。そして、中間コード116から生成されたマシンコード230が実行されることで、認証命令1310により電子証明書134に基づく認証処理が実現されてもよい。
上述の実装形態に代えて、コントローラ200のシステムプログラム208に電子証明書134を認証する機能を付加しておいてもよい。
このようなコントローラ200に実装される認証機能を用いることで、中間コード116の正当性や真正性などを確保できる。
<F.著作権管理>
コントローラ200へ提供される中間コード116に含まれるデジタルコンテンツに対する著作権管理を実現するための機能を付加してもよい。
図10は、本実施の形態に従うIoTシステム1における中間コード116の別の一例を示す図である。図10に示す中間コード116は、ユーザにより作成された命令列130およびコンテンツを含むデータ132に加えて、データ132に含まれるコンテンツの著作権管理するためのDRM136を含む。
DRM136は、典型的には、著作権を管理する団体などにより発行されてもよいし、中間コード116の作成者自身が著作権を管理する場合には、ソフトウェア開発装置100などにより生成および付与を行ってもよい。
コントローラ200においては、DRM136を参照することで、中間コード116に含まれるコンテンツの利用が適正な利用であるか否かを判断できる。例えば、命令列130にDRMチェック命令1320を含ませておき、DRMチェック命令1320が実行されることで、DRM136に基づく著作権管理を実現してもよい。あるいは、コントローラ200のシステムプログラム208にDRM136に基づく著作権管理を実現する機能を付加しておいてもよい。
図10に示す中間コード116は、コンテンツを含むデータ132、コンテンツの著作権管理するための著作権管理情報であるDRM136、および、DRM136に基づく著作権管理を実行するための管理命令であるDRMチェック命令1320を含む。そして、中間コード116から生成されたマシンコード230が実行されることで、DRMチェック命令1320によりDRM136に基づいてコンテンツの利用可否が判断される。
このようなコントローラ200に実装される著作権管理機能を用いることで、中間コード116に含まれるコンテンツの適正な利用を保証できる。
<G.更新/追加>
コントローラ200において中間コード116からマシンコード230を生成するために必要なAPI/ABI群224やライブラリなどをコントローラ200が更新あるいは追加するようにしてもよい。
図11は、本実施の形態に従うIoTシステム1におけるコントローラ200の更新/追加の処理を説明するための模式図である。図11を参照して、コントローラ200の中間コードコンパイラ220は、中間コード116の解釈に際して、解決できない命令やファンクションなどを見つけると、必要なライブラリや定義などを外部のサーバ300から取得するようにしてもよい。
具体的には、中間コードコンパイラ220の管理モジュール222は、中間コード116からマシンコード230を生成するのに必要なライブラリや定義などを取得するためのリクエストを外部のサーバ300に送信するとともに、外部のサーバ300が提供する更新ライブラリなどをAPI/ABI群224に追加する。このように、中間コードコンパイラ220は、中間コードコンパイラ220が参照するデータを更新するための管理モジュール222を含む。
本実施の形態に従うIoTシステム1においては、コントローラ200が自動的に必要なライブラリや定義などを取得した上で、中間コード116からマシンコード230を生成するので、ソフトウェア開発装置100において、ユーザはアプリケーションプログラムが実行される環境などを意識する必要がない。
さらに、コントローラ200の実行環境(システムプログラム208)自体を更新するようにしてもよい。この場合には、中間コード116にシステムプログラムを更新するための命令および更新後のプログラムが含められる。このような中間コード116がマシンコード230に変換されて、コントローラ200で実行されることで、コントローラ200自身の実行環境自体を随時更新できる。
<H.中間コード116の圧縮処理>
一般的に中間コード116は、マシンコード230に比較して冗長化されているため、コントローラ200への配布を容易化する目的などのために、中間コード116をデータ圧縮してもよい。
データ圧縮の手法としては、公知の圧縮技術を用いることができる。あるいは、ソースコード112をコンパイルして生成される中間コード116(中間表現)を短縮化表現を用いてデータ圧縮した上で、バイナリ形式に変換してもよい。この場合には、中間表現で本来的に用いられる表現と短縮化表現との対応関係を示す情報を中間コード116に付加した上で、コントローラ200へ提供するようにしてもよい。
<I.補助情報>
上述したように、中間コード116は、配布先のコンピュータアーキテクチャおよび実行環境などに依存せず、予め定められた所定の実行環境に適合するように生成される。但し、最終的には、配布先のプロセッサで実行されるマシンコード230を生成する必要があるので、当該配布先でのマシンコード230の生成を補助する補助情報(事前情報)を中間コード116に含めるようにしてもよい。
このような補助情報としては、任意の情報を含めることができるが、例えば、特定のプロセッサで実行する場合の最適化オプションの指定や、事前設計されたメモリマップなどを含めるようにしてもよい。
<J.変形例>
上述の実施の形態においては、ソフトウェア開発装置100からコントローラ200へ中間コード116を直接送信する例を示したが、このような一対一の構成に限らず、例えば、ソフトウェア開発装置100で生成した中間コード116をサーバへアップロードするとともに、任意のコントローラ200がサーバから任意の中間コード116をダウンロードすることで、中間コード116を配布するようにしてもよい。
<K.利点>
本実施の形態に従うIoTシステム1によれば、コントローラ200のハードウェア構成を意識することなくアプリケーションプログラムを作成できるとともに、各コントローラ200のハードウェア構成に応じた処理の実行を可能にする。
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 IoTシステム、2 エッジデバイス、100 ソフトウェア開発装置、102,202 プロセッサ、104,204 メインメモリ、106 入力部、108 ディスプレイ、110 ハードディスク、112 ソースコード、114 ソフトウェア開発プログラム、116 中間コード、120 内部バス、122 通信インターフェイス、130 命令列、132 データ、134 電子証明書、200 コントローラ、206 フラッシュメモリ、208 システムプログラム、210 演算処理部、212 無線通信モジュール、214 USBコントローラ、216 通信コントローラ、218 ドライバ、219 パッド、220 コンパイラ、222 管理モジュール、224 API/ABI群、230 マシンコード、300 サーバ、1140 ソースコードコンパイラ、1301,1302,1303,1304,1305,1306 命令、1310 認証命令、1320 チェック命令。

Claims (6)

  1. コンピューティングシステムであって、
    プロセッサを含むコンピューティングデバイスと、
    前記コンピューティングデバイスで実行されるアプリケーションプログラムを作成するためのソフトウェア開発装置とを備え、
    前記ソフトウェア開発装置は、1または複数の命令と処理対象のデータとを含むソースをコンパイルして中間コードを生成する第1のコンパイラを備え、
    前記コンピューティングデバイスは、前記中間コードに含まれる前記1または複数の命令を前記コンピューティングデバイスのハードウェア構成を反映してマシンコードを生成する第2のコンパイラを備え、
    前記コンピューティングデバイスの前記プロセッサは、前記マシンコードの生成後に、当該生成されたマシンコードを実行し、
    前記中間コードは、当該中間コードに対する電子証明書、および、当該電子証明書に基づく認証処理を実行するための認証命令を含んでおり、
    前記マシンコードが実行されることで、前記認証命令により前記電子証明書に基づく認証処理が実現される、コンピューティングシステム。
  2. コンピューティングシステムであって、
    プロセッサを含むコンピューティングデバイスと、
    前記コンピューティングデバイスで実行されるアプリケーションプログラムを作成するためのソフトウェア開発装置とを備え、
    前記ソフトウェア開発装置は、1または複数の命令と処理対象のデータとを含むソースをコンパイルして中間コードを生成する第1のコンパイラを備え、
    前記コンピューティングデバイスは、前記中間コードに含まれる前記1または複数の命令を前記コンピューティングデバイスのハードウェア構成を反映してマシンコードを生成する第2のコンパイラを備え、
    前記コンピューティングデバイスの前記プロセッサは、前記マシンコードの生成後に、当該生成されたマシンコードを実行し、
    前記中間コードは、コンテンツ、当該コンテンツの著作権管理するための著作権管理情報、および、当該著作権管理情報に基づく著作権管理を実行するための管理命令を含んでおり、
    前記マシンコードが実行されることで、前記管理命令により前記著作権管理情報に基づいて前記コンテンツの利用可否が判断される、コンピューティングシステム。
  3. 前記第2のコンパイラは、前記第2のコンパイラが参照するデータを更新するための管理モジュールを含む、請求項1または2に記載のコンピューティングシステム。
  4. 前記中間コードは、前記第2のコンパイラでの前記マシンコードの生成を支援するための補助情報を含む、請求項1~のいずれか1項に記載のコンピューティングシステム。
  5. プロセッサを含むコンピューティングデバイス、および、前記コンピューティングデバイスで実行されるアプリケーションプログラムを作成するためのソフトウェア開発装置とを含むコンピューティングシステムにおいて実行される情報処理方法であって、
    前記ソフトウェア開発装置が、1または複数の命令と処理対象のデータとを含むソースをコンパイルして中間コードを生成するステップと、
    前記コンピューティングデバイスが、前記中間コードに含まれる前記1または複数の命令を前記コンピューティングデバイスのハードウェア構成を反映してマシンコードを生成するステップと、
    前記コンピューティングデバイスの前記プロセッサが、前記マシンコードの生成後に、当該生成されたマシンコードを実行するステップとを備え
    前記中間コードは、当該中間コードに対する電子証明書、および、当該電子証明書に基づく認証処理を実行するための認証命令を含んでおり、
    前記マシンコードが実行されることで、前記認証命令により前記電子証明書に基づく認証処理が実現される、情報処理方法。
  6. プロセッサを含むコンピューティングデバイス、および、前記コンピューティングデバイスで実行されるアプリケーションプログラムを作成するためのソフトウェア開発装置とを含むコンピューティングシステムにおいて実行される情報処理方法であって、
    前記ソフトウェア開発装置が、1または複数の命令と処理対象のデータとを含むソースをコンパイルして中間コードを生成するステップと、
    前記コンピューティングデバイスが、前記中間コードに含まれる前記1または複数の命令を前記コンピューティングデバイスのハードウェア構成を反映してマシンコードを生成するステップと、
    前記コンピューティングデバイスの前記プロセッサが、前記マシンコードの生成後に、当該生成されたマシンコードを実行するステップとを備え
    前記中間コードは、コンテンツ、当該コンテンツの著作権管理するための著作権管理情報、および、当該著作権管理情報に基づく著作権管理を実行するための管理命令を含んでおり、
    前記マシンコードが実行されることで、前記管理命令により前記著作権管理情報に基づいて前記コンテンツの利用可否が判断される、情報処理方法。
JP2019134554A 2019-07-22 2019-07-22 コンピューティングシステムおよび情報処理方法 Active JP7335591B2 (ja)

Priority Applications (7)

Application Number Priority Date Filing Date Title
JP2019134554A JP7335591B2 (ja) 2019-07-22 2019-07-22 コンピューティングシステムおよび情報処理方法
PCT/JP2020/028185 WO2021015182A1 (ja) 2019-07-22 2020-07-21 コンピューティングシステムおよび情報処理方法
TW109124608A TW202105171A (zh) 2019-07-22 2020-07-21 計算系統以及資訊處理方法
US17/613,452 US20220214867A1 (en) 2019-07-22 2020-07-21 Computing system and information processing method
EP20844769.8A EP4006716A4 (en) 2019-07-22 2020-07-21 COMPUTING SYSTEM AND INFORMATION PROCESSING PROCEDURES
JP2023130821A JP7592334B2 (ja) 2019-07-22 2023-08-10 コンピューティングシステムおよび情報処理方法
JP2024198004A JP2025020384A (ja) 2019-07-22 2024-11-13 コンピューティングシステムおよび情報処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019134554A JP7335591B2 (ja) 2019-07-22 2019-07-22 コンピューティングシステムおよび情報処理方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2023130821A Division JP7592334B2 (ja) 2019-07-22 2023-08-10 コンピューティングシステムおよび情報処理方法

Publications (3)

Publication Number Publication Date
JP2021018650A JP2021018650A (ja) 2021-02-15
JP2021018650A5 JP2021018650A5 (ja) 2023-06-07
JP7335591B2 true JP7335591B2 (ja) 2023-08-30

Family

ID=74193000

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2019134554A Active JP7335591B2 (ja) 2019-07-22 2019-07-22 コンピューティングシステムおよび情報処理方法
JP2023130821A Active JP7592334B2 (ja) 2019-07-22 2023-08-10 コンピューティングシステムおよび情報処理方法
JP2024198004A Pending JP2025020384A (ja) 2019-07-22 2024-11-13 コンピューティングシステムおよび情報処理方法

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2023130821A Active JP7592334B2 (ja) 2019-07-22 2023-08-10 コンピューティングシステムおよび情報処理方法
JP2024198004A Pending JP2025020384A (ja) 2019-07-22 2024-11-13 コンピューティングシステムおよび情報処理方法

Country Status (5)

Country Link
US (1) US20220214867A1 (ja)
EP (1) EP4006716A4 (ja)
JP (3) JP7335591B2 (ja)
TW (1) TW202105171A (ja)
WO (1) WO2021015182A1 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339419A (en) 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
JP2005216177A (ja) 2004-01-30 2005-08-11 Toshiba Corp コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
JP2009512096A (ja) 2005-10-18 2009-03-19 インタートラスト テクノロジーズ コーポレイション デジタル著作権管理エンジンのシステムおよび方法
US20150294114A1 (en) 2012-09-28 2015-10-15 Hewlett-Packard Development Company, L.P. Application randomization

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10301772A (ja) * 1997-04-30 1998-11-13 Sony Corp 情報処理装置および情報処理方法、並びに記録媒体
GB9920676D0 (en) 1999-09-01 1999-11-03 Tao Group Ltd Translating and executing object-oriented computer programs
US9886309B2 (en) 2002-06-28 2018-02-06 Microsoft Technology Licensing, Llc Identity-based distributed computing for device resources
US7086043B2 (en) * 2002-10-29 2006-08-01 International Business Machines Corporation Compiler apparatus and method for unrolling a superblock in a computer program
JP4934267B2 (ja) * 2003-10-17 2012-05-16 パナソニック株式会社 コンパイラ装置
JP2006004072A (ja) * 2004-06-16 2006-01-05 Sony Corp ライセンス評価装置,ライセンス評価方法およびそのコンピュータプログラム
US9417931B2 (en) * 2008-06-24 2016-08-16 Microsoft Technology Licensing, Llc Unified metadata for external components
US8869126B2 (en) * 2009-10-20 2014-10-21 Bull Hn Information Systems Inc. Method and apparatus enabling multi threaded program execution for a Cobol program including OpenMP directives by utilizing a two-stage compilation process
WO2011155098A1 (ja) * 2010-06-10 2011-12-15 パナソニック株式会社 再生装置、記録媒体、再生方法、プログラム
US9740464B2 (en) * 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US20160048376A1 (en) * 2014-08-12 2016-02-18 Advanced Micro Devices, Inc. Portable binary image format (pbif) for pre-compiled kernels
EP3026558A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
US9798559B2 (en) * 2014-12-27 2017-10-24 Mcafee, Inc. Trusted binary translation
RU2635271C2 (ru) * 2015-03-31 2017-11-09 Закрытое акционерное общество "Лаборатория Касперского" Способ категоризации сборок и зависимых образов
US9740463B2 (en) * 2015-08-10 2017-08-22 Oracle International Corporation Mechanism for increasing the performance of multiple language programs by inserting called language IR into the calling language
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
CN111831287B (zh) * 2019-04-22 2024-03-22 伊姆西Ip控股有限责任公司 用于确定执行代码段所需的资源的方法、设备和程序产品

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339419A (en) 1990-06-25 1994-08-16 Hewlett-Packard Company ANDF compiler using the HPcode-plus compiler intermediate language
JP2005216177A (ja) 2004-01-30 2005-08-11 Toshiba Corp コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
JP2009512096A (ja) 2005-10-18 2009-03-19 インタートラスト テクノロジーズ コーポレイション デジタル著作権管理エンジンのシステムおよび方法
US20150294114A1 (en) 2012-09-28 2015-10-15 Hewlett-Packard Development Company, L.P. Application randomization

Also Published As

Publication number Publication date
JP2025020384A (ja) 2025-02-12
JP7592334B2 (ja) 2024-12-02
EP4006716A4 (en) 2023-07-26
JP2023145792A (ja) 2023-10-11
US20220214867A1 (en) 2022-07-07
TW202105171A (zh) 2021-02-01
EP4006716A1 (en) 2022-06-01
WO2021015182A1 (ja) 2021-01-28
JP2021018650A (ja) 2021-02-15

Similar Documents

Publication Publication Date Title
US9471288B2 (en) Compile based obfuscation
JP2024023911A (ja) 実行コード提供方法およびソフトウェア開発システム
JP7335591B2 (ja) コンピューティングシステムおよび情報処理方法
KR102360646B1 (ko) 유저 계정의 입력 정보에 기반한 어플리케이션 자동 제작 시스템
CN115860950A (zh) 合约交易执行方法、装置、电子设备及可读存储介质
JP7473145B2 (ja) ソフトウェア開発装置およびソフトウェア開発プログラム
CN114489698A (zh) 应用程序安装方法和装置
US20220229642A1 (en) Software development device and software development program
US20240028691A1 (en) Capability-restricted system control
CN114968209B (zh) 页面管理方法、系统、电子设备和存储介质
CN107145372A (zh) 信息生成方法和装置
JP2024137981A (ja) ソフトウェア検証方法およびソフトウェア開発システム
CN118467061A (zh) 安卓系统功能函数调用方法、安卓系统模板、设备及介质
US8782595B1 (en) Systems and methods for rule based meta-programming of actions for rule based build systems
CN119249516A (zh) 一种镜像文件生成方法、刷新方法、装置、设备及介质
CN114185556A (zh) 一种智能合约部署方法、装置、设备以及存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220722

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230530

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: 20230711

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230810

R150 Certificate of patent or registration of utility model

Ref document number: 7335591

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150