JP6932755B2 - Operating system and memory allocation method - Google Patents
Operating system and memory allocation method Download PDFInfo
- Publication number
- JP6932755B2 JP6932755B2 JP2019190757A JP2019190757A JP6932755B2 JP 6932755 B2 JP6932755 B2 JP 6932755B2 JP 2019190757 A JP2019190757 A JP 2019190757A JP 2019190757 A JP2019190757 A JP 2019190757A JP 6932755 B2 JP6932755 B2 JP 6932755B2
- Authority
- JP
- Japan
- Prior art keywords
- memory
- memory area
- core
- heap
- area
- 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
Links
- 230000015654 memory Effects 0.000 title claims description 590
- 238000000034 method Methods 0.000 title claims description 71
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 1
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Description
この発明は、プロセッサコアを相互に接続したマルチコア環境において実行されるオペレーティングシステム、及び、メモリ割り当て方法に関する。 The present invention relates to an operating system running in a multi-core environment in which processor cores are interconnected, and a memory allocation method.
近年、組み込み製品などのシステムが複雑化しており、多機能を実現するために複数のプロセッサコアを備えたマルチコアプロセッサを採用するシステムが増加している。こうしたマルチコア環境においては、各プロセッサコア間でメモリを共有化することでリソースの効率良く使用するとともに、メモリ競合などを避けて処理速度を高めることが重要である。 In recent years, systems such as embedded products have become complicated, and an increasing number of systems have adopted a multi-core processor having a plurality of processor cores in order to realize multiple functions. In such a multi-core environment, it is important to share memory between each processor core to efficiently use resources and to avoid memory conflicts to increase the processing speed.
ところで、こうしたシステムは、複数の異なる種類のメモリを備えていることが多く、それぞれのメモリのアクセス速度にも差がある。よって、処理の内容によってどのメモリを使用するかを適切に振り分けることが重要となる。 By the way, such a system often has a plurality of different types of memories, and the access speed of each memory is also different. Therefore, it is important to appropriately allocate which memory is used according to the content of the process.
しかしながら、アプリケーションプログラムの開発者がメモリの種類まで把握しているとは限らないので、オペレーティングシステムが適切なメモリの割り当てを実行することが望ましい。例えば、アプリケーションプログラムがアクセス速度の速いメモリを要求している場合には、オペレーティングシステムがアクセス速度の速いメモリを選択し、そのメモリからメモリ割り当てを実行することが考えられる。 However, the developer of the application program does not always know the type of memory, so it is desirable for the operating system to perform the appropriate memory allocation. For example, if the application program requires a memory with a high access speed, the operating system may select the memory with a high access speed and execute the memory allocation from the memory.
なお、特許文献1に記載されているように、それぞれのプロセッサコアに固有のメモリ(一次キャッシュ)を備えたシステムにおいては、あるプロセッサコアにとって最もアクセス速度の速いメモリはそのプロセッサコアに固有のメモリである。よって、実行時のプロセッサコアに依存して最もアクセス速度の早いメモリが変化することになる。
As described in
上記したように、実行時のプロセッサコアに依存して最もアクセス速度の早いメモリがどれであるかが変化する場合、オペレーティングシステムがアクセス速度の早いメモリを動的に選択してメモリ割り当てを実行させることができれば、メモリリソースの効率化や処理速度の向上を図ることができる。 As mentioned above, if the fastest access memory changes depending on the processor core at runtime, the operating system dynamically selects the fastest access memory to perform the memory allocation. If this is possible, it is possible to improve the efficiency of memory resources and the processing speed.
そこで、本発明は、プログラムの実行時にオペレーティングシステムがアクセス速度の速いメモリを動的に選択してメモリ割り当てを実行できるオペレーティングシステム及びメモリ割り当て方法を提供することを課題とする。 Therefore, it is an object of the present invention to provide an operating system and a memory allocation method capable of dynamically selecting a memory having a high access speed and executing memory allocation when a program is executed.
本発明は、上記した課題を解決するためになされたものであり、以下を特徴とする。 The present invention has been made to solve the above-mentioned problems, and is characterized by the following.
本発明は、それぞれローカルメモリを備えた複数のプロセッサコアを相互に接続したマルチコア環境において実行され、アプリケーションプログラムから呼び出し可能なメモリ獲得用APIを実装したオペレーティングシステムであって、予め設定された内部データに従って複数のメモリ領域を作成するメモリ領域作成部と、前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるメモリ割り当て部と、を備え、前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域と、前記ローカルメモリよりもアクセス速度が遅いメモリに係るメモリ領域と、を含み、前記メモリ領域作成部は、前記メモリ領域で、前記コアメモリ領域が最下層であり、かつ、前記アクセス速度が遅いメモリに係るメモリ領域が前記コアメモリ領域よりも上位に配置されたツリー構造を作成し、前記メモリ割り当て部は、前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする。 The present invention is an operating system that implements a memory acquisition API that can be called from an application program and is executed in a multi-core environment in which a plurality of processor cores each having local memory are interconnected, and preset internal data. A memory area creation unit that creates a plurality of memory areas according to the above, and a memory allocation unit that refers to the heap ID specified as an argument of the memory acquisition API and executes memory allocation from the memory area associated with the heap ID. And, the memory area includes a core memory area related to the local memory of the plurality of processor cores and a memory area related to a memory having an access speed slower than the local memory. In the memory area, a tree structure is created in which the core memory area is the lowest layer and the memory area related to the memory having a slow access speed is arranged higher than the core memory area, and the memory allocation unit is created. Is characterized in that, when the memory allocation from the memory area specified by the heap ID fails, the memory allocation is executed from the memory area higher than the memory area.
本発明は上記の通りであり、前記メモリ領域でツリー構造を作成し、ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させるようにしている。このため、例えばアクセス速度の速いメモリリソースが枯渇してしまった場合でも、次の候補のメモリ領域からメモリ割り当てを実行させることができる。よって、できるだけアクセス速度の速いメモリ領域を検索してメモリ割り当てを実行させることができる。 The present invention is as described above. When a tree structure is created in the memory area and memory allocation from the memory area specified by the heap ID fails, memory allocation is executed from a memory area higher than the memory area. I am trying to do it. Therefore, for example, even when the memory resource having a high access speed is exhausted, the memory allocation can be executed from the next candidate memory area. Therefore, it is possible to search for a memory area having as fast an access speed as possible and execute memory allocation.
本発明の実施形態について、図を参照しながら説明する。 An embodiment of the present invention will be described with reference to the drawings.
本実施形態に係るオペレーティングシステム10は、例えば図1に示すような複数のプロセッサコアを相互に接続したマルチコア環境において実行されるプログラムである。このオペレーティングシステム10は、ハードウェアリソースを管理するとともに、ハードウェアリソースを抽象化した各種のサービスをアプリケーションプログラム40に提供する。例えば、アプリケーションプログラム40から呼び出し可能なメモリ獲得用APIを実装しており、これによりアプリケーションプログラム40がメモリリソースを安全に使用できるサービスを提供している。なお、このメモリ獲得用APIがアプリケーションプログラム40から呼び出されると、オペレーティングシステム10は物理メモリからメモリ割り当てを実行し、割り当てたメモリの先頭アドレスを示すポインタをアプリケーションプログラム40に返す。アプリケーションプログラム40は、このポインタを参照することでメモリを使用した各種の処理を実行することができる。 The operating system 10 according to the present embodiment is a program executed in a multi-core environment in which a plurality of processor cores are interconnected as shown in FIG. 1, for example. The operating system 10 manages hardware resources and provides various services that abstract the hardware resources to the application program 40. For example, it implements a memory acquisition API that can be called from the application program 40, thereby providing a service that allows the application program 40 to safely use the memory resource. When this memory acquisition API is called from the application program 40, the operating system 10 executes memory allocation from the physical memory and returns a pointer indicating the start address of the allocated memory to the application program 40. The application program 40 can execute various processes using the memory by referring to this pointer.
本実施形態に係るマルチコアプロセッサは、複数のプロセッサコアを備えている。本実施形態においては、図1に示すように、第1のプロセッサコア30aと、第2のプロセッサコア30bと、第3のプロセッサコア30cと、第4のプロセッサコア30dと、の4つのプロセッサコアを備えている。また、これらの4つのプロセッサコアは、それぞれ固有のローカルメモリ(1次キャッシュなど)を備えている。すなわち、第1のプロセッサコアのローカルメモリ31aと、第2のプロセッサコアのローカルメモリ31bと、第3のプロセッサコアのローカルメモリ31cと、第4のプロセッサコアのローカルメモリ31dと、が存在する。
The multi-core processor according to the present embodiment includes a plurality of processor cores. In this embodiment, as shown in FIG. 1, four processor cores, a
なお、本実施形態においては4つのプロセッサコアを備えたマルチコアプロセッサを例に説明しているが、これに限らず、プロセッサコアの数は3つ以下や5つ以上であってもよい。また、複数のプロセッサコアを備えたチップを複数使用してマルチコア環境を構成してもよい。 In the present embodiment, a multi-core processor having four processor cores is described as an example, but the present invention is not limited to this, and the number of processor cores may be three or less or five or more. Further, a multi-core environment may be configured by using a plurality of chips having a plurality of processor cores.
また、本実施形態に係る実行環境は、プロセッサコア固有のメモリ以外にも、例えばSDRAMなどの共有メモリを備えている。これらの共有メモリは、特定のクラスタによる使用を想定したクラスタメモリと、すべてのプロセッサコアからアクセスできるグローバルメモリ34と、に割り振られている。なお、クラスタとは、例えばマルチコア環境の管理効率を高めるためにプロセッサコアをいくつかのグループに分割したものである。本実施形態においては、第1のプロセッサコア30aと第2のプロセッサコア30bとで第1のクラスタ32aを構成し、第3のプロセッサコア30cと第4のプロセッサコア30dとで第2のクラスタ32bを構成している。そして、これらのクラスタには、それぞれクラスタメモリが割り当てられている。すなわち、第1のクラスタメモリ33aと、第2のクラスタメモリ33bと、である。
Further, the execution environment according to the present embodiment includes a shared memory such as an SDRAM in addition to the memory unique to the processor core. These shared memories are allocated to cluster memory that is supposed to be used by a specific cluster and
なお、本実施形態においては特に説明しないが、クラスタ構造を階層化してもよい。すなわち、複数のクラスタの親となる上位のクラスタを設定していくことで、クラスタをツリー構造で管理してもよい。 Although not particularly described in this embodiment, the cluster structure may be hierarchized. That is, the clusters may be managed in a tree structure by setting higher-level clusters that are parents of a plurality of clusters.
本実施形態においては、この図1が示すように、特定のプロセッサコアにとって最もアクセス速度の速いメモリはそのプロセッサコアに固有のメモリである(例えば第1のプロセッサコア30aにとって最もアクセス速度の速いメモリは第1のプロセッサコアのローカルメモリ31aである)。また、その次にアクセス速度の早い(または優先される)メモリは、自分が属するクラスタのメモリである(例えば第1のプロセッサコア30aにとっては、第1のクラスタメモリ33aである)。更に、その次にアクセス速度の早い(または優先される)メモリは、そのクラスタの親のメモリ(例えば第1のプロセッサコア30aにとっては、グローバルメモリ34である)。
In the present embodiment, as shown in FIG. 1, the memory having the fastest access speed for a specific processor core is the memory specific to that processor core (for example, the memory having the fastest access speed for the
このため、アプリケーションプログラム40がどのプロセッサコアで実行されているかによって、アクセス速度の早いメモリや優先して割り当てるべきメモリが変化する環境となっている。例えば、アプリケーションプログラム40が第1のプロセッサコア30aで実行されている場合、アクセス速度の最も早いメモリは第1のプロセッサコアのローカルメモリ31aである。一方、アプリケーションプログラム40が第2のプロセッサコア30bで実行されている場合、アクセス速度の最も早いメモリは第2のプロセッサコアのローカルメモリ31bである。
Therefore, the environment is such that the memory having a high access speed and the memory to be preferentially allocated change depending on which processor core the application program 40 is executed in. For example, when the application program 40 is executed on the
このような環境下で適切なメモリ割り当てを実行するために、本実施形態に係るオペレーティングシステム10は、図2に示すように、メモリ領域作成部12と、メモリ割り当て部14と、を備える。 In order to execute appropriate memory allocation in such an environment, the operating system 10 according to the present embodiment includes a memory area creation unit 12 and a memory allocation unit 14, as shown in FIG.
メモリ領域作成部12は、システムの初期化時に後述する内部データ43を読み込み、内部データ43の内容に従って複数のメモリ領域20を作成するためのものである。メモリ領域20は、オペレーティングシステム10がメモリリソースを管理するための単位である。メモリ領域作成部12は、メモリをアドレスとサイズで分割して複数のメモリ領域20を作成するとともに、これらのメモリ領域20でツリー構造を作成する(図8参照)。このツリー構造については後ほど詳述する。
The memory area creation unit 12 is for reading the
メモリ割り当て部14は、メモリ獲得用APIが呼び出されたときに、メモリ獲得用APIの引数として指定されたヒープIDを参照し、ヒープIDに関連付けられたメモリ領域20からメモリ割り当てを実行させるものである。ヒープIDは後述するコンフィギュレーションファイル41において定義され、ユーザによって書き換え可能となっている。このヒープIDについては後ほど詳述する。
When the memory acquisition API is called, the memory allocation unit 14 refers to the heap ID specified as an argument of the memory acquisition API, and executes memory allocation from the memory area 20 associated with the heap ID. be. The heap ID is defined in the
このメモリ割り当て部14は、本実施形態においては、マイクロカーネル16と、ヒープマネージャ15と、を備えて構成されている。 In the present embodiment, the memory allocation unit 14 includes a microkernel 16 and a heap manager 15.
マイクロカーネル16は、各プロセッサコアにおけるプログラムの実行制御を行うプログラムであり、各プロセッサコアにおいて1つずつ実行されている。よって、本実施形態のように4つのプロセッサコアが存在する場合には、それぞれのプロセッサコアに対応した4つのマイクロカーネル16が実行される。なお、アプリケーションプログラム40がメモリ獲得用APIを呼び出すと、当該アプリケーションプログラム40を実行しているプロセッサコアを制御するマイクロカーネル16に命令が通知される。命令を受け取ったマイクロカーネル16は、メモリ獲得用APIの引数(ヒープID)を基に、メモリ割り当てを実行するメモリ領域20を特定し、当該メモリ領域20を管理するヒープマネージャ15に依頼してメモリ割り当てを実行する。 The microkernel 16 is a program that controls the execution of a program in each processor core, and is executed one by one in each processor core. Therefore, when there are four processor cores as in the present embodiment, the four microkernels 16 corresponding to the respective processor cores are executed. When the application program 40 calls the memory acquisition API, the instruction is notified to the microkernel 16 that controls the processor core executing the application program 40. Upon receiving the instruction, the microkernel 16 identifies the memory area 20 to execute the memory allocation based on the argument (heap ID) of the memory acquisition API, and requests the heap manager 15 that manages the memory area 20 to perform the memory. Perform the assignment.
ヒープマネージャ15は、各メモリ領域20を制御するプログラムであり、メモリ領域20ごとに1つずつ実行されている。例えば図8に示すように7つのメモリ領域20が存在する場合には、それぞれのメモリ領域20に対応した7つのヒープマネージャ15が実行される。このヒープマネージャ15は、上述したように、メモリ獲得用APIが呼び出されたときにマイクロカーネル16によって呼び出され、自らが管理するメモリ領域20からのメモリ割り当てを実行する。具体的には、ヒープマネージャ15は、マイクロカーネル16からメモリ割り当ての要求があったときには、マイクロカーネル16によって指定されたサイズのメモリを確保してマイクロカーネル16にアドレスを通知するとともに、当該メモリが明示的に開放されるまでは再びメモリ割り当てに使用されることがないように管理する。 The heap manager 15 is a program that controls each memory area 20, and is executed one by one for each memory area 20. For example, when seven memory areas 20 exist as shown in FIG. 8, seven heap managers 15 corresponding to the respective memory areas 20 are executed. As described above, the heap manager 15 is called by the microkernel 16 when the memory acquisition API is called, and executes memory allocation from the memory area 20 managed by itself. Specifically, when the microkernel 16 requests memory allocation, the heap manager 15 secures a memory of the size specified by the microkernel 16 and notifies the microkernel 16 of the address, and the memory is used. Manage so that it will not be used for memory allocation again until it is explicitly released.
なお、ヒープマネージャ15が管理するメモリ領域20は、図8に示すように、大きく3つの種類に分類することができる。すなわち、コアメモリ領域と、クラスタメモリ領域と、グローバルメモリ領域23と、である。
As shown in FIG. 8, the memory area 20 managed by the heap manager 15 can be roughly classified into three types. That is, the core memory area, the cluster memory area, and the
コアメモリ領域は、複数のプロセッサコアのローカルメモリに係るメモリ領域20であり、これらのメモリ領域20をオペレーティングシステム10で管理するために作成される。このコアメモリ領域は、複数のプロセッサコアと同じ数だけ作成される。本実施形態においては、第1のプロセッサコアのローカルメモリ31aに対応した第1のコアメモリ領域21aと、第2のプロセッサコアのローカルメモリ31bに対応した第2のコアメモリ領域21bと、第3のプロセッサコアのローカルメモリ31cに対応した第3のコアメモリ領域21cと、第4のプロセッサコアのローカルメモリ31dに対応した第4のコアメモリ領域21dと、が作成される。
The core memory area is a memory area 20 related to the local memory of a plurality of processor cores, and these memory areas 20 are created to be managed by the operating system 10. This core memory area is created in the same number as multiple processor cores. In the present embodiment, the first
クラスタメモリ領域は、1以上のコアメモリ領域に紐付けられたメモリ領域20であり、これらのメモリ領域20をオペレーティングシステム10で管理するために作成される。このクラスタメモリ領域は、本実施形態においてはクラスタと同じ数だけ作成される。すなわち、第1のクラスタメモリ33aに対応した第1のクラスタメモリ領域22aと、第2のクラスタメモリ33bに対応した第2のクラスタメモリ領域22bと、が作成される。
The cluster memory area is a memory area 20 associated with one or more core memory areas, and is created for managing these memory areas 20 by the operating system 10. In this embodiment, the same number of cluster memory areas as the clusters are created. That is, a first
グローバルメモリ領域23は、1以上のクラスタメモリ領域に紐付けられたメモリ領域20であり、これらのメモリ領域20をオペレーティングシステム10で管理するために作成される。本実施形態においては、グローバルメモリ領域23を1つだけ作成している。しかしながら、複数のグローバルメモリ領域23を設けてもよい。
The
これらコアメモリ領域、クラスタメモリ領域、グローバルメモリ領域23は、図8に示すような階層構造を形成する。すなわち、コアメモリ領域が最下層であり、クラスタメモリ領域が中間層であり、グローバルメモリ領域23が最上層であるツリー構造を形成する。なお、図8に示す例ではクラスタメモリ領域が1階層であるが、クラスタメモリ領域は複数の階層を形成してもよい。
The core memory area, the cluster memory area, and the
これらのメモリ領域20は、図7に示すようなコンフィギュレーションファイル41の記載によって、アドレス、サイズ、ツリー構造、その他の属性が決定される。よって、コンフィギュレーションファイル41の記述を書き換えることで、メモリ領域20の設定を変更することができる。例えば、物理メモリの構成やプロセッサコアの数等に応じたメモリ領域20となるように設定を変更し、オペレーティングシステム10の制御に使用することができる。
The address, size, tree structure, and other attributes of these memory areas 20 are determined by the description of the
また、このコンフィギュレーションファイル41には、メモリ領域20とヒープIDとの関係を自由に記述し、設定することができる。これにより、アプリケーションプログラム40がヒープIDを使用して所望のメモリ領域20にアクセスできるようにしている。
Further, in this
このコンフィギュレーションファイル41は、図3に示すように、情報生成手段42によって読み込まれて使用される。情報生成手段42は、単独で実行可能なコンフィギュレーションツール(例えばコンピュータ上で実行可能な実行可能形式のファイル)であり、コンフィギュレーションファイル41に記載された内容を読み込んで、アプリケーションプログラム40用のヘッダファイル44とオペレーティングシステム10用の内部データ43とを生成する。
As shown in FIG. 3, this
このうち、内部データ43は、上述したメモリ領域作成部12がシステムの初期化時に読み込んでメモリ領域20を作成するために使用される。
Of these, the
一方、ヘッダファイル44は、アプリケーションプログラム40のソースコード45をコンパイルする際に使用される。具体的には、コンパイラ46によってアプリケーションプログラム40のソースコード45をコンパイルする際にヘッダファイル44が使用され、これによりオブジェクトファイル47が生成される。ヘッダファイル44にはヒープIDが定義されているため、アプリケーションプログラム40がヘッダファイル44を参照することで、メモリ獲得用APIの呼び出しにヒープIDを使用することができる。
On the other hand, the
(コンフィギュレーションファイル41の記述例)
次に、コンフィギュレーションファイル41の記述例について説明する。なお、図7がコンフィギュレーションファイル41の具体的な記述例である。この図7に示すコンフィギュレーションファイル41では、DEF_MEM(メモリの定義)と、DEF_MEMOBJ(メモリ領域20の定義)と、DEF_HEAP(ヒープIDの定義)と、の3つの定義を記述することができる。
(Description example of configuration file 41)
Next, a description example of the
図4は、コンフィギュレーションファイル41においてメモリの定義(DEF_MEM)を記述するための書式である。この書式を使用することにより、メモリ空間をアドレスとサイズで分割し、その分割したメモリにメモリID(コンフィギュレーションファイル41内で使用する一意の文字列)を付与することができる。具体的には、startaddrに記載されたアドレスからmemszで指定されたサイズのメモリに対して、memidで指定されたメモリIDが付与される。
FIG. 4 is a format for describing the memory definition (DEF_MEM) in the
例えば、図7の(1)で示す例では、0xc0000000を開始アドレスとして0x8000000のメモリに(つまり0xc0000000〜0xc7ffffffの範囲のメモリに)MEM_SDRAM1というメモリIDが付与される。 For example, in the example shown in FIG. 7 (1), a memory ID of MEM_SDRAM1 is assigned to the memory of 0x8000000 (that is, the memory in the range of 0xc0000000 to 0xc7ffffff) with 0xc0000000 as the start address.
図5は、コンフィギュレーションファイル41においてメモリ領域20の定義(DEF
_MEMOBJ)を記述するための書式である。この書式を使用することにより、名前、位置、属性、親子関係、プロセッサコアとの関係を指定してメモリ領域20を作成することができる。
FIG. 5 shows the definition of the memory area 20 (DEF) in the
_MEMOBJ) is a format for describing. By using this format, the memory area 20 can be created by specifying the name, position, attribute, parent-child relationship, and relationship with the processor core.
図5に示す書式において、memobjidには「メモリ領域20の名前(コンフィギュレーションファイル41内で使用する一意の文字列)」を指定する。 In the format shown in FIG. 5, "name of memory area 20 (unique character string used in the configuration file 41)" is specified for memobjid.
memobjatrには「メモリ領域20の属性」を指定する。指定可能な属性は、グローバルメモリ領域23を意味する「MOA_GLOBAL」、クラスタメモリ領域を意味する「MOA_CLUSTER」、コアメモリ領域を意味する「MOA_CORE」のいずれかである。
The "attribute of the memory area 20" is specified for the memory. The attribute that can be specified is one of "MOA_GLOBAL" meaning the
ownercoreidには「このメモリ領域20を管理しているプロセッサコアの番号」を指定する。具体的には、メモリ領域20がコアメモリ領域である場合に、そのコアメモリ領域がどのプロセッサコアのローカルメモリに関連付けられているかを指定する。例えば、第1のプロセッサコアのローカルメモリ31aに関連付けられたコアメモリ領域(図8に示す第1のコアメモリ領域21a)であれば「1」を指定する。なお、メモリ領域20がコアメモリ領域ではない場合、当該メモリ領域20を管理するヒープマネージャ15が実行されているプロセッサコアの番号を指定する。
For the ownercoreid, "the number of the processor core that manages this memory area 20" is specified. Specifically, when the memory area 20 is a core memory area, it is specified which processor core the local memory is associated with. For example, if it is a core memory area (first
parentidには「このメモリ領域20の親となるメモリ領域20の名前」を指定する。具体的には、コアメモリ領域の場合には、親となるクラスタメモリ領域の名前を指定する。クラスタメモリ領域の場合には、親となるクラスタメモリ領域またはグローバルメモリ領域23の名前を指定する。グローバルメモリ領域23の場合は、親がいないことを示す規定値「MEMOBJ_ROOT」を指定する。
"The name of the memory area 20 that is the parent of this memory area 20" is specified for the part id. Specifically, in the case of a core memory area, the name of the parent cluster memory area is specified. In the case of a cluster memory area, the name of the parent cluster memory area or the
memlistには「このメモリ領域20に属するメモリIDのリスト」を指定する。すなわち、図4で説明した記述方法により定義されたメモリIDのリストを指定する。 A "list of memory IDs belonging to this memory area 20" is specified for memoryist. That is, a list of memory IDs defined by the description method described with reference to FIG. 4 is specified.
例えば、図7の(2)で示す例では、MEM_SDRAM1(0xc0000000〜0xc7ffffffの範囲のメモリ)とMEM_SDRAM2(0xcc000000
〜0xcfffffffの範囲のメモリ)に対して、「MEMOBJ_GLOBAL1」という名前で、グローバルメモリ領域23が作成される。
For example, in the example shown in FIG. 7 (2), MEM_SDRAM1 (memory in the range of 0xc0000000 to 0xc7ffffff) and MEM_SDRAM2 (0xcc0000000).
A
また、図7の(3)で示す例では、MEM_CLUSTER1(0x81200000
〜0x8127efffの範囲のメモリ)に対して、「MEMOBJ_CLUSTER1
」という名前で、クラスタメモリ領域が作成される。なお、このクラスタメモリ領域の親のメモリ領域20は「MEMOBJ_GLOBAL1」である。
Further, in the example shown in FIG. 7 (3), MEM_CLUSTER1 (0x8120000)
For memory in the range of ~ 0x8127efff), "MEMOBJ_CLUSTER1
A cluster memory area is created with the name. The parent memory area 20 of this cluster memory area is "MEMOBJ_GLOBAL1".
また、図7の(4)で示す例では、MEM_CORE1(0x81000000〜0x81007fffの範囲のメモリ)に対して、「MEMOBJ_CORE1」という名前で、コアメモリ領域が作成される。なお、このコアメモリ領域は、番号「1」のプロセッサコアのローカルメモリを使用するものであり、このコアメモリ領域の親のメモリ領域20は「MEMOBJ_CLUSTER1」である。
このように、メモリ領域20が定義されることで、図8に示すようなツリー構造が作成される。
Further, in the example shown in FIG. 7 (4), a core memory area is created with the name "MEMOBJ_CORE1" for MEM_CORE1 (memory in the range of 0x81000000 to 0x81007fff). The core memory area uses the local memory of the processor core of the number "1", and the parent memory area 20 of this core memory area is "MEMOBJ_CLUSTER1".
By defining the memory area 20 in this way, a tree structure as shown in FIG. 8 is created.
図6は、コンフィギュレーションファイル41においてヒープIDの定義(DEF_HEAP)を記述するための書式である。この書式を使用することにより、ヒープIDとメモリ領域20との関係を記述することができる。
FIG. 6 is a format for describing the definition of the heap ID (DEF_HEAP) in the
図6に示す書式において、heapidには「ヒープID(アプリケーションプログラム40で使用可能な一意の文字列)」を指定する。
memobjidには「予め決められた仮想属性」または「ヒープIDに関連付けるメモリ領域20の名前」を指定する。
In the format shown in FIG. 6, "heap ID (unique character string that can be used in the application program 40)" is specified for heapid.
A "predetermined virtual attribute" or a "name of the memory area 20 associated with the heap ID" is specified in the memory.
なお、memobjidに指定可能な「予め決められた仮想属性」としては、このヒープIDが仮想グローバルIDであることを示す「MEMOBJ_GLOBAL」、このヒープIDが仮想クラスタIDであることを示す「MEMOBJ_CLUSTER」、このヒープIDが仮想コアIDであることを示す「MEMOBJ_CORE」のいずれかを指定することができる。 The "predetermined virtual attributes" that can be specified for memobjid include "MEMOBJ_GLOBAL" indicating that this heap ID is a virtual global ID, and "MEMOBJ_CLUSTER" indicating that this heap ID is a virtual cluster ID. Any of "MEMOBJ_CORE" indicating that this heap ID is a virtual core ID can be specified.
例えば、図7の(5)で示す例では、「HEAP_GLOBAL」というヒープIDで、仮想グローバルIDが作成される。仮想グローバルIDは、グローバルメモリ領域23を参照するためのヒープIDである。仮想グローバルIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が使用可能なグローバルメモリ領域23を検索し、このグローバルメモリ領域23からメモリ割り当てを実行する。
For example, in the example shown in FIG. 7 (5), a virtual global ID is created with a heap ID of "HEAP_GLOBAL". The virtual global ID is a heap ID for referring to the
また、図7の(6)で示す例では、「HEAP_CLUSTER」というヒープIDで、仮想クラスタIDが作成される。仮想クラスタIDは、クラスタメモリ領域を動的に割り当てるためのヒープIDである。仮想クラスタIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が使用可能なクラスタメモリ領域を検索し、このクラスタメモリ領域からメモリ割り当てを実行する。 Further, in the example shown in FIG. 7 (6), a virtual cluster ID is created with a heap ID of "HEAP_CLUSTER". The virtual cluster ID is a heap ID for dynamically allocating a cluster memory area. When the application program 40 calls the memory acquisition API using the virtual cluster ID, the operating system 10 searches for a available cluster memory area and executes memory allocation from this cluster memory area.
また、図7の(7)で示す例では、「HEAP_CORE」というヒープIDで、仮想コアIDが作成される。仮想コアIDは、コアメモリ領域を動的に割り当てるためのヒープIDである。仮想コアIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が使用可能なコアメモリ領域を検索し、このコアメモリ領域からメモリ割り当てを実行する。 Further, in the example shown in FIG. 7 (7), a virtual core ID is created with a heap ID of "HEAP_CORE". The virtual core ID is a heap ID for dynamically allocating a core memory area. When the application program 40 calls the memory acquisition API using the virtual core ID, the operating system 10 searches for an available core memory area and executes memory allocation from this core memory area.
また、memobjidに指定可能な「ヒープIDに関連付けるメモリ領域20の名前
」としては、図5で説明した記述方法により定義されたメモリ領域20の名前を指定することができる。なお、このように直接的にメモリ領域20の名前を指定した場合、ヒープIDとメモリ領域20とが直接的に関連付けられる。このようなヒープIDを使用してアプリケーションプログラム40がメモリ獲得用APIを呼び出すと、オペレーティングシステム10が指定されたメモリ領域20からメモリを直接割り当てる。このようなヒープIDを実メモリIDと呼ぶ。
Further, as the "name of the memory area 20 associated with the heap ID" that can be specified in the memory, the name of the memory area 20 defined by the description method described with reference to FIG. 5 can be specified. When the name of the memory area 20 is directly specified in this way, the heap ID and the memory area 20 are directly associated with each other. When the application program 40 calls the memory acquisition API using such a heap ID, the operating system 10 allocates the memory directly from the designated memory area 20. Such a heap ID is called a real memory ID.
例えば、図7の(8)で示す例では、「HEAP_CLUSTER1」というヒープIDで、実メモリIDが作成される。この実メモリIDは、「MEMOBJ_CLUSTER1」という名前で定義されたメモリ領域20と直接的に関連付けられている。 For example, in the example shown in FIG. 7 (8), a real memory ID is created with a heap ID of "HEAP_CLUSTER1". This real memory ID is directly associated with the memory area 20 defined by the name "MEMOBJ_CLUSTER1".
また、図7の(9)で示す例では、「HEAP_CORE1」というヒープIDで、実メモリIDが作成される。この実メモリIDは、「MEMOBJ_CORE4」という名前で定義されたメモリ領域20と直接的に関連付けられている。 Further, in the example shown in FIG. 7 (9), a real memory ID is created with a heap ID of "HEAP_CORE1". This real memory ID is directly associated with the memory area 20 defined by the name "MEMOBJ_CORE4".
askparentには、指定されたメモリ領域20からのメモリ割り当てに失敗した場合に、親のメモリ領域20を参照するか否かを指定する。「true」が指定された場合には、図8に示すようなツリー構造の親のメモリ領域20を再帰的に参照してメモリ割り当てを行う。例えば、第1のコアメモリ領域21aからのメモリ割り当てに失敗した場合には、第1のクラスタメモリ領域22aからのメモリ割り当てを試行する。この第1のクラスタメモリ領域22aからのメモリ割り当てにも失敗した場合には、グローバルメモリ領域23からのメモリ割り当てを試行する。一方、「false」が指定された場合には、指定されたメモリ領域20からのメモリ割り当てに失敗した場合でも親のメモリ領域20からのメモリ割り当てを行わない。
In askpart, it is specified whether or not to refer to the parent memory area 20 when the memory allocation from the specified memory area 20 fails. When "true" is specified, memory allocation is performed by recursively referring to the memory area 20 of the parent of the tree structure as shown in FIG. For example, when the memory allocation from the first
(メモリ獲得用API)
次に、メモリ獲得用APIの仕様について説明する。本実施形態に係るオペレーティングシステム10は、例えば図9に示すようなメモリ獲得用APIを備えており、このメモリ獲得用APIをアプリケーションプログラム40から呼び出し可能となっている。このメモリ獲得用APIには、引数として「heapid」「size」「addr」を指定可能である。
(API for memory acquisition)
Next, the specifications of the memory acquisition API will be described. The operating system 10 according to the present embodiment includes, for example, a memory acquisition API as shown in FIG. 9, and the memory acquisition API can be called from the application program 40. "Heapid", "size", and "addr" can be specified as arguments to this memory acquisition API.
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には「獲得したいメモリのサイズ」を指定する。
A "heap ID" is specified for heapid. The operating system 10 attempts to allocate memory from the memory area 20 specified by the heap ID specified here. For the heap ID, any one of the virtual global ID, the virtual cluster ID, the virtual core ID, and the real memory ID as described above can be specified. When the application program 40 uses the heap ID, the
For size, specify the "size of memory you want to acquire".
addrには「獲得したメモリの先頭アドレスを返す領域へのポインタ」を指定する。メモリ獲得に成功した場合には、アプリケーションプログラム40がこのポインタの中身を参照することで、獲得したメモリの先頭アドレスを得ることができる。 For addr, specify "a pointer to an area that returns the start address of the acquired memory". When the memory acquisition is successful, the application program 40 can obtain the start address of the acquired memory by referring to the contents of this pointer.
なお、このAPIの戻り値はエラーコードである。具体的には、メモリ獲得に成功した場合には「EOK(定数)」を返却し、sizeやaddrが不正な場合には「EPAR(定数)」を返却し、ヒープIDが不正な場合には「ENOEXS(定数)」を返却し、メモリ枯渇等によりメモリ獲得に失敗した場合には「ENOMEM(定数)」を返却する。 The return value of this API is an error code. Specifically, if the memory acquisition is successful, "EOK (constant)" is returned, if size or addr is invalid, "EPAR (constant)" is returned, and if the heap ID is invalid, it is returned. "ENOEXS (constant)" is returned, and if memory acquisition fails due to memory exhaustion or the like, "ENOMEM (constant)" is returned.
(メモリ割り当て処理)
次に、上記したメモリ獲得用APIが呼び出されたときのオペレーティングシステム10の処理について説明する。図10は、メモリ割り当て処理のメインフロー図である。
(Memory allocation process)
Next, the processing of the operating system 10 when the above-mentioned memory acquisition API is called will be described. FIG. 10 is a main flow diagram of the memory allocation process.
まず、図10に示すステップS100において、アプリケーションプログラム40がメモリ獲得用APIの呼び出しを実行し、このAPI呼び出しに起因するメモリ獲得要求をマイクロカーネル16が受信する。このとき、メモリ獲得要求を受信するマイクロカーネル16は、アプリケーションプログラム40が実行されているプロセッサコアにおいて実行されているマイクロカーネル16である。マイクロカーネル16は、メモリ獲得用APIで指定されたヒープIDを取得し、このヒープIDを基に内部データ43を参照し、ヒープIDの属性をチェックする。そして、ステップS101に進む。
First, in step S100 shown in FIG. 10, the application program 40 executes a memory acquisition API call, and the microkernel 16 receives a memory acquisition request resulting from this API call. At this time, the microkernel 16 that receives the memory acquisition request is the microkernel 16 that is executed in the processor core in which the application program 40 is executed. The microkernel 16 acquires the heap ID specified by the memory acquisition API, refers to the
ステップS101では、ヒープIDが仮想グローバルIDであるか(すなわちコンフィギュレーションファイル41においてMEMOBJ_GLOBAL属性を付与されて定義されたヒープIDであるか)がチェックされる。仮想グローバルIDである場合には、ステップS102へ進み、グローバルメモリ割り当て処理(図11参照)を実行する。一方、仮想グローバルIDでない場合には、ステップS103に進む。 In step S101, it is checked whether the heap ID is a virtual global ID (that is, whether it is a heap ID defined by giving the MEMOBJ_GLOBAL attribute in the configuration file 41). If it is a virtual global ID, the process proceeds to step S102 to execute the global memory allocation process (see FIG. 11). On the other hand, if it is not a virtual global ID, the process proceeds to step S103.
ステップS103では、ヒープIDが仮想クラスタIDであるか(すなわちコンフィギュレーションファイル41においてMEMOBJ_CLUSTER属性を付与されて定義されたヒープIDであるか)がチェックされる。仮想クラスタIDである場合には、ステップS104へ進み、クラスタメモリ割り当て処理(図12参照)を実行する。一方、仮想クラスタIDでない場合には、ステップS105に進む。 In step S103, it is checked whether the heap ID is a virtual cluster ID (that is, whether it is a heap ID defined by giving the MEMOBJ_CLUSTER attribute in the configuration file 41). If it is a virtual cluster ID, the process proceeds to step S104, and the cluster memory allocation process (see FIG. 12) is executed. On the other hand, if it is not a virtual cluster ID, the process proceeds to step S105.
ステップS105では、ヒープIDが仮想コアIDであるか(すなわちコンフィギュレーションファイル41においてMEMOBJ_CORE属性を付与されて定義されたヒープIDであるか)がチェックされる。仮想コアIDである場合には、ステップS106へ進み、コアメモリ割り当て処理(図13参照)を実行する。一方、仮想コアIDでない場合には、このヒープIDは実メモリIDであるので、ステップS107に進み、実メモリ割り当て処理(図14参照)を実行する。 In step S105, it is checked whether the heap ID is a virtual core ID (that is, whether it is a heap ID defined by giving the MEMOBJ_CORE attribute in the configuration file 41). If it is a virtual core ID, the process proceeds to step S106 to execute the core memory allocation process (see FIG. 13). On the other hand, if it is not a virtual core ID, since this heap ID is a real memory ID, the process proceeds to step S107 to execute the real memory allocation process (see FIG. 14).
(グローバルメモリ割り当て処理)
グローバルメモリ割り当て処理について、図11を参照しつつ説明する。
まず、図11に示すステップS200において、マイクロカーネル16は、メモリ獲得用APIの呼び出し元のプロセッサコアの番号(本実施形態においてはマイクロカーネル16が実行されているプロセッサコアの番号)を取得する。そして、ステップS201に進む。
(Global memory allocation processing)
The global memory allocation process will be described with reference to FIG.
First, in step S200 shown in FIG. 11, the microkernel 16 acquires the number of the processor core that calls the memory acquisition API (in this embodiment, the number of the processor core in which the microkernel 16 is executed). Then, the process proceeds to step S201.
ステップS201では、マイクロカーネル16は、ステップS200で取得したプロセッサコアの番号を基に、メモリ領域20のツリー構造を参照し、当該番号に関連付けられたコアメモリ領域を取得する。例えば、プロセッサコアの番号が「1」の場合、コンフィギュレーションファイル41においてownercoreidに「1」を指定したコアメモリ領域(図7の(4)の記述によって定義されるコアメモリ領域)を取得する。そして、ステップS202に進む。
In step S201, the microkernel 16 refers to the tree structure of the memory area 20 based on the processor core number acquired in step S200, and acquires the core memory area associated with the number. For example, when the processor core number is "1", the core memory area (core memory area defined by the description in (4) of FIG. 7) in which "1" is specified for the ownercore in the
ステップS202では、取得したメモリ領域20が「MOA_GLOBAL」属性であるか、すなわち、グローバルメモリ領域23であるかがチェックされる。グローバルメモリ領域23である場合には、当該メモリ領域20をメモリ割り当ての対象に選択して、ステップS204へ進む。一方、グローバルメモリ領域23でない場合には、ステップS203に進む。
In step S202, it is checked whether the acquired memory area 20 has the “MOA_GLOBAL” attribute, that is, the
ステップS203に進んだ場合、取得したメモリ領域20の親のメモリ領域20が取得される。すなわち、図8に示すようなツリー構造において、現在取得しているメモリ領域20の親のメモリ領域20を取得する。そして、ステップS203に戻り、この新しく取得したメモリ領域20がグローバルメモリ領域23であるかがチェックされる。そして、グローバルメモリ領域23である場合には、当該メモリ領域20をメモリ割り当ての対象に選択して、ステップS204へ進む。一方、グローバルメモリ領域23でない場合には、ステップS203に進んで上記と同様の処理を行う。このように、グローバルメモリ領域23が見つかるまで、親のメモリ領域20を再帰的に取得する。
When the process proceeds to step S203, the memory area 20 of the parent of the acquired memory area 20 is acquired. That is, in the tree structure as shown in FIG. 8, the memory area 20 of the parent of the currently acquired memory area 20 is acquired. Then, the process returns to step S203, and it is checked whether or not the newly acquired memory area 20 is the
ステップS204では、マイクロカーネル16は、メモリ割り当ての対象に選択したメモリ領域20を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15にメモリ割り当てを依頼する。そして、ステップS205に進む。 In step S204, the microkernel 16 calls the heap manager 15 that manages the memory area 20 selected as the target of memory allocation, and requests the heap manager 15 to allocate memory. Then, the process proceeds to step S205.
ステップS205では、ヒープマネージャ15によるメモリ割り当てが成功したかがチェックされる。メモリ割り当てが成功した場合には、ステップS206へ進む。一方、メモリリソースが枯渇するなどしてメモリ割り当てに失敗した場合には、ステップS207に進む。 In step S205, it is checked whether the memory allocation by the heap manager 15 is successful. If the memory allocation is successful, the process proceeds to step S206. On the other hand, if the memory allocation fails due to the exhaustion of memory resources, the process proceeds to step S207.
ステップS206へ進んだ場合、獲得したメモリのメモリポインタをアプリケーションプログラム40に返却する。このメモリポインタを使用することで、アプリケーションプログラム40は安全にメモリを使用することができる。そして処理が終了する。 When the process proceeds to step S206, the memory pointer of the acquired memory is returned to the application program 40. By using this memory pointer, the application program 40 can safely use the memory. And the process ends.
一方、ステップS207へ進んだ場合、親のメモリ領域20を取得するかがチェックされる。親のメモリ領域20が存在しない場合、または、メモリ獲得用APIの引数で指定されたヒープIDが親のメモリ領域20を参照しない設定である場合(コンフィギュレーションファイル41におけるヒープIDの定義でaskparentがfalseの場合)には、ステップS209へ進む。それ以外の場合には、図8に示すようなツリー構造を参照し、メモリ割り当てに失敗したメモリ領域20の親のメモリ領域20をメモリ割り当ての対象に選択して、ステップS208へ進む。
ステップS209へ進んだ場合、エラーコードをアプリケーションプログラム40に返却する。そして処理が終了する。
On the other hand, when the process proceeds to step S207, it is checked whether to acquire the parent memory area 20. When the parent memory area 20 does not exist, or when the heap ID specified in the argument of the memory acquisition API does not refer to the parent memory area 20 (askparent is defined in the definition of the heap ID in the configuration file 41). In the case of false), the process proceeds to step S209. In other cases, referring to the tree structure as shown in FIG. 8, the parent memory area 20 of the memory area 20 that failed to allocate the memory is selected as the target of the memory allocation, and the process proceeds to step S208.
If the process proceeds to step S209, the error code is returned to the application program 40. And the process ends.
一方、ステップS208へ進んだ場合、メモリ割り当ての対象に選択した親のメモリ領域20を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15にメモリ割り当てを依頼する。そして、上記したステップS205に進み、既に説明した手順を繰り返す。このとき、親のメモリ領域20においてもメモリ割り当てが失敗した場合には、更に親のメモリ領域20からのメモリ割り当てが再帰的に試行される。 On the other hand, when the process proceeds to step S208, the heap manager 15 that manages the memory area 20 of the parent selected as the target of memory allocation is called, and the heap manager 15 is requested to allocate memory. Then, the process proceeds to step S205 described above, and the procedure already described is repeated. At this time, if the memory allocation fails even in the parent memory area 20, the memory allocation from the parent memory area 20 is recursively tried.
このように、グローバルメモリ割り当て処理においては、アプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るメモリ領域20(コアメモリ領域)を特定し、当該メモリ領域20に紐付けられたメモリ領域20を再帰的に辿って発見したグローバルメモリ領域23からメモリ割り当てを実行させる。
As described above, in the global memory allocation process, the memory area 20 (core memory area) related to the local memory of the processor core in which the application program 40 is executed is specified, and the memory area 20 associated with the memory area 20 is specified. The memory allocation is executed from the
(クラスタメモリ割り当て処理)
クラスタメモリ割り当て処理について、図12を参照しつつ説明する。
まず、図12に示すステップS300において、マイクロカーネル16は、メモリ獲得用APIの呼び出し元のプロセッサコアの番号(本実施形態においてはマイクロカーネル16が実行されているプロセッサコアの番号)を取得する。そして、ステップS301に進む。
(Cluster memory allocation processing)
The cluster memory allocation process will be described with reference to FIG.
First, in step S300 shown in FIG. 12, the microkernel 16 acquires the number of the processor core that calls the memory acquisition API (in this embodiment, the number of the processor core in which the microkernel 16 is executed). Then, the process proceeds to step S301.
ステップS301では、マイクロカーネル16は、ステップS300で取得したプロセッサコアの番号を基に、メモリ領域20のツリー構造を参照し、当該番号に関連付けられたコアメモリ領域を取得する。そして、ステップS303に進む。 In step S301, the microkernel 16 refers to the tree structure of the memory area 20 based on the processor core number acquired in step S300, and acquires the core memory area associated with the number. Then, the process proceeds to step S303.
ステップS303では、取得したコアメモリ領域の親のメモリ領域20をメモリ割り当ての対象に選択する。このコアメモリ領域の親のメモリ領域20は、「MOA_CLUSTER」属性を有するクラスタメモリ領域である。そして、ステップS304に進む。 In step S303, the memory area 20 of the parent of the acquired core memory area is selected as the memory allocation target. The parent memory area 20 of this core memory area is a cluster memory area having the “MOA_CLUSTER” attribute. Then, the process proceeds to step S304.
なお、ステップS304〜S309における処理は、上述したグローバルメモリ割り当て処理のステップS204〜S209における処理と同様であるので、説明を省略する。 Since the processing in steps S304 to S309 is the same as the processing in steps S204 to S209 of the global memory allocation processing described above, the description thereof will be omitted.
このように、クラスタメモリ割り当て処理においては、アプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域を特定し、当該コアメモリ領域に紐付けられたクラスタメモリ領域からメモリ割り当てを実行させる。 In this way, in the cluster memory allocation process, the core memory area related to the local memory of the processor core in which the application program 40 is executed is specified, and the memory allocation is executed from the cluster memory area associated with the core memory area. Let me.
(コアメモリ割り当て処理)
コアメモリ割り当て処理について、図13を参照しつつ説明する。
まず、図13に示すステップS400において、マイクロカーネル16は、メモリ獲得用APIの呼び出し元のプロセッサコアの番号(本実施形態においてはマイクロカーネル16が実行されているプロセッサコアの番号)を取得する。そして、ステップS401に進む。
(Core memory allocation process)
The core memory allocation process will be described with reference to FIG.
First, in step S400 shown in FIG. 13, the microkernel 16 acquires the number of the processor core that calls the memory acquisition API (in this embodiment, the number of the processor core in which the microkernel 16 is executed). Then, the process proceeds to step S401.
ステップS401では、マイクロカーネル16は、ステップS400で取得したプロセッサコアの番号を基に、メモリ領域20のツリー構造を参照し、当該番号に関連付けられたコアメモリ領域20をメモリ割り当ての対象として選択する。そして、ステップS402に進む。 In step S401, the microkernel 16 refers to the tree structure of the memory area 20 based on the processor core number acquired in step S400, and selects the core memory area 20 associated with the number as the memory allocation target. .. Then, the process proceeds to step S402.
ステップS402では、マイクロカーネル16が、メモリ割り当ての対象として選択したコアメモリ領域を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15によってメモリ割り当てが実行される。そして、ステップS403に進む。 In step S402, the microkernel 16 calls the heap manager 15 that manages the core memory area selected as the memory allocation target, and the heap manager 15 executes the memory allocation. Then, the process proceeds to step S403.
なお、ステップS403〜S407における処理は、上述したグローバルメモリ割り当て処理のステップS205〜S209における処理と同様であるので、説明を省略する。 Since the processing in steps S403 to S407 is the same as the processing in steps S205 to S209 of the global memory allocation processing described above, the description thereof will be omitted.
このように、クラスタメモリ割り当て処理においては、アプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域からメモリ割り当てを実行させる。 As described above, in the cluster memory allocation process, the memory allocation is executed from the core memory area related to the local memory of the processor core in which the application program 40 is executed.
(実メモリ割り当て処理)
実メモリ割り当て処理について、図14を参照しつつ説明する。
まず、図14に示すステップS500において、マイクロカーネル16は、メモリ獲得用APIの引数で指定されたヒープID(実メモリID)を基に、そのヒープIDに関連付けられたメモリ領域20をメモリ割り当ての対象として選択する。例えば、図7の(9)で定義された「HEAP_CORE4」というヒープIDがメモリ獲得用APIの引数で指定されている場合、このヒープIDに関連付けられた「MEMOBJ_CORE4」という名前のメモリ領域20をメモリ割り当ての対象として選択する。そして、ステップS501に進む。
(Real memory allocation process)
The real memory allocation process will be described with reference to FIG.
First, in step S500 shown in FIG. 14, the microkernel 16 allocates the memory area 20 associated with the heap ID based on the heap ID (real memory ID) specified by the argument of the memory acquisition API. Select as a target. For example, when the heap ID "HEAP_CORE4" defined in FIG. 7 (9) is specified by the argument of the memory acquisition API, the memory area 20 named "MEMOBJ_CORE4" associated with this heap ID is stored in the memory. Select as the target of allocation. Then, the process proceeds to step S501.
ステップS501では、マイクロカーネル16が、メモリ割り当ての対象として選択したメモリ領域20を管理するヒープマネージャ15を呼び出し、ヒープマネージャ15にメモリ割り当てを依頼する。そして、ステップS502に進む。 In step S501, the microkernel 16 calls the heap manager 15 that manages the memory area 20 selected as the memory allocation target, and requests the heap manager 15 to allocate the memory. Then, the process proceeds to step S502.
なお、ステップS502〜S506における処理は、上述したグローバルメモリ割り当て処理のステップS205〜S209における処理と同様であるので、説明を省略する。 Since the processing in steps S502 to S506 is the same as the processing in steps S205 to S209 of the global memory allocation processing described above, the description thereof will be omitted.
このように、実メモリ割り当て処理においては、指定された実メモリIDに関連付けられたメモリ領域20からメモリ割り当てを実行させる。 As described above, in the real memory allocation process, the memory allocation is executed from the memory area 20 associated with the designated real memory ID.
(まとめ)
以上説明したように、本実施形態によれば、実メモリIDが指定されてメモリ獲得用APIが呼び出されたときには、指定された実メモリIDに関連付けられたメモリ領域20からメモリ割り当てを実行させるようにしている。このため、アプリケーションプログラム40が指定した特定のメモリからのメモリ割り当てを実行したい場合には、実メモリIDを指定してメモリ獲得用APIを呼び出せばよい。
(summary)
As described above, according to the present embodiment, when the real memory ID is specified and the memory acquisition API is called, the memory allocation is executed from the memory area 20 associated with the specified real memory ID. I have to. Therefore, when it is desired to execute the memory allocation from the specific memory specified by the application program 40, the memory acquisition API may be called by specifying the actual memory ID.
また、仮想コアIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域からメモリ割り当てを実行させるようにしている。このため、アクセス速度の速いメモリ(プロセッサコア固有のメモリ)をオペレーティングシステム10に動的に選択させてメモリ割り当てを実行したい場合には、仮想コアIDを指定してメモリ獲得用APIを呼び出せばよい。 Further, when the virtual core ID is specified and the memory acquisition API is called, the memory allocation is executed from the core memory area related to the local memory of the processor core in which the application program 40 that called the memory acquisition API is executed. I am trying to do it. Therefore, if you want the operating system 10 to dynamically select a memory with a high access speed (memory unique to the processor core) and execute memory allocation, you can call the memory acquisition API by specifying the virtual core ID. ..
また、仮想クラスタIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るコアメモリ領域を特定し、当該コアメモリ領域に紐付けられたクラスタメモリ領域からメモリ割り当てを実行させるようにしている。このため、例えばマルチコア環境の管理効率を高めるためにプロセッサコアをいくつかのグループ(クラスタ)に分割し、そのクラスタにメモリ領域20を割り当てた場合、このクラスタ用のメモリ領域20をクラスタメモリ領域として定義することで、プログラムの実行時にオペレーティングシステム10が動的に判断してクラスタメモリ領域からメモリ割り当てを実行させることができる。 Further, when the virtual cluster ID is specified and the memory acquisition API is called, the core memory area related to the local memory of the processor core in which the application program 40 that called the memory acquisition API is executed is specified, and the core is concerned. The memory allocation is executed from the cluster memory area associated with the memory area. Therefore, for example, when the processor core is divided into several groups (clusters) and the memory area 20 is allocated to the cluster in order to improve the management efficiency of the multi-core environment, the memory area 20 for this cluster is used as the cluster memory area. By defining it, the operating system 10 can dynamically determine when the program is executed and execute the memory allocation from the cluster memory area.
また、仮想グローバルIDが指定されてメモリ獲得用APIが呼び出されたときには、メモリ獲得用APIを呼び出したアプリケーションプログラム40が実行されているプロセッサコアのローカルメモリに係るメモリ領域20を特定し、当該メモリ領域20に紐付けられたメモリ領域20を再帰的に辿って発見したグローバルメモリ領域23からメモリ割り当てを実行させるようにしている。このため、例えばすべてのプロセッサコアからアクセスできるメモリをグローバルメモリ領域23とすることで、プログラムの実行時にオペレーティングシステム10が動的に判断してこのグローバルメモリ領域23からメモリ割り当てを実行させることができる。
Further, when the virtual global ID is specified and the memory acquisition API is called, the memory area 20 related to the local memory of the processor core in which the application program 40 that called the memory acquisition API is executed is specified, and the memory is concerned. The memory allocation is executed from the
しかも、上記したような複数のメモリ割り当て方法が同じメモリ獲得用APIで実現されているため、アプリケーションプログラム40を変更しなくても、ヒープIDの定義を変更するだけでメモリ割り当て方法を切り替えることができる。例えば、コンフィギュレーションファイル41を書き換えることでヒープIDの定義を変更し、仮想コアIDに割り当てられていたヒープIDを実メモリIDに割り当てるようにすれば、当該ヒープIDを使用してメモリ獲得用APIを呼び出していたアプリケーションプログラム40を変更することなく、メモリ割り当ての方法を切り替えることができる。仮想コアIDを実メモリIDに変更した場合には、ヒープIDの定義を変更する前は、プログラム実行時のプロセッサコアに固有のメモリ領域20からメモリ割り当てが実行され、ヒープIDの定義を変更した後は、ヒープIDによって指定された特定のメモリ領域20からのメモリ割り当てが実行される。
Moreover, since a plurality of memory allocation methods as described above are realized by the same memory acquisition API, it is possible to switch the memory allocation method simply by changing the definition of the heap ID without changing the application program 40. can. For example, if the definition of the heap ID is changed by rewriting the
また、メモリ領域20でツリー構造を作成し、ヒープIDで指定されたメモリ領域20からのメモリ割り当てに失敗したときには、当該メモリ領域20の上位のメモリ領域20からメモリ割り当てを実行させるようにしている。このため、例えばアクセス速度の速いメモリリソースが枯渇してしまった場合でも、次の候補のメモリ領域20からメモリ割り当てを実行させることができる。よって、できるだけアクセス速度の速いメモリ領域20を検索してメモリ割り当てを実行させることができる。 Further, a tree structure is created in the memory area 20, and when the memory allocation from the memory area 20 specified by the heap ID fails, the memory allocation is executed from the upper memory area 20 of the memory area 20. .. Therefore, for example, even when the memory resource having a high access speed is exhausted, the memory allocation can be executed from the next candidate memory area 20. Therefore, the memory area 20 having the fastest access speed can be searched and the memory allocation can be executed.
また、ヒープIDとメモリ領域20との関係を記述したコンフィギュレーションファイル41と、コンフィギュレーションファイル41を読み込んで、アプリケーションプログラム40用のヘッダファイル44とオペレーティングシステム10用の内部データ43とを生成する情報生成手段42と、を備える。このような構成によれば、コンフィギュレーションファイル41を書き換えて情報生成手段42を実行するだけで、アプリケーションプログラム40やオペレーティングシステム10を変更することなく、メモリ領域20の定義やヒープIDの定義を変更することができる。例えば、異なる物理メモリやプロセッサコアを備えたハードウェア環境へプログラムを移植する場合でも、コンフィギュレーションファイル41を書き換えて情報生成手段42を実行するだけで、アプリケーションプログラム40やオペレーティングシステム10を変更することなく、適切なメモリ割り当てを実現することができる。
Further, information that reads the
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 オブジェクトファイル
10 Operating system 12 Memory area creation unit 14 Memory allocation unit 15 Heap manager 16 Microkernel 20
Claims (4)
予め設定された内部データに従って複数のメモリ領域を作成するメモリ領域作成部と、
前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるメモリ割り当て部と、
を備え、
前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域と、前記ローカルメモリよりもアクセス速度が遅いメモリに係るメモリ領域と、を含み、
前記メモリ領域および前記ヒープIDは、ユーザによって書き換え可能なファイルにおいて定義されており、
前記メモリ領域作成部は、前記メモリ領域で、前記コアメモリ領域が最下層であり、かつ、前記アクセス速度が遅いメモリに係るメモリ領域が前記コアメモリ領域よりも上位に配置されたツリー構造を作成し、
前記メモリ割り当て部は、
前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする、オペレーティングシステム。 An operating system that implements a memory acquisition API that can be called from an application program and is executed in a multi-core environment in which multiple processor cores, each with local memory, are interconnected.
A memory area creation unit that creates multiple memory areas according to preset internal data,
A memory allocation unit that refers to the heap ID specified as an argument of the memory acquisition API and executes memory allocation from the memory area associated with the heap ID.
With
The memory area includes a core memory area related to the local memory of the plurality of processor cores and a memory area related to a memory having an access speed slower than the local memory.
The memory area and the heap ID are defined in a user-rewritable file.
The memory area creation unit creates a tree structure in which the core memory area is the lowest layer and the memory area related to the memory having a slow access speed is arranged higher than the core memory area in the memory area. death,
The memory allocation unit
An operating system characterized in that when a memory allocation from a memory area specified by the heap ID fails, a memory allocation is executed from a memory area higher than the memory area.
前記メモリ領域作成部は、前記クラスタメモリ領域が前記コアメモリ領域よりも上位に配置され、かつ、前記グローバルメモリ領域が前記クラスタメモリ領域よりも上位に配置されたツリー構造を作成することを特徴とする、請求項1記載のオペレーティングシステム。 The memory area related to the memory having a slow access speed includes a cluster memory area associated with one or more core memory areas and a global memory area associated with one or more cluster memory areas.
The memory area creation unit is characterized in that the cluster memory area is arranged higher than the core memory area and the global memory area is arranged higher than the cluster memory area. The operating system according to claim 1.
前記コンピュータが、予め設定された内部データに従って複数のメモリ領域を作成するステップと、
前記コンピュータが、前記メモリ獲得用APIの引数として指定されたヒープIDを参照し、前記ヒープIDに関連付けられた前記メモリ領域からメモリ割り当てを実行させるステップと、
を備え、
前記メモリ領域として、前記複数のプロセッサコアのローカルメモリに係るコアメモリ領域と、前記ローカルメモリよりもアクセス速度が遅いメモリに係るメモリ領域と、を含み、
前記メモリ領域および前記ヒープIDは、ユーザによって書き換え可能なファイルにおいて定義されており、
前記コンピュータが、前記メモリ領域で、前記コアメモリ領域が最下層であり、かつ、前記アクセス速度が遅いメモリに係るメモリ領域が前記コアメモリ領域よりも上位に配置されたツリー構造を作成し、
前記コンピュータは、前記ヒープIDで指定されたメモリ領域からのメモリ割り当てに失敗したときには、当該メモリ領域の上位のメモリ領域からメモリ割り当てを実行させることを特徴とする、メモリ割り当て方法。 It is a memory allocation method for causing a computer to execute memory allocation when an API for memory acquisition is called from an application program in a multi-core environment in which multiple processor cores each having local memory are connected to each other.
A step in which the computer creates a plurality of memory areas according to preset internal data,
A step in which the computer refers to the heap ID specified as an argument of the memory acquisition API and executes memory allocation from the memory area associated with the heap ID.
With
The memory area includes a core memory area related to the local memory of the plurality of processor cores and a memory area related to a memory having an access speed slower than the local memory.
The memory area and the heap ID are defined in a user-rewritable file.
The computer creates a tree structure in which the memory area of the memory area, the core memory area is the lowest layer, and the memory area related to the memory having a slow access speed is arranged higher than the core memory area.
A memory allocation method, wherein the computer executes memory allocation from a memory area higher than the memory area when the memory allocation from the memory area specified by the heap ID fails.
前記コンピュータは、前記クラスタメモリ領域が前記コアメモリ領域よりも上位に配置され、かつ、前記グローバルメモリ領域が前記クラスタメモリ領域よりも上位に配置されたツリー構造を作成することを特徴とする、請求項3記載のメモリ割り当て方法。 The memory area related to the memory having a slow access speed includes a cluster memory area associated with one or more core memory areas and a global memory area associated with one or more cluster memory areas.
The computer is characterized by creating a tree structure in which the cluster memory area is arranged higher than the core memory area and the global memory area is arranged higher than the cluster memory area. Item 3. The memory allocation method according to item 3.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019190757A JP6932755B2 (en) | 2018-10-19 | 2019-10-18 | Operating system and memory allocation method |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018197732A JP6682599B2 (en) | 2018-10-19 | 2018-10-19 | Operating system and memory allocation method |
JP2019190757A JP6932755B2 (en) | 2018-10-19 | 2019-10-18 | Operating system and memory allocation method |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018197732A Division JP6682599B2 (en) | 2018-10-19 | 2018-10-19 | Operating system and memory allocation method |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2020077402A JP2020077402A (en) | 2020-05-21 |
JP6932755B2 true JP6932755B2 (en) | 2021-09-08 |
Family
ID=70724246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019190757A Active JP6932755B2 (en) | 2018-10-19 | 2019-10-18 | Operating system and memory allocation method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6932755B2 (en) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3371078B2 (en) * | 1996-11-29 | 2003-01-27 | 三菱電機株式会社 | Device-to-device data transfer apparatus and method |
JP4144609B2 (en) * | 2004-09-29 | 2008-09-03 | ソニー株式会社 | Information processing apparatus, memory area management method, and computer program |
US8723877B2 (en) * | 2010-05-20 | 2014-05-13 | Apple Inc. | Subbuffer objects |
JP2013242823A (en) * | 2012-05-23 | 2013-12-05 | Toshiba Corp | Information processing device, information processing method, and control program |
-
2019
- 2019-10-18 JP JP2019190757A patent/JP6932755B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
JP2020077402A (en) | 2020-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9965324B2 (en) | Process grouping for improved cache and memory affinity | |
US8726257B2 (en) | File attributes for flexible linking | |
JP5897816B2 (en) | Dependency graph parameter scoping | |
USRE42444E1 (en) | Method for managing resources in a reconfigurable computer having programmable logic resources where automatically swapping configuration data between a secondary storage device and the programmable logic resources | |
JP2986075B2 (en) | System for combining a local object address and a global object identifier into a single object pointer | |
US5511192A (en) | Method and apparatus for managing thread private data in a parallel processing computer | |
US20140019988A1 (en) | Support of non-trivial scheduling policies along with topological properties | |
US10474510B2 (en) | Declarative properties for data collections | |
JP6423809B2 (en) | Operating system, programming system, and memory allocation method | |
US9886328B2 (en) | Flexible binding of tasks to target resources | |
US10437649B2 (en) | Task mapping for heterogeneous platforms | |
JPH02188833A (en) | Interface for computer system | |
CN114942796B (en) | Plug-in compiling and calling method, device, equipment and storage medium | |
JP2000347864A (en) | Method and device for dispatch table structure | |
CN1140500A (en) | Distributed data base system | |
US20170262312A1 (en) | Multi-grained memory operands | |
JP2007188523A (en) | Task execution method and multiprocessor system | |
US8510529B2 (en) | Method for generating program and method for operating system | |
JP6932755B2 (en) | Operating system and memory allocation method | |
JP6682599B2 (en) | Operating system and memory allocation method | |
JP3019317B2 (en) | Process scheduling method | |
KR101140522B1 (en) | System and Method for Managing Object | |
US8082553B2 (en) | Client management of java management extensions (JMX) Mbean state | |
KR20040096420A (en) | Runtime polymorphism | |
JP2004151822A (en) | Method and program for binding common library |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20191018 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20201008 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20201201 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20201224 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20210601 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210709 |
|
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: 20210803 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20210818 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6932755 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |