JP2017146895A - オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法 - Google Patents

オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法 Download PDF

Info

Publication number
JP2017146895A
JP2017146895A JP2016029795A JP2016029795A JP2017146895A JP 2017146895 A JP2017146895 A JP 2017146895A JP 2016029795 A JP2016029795 A JP 2016029795A JP 2016029795 A JP2016029795 A JP 2016029795A JP 2017146895 A JP2017146895 A JP 2017146895A
Authority
JP
Japan
Prior art keywords
memory
memory area
core
area
allocation
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.)
Granted
Application number
JP2016029795A
Other languages
English (en)
Other versions
JP6423809B2 (ja
Inventor
正樹 権藤
Masaki Gondo
正樹 権藤
谷口 茂
Shigeru Taniguchi
茂 谷口
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.)
ESOL CO Ltd
Original Assignee
ESOL CO Ltd
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 ESOL CO Ltd filed Critical ESOL CO Ltd
Priority to JP2016029795A priority Critical patent/JP6423809B2/ja
Publication of JP2017146895A publication Critical patent/JP2017146895A/ja
Application granted granted Critical
Publication of JP6423809B2 publication Critical patent/JP6423809B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】アクセス速度の速いメモリを動的に選択するメモリ割り当て方法と、アプリケーションプログラムが指定した特定のメモリからメモリ割り当てを実行する方法とを、アプリケーションプログラムを変更することなく切り替え可能とする。
【解決手段】実メモリIDが指定されてメモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられたメモリ領域20からメモリ割り当てを実行させる。また、仮想コアIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域からメモリ割り当てを実行させる。
【選択図】図10

Description

この発明は、プロセッサコアを相互に接続したマルチコア環境において実行されるオペレーティングシステム、このオペレーティングシステムを使用してシステムを構築するためのプログラミングシステム、及び、メモリ割り当て方法に関する。
近年、組み込み製品などのシステムが複雑化しており、多機能を実現するために複数のプロセッサコアを備えたマルチコアプロセッサを採用するシステムが増加している。こうしたマルチコア環境においては、各プロセッサコア間でメモリを共有化することでリソースの効率良く使用するとともに、メモリ競合などを避けて処理速度を高めることが重要である。
ところで、こうしたシステムは、複数の異なる種類のメモリを備えていることが多く、それぞれのメモリのアクセス速度にも差がある。よって、処理の内容によってどのメモリを使用するかを適切に振り分けることが重要となる。
しかしながら、アプリケーションプログラムの開発者がメモリの種類まで把握しているとは限らないので、オペレーティングシステムが適切なメモリの割り当てを実行することが望ましい。例えば、アプリケーションプログラムがアクセス速度の速いメモリを要求している場合には、オペレーティングシステムがアクセス速度の速いメモリを選択し、そのメモリからメモリ割り当てを実行することが考えられる。
なお、特許文献1に記載されているように、それぞれのプロセッサコアに固有のメモリ(一次キャッシュ)を備えたシステムにおいては、あるプロセッサコアにとって最もアクセス速度の速いメモリはそのプロセッサコアに固有のメモリである。よって、実行時のプロセッサコアに依存して最もアクセス速度の早いメモリが変化することになる。
特開2012−53817号公報
上記したように、実行時のプロセッサコアに依存して最もアクセス速度の早いメモリがどれであるかが変化する場合、オペレーティングシステムがアクセス速度の早いメモリを動的に選択してメモリ割り当てを実行させることができれば、メモリリソースの効率化や処理速度の向上を図ることができる。
一方、アプリケーションプログラムの開発者がメモリの種類まで把握している場合には、特定のメモリからメモリを獲得したいという要求が存在する。この場合には、上記したようなオペレーティングシステムによる動的な選択を介さずに、アプリケーションプログラムが指定した特定のメモリからメモリ割り当てを実行させることができれば、システムを構築する上での自由度が向上する。
そして、上記したような「オペレーティングシステムがアクセス速度の速いメモリを動的に選択してメモリ割り当てを実行する方法」と「アプリケーションプログラムが指定した特定のメモリからメモリ割り当てを実行する方法」との切り替えを、アプリケーションプログラムを変更することなく実現できれば、ハードウェアリソースの異なる環境へアプリケーションプログラムを移植する作業が容易となる(例えばメモリの種類が異なる別環境へシステムを移植するときに、アプリケーションプログラムを変更することなく移植することも可能となる)。
そこで、本発明は、プログラムの実行時にオペレーティングシステムがアクセス速度の速いメモリを動的に選択してメモリ割り当てを実行でき、かつ、アプリケーションプログラムが指定した特定のメモリからもメモリ割り当てを実行でき、しかも、この2つのメモリ割り当て方法の切り替えをアプリケーションプログラムを変更することなく実現することができるオペレーティングシステム、プログラミングシステム及びメモリ割り当て方法を提供することを課題とする。
本発明は、上記した課題を解決するためになされたものであり、以下を特徴とする。
請求項1記載の発明は、それぞれローカルメモリを備えた複数のプロセッサコアを相互に接続したマルチコア環境において実行され、アプリケーションプログラムから呼び出し可能なメモリ獲得用APIを実装したオペレーティングシステムであって、予め設定された内部データに従って複数のメモリ領域を作成するメモリ領域作成部と、前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるメモリ割り当て部と、を備え、前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域を含み、前記ヒープIDとして、前記メモリ領域を直接指定してメモリを割り当てるための実メモリIDと、前記コアメモリ領域を動的に選択してメモリを割り当てるための仮想コアIDと、を含み、前記メモリ割り当て部は、前記実メモリIDが指定されて前記メモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させ、前記仮想コアIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項2に記載の発明は、上記した請求項1に記載の発明の特徴点に加え、前記メモリ領域として、1以上の前記コアメモリ領域に紐付けられたクラスタメモリ領域を含み、前記ヒープIDとして、前記クラスタメモリ領域を動的に選択してメモリを割り当てるための仮想クラスタIDを含み、前記メモリ割り当て部は、前記仮想クラスタIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域を特定し、当該コアメモリ領域に紐付けられた前記クラスタメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項3に記載の発明は、上記した請求項2に記載の発明の特徴点に加え、前記メモリ領域として、1以上の前記クラスタメモリ領域に紐付けられたグローバルメモリ領域を含み、前記ヒープIDとして、前記グローバルメモリ領域を動的に選択してメモリを割り当てるための仮想グローバルIDを含み、前記メモリ割り当て部は、前記仮想グローバルIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記メモリ領域を特定し、当該メモリ領域に紐付けられた前記メモリ領域を再帰的に辿って発見した前記グローバルメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項4に記載の発明は、上記した請求項1〜3のいずれかに記載の発明の特徴点に加え、前記メモリ領域作成部は、前記メモリ領域でツリー構造を作成し、前記メモリ割り当て部は、前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項5に記載の発明は、請求項1〜4のいずれか1項に記載のオペレーティングシステムと、前記ヒープIDと前記メモリ領域との関係を記述したコンフィギュレーションファイルと、前記コンフィギュレーションファイルを読み込んで、前記アプリケーションプログラム用のヘッダファイルと前記オペレーティングシステム用の内部データとを生成する情報生成手段と、前記ヘッダファイルを使用して前記アプリケーションプログラムのソースコードをコンパイルするコンパイラと、を備えることを特徴とする。
請求項6記載の発明は、それぞれローカルメモリを備えた複数のプロセッサコアを相互に接続したマルチコア環境において、アプリケーションプログラムからメモリ獲得用APIが呼び出されたときに、メモリ割り当てを実行させるためのメモリ割り当て方法であって、予め設定された内部データに従って複数のメモリ領域を作成するステップと、前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるステップと、を備え、前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域を含み、前記ヒープIDとして、前記メモリ領域を直接指定してメモリを割り当てるための実メモリIDと、前記コアメモリ領域を動的に選択してメモリを割り当てるための仮想コアIDと、を含み、前記実メモリIDが指定されて前記メモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させ、前記仮想コアIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項7に記載の発明は、上記した請求項6に記載の発明の特徴点に加え、前記メモリ領域として、1以上の前記コアメモリ領域に紐付けられたクラスタメモリ領域を含み、前記ヒープIDとして、前記クラスタメモリ領域を動的に選択してメモリを割り当てるための仮想クラスタIDを含み、前記仮想クラスタIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域を特定し、当該コアメモリ領域に紐付けられた前記クラスタメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項8に記載の発明は、上記した請求項7に記載の発明の特徴点に加え、前記メモリ領域として、1以上の前記クラスタメモリ領域に紐付けられたグローバルメモリ領域を含み、前記ヒープIDとして、前記グローバルメモリ領域を動的に選択してメモリを割り当てるための仮想グローバルIDを含み、前記仮想グローバルIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記メモリ領域を特定し、当該メモリ領域に紐付けられた前記メモリ領域を再帰的に辿って発見した前記グローバルメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項9に記載の発明は、上記した請求項6〜8のいずれかに記載の発明の特徴点に加え、前記メモリ領域でツリー構造を作成し、前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする。
請求項1又は6に記載の発明は上記の通りであり、実メモリIDが指定されてメモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられたメモリ領域からメモリ割り当てを実行させるようにしている。このため、アプリケーションプログラムが指定した特定のメモリからのメモリ割り当てを実行したい場合には、実メモリIDを指定してメモリ獲得用APIを呼び出せばよい。
また、仮想コアIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係るコアメモリ領域からメモリ割り当てを実行させるようにしている。このため、アクセス速度の速いメモリ(プロセッサコア固有のメモリ)をオペレーティングシステムに動的に選択させてメモリ割り当てを実行したい場合には、仮想コアIDを指定してメモリ獲得用APIを呼び出せばよい。
しかも、上記した2つのメモリ割り当てが同じメモリ獲得用APIで実現されているため、アプリケーションプログラムを変更しなくても、ヒープIDの定義を変更するだけでメモリ割り当て方法を切り替えることができる。例えば、コンフィギュレーションファイルを書き換えることでヒープIDの定義を変更し、仮想コアIDに割り当てられていたヒープIDを実メモリIDに割り当てるようにすれば、当該ヒープIDを使用してメモリ獲得用APIを呼び出していたアプリケーションプログラムを変更することなく、メモリ割り当ての方法を切り替えることができる。この場合には、ヒープIDの定義を変更する前は、プログラム実行時のプロセッサコアに固有のメモリ領域からメモリ割り当てが実行され、ヒープIDの定義を変更した後は、ヒープIDによって指定された特定のメモリ領域からのメモリ割り当てが実行される。
また、請求項2又は7に記載の発明は上記の通りであり、仮想クラスタIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係るコアメモリ領域を特定し、当該コアメモリ領域に紐付けられたクラスタメモリ領域からメモリ割り当てを実行させるようにしている。このため、例えばマルチコア環境の管理効率を高めるためにプロセッサコアをいくつかのグループ(クラスタ)に分割し、そのクラスタにメモリ領域を割り当てた場合、このクラスタ用のメモリ領域をクラスタメモリ領域として定義することで、プログラムの実行時にオペレーティングシステムが動的に判断してクラスタメモリ領域からメモリ割り当てを実行させることができる。
また、請求項3又は8に記載の発明は上記の通りであり、仮想グローバルIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係るメモリ領域を特定し、当該メモリ領域に紐付けられたメモリ領域を再帰的に辿って発見したグローバルメモリ領域からメモリ割り当てを実行させるようにしている。このため、例えばすべてのプロセッサコアからアクセスできるメモリをグローバルメモリ領域とすることで、プログラムの実行時にオペレーティングシステムが動的に判断してこのグローバルメモリ領域からメモリ割り当てを実行させることができる。
また、請求項4又は9に記載の発明は上記の通りであり、前記メモリ領域でツリー構造を作成し、ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させるようにしている。このため、例えばアクセス速度の速いメモリリソースが枯渇してしまった場合でも、次の候補のメモリ領域からメモリ割り当てを実行させることができる。よって、できるだけアクセス速度の速いメモリ領域を検索してメモリ割り当てを実行させることができる。
また、請求項5に記載の発明は上記の通りであり、前記ヒープIDと前記メモリ領域との関係を記述したコンフィギュレーションファイルと、前記コンフィギュレーションファイルを読み込んで、アプリケーションプログラム用のヘッダファイルとオペレーティングシステム用の内部データとを生成する情報生成手段と、を備える。このような構成によれば、コンフィギュレーションファイルを書き換えて情報生成手段を実行するだけで、アプリケーションプログラムやオペレーティングシステムを変更することなく、メモリ領域の定義やヒープIDの定義を変更することができる。例えば、異なる物理メモリやプロセッサコアを備えたハードウェア環境へプログラムを移植する場合でも、コンフィギュレーションファイルを書き換えて情報生成手段を実行するだけで、アプリケーションプログラムやオペレーティングシステムを変更することなく、適切なメモリ割り当てを実現することができる。
本発明の実施形態に係るプロセッサとメモリの構成を示す図である。 メモリ管理に係るオペレーティングシステムの構成を示す図である。 コンパイル処理に係る流れを示す図である。 コンフィギュレーションファイルにメモリの定義を記述するための書式を説明する図である。 コンフィギュレーションファイルにメモリ領域の定義を記述するための書式を説明する図である。 コンフィギュレーションファイルにヒープIDの定義を記述するための書式を説明する図である。 コンフィギュレーションファイルの記述例を示す図である。 メモリ領域のツリー構造を示す図である。 メモリ獲得用APIの仕様を説明する図である。 メモリ割り当て処理のメインフロー図である。 グローバルメモリ割り当て処理のフロー図である。 クラスタメモリ割り当て処理のフロー図である。 コアメモリ割り当て処理のフロー図である。 実メモリ割り当て処理のフロー図である。
本発明の実施形態について、図を参照しながら説明する。
本実施形態に係るオペレーティングシステム10は、例えば図1に示すような複数のプロセッサコアを相互に接続したマルチコア環境において実行されるプログラムである。このオペレーティングシステム10は、ハードウェアリソースを管理するとともに、ハードウェアリソースを抽象化した各種のサービスをアプリケーションプログラム40に提供する。例えば、アプリケーションプログラム40から呼び出し可能なメモリ獲得用APIを実装しており、これによりアプリケーションプログラム40がメモリリソースを安全に使用できるサービスを提供している。なお、このメモリ獲得用APIがアプリケーションプログラム40から呼び出されると、オペレーティングシステム10は物理メモリからメモリ割り当てを実行し、割り当てたメモリの先頭アドレスを示すポインタをアプリケーションプログラム40に返す。アプリケーションプログラム40は、このポインタを参照することでメモリを使用した各種の処理を実行することができる。
本実施形態に係るマルチコアプロセッサは、複数のプロセッサコアを備えている。本実施形態においては、図1に示すように、第1のプロセッサコア30aと、第2のプロセッサコア30bと、第3のプロセッサコア30cと、第4のプロセッサコア30dと、の4つのプロセッサコアを備えている。また、これらの4つのプロセッサコアは、それぞれ固有のローカルメモリ(1次キャッシュなど)を備えている。すなわち、第1のプロセッサコアのローカルメモリ31aと、第2のプロセッサコアのローカルメモリ31bと、第3のプロセッサコアのローカルメモリ31cと、第4のプロセッサコアのローカルメモリ31dと、が存在する。
なお、本実施形態においては4つのプロセッサコアを備えたマルチコアプロセッサを例に説明しているが、これに限らず、プロセッサコアの数は3つ以下や5つ以上であってもよい。また、複数のプロセッサコアを備えたチップを複数使用してマルチコア環境を構成してもよい。
また、本実施形態に係る実行環境は、プロセッサコア固有のメモリ以外にも、例えばSDRAMなどの共有メモリを備えている。これらの共有メモリは、特定のクラスタによる使用を想定したクラスタメモリと、すべてのプロセッサコアからアクセスできるグローバルメモリ34と、に割り振られている。なお、クラスタとは、例えばマルチコア環境の管理効率を高めるためにプロセッサコアをいくつかのグループに分割したものである。本実施形態においては、第1のプロセッサコア30aと第2のプロセッサコア30bとで第1のクラスタ32aを構成し、第3のプロセッサコア30cと第4のプロセッサコア30dとで第2のクラスタ32bを構成している。そして、これらのクラスタには、それぞれクラスタメモリが割り当てられている。すなわち、第1のクラスタメモリ33aと、第2のクラスタメモリ33bと、である。
なお、本実施形態においては特に説明しないが、クラスタ構造を階層化してもよい。すなわち、複数のクラスタの親となる上位のクラスタを設定していくことで、クラスタをツリー構造で管理してもよい。
本実施形態においては、この図1が示すように、特定のプロセッサコアにとって最もアクセス速度の速いメモリはそのプロセッサコアに固有のメモリである(例えば第1のプロセッサコア30aにとって最もアクセス速度の速いメモリは第1のプロセッサコアのローカルメモリ31aである)。また、その次にアクセス速度の早い(または優先される)メモリは、自分が属するクラスタのメモリである(例えば第1のプロセッサコア30aにとっては、第1のクラスタメモリ33aである)。更に、その次にアクセス速度の早い(または優先される)メモリは、そのクラスタの親のメモリ(例えば第1のプロセッサコア30aにとっては、グローバルメモリ34である)。
このため、アプリケーションプログラム40がどのプロセッサコアで実行されているかによって、アクセス速度の早いメモリや優先して割り当てるべきメモリが変化する環境となっている。例えば、アプリケーションプログラム40が第1のプロセッサコア30aで実行されている場合、アクセス速度の最も早いメモリは第1のプロセッサコアのローカルメモリ31aである。一方、アプリケーションプログラム40が第2のプロセッサコア30bで実行されている場合、アクセス速度の最も早いメモリは第2のプロセッサコアのローカルメモリ31bである。
このような環境下で適切なメモリ割り当てを実行するために、本実施形態に係るオペレーティングシステム10は、図2に示すように、メモリ領域作成部12と、メモリ割り当て部14と、を備える。
メモリ領域作成部12は、システムの初期化時に後述する内部データ43を読み込み、内部データ43の内容に従って複数のメモリ領域20を作成するためのものである。メモリ領域20は、オペレーティングシステム10がメモリリソースを管理するための単位である。メモリ領域作成部12は、メモリをアドレスとサイズで分割して複数のメモリ領域20を作成するとともに、これらのメモリ領域20でツリー構造を作成する(図8参照)。このツリー構造については後ほど詳述する。
メモリ割り当て部14は、メモリ獲得用APIが呼び出されたときに、メモリ獲得用APIの引数として指定されたヒープIDを参照し、ヒープIDに関連付けられたメモリ領域20からメモリ割り当てを実行させるものである。ヒープIDは後述するコンフィギュレーションファイル41において定義され、ユーザによって書き換え可能となっている。このヒープIDについては後ほど詳述する。
このメモリ割り当て部14は、本実施形態においては、マイクロカーネル16と、ヒープマネージャ15と、を備えて構成されている。
マイクロカーネル16は、各プロセッサコアにおけるプログラムの実行制御を行うプログラムであり、各プロセッサコアにおいて1つずつ実行されている。よって、本実施形態のように4つのプロセッサコアが存在する場合には、それぞれのプロセッサコアに対応した4つのマイクロカーネル16が実行される。なお、アプリケーションプログラム40がメモリ獲得用APIを呼び出すと、当該アプリケーションプログラム40を実行しているプロセッサコアを制御するマイクロカーネル16に命令が通知される。命令を受け取ったマイクロカーネル16は、メモリ獲得用APIの引数(ヒープID)を基に、メモリ割り当てを実行するメモリ領域20を特定し、当該メモリ領域20を管理するヒープマネージャ15に依頼してメモリ割り当てを実行する。
ヒープマネージャ15は、各メモリ領域20を制御するプログラムであり、メモリ領域20ごとに1つずつ実行されている。例えば図8に示すように7つのメモリ領域20が存在する場合には、それぞれのメモリ領域20に対応した7つのヒープマネージャ15が実行される。このヒープマネージャ15は、上述したように、メモリ獲得用APIが呼び出されたときにマイクロカーネル16によって呼び出され、自らが管理するメモリ領域20からのメモリ割り当てを実行する。具体的には、ヒープマネージャ15は、マイクロカーネル16からメモリ割り当ての要求があったときには、マイクロカーネル16によって指定されたサイズのメモリを確保してマイクロカーネル16にアドレスを通知するとともに、当該メモリが明示的に開放されるまでは再びメモリ割り当てに使用されることがないように管理する。
なお、ヒープマネージャ15が管理するメモリ領域20は、図8に示すように、大きく3つの種類に分類することができる。すなわち、コアメモリ領域と、クラスタメモリ領域と、グローバルメモリ領域23と、である。
コアメモリ領域は、複数のプロセッサコアのローカルメモリに係るメモリ領域20であり、これらのメモリ領域20をオペレーティングシステム10で管理するために作成される。このコアメモリ領域は、複数のプロセッサコアと同じ数だけ作成される。本実施形態においては、第1のプロセッサコアのローカルメモリ31aに対応した第1のコアメモリ領域21aと、第2のプロセッサコアのローカルメモリ31bに対応した第2のコアメモリ領域21bと、第3のプロセッサコアのローカルメモリ31cに対応した第3のコアメモリ領域21cと、第4のプロセッサコアのローカルメモリ31dに対応した第4のコアメモリ領域21dと、が作成される。
クラスタメモリ領域は、1以上のコアメモリ領域に紐付けられたメモリ領域20であり、これらのメモリ領域20をオペレーティングシステム10で管理するために作成される。このクラスタメモリ領域は、本実施形態においてはクラスタと同じ数だけ作成される。すなわち、第1のクラスタメモリ33aに対応した第1のクラスタメモリ領域22aと、第2のクラスタメモリ33bに対応した第2のクラスタメモリ領域22bと、が作成される。
グローバルメモリ領域23は、1以上のクラスタメモリ領域に紐付けられたメモリ領域20であり、これらのメモリ領域20をオペレーティングシステム10で管理するために作成される。本実施形態においては、グローバルメモリ領域23を1つだけ作成している。しかしながら、複数のグローバルメモリ領域23を設けてもよい。
これらコアメモリ領域、クラスタメモリ領域、グローバルメモリ領域23は、図8に示すような階層構造を形成する。すなわち、コアメモリ領域が最下層であり、クラスタメモリ領域が中間層であり、グローバルメモリ領域23が最上層であるツリー構造を形成する。なお、図8に示す例ではクラスタメモリ領域が1階層であるが、クラスタメモリ領域は複数の階層を形成してもよい。
これらのメモリ領域20は、図7に示すようなコンフィギュレーションファイル41の記載によって、アドレス、サイズ、ツリー構造、その他の属性が決定される。よって、コンフィギュレーションファイル41の記述を書き換えることで、メモリ領域20の設定を変更することができる。例えば、物理メモリの構成やプロセッサコアの数等に応じたメモリ領域20となるように設定を変更し、オペレーティングシステム10の制御に使用することができる。
また、このコンフィギュレーションファイル41には、メモリ領域20とヒープIDとの関係を自由に記述し、設定することができる。これにより、アプリケーションプログラム40がヒープIDを使用して所望のメモリ領域20にアクセスできるようにしている。
このコンフィギュレーションファイル41は、図3に示すように、情報生成手段42によって読み込まれて使用される。情報生成手段42は、単独で実行可能なコンフィギュレーションツール(例えばコンピュータ上で実行可能な実行可能形式のファイル)であり、コンフィギュレーションファイル41に記載された内容を読み込んで、アプリケーションプログラム40用のヘッダファイル44とオペレーティングシステム10用の内部データ43とを生成する。
このうち、内部データ43は、上述したメモリ領域作成部12がシステムの初期化時に読み込んでメモリ領域20を作成するために使用される。
一方、ヘッダファイル44は、アプリケーションプログラム40のソースコード45をコンパイルする際に使用される。具体的には、コンパイラ46によってアプリケーションプログラム40のソースコード45をコンパイルする際にヘッダファイル44が使用され、これによりオブジェクトファイル47が生成される。ヘッダファイル44にはヒープIDが定義されているため、アプリケーションプログラム40がヘッダファイル44を参照することで、メモリ獲得用APIの呼び出しにヒープIDを使用することができる。
(コンフィギュレーションファイル41の記述例)
次に、コンフィギュレーションファイル41の記述例について説明する。なお、図7がコンフィギュレーションファイル41の具体的な記述例である。この図7に示すコンフィギュレーションファイル41では、DEF_MEM(メモリの定義)と、DEF_MEMOBJ(メモリ領域20の定義)と、DEF_HEAP(ヒープIDの定義)と、の3つの定義を記述することができる。
図4は、コンフィギュレーションファイル41においてメモリの定義(DEF_MEM)を記述するための書式である。この書式を使用することにより、メモリ空間をアドレスとサイズで分割し、その分割したメモリにメモリID(コンフィギュレーションファイル41内で使用する一意の文字列)を付与することができる。具体的には、startaddrに記載されたアドレスからmemszで指定されたサイズのメモリに対して、memidで指定されたメモリIDが付与される。
例えば、図7の(1)で示す例では、0xc0000000を開始アドレスとして0x8000000のメモリに(つまり0xc0000000〜0xc7ffffffの範囲のメモリに)MEM_SDRAM1というメモリIDが付与される。
図5は、コンフィギュレーションファイル41においてメモリ領域20の定義(DEF_MEMOBJ)を記述するための書式である。この書式を使用することにより、名前、位置、属性、親子関係、プロセッサコアとの関係を指定してメモリ領域20を作成することができる。
図5に示す書式において、memobjidには「メモリ領域20の名前(コンフィギュレーションファイル41内で使用する一意の文字列)」を指定する。
memobjatrには「メモリ領域20の属性」を指定する。指定可能な属性は、グローバルメモリ領域23を意味する「MOA_GLOBAL」、クラスタメモリ領域を意味する「MOA_CLUSTER」、コアメモリ領域を意味する「MOA_CORE」のいずれかである。
ownercoreidには「このメモリ領域20を管理しているプロセッサコアの番号」を指定する。具体的には、メモリ領域20がコアメモリ領域である場合に、そのコアメモリ領域がどのプロセッサコアのローカルメモリに関連付けられているかを指定する。例えば、第1のプロセッサコアのローカルメモリ31aに関連付けられたコアメモリ領域(図8に示す第1のコアメモリ領域21a)であれば「1」を指定する。なお、メモリ領域20がコアメモリ領域ではない場合、当該メモリ領域20を管理するヒープマネージャ15が実行されているプロセッサコアの番号を指定する。
parentidには「このメモリ領域20の親となるメモリ領域20の名前」を指定する。具体的には、コアメモリ領域の場合には、親となるクラスタメモリ領域の名前を指定する。クラスタメモリ領域の場合には、親となるクラスタメモリ領域またはグローバルメモリ領域23の名前を指定する。グローバルメモリ領域23の場合は、親がいないことを示す規定値「MEMOBJ_ROOT」を指定する。
memlistには「このメモリ領域20に属するメモリIDのリスト」を指定する。すなわち、図4で説明した記述方法により定義されたメモリIDのリストを指定する。
例えば、図7の(2)で示す例では、MEM_SDRAM1(0xc0000000〜0xc7ffffffの範囲のメモリ)とMEM_SDRAM2(0xcc000000〜0xcfffffffの範囲のメモリ)に対して、「MEMOBJ_GLOBAL1」という名前で、グローバルメモリ領域23が作成される。
また、図7の(3)で示す例では、MEM_CLUSTER1(0x81200000〜0x8127efffの範囲のメモリ)に対して、「MEMOBJ_CLUSTER1」という名前で、クラスタメモリ領域が作成される。なお、このクラスタメモリ領域の親のメモリ領域20は「MEMOBJ_GLOBAL1」である。
また、図7の(4)で示す例では、MEM_CORE1(0x81000000〜0x81007fffの範囲のメモリ)に対して、「MEMOBJ_CORE1」という名前で、コアメモリ領域が作成される。なお、このコアメモリ領域は、番号「1」のプロセッサコアのローカルメモリを使用するものであり、このコアメモリ領域の親のメモリ領域20は「MEMOBJ_CLUSTER1」である。
このように、メモリ領域20が定義されることで、図8に示すようなツリー構造が作成される。
図6は、コンフィギュレーションファイル41においてヒープIDの定義(DEF_HEAP)を記述するための書式である。この書式を使用することにより、ヒープIDとメモリ領域20との関係を記述することができる。
図6に示す書式において、heapidには「ヒープID(アプリケーションプログラム40で使用可能な一意の文字列)」を指定する。
memobjidには「予め決められた仮想属性」または「ヒープIDに関連付けるメモリ領域20の名前」を指定する。
なお、memobjidに指定可能な「予め決められた仮想属性」としては、このヒープIDが仮想グローバルIDであることを示す「MEMOBJ_GLOBAL」、このヒープIDが仮想クラスタIDであることを示す「MEMOBJ_CLUSTER」、このヒープIDが仮想コアIDであることを示す「MEMOBJ_CORE」のいずれかを指定することができる。
例えば、図7の(5)で示す例では、「HEAP_GLOBAL」というヒープIDで、仮想グローバルIDが作成される。仮想グローバルIDは、グローバルメモリ領域23を参照するためのヒープIDである。仮想グローバルIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が使用可能なグローバルメモリ領域23を検索し、このグローバルメモリ領域23からメモリ割り当てを実行する。
また、図7の(6)で示す例では、「HEAP_CLUSTER」というヒープIDで、仮想クラスタIDが作成される。仮想クラスタIDは、クラスタメモリ領域を動的に割り当てるためのヒープIDである。仮想クラスタIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が使用可能なクラスタメモリ領域を検索し、このクラスタメモリ領域からメモリ割り当てを実行する。
また、図7の(7)で示す例では、「HEAP_CORE」というヒープIDで、仮想コアIDが作成される。仮想コアIDは、コアメモリ領域を動的に割り当てるためのヒープIDである。仮想コアIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が使用可能なコアメモリ領域を検索し、このコアメモリ領域からメモリ割り当てを実行する。
また、memobjidに指定可能な「ヒープIDに関連付けるメモリ領域20の名前」としては、図5で説明した記述方法により定義されたメモリ領域20の名前を指定することができる。なお、このように直接的にメモリ領域20の名前を指定した場合、ヒープIDとメモリ領域20とが直接的に関連付けられる。このようなヒープIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が指定されたメモリ領域20からメモリを直接割り当てる。このようなヒープIDを実メモリIDと呼ぶ。
例えば、図7の(8)で示す例では、「HEAP_CLUSTER1」というヒープIDで、実メモリIDが作成される。この実メモリIDは、「MEMOBJ_CLUSTER1」という名前で定義されたメモリ領域20と直接的に関連付けられている。
また、図7の(9)で示す例では、「HEAP_CORE1」というヒープIDで、実メモリIDが作成される。この実メモリIDは、「MEMOBJ_CORE4」という名前で定義されたメモリ領域20と直接的に関連付けられている。
askparentには、指定されたメモリ領域20からのメモリ割り当てに失敗した場合に、親のメモリ領域20を参照するか否かを指定する。「true」が指定された場合には、図8に示すようなツリー構造の親のメモリ領域20を再帰的に参照してメモリ割り当てを行う。例えば、第1のコアメモリ領域21aからのメモリ割り当てに失敗した場合には、第1のクラスタメモリ領域22aからのメモリ割り当てを試行する。この第1のクラスタメモリ領域22aからのメモリ割り当てにも失敗した場合には、グローバルメモリ領域23からのメモリ割り当てを試行する。一方、「false」が指定された場合には、指定されたメモリ領域20からのメモリ割り当てに失敗した場合でも親のメモリ領域20からのメモリ割り当てを行わない。
(メモリ獲得用API)
次に、メモリ獲得用APIの仕様について説明する。本実施形態に係るオペレーティングシステム10は、例えば図9に示すようなメモリ獲得用APIを備えており、このメモリ獲得用APIをアプリケーションプログラム40から呼び出し可能となっている。このメモリ獲得用APIには、引数として「heapid」「size」「addr」を指定可能である。
heapidには「ヒープID」を指定する。オペレーティングシステム10は、ここで指定されたヒープIDで特定されるメモリ領域20からのメモリ割り当てを試行する。ヒープIDには、すでに説明したような仮想グローバルID、仮想クラスタID、仮想コアID、実メモリIDのいずれかを指定することができる。なお、アプリケーションプログラム40がヒープIDを使用する場合には、情報生成手段42が出力したヘッダファイル44を参照する。このヘッダファイル44には、アプリケーションプログラム40が使用可能な形でヒープIDが定義されている。なお、ヘッダファイル44に定義されるヒープIDは、コンフィギュレーションファイル41で定義したものに限らず、情報生成手段42が自動的に追加するようにしてもよい。例えば、仮想グローバルID、仮想クラスタID、仮想コアIDの少なくともいずれかを、コンフィギュレーションファイル41で定義されていなくても、情報生成手段42が自動的にヘッダファイル44に出力するようにしてもよい。
sizeには「獲得したいメモリのサイズ」を指定する。
addrには「獲得したメモリの先頭アドレスを返す領域へのポインタ」を指定する。メモリ獲得に成功した場合には、アプリケーションプログラム40がこのポインタの中身を参照することで、獲得したメモリの先頭アドレスを得ることができる。
なお、このAPIの戻り値はエラーコードである。具体的には、メモリ獲得に成功した場合には「EOK(定数)」を返却し、sizeやaddrが不正な場合には「EPAR(定数)」を返却し、ヒープIDが不正な場合には「ENOEXS(定数)」を返却し、メモリ枯渇等によりメモリ獲得に失敗した場合には「ENOMEM(定数)」を返却する。
(メモリ割り当て処理)
次に、上記したメモリ獲得用APIが呼び出されたときのオペレーティングシステム10の処理について説明する。図10は、メモリ割り当て処理のメインフロー図である。
まず、図10に示すステップS100において、アプリケーションプログラム40がメモリ獲得用APIの呼び出しを実行し、このAPI呼び出しに起因するメモリ獲得要求をマイクロカーネル16が受信する。このとき、メモリ獲得要求を受信するマイクロカーネル16は、アプリケーションプログラム40が実行されているプロセッサコアにおいて実行されているマイクロカーネル16である。マイクロカーネル16は、メモリ獲得用APIで指定されたヒープIDを取得し、このヒープIDを基に内部データ43を参照し、ヒープIDの属性をチェックする。そして、ステップS101に進む。
ステップS101では、ヒープIDが仮想グローバルIDであるか(すなわちコンフィギュレーションファイル41においてMEMOBJ_GLOBAL属性を付与されて定義されたヒープIDであるか)がチェックされる。仮想グローバルIDである場合には、ステップS102へ進み、グローバルメモリ割り当て処理(図11参照)を実行する。一方、仮想グローバルIDでない場合には、ステップS103に進む。
ステップS103では、ヒープIDが仮想クラスタIDであるか(すなわちコンフィギュレーションファイル41においてMEMOBJ_CLUSTER属性を付与されて定義されたヒープIDであるか)がチェックされる。仮想クラスタIDである場合には、ステップS104へ進み、クラスタメモリ割り当て処理(図12参照)を実行する。一方、仮想クラスタIDでない場合には、ステップS105に進む。
ステップS105では、ヒープIDが仮想コアIDであるか(すなわちコンフィギュレーションファイル41においてMEMOBJ_CORE属性を付与されて定義されたヒープIDであるか)がチェックされる。仮想コアIDである場合には、ステップS106へ進み、コアメモリ割り当て処理(図13参照)を実行する。一方、仮想コアIDでない場合には、このヒープIDは実メモリIDであるので、ステップS107に進み、実メモリ割り当て処理(図14参照)を実行する。
(グローバルメモリ割り当て処理)
グローバルメモリ割り当て処理について、図11を参照しつつ説明する。
まず、図11に示すステップS200において、マイクロカーネル16は、メモリ獲得用APIの呼び出し元のプロセッサコアの番号(本実施形態においてはマイクロカーネル16が実行されているプロセッサコアの番号)を取得する。そして、ステップS201に進む。
ステップS201では、マイクロカーネル16は、ステップS200で取得したプロセッサコアの番号を基に、メモリ領域20のツリー構造を参照し、当該番号に関連付けられたコアメモリ領域を取得する。例えば、プロセッサコアの番号が「1」の場合、コンフィギュレーションファイル41においてownercoreidに「1」を指定したコアメモリ領域(図7の(4)の記述によって定義されるコアメモリ領域)を取得する。そして、ステップS202に進む。
ステップS202では、取得したメモリ領域20が「MOA_GLOBAL」属性であるか、すなわち、グローバルメモリ領域23であるかがチェックされる。グローバルメモリ領域23である場合には、当該メモリ領域20をメモリ割り当ての対象に選択して、ステップS204へ進む。一方、グローバルメモリ領域23でない場合には、ステップS203に進む。
ステップS203に進んだ場合、取得したメモリ領域20の親のメモリ領域20が取得される。すなわち、図8に示すようなツリー構造において、現在取得しているメモリ領域20の親のメモリ領域20を取得する。そして、ステップS203に戻り、この新しく取得したメモリ領域20がグローバルメモリ領域23であるかがチェックされる。そして、グローバルメモリ領域23である場合には、当該メモリ領域20をメモリ割り当ての対象に選択して、ステップS204へ進む。一方、グローバルメモリ領域23でない場合には、ステップS203に進んで上記と同様の処理を行う。このように、グローバルメモリ領域23が見つかるまで、親のメモリ領域20を再帰的に取得する。
ステップS204では、マイクロカーネル16は、メモリ割り当ての対象に選択したメモリ領域20を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15にメモリ割り当てを依頼する。そして、ステップS205に進む。
ステップS205では、ヒープマネージャ15によるメモリ割り当てが成功したかがチェックされる。メモリ割り当てが成功した場合には、ステップS206へ進む。一方、メモリリソースが枯渇するなどしてメモリ割り当てに失敗した場合には、ステップS207に進む。
ステップS206へ進んだ場合、獲得したメモリのメモリポインタをアプリケーションプログラム40に返却する。このメモリポインタを使用することで、アプリケーションプログラム40は安全にメモリを使用することができる。そして処理が終了する。
一方、ステップS207へ進んだ場合、親のメモリ領域20を取得するかがチェックされる。親のメモリ領域20が存在しない場合、または、メモリ獲得用APIの引数で指定されたヒープIDが親のメモリ領域20を参照しない設定である場合(コンフィギュレーションファイル41におけるヒープIDの定義でaskparentがfalseの場合)には、ステップS209へ進む。それ以外の場合には、図8に示すようなツリー構造を参照し、メモリ割り当てに失敗したメモリ領域20の親のメモリ領域20をメモリ割り当ての対象に選択して、ステップS208へ進む。
ステップS209へ進んだ場合、エラーコードをアプリケーションプログラム40に返却する。そして処理が終了する。
一方、ステップS208へ進んだ場合、メモリ割り当ての対象に選択した親のメモリ領域20を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15にメモリ割り当てを依頼する。そして、上記したステップS205に進み、既に説明した手順を繰り返す。このとき、親のメモリ領域20においてもメモリ割り当てが失敗した場合には、更に親のメモリ領域20からのメモリ割り当てが再帰的に試行される。
このように、グローバルメモリ割り当て処理においては、アプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るメモリ領域20(コアメモリ領域)を特定し、当該メモリ領域20に紐付けられたメモリ領域20を再帰的に辿って発見したグローバルメモリ領域23からメモリ割り当てを実行させる。
(クラスタメモリ割り当て処理)
クラスタメモリ割り当て処理について、図12を参照しつつ説明する。
まず、図12に示すステップS300において、マイクロカーネル16は、メモリ獲得用APIの呼び出し元のプロセッサコアの番号(本実施形態においてはマイクロカーネル16が実行されているプロセッサコアの番号)を取得する。そして、ステップS301に進む。
ステップS301では、マイクロカーネル16は、ステップS300で取得したプロセッサコアの番号を基に、メモリ領域20のツリー構造を参照し、当該番号に関連付けられたコアメモリ領域を取得する。そして、ステップS303に進む。
ステップS303では、取得したコアメモリ領域の親のメモリ領域20をメモリ割り当ての対象に選択する。このコアメモリ領域の親のメモリ領域20は、「MOA_CLUSTER」属性を有するクラスタメモリ領域である。そして、ステップS304に進む。
なお、ステップS304〜S309における処理は、上述したグローバルメモリ割り当て処理のステップS204〜S209における処理と同様であるので、説明を省略する。
このように、クラスタメモリ割り当て処理においては、アプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域を特定し、当該コアメモリ領域に紐付けられたクラスタメモリ領域からメモリ割り当てを実行させる。
(コアメモリ割り当て処理)
コアメモリ割り当て処理について、図13を参照しつつ説明する。
まず、図13に示すステップS400において、マイクロカーネル16は、メモリ獲得用APIの呼び出し元のプロセッサコアの番号(本実施形態においてはマイクロカーネル16が実行されているプロセッサコアの番号)を取得する。そして、ステップS401に進む。
ステップS401では、マイクロカーネル16は、ステップS400で取得したプロセッサコアの番号を基に、メモリ領域20のツリー構造を参照し、当該番号に関連付けられたコアメモリ領域20をメモリ割り当ての対象として選択する。そして、ステップS402に進む。
ステップS402では、マイクロカーネル16が、メモリ割り当ての対象として選択したコアメモリ領域を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15によってメモリ割り当てが実行される。そして、ステップS403に進む。
なお、ステップS403〜S407における処理は、上述したグローバルメモリ割り当て処理のステップS205〜S209における処理と同様であるので、説明を省略する。
このように、クラスタメモリ割り当て処理においては、アプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域からメモリ割り当てを実行させる。
(実メモリ割り当て処理)
実メモリ割り当て処理について、図14を参照しつつ説明する。
まず、図14に示すステップS500において、マイクロカーネル16は、メモリ獲得用APIの引数で指定されたヒープID(実メモリID)を基に、そのヒープIDに関連付けられたメモリ領域20をメモリ割り当ての対象として選択する。例えば、図7の(9)で定義された「HEAP_CORE4」というヒープIDがメモリ獲得用APIの引数で指定されている場合、このヒープIDに関連付けられた「MEMOBJ_CORE4」という名前のメモリ領域20をメモリ割り当ての対象として選択する。そして、ステップS501に進む。
ステップS501では、マイクロカーネル16が、メモリ割り当ての対象として選択したメモリ領域20を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15にメモリ割り当てを依頼する。そして、ステップS502に進む。
なお、ステップS502〜S506における処理は、上述したグローバルメモリ割り当て処理のステップS205〜S209における処理と同様であるので、説明を省略する。
このように、実メモリ割り当て処理においては、指定された実メモリIDに関連付けられたメモリ領域20からメモリ割り当てを実行させる。
(まとめ)
以上説明したように、本実施形態によれば、実メモリIDが指定されてメモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられたメモリ領域20からメモリ割り当てを実行させるようにしている。このため、アプリケーションプログラム40が指定した特定のメモリからのメモリ割り当てを実行したい場合には、実メモリIDを指定してメモリ獲得用APIを呼び出せばよい。
また、仮想コアIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域からメモリ割り当てを実行させるようにしている。このため、アクセス速度の速いメモリ(プロセッサコア固有のメモリ)をオペレーティングシステム10に動的に選択させてメモリ割り当てを実行したい場合には、仮想コアIDを指定してメモリ獲得用APIを呼び出せばよい。
また、仮想クラスタIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域を特定し、当該コアメモリ領域に紐付けられたクラスタメモリ領域からメモリ割り当てを実行させるようにしている。このため、例えばマルチコア環境の管理効率を高めるためにプロセッサコアをいくつかのグループ(クラスタ)に分割し、そのクラスタにメモリ領域20を割り当てた場合、このクラスタ用のメモリ領域20をクラスタメモリ領域として定義することで、プログラムの実行時にオペレーティングシステム10が動的に判断してクラスタメモリ領域からメモリ割り当てを実行させることができる。
また、仮想グローバルIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るメモリ領域20を特定し、当該メモリ領域20に紐付けられたメモリ領域20を再帰的に辿って発見したグローバルメモリ領域23からメモリ割り当てを実行させるようにしている。このため、例えばすべてのプロセッサコアからアクセスできるメモリをグローバルメモリ領域23とすることで、プログラムの実行時にオペレーティングシステム10が動的に判断してこのグローバルメモリ領域23からメモリ割り当てを実行させることができる。
しかも、上記したような複数のメモリ割り当て方法が同じメモリ獲得用APIで実現されているため、アプリケーションプログラム40を変更しなくても、ヒープIDの定義を変更するだけでメモリ割り当て方法を切り替えることができる。例えば、コンフィギュレーションファイル41を書き換えることでヒープIDの定義を変更し、仮想コアIDに割り当てられていたヒープIDを実メモリIDに割り当てるようにすれば、当該ヒープIDを使用してメモリ獲得用APIを呼び出していたアプリケーションプログラム40を変更することなく、メモリ割り当ての方法を切り替えることができる。仮想コアIDを実メモリIDに変更した場合には、ヒープIDの定義を変更する前は、プログラム実行時のプロセッサコアに固有のメモリ領域20からメモリ割り当てが実行され、ヒープIDの定義を変更した後は、ヒープIDによって指定された特定のメモリ領域20からのメモリ割り当てが実行される。
また、メモリ領域20でツリー構造を作成し、ヒープIDで指定されたメモリ領域20からのメモリ割り当てに失敗したときには、当該メモリ領域20の上位のメモリ領域20からメモリ割り当てを実行させるようにしている。このため、例えばアクセス速度の速いメモリリソースが枯渇してしまった場合でも、次の候補のメモリ領域20からメモリ割り当てを実行させることができる。よって、できるだけアクセス速度の速いメモリ領域20を検索してメモリ割り当てを実行させることができる。
また、ヒープIDとメモリ領域20との関係を記述したコンフィギュレーションファイル41と、コンフィギュレーションファイル41を読み込んで、アプリケーションプログラム40用のヘッダファイル44とオペレーティングシステム10用の内部データ43とを生成する情報生成手段42と、を備える。このような構成によれば、コンフィギュレーションファイル41を書き換えて情報生成手段42を実行するだけで、アプリケーションプログラム40やオペレーティングシステム10を変更することなく、メモリ領域20の定義やヒープIDの定義を変更することができる。例えば、異なる物理メモリやプロセッサコアを備えたハードウェア環境へプログラムを移植する場合でも、コンフィギュレーションファイル41を書き換えて情報生成手段42を実行するだけで、アプリケーションプログラム40やオペレーティングシステム10を変更することなく、適切なメモリ割り当てを実現することができる。
10 オペレーティングシステム
12 メモリ領域作成部
14 メモリ割り当て部
15 ヒープマネージャ
16 マイクロカーネル
20 メモリ領域
21a 第1のコアメモリ領域
21b 第2のコアメモリ領域
21c 第3のコアメモリ領域
21d 第4のコアメモリ領域
22a 第1のクラスタメモリ領域
22b 第2のクラスタメモリ領域
23 グローバルメモリ領域
30a 第1のプロセッサコア
30b 第2のプロセッサコア
30c 第3のプロセッサコア
30d 第4のプロセッサコア
31a 第1のプロセッサコアのローカルメモリ
31b 第2のプロセッサコアのローカルメモリ
31c 第3のプロセッサコアのローカルメモリ
31d 第4のプロセッサコアのローカルメモリ
32a 第1のクラスタ
32b 第2のクラスタ
33a 第1のクラスタメモリ
33b 第2のクラスタメモリ
34 グローバルメモリ
40 アプリケーションプログラム
41 コンフィギュレーションファイル
42 情報生成手段
43 内部データ
44 ヘッダファイル
45 アプリケーションプログラムのソースコード
46 コンパイラ
47 オブジェクトファイル

Claims (9)

  1. それぞれローカルメモリを備えた複数のプロセッサコアを相互に接続したマルチコア環境において実行され、アプリケーションプログラムから呼び出し可能なメモリ獲得用APIを実装したオペレーティングシステムであって、
    予め設定された内部データに従って複数のメモリ領域を作成するメモリ領域作成部と、
    前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるメモリ割り当て部と、
    を備え、
    前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域を含み、
    前記ヒープIDとして、前記メモリ領域を直接指定してメモリを割り当てるための実メモリIDと、前記コアメモリ領域を動的に選択してメモリを割り当てるための仮想コアIDと、を含み、
    前記メモリ割り当て部は、
    前記実メモリIDが指定されて前記メモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させ、
    前記仮想コアIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域からメモリ割り当てを実行させることを特徴とする、オペレーティングシステム。
  2. 前記メモリ領域として、1以上の前記コアメモリ領域に紐付けられたクラスタメモリ領域を含み、
    前記ヒープIDとして、前記クラスタメモリ領域を動的に選択してメモリを割り当てるための仮想クラスタIDを含み、
    前記メモリ割り当て部は、
    前記仮想クラスタIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域を特定し、当該コアメモリ領域に紐付けられた前記クラスタメモリ領域からメモリ割り当てを実行させることを特徴とする、請求項1記載のオペレーティングシステム。
  3. 前記メモリ領域として、1以上の前記クラスタメモリ領域に紐付けられたグローバルメモリ領域を含み、
    前記ヒープIDとして、前記グローバルメモリ領域を動的に選択してメモリを割り当てるための仮想グローバルIDを含み、
    前記メモリ割り当て部は、
    前記仮想グローバルIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記メモリ領域を特定し、当該メモリ領域に紐付けられた前記メモリ領域を再帰的に辿って発見した前記グローバルメモリ領域からメモリ割り当てを実行させることを特徴とする、請求項2記載のオペレーティングシステム。
  4. 前記メモリ領域作成部は、前記メモリ領域でツリー構造を作成し、
    前記メモリ割り当て部は、
    前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする、請求項1〜3のいずれか1項に記載のオペレーティングシステム。
  5. 請求項1〜4のいずれか1項に記載のオペレーティングシステムと、
    前記ヒープIDと前記メモリ領域との関係を記述したコンフィギュレーションファイルと、
    前記コンフィギュレーションファイルを読み込んで、前記アプリケーションプログラム用のヘッダファイルと前記オペレーティングシステム用の内部データとを生成する情報生成手段と、
    前記ヘッダファイルを使用して前記アプリケーションプログラムのソースコードをコンパイルするコンパイラと、
    を備えることを特徴とする、プログラミングシステム。
  6. それぞれローカルメモリを備えた複数のプロセッサコアを相互に接続したマルチコア環境において、アプリケーションプログラムからメモリ獲得用APIが呼び出されたときに、メモリ割り当てを実行させるためのメモリ割り当て方法であって、
    予め設定された内部データに従って複数のメモリ領域を作成するステップと、
    前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるステップと、
    を備え、
    前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域を含み、
    前記ヒープIDとして、前記メモリ領域を直接指定してメモリを割り当てるための実メモリIDと、前記コアメモリ領域を動的に選択してメモリを割り当てるための仮想コアIDと、を含み、
    前記実メモリIDが指定されて前記メモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させ、
    前記仮想コアIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域からメモリ割り当てを実行させることを特徴とする、メモリ割り当て方法。
  7. 前記メモリ領域として、1以上の前記コアメモリ領域に紐付けられたクラスタメモリ領域を含み、
    前記ヒープIDとして、前記クラスタメモリ領域を動的に選択してメモリを割り当てるための仮想クラスタIDを含み、
    前記仮想クラスタIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記コアメモリ領域を特定し、当該コアメモリ領域に紐付けられた前記クラスタメモリ領域からメモリ割り当てを実行させることを特徴とする、請求項6記載のメモリ割り当て方法。
  8. 前記メモリ領域として、1以上の前記クラスタメモリ領域に紐付けられたグローバルメモリ領域を含み、
    前記ヒープIDとして、前記グローバルメモリ領域を動的に選択してメモリを割り当てるための仮想グローバルIDを含み、
    前記仮想グローバルIDが指定されて前記メモリ獲得用APIが呼び出されたときには、前記メモリ獲得用APIを呼び出したアプリケーションプログラムが実行されているプロセッサコアのローカルメモリに係る前記メモリ領域を特定し、当該メモリ領域に紐付けられた前記メモリ領域を再帰的に辿って発見した前記グローバルメモリ領域からメモリ割り当てを実行させることを特徴とする、請求項7記載のメモリ割り当て方法。
  9. 前記メモリ領域でツリー構造を作成し、
    前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする、請求項6〜8のいずれか1項に記載のメモリ割り当て方法。
JP2016029795A 2016-02-19 2016-02-19 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法 Active JP6423809B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016029795A JP6423809B2 (ja) 2016-02-19 2016-02-19 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016029795A JP6423809B2 (ja) 2016-02-19 2016-02-19 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2018197732A Division JP6682599B2 (ja) 2018-10-19 2018-10-19 オペレーティングシステム及びメモリ割り当て方法

Publications (2)

Publication Number Publication Date
JP2017146895A true JP2017146895A (ja) 2017-08-24
JP6423809B2 JP6423809B2 (ja) 2018-11-14

Family

ID=59681644

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016029795A Active JP6423809B2 (ja) 2016-02-19 2016-02-19 オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法

Country Status (1)

Country Link
JP (1) JP6423809B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022548887A (ja) * 2019-09-17 2022-11-22 マイクロン テクノロジー,インク. メモリタイプへのページテーブルフック
US11650742B2 (en) 2019-09-17 2023-05-16 Micron Technology, Inc. Accessing stored metadata to identify memory devices in which data is stored
US11868268B2 (en) 2019-09-17 2024-01-09 Micron Technology, Inc. Mapping non-typed memory access to typed memory access
US11934319B2 (en) 2019-09-17 2024-03-19 Micron Technology, Inc. Memory system for binding data to a memory namespace

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04245344A (ja) * 1991-01-31 1992-09-01 Hitachi Ltd マルチプロセッサシステムのメモリ管理方法
JPH09237215A (ja) * 1995-06-23 1997-09-09 Data General Corp 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム
US20130024667A1 (en) * 2011-07-20 2013-01-24 Renesas Electronics Corporation Arithmetic and control unit, arithmethic and control method, program and parallel processor
US20150324131A1 (en) * 2014-05-09 2015-11-12 Advanced Micro Devices, Inc. System and method for memory allocation in a multiclass memory system
JP2017076396A (ja) * 2015-10-14 2017-04-20 三星電子株式会社Samsung Electronics Co.,Ltd. コンピューティングシステムとその動作方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04245344A (ja) * 1991-01-31 1992-09-01 Hitachi Ltd マルチプロセッサシステムのメモリ管理方法
JPH09237215A (ja) * 1995-06-23 1997-09-09 Data General Corp 非一様メモリ・アクセス・マルチプロセッサ・システム用オペレーティング・システム
US20130024667A1 (en) * 2011-07-20 2013-01-24 Renesas Electronics Corporation Arithmetic and control unit, arithmethic and control method, program and parallel processor
JP2013025547A (ja) * 2011-07-20 2013-02-04 Renesas Electronics Corp 演算制御装置及び演算制御方法並びにプログラム、並列プロセッサ
US20150324131A1 (en) * 2014-05-09 2015-11-12 Advanced Micro Devices, Inc. System and method for memory allocation in a multiclass memory system
JP2017076396A (ja) * 2015-10-14 2017-04-20 三星電子株式会社Samsung Electronics Co.,Ltd. コンピューティングシステムとその動作方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022548887A (ja) * 2019-09-17 2022-11-22 マイクロン テクノロジー,インク. メモリタイプへのページテーブルフック
US11650742B2 (en) 2019-09-17 2023-05-16 Micron Technology, Inc. Accessing stored metadata to identify memory devices in which data is stored
US11868268B2 (en) 2019-09-17 2024-01-09 Micron Technology, Inc. Mapping non-typed memory access to typed memory access
US11934319B2 (en) 2019-09-17 2024-03-19 Micron Technology, Inc. Memory system for binding data to a memory namespace

Also Published As

Publication number Publication date
JP6423809B2 (ja) 2018-11-14

Similar Documents

Publication Publication Date Title
US20210397551A1 (en) Numa-aware garbage collection
US9965324B2 (en) Process grouping for improved cache and memory affinity
JP6423809B2 (ja) オペレーティングシステム、プログラミングシステム及びメモリ割り当て方法
US8726257B2 (en) File attributes for flexible linking
RU2569805C2 (ru) Виртуальная архитектура неоднородной памяти для виртуальных машин
US6505286B1 (en) User specifiable allocation of memory for processes in a multiprocessor computer having a non-uniform memory architecture
US20120254267A1 (en) Numa-aware garbage collection
JP2007026094A (ja) 実行装置およびアプリケーションプログラム
KR20130011961A (ko) 연산 제어 장치, 연산 제어 방법, 프로그램, 및 병렬 프로세서
CN1140500A (zh) 分布式数据库系统
Virouleau et al. Using data dependencies to improve task-based scheduling strategies on NUMA architectures
Eichenberger et al. The design of openmp thread affinity
CN114942796A (zh) 插件编译及调用方法、装置、设备及存储介质
JP5678133B2 (ja) 複数のタスクにわたる複数のオペレーティングシステム・サブプロセスの共有
JP2007188523A (ja) タスク実行方法およびマルチプロセッサシステム
EP2757475A2 (en) Method and system for dynamically changing page allocator
US20140289739A1 (en) Allocating and sharing a data object among program instances
US7386702B2 (en) Systems and methods for accessing thread private data
JP6932755B2 (ja) オペレーティングシステム及びメモリ割り当て方法
JP6682599B2 (ja) オペレーティングシステム及びメモリ割り当て方法
WO2017142525A1 (en) Allocating a zone of a shared memory region
KR101140522B1 (ko) 객체 관리 시스템 및 방법
JP3019317B2 (ja) プロセススケジューリング方法
US8082553B2 (en) Client management of java management extensions (JMX) Mbean state
CA2387200A1 (en) Implementation of thread-static data in multi-threaded computer systems

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180313

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180423

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181019

R150 Certificate of patent or registration of utility model

Ref document number: 6423809

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250