JP2011232956A - コンピュータシステムとプログラム - Google Patents

コンピュータシステムとプログラム Download PDF

Info

Publication number
JP2011232956A
JP2011232956A JP2010102612A JP2010102612A JP2011232956A JP 2011232956 A JP2011232956 A JP 2011232956A JP 2010102612 A JP2010102612 A JP 2010102612A JP 2010102612 A JP2010102612 A JP 2010102612A JP 2011232956 A JP2011232956 A JP 2011232956A
Authority
JP
Japan
Prior art keywords
core
resource
management information
queue
task
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.)
Pending
Application number
JP2010102612A
Other languages
English (en)
Inventor
Takashi Nakahara
中原  崇
Tadashi Kamiwaki
正 上脇
Shigeru Matsuo
松尾  茂
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.)
Faurecia Clarion Electronics Co Ltd
Original Assignee
Clarion 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 Clarion Co Ltd filed Critical Clarion Co Ltd
Priority to JP2010102612A priority Critical patent/JP2011232956A/ja
Priority to US13/094,306 priority patent/US20110265093A1/en
Publication of JP2011232956A publication Critical patent/JP2011232956A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

【課題】複数のプロセッサが共有リソースを獲得しようとする場合の排他制御において、コンピュータシステム全体の処理効率が低下することを防止する。
【解決手段】
複数のプロセッサで動作するOS上のアプリケーションが共有リソースを使用する場合の排他制御方式であって、共有リソース毎に管理情報を設け、この管理情報には、各プロセッサ上で動作するOS毎のセマフォと、各OSからの要求を格納する待ち行列と、待ち行列に格納されている要求個数のカウンタとを備え、共有リソース獲得の可否はカウンタを参照して判断し、共有リソースの獲得通知は、各OSのセマフォから通知を受けることで、各OSにおける共有リソースの管理を行うことを特徴とする。
【選択図】 図6

Description

本発明は、コンピュータシステムとそれに利用するプログラムに関する。
ナビゲーション装置などの組込み機器やパソコンなどのコンピュータシステムは、複数機能を同時に処理する機能へのニーズが高まっているため、MPUをシングルコアからマルチコアと呼ばれる密結合マルチプロセッサへ移行している。
マルチプロセッサの使い方には対称型マルチプロセッサ(SMP)と非対称型マルチプロセッサ(AMP)がある。対称型マルチプロセッサは一つのOSにより全てのCPUコア(以下コアと呼称する)を管理するものであり、非対称マルチプロセッサはコアを管理するOSが複数になっているものである。パソコンではSMP対応のOSを用いて全てのコアを制御しており、組込み機器においてもSMP対応のOSを用いているものもある。
しかし、既存ソフトウェア資産を対称型マルチプロセッサ上で動作させるにはSMP対応OSへの移植が必要であり、OSに障害が発生するとシステム全体に普及する。また、既存ソフトウェア資産はシングルコア対応OSしか動作しないものもある。したがって、上記2点の問題を解決するという目的で、非対称型マルチプロセッサを組込みシステムへ適用し、1機能につき1コア、1コアにつき1OSを割り当てる。上記システムにおいて、SRAMやDRAMなどリソースのコア間排他制御を考える。
特許文献1は、リソースのプロセッサ間排他制御を行うのに共有メモリに各OSのセマフォを格納して連携させている。特許文献2は、リソースのプロセッサ間排他制御を行うのに共有メモリ内のロック変数を使用している。
特開平7−160645号公報 特開2003−345614号公報
特許文献1における排他制御方式は、他プロセッサの管理するリソースを獲得するのに自プロセッサOSと他プロセッサOSのセマフォ獲得システムコールおよび共有メモリへのアクセスを毎回実行する必要があった。そのため、リソース獲得までの時間が長くなり、コンピュータシステム全体の処理効率が低下する問題があった。
特許文献2における排他制御方式は、共有メモリ内ロック変数の獲得待ち時間中にプロセッサでループ処理を実行するため、コンピュータシステム全体の処理効率が低下する問題があった。さらに、ループ処理実行中は消費電力が大きくなる。
各々で個別のOSを実行する複数のプロセッサと、複数のプロセッサが利用する1または2以上の共有リソースと各共有リソースにそれぞれ対応する1または2以上の管理情報を記憶する記憶部とを備えたコンピュータシステムであって、管理情報の各々は、複数のプロセッサ上で動作するタスクを管理するOSごとのセマフォと、当該管理情報に対応する共有リソースの獲得を要求したプロセッサを特定するための情報を格納する待ち行列と、当該管理情報に対応する共有リソースを獲得可能な残数を表すリソースカウンタとを含み、複数のプロセッサの各々は、タスクの処理のために獲得しようとする共有リソースに対応した管理情報に含まれるリソースカウンタの値を取得するカウンタ取得手段と、カウンタ取得手段により取得したリソースカウンタの値に基づいて当該共有リソースを獲得できるか否かを判定する獲得判定手段と、獲得判定手段により当該共有リソースを獲得できると判定されたときは、当該共有リソースを獲得して、対応する管理情報のリソースカウンタの値を小さくし、獲得できないと判定されたときは、当該プロセッサを特定するための情報を当該共有リソースに対応する管理情報の待ち行列に格納し、当該プロセッサが処理しようとしたタスクを待ち状態にするリソース獲得手段とを備えることを特徴とする。
本発明では、共有リソースごとに管理情報を設け、共有リソースの獲得の可否について管理情報に基づいて即座に判断でき、リソース獲得までの時間を低減できる。また、共有リソースが獲得できなかったときは、ループ処理に入らず即座に待ち状態になるため、実行可能状態にある他の処理の進行を阻害することがない。そのため、共有リソースの獲得に関する排他制御のためにコンピュータシステム全体の処理効率が低下する問題の発生を防ぐことができる。
本発明の一実施形態におけるコンピュータシステムのハードウェア構成の一例を示した説明図である。 本発明の一実施形態におけるハードウェアおよびソフトウェアの階層の一例を示した説明図である。 本発明の一実施形態におけるアプリの構成の一例を示した説明図である。 本発明の一実施形態におけるOSの機能の一例を示した説明図である。 本発明の一実施形態におけるOSシステムコール群の一例を示した説明図である。 本発明の一実施形態における共有リソースの獲得に関する排他制御方法の概要を示した説明図である。 本発明のコア番号待ち行列とセマフォの待ち行列との関係の一例を示した説明である。 本発明の一実施形態におけるOSシステムコールポインタ群の一例を示した説明図である。 本発明の一実施形態におけるコア間共有関数群の一例を示した説明図である。 本発明の一実施形態におけるコア番号待ち行列の一例を示した説明図である。 本発明の一実施形態におけるコア間優先度情報の一例を示した説明図である。 本発明の一実施形態におけるコア間リソース管理情報を生成するのに必要な初期化手順の一例を示した説明図である。 本発明の一実施形態における各コアOSシステムコール登録関数の処理フローの一例を示した説明図である。 本発明の一実施形態におけるリソース管理情報生成関数の処理フローの一例を示した説明図である。 本発明の一実施形態におけるリソース獲得関数の処理フローの一例を示した説明図である。 本発明の一実施形態におけるリソース解放関数の処理フローの一例を示した説明図である。 本発明の一実施形態におけるリソース獲得関数の処理において、他に実行可能状態にあるタスクがないときの処理フローの一例を示した説明図である。 本発明の一実施形態におけるコア間リソース管理情報およびタスクの状態に関するタイムチャートの一例を示した説明図である。 本発明の一実施形態のリソース管理情報生成関数における、コア間リソース管理情報の初期値設定に関する処理フローの一例を示した説明図である。 本発明の一実施形態におけるコア間リソース管理情報の初期値設定に関する処理フローにおける、コア間優先度情報の設定に関する処理フローの一例を示した説明図である。 本発明の一実施形態におけるリソース獲得関数の処理において、コア間リソースカウンタの値を取得する際に実行する排他制御方法に関する処理フローの一例を示した説明図である。 本発明の一実施形態におけるリソース解放関数の処理において、コア番号待ち行列の状態を取得する際に実行する処理フローの一例を示した説明図である。 本発明の一実施形態におけるコア番号待ち行列の例を示した説明図である。 本発明の一実施形態におけるコア間優先度情報の例を示した説明図である。 本発明の一実施形態におけるコア間優先度情報の待ち順決定方法の一例を示した説明図である。 本発明の一実施形態におけるコア間優先度情報の待ち順決定方法の一例を示した説明図である。 本発明の一実施形態におけるコア間優先度情報の待ち順決定方法の一例を示した説明図である。 本発明の一実施形態におけるコア間優先度情報の待ち順決定方法の一例を示した説明図である。 本発明の一実施形態のリソース獲得関数における、コア番号待ち行列へコア番号を格納する処理の処理フローの一例を示した説明図である。 従来のコア間共有リソースの獲得に関する排他制御について、ハードウェアおよびソフトウェアの階層の一例を示した説明図である。 従来知られているコア間共有リソースの獲得に関する処理フローの一例を示した説明図である。 本発明の一実施形態に対するコンピュータシステムのハードウェア構成の変形例を示した説明図である。 本発明の一実施形態に対するハードウェアおよびソフトウェアの階層の変形例を示した説明図である。
図1は本実施例におけるコンピュータシステムのハードウェア構成の一例を示したものである。コンピュータシステム1はマルチコアプロセッサ2、システムバス3、RAM41、I/O42などを備える。
マルチコアプロセッサ2は、システムバス3を介してRAM41やI/O42とデータ通信を行うことにより、I/O42に接続された機器からデータを読み取りRAM41へデータを一時保存しながら演算処理を行い、I/O42に接続された機器へ演算結果を返すものである。マルチコアプロセッサ2は、複数のコア21をプロセッサ内バス20で接続しており、コア21のうちのあるコアから他のコアへハードウェア割込みをかけることができるコア間割込み機能を有するものとする。また、各コアは演算処理を行わない間にスタンバイ状態にする省電力機能を有するものとする。
I/O42はマルチコアプロセッサ2の入出力インターフェースであり、マルチコアプロセッサ2は、タッチパネル、キーボード、ディスプレイ、各種ディスクドライブなどの入出力装置とデータの送受信を行う。
図2は本実施例におけるハードウェアおよびソフトウェアの階層を示したものである。本実施例においては、マルチコアプロセッサ2の各コア21にそれぞれOSが搭載され、各OS上でそれぞれアプリケーションプログラム(以下アプリと呼称)が動作するものとする。また、マルチコアプロセッサ2のコア21は、RAM41やI/O42などを共有する。以下、RAM41とI/O42などをコア間共有リソースと呼称する。
図3は本実施例におけるアプリの構成を示したものである。アプリは複数のタスクと呼ばれる動作単位から成り立っている。タスクの実行順番はOSによって制御される。タスクは実行状態、実行可能状態、待ち状態の3つの状態をとることができる。実行状態は、コアがタスクの処理を実行している状態のことを指す。実行可能状態は、コアが処理を実行できるものの他のタスクによりコアが占有されているため実行していない状態のことを指す。待ち状態は、リソース獲得待ちなどにより処理を実行していない状態のことを指す。
図4は本実施例におけるOSの機能を示したものである。本実施例においてOSは、少なくともタスク生成・起動機能401、タスク切り替え機能402、排他制御機能403、割込みハンドラ404、省電力機能405、タスク優先度設定機能406を有するものとする。
タスク生成・起動機能401は、OSがタスクを生成し、生成したタスクを起動し、実行状態または実行可能状態にする機能である。
タスク切り替え機能402は、タスクに設定される優先度と各タスクの状態とに基づいて、OSが実行するタスクを切り換える機能である。複数のタスクが起動しており、あるタスクが実行状態にあるとき、実行状態にあるタスクよりも優先度の高い実行可能状態のタスクが起動したら実行状態のタスクを停止し、優先度の高いタスクを実行する。また、実行状態のタスクがリソース獲得待ちなどになることにより待ち状態になった場合、タスクを実行状態から待ち状態にして停止させ、実行可能状態にある別のタスクを実行状態にしてコア21に処理を行わせる。
排他制御機能403は、セマフォを用いて複数のタスクまたはアプリによる共有リソースの獲得を排他制御する機能である。セマフォは、セマフォのカウンタとタスクの待ち行列とからなる。セマフォのカウンタは、整数型の変数であって、利用可能な共有リソースの個数を表す。セマフォのカウンタの値よりも多くのタスクが共有リソースを利用しようとした場合、一部のタスクは共有リソースの獲得待ちとなり、セマフォの待ち行列に格納される。以降、セマフォのカウンタのことをセマフォカウンタと呼称する。
割込みハンドラ404は、I/O42からのハードウェア割込みや他コアからのコア間割り込みにより起動される処理を実行する機能を有するものである。
省電力機能405は、自コアを省電力モードに設定する機能である。
タスク優先度設定機能406は、タスクの実行に関する優先順位を設定する機能である。
図5は本実施例におけるOSシステムコール群を示したものである。OSシステムコールとは、図4に示すOSの機能を実行するためのプログラミング関数である。たとえば、タスク生成・起動機能401やタスク優先度設定機能406を実現するOSシステムコールとしてタスク生成関数501やタスク起動関数502などがある。排他制御機能を実現するOSシステムコールとしては、セマフォ生成関数503やセマフォ獲得関数504、セマフォ解放関数505、セマフォ削除関数506などがある。OSシステムコール群のプログラミング関数は公知のものを用いてもよい。
セマフォ生成関数503は、各OSがセマフォを生成する関数である。セマフォ削除関数506は、セマフォを削除する関数である。
セマフォ獲得関数504は、各OSがタスクを処理するために、各OSのリソースを獲得しようとするときに実行する関数である。各OSは、リソースに対応したセマフォカウンタの値を取得し、該セマフォカウンタの値が0のときはセマフォの待ち行列にタスクを格納し、1以上であればタスクの処理を続行し、セマフォカウンタの値を1減らす。
セマフォ解放関数505は、各OSがタスクの処理のために獲得していたリソースを解放する関数である。各OSは、セマフォの待ち行列に入っているタスクの数が1以上であるか否かを判定し、1以上であればセマフォの待ち行列に格納されているタスクの実行を再開させ、0であればセマフォカウンタの値を1増やす。
図6は本実施例における排他制御方法の概要を示したものである。本実施例では、RAM41の中に複数のコアがアクセスできるメモリ領域を有する。該メモリ領域をコア間共有メモリ領域601と呼称する。コア間共有メモリ領域601には、各コア間共有リソースに対応したコア間リソース管理情報610、コア間共有関数群620、コア間OS管理情報630が格納されている。
コア間リソース管理情報610は、複数のコア21の間でのコア間共有リソースの獲得に関して排他制御するための管理情報である。コア間リソース管理情報610は、コア21がコンピュータシステム1にあるコア間共有リソースごとに作成し、コア間共有メモリ領域601に格納する。コア21がコア間リソース管理情報610を作成し、コア間共有メモリ領域601に格納する処理については、図14を用いて後述する。
コア間リソース管理情報610は、コア間リソースカウンタ6100、各OSのセマフォ6101、コア番号待ち行列6102、コア間優先度情報6103、ロック変数6104から成り立っている。
コア間リソースカウンタ6100は、コア間共有リソースの残数を記憶するものである。コア21がコア間共有リソースを獲得しようとするとき、コア間リソースカウンタ6100の値が1以上であればタスクの処理を続行し、0であればOSセマフォ6101にタスクを待ち状態にすることを要求する。
各OSのセマフォ6101は、各OSにおいてセマフォ生成関数503によって生成されたセマフォである。各OSのセマフォ6101は、各コアにおいてそれぞれ処理されるタスクの管理を行う。図6では、各OSのセマフォ6101がコア間共有リソースを管理するコア間リソース管理情報610に含まれているが、コア間リソース管理情報610と各OSのセマフォ6101は独立して存在してもよいが、この場合、コア間リソース管理情報610が各OSのセマフォ6101を管理できるように、各OSのセマフォ6101へのポインタまたはIDをコア間リソース管理情報610の中に含める必要がある。
コア番号待ち行列6102は、リソースの獲得を要求したものの獲得できなかったタスクについて、そのタスクを処理するコア21のコア番号を格納する行列である。コンピュータシステム1は、各OSのセマフォ6101の待ち行列とコア番号待ち行列6102とを用いて、待ち状態にあるタスクを管理する。
コア番号待ち行列6102と各OSのセマフォ6101の待ち行列の関係を図7に例示する。図7では、コア番号待ち行列6102の例701が示されている。また、OS1のセマフォの待ち行列の例702が示されている。同様にOS2およびOS3のセマフォの待ち行列の例703および704がそれぞれ示されている。コア番号待ち行列の例701の先頭にはコア番号「コアC1」が格納されている。一方、コア番号「コアC1」上で動作するOS1のセマフォの待ち行列702の先頭には「タスク1A」が格納されている。コア番号待ち行列の例701の先頭にあるコア番号「コアC1」は、OS1のセマフォの待ち行列702の「タスク1A」に対応しており、コア番号待ち行列の例701の各コア番号も同様にOS1〜3のセマフォの待ち行列の例702〜704と図7に図示したように対応している。
本実施例では、リソースが解放されたときにコア番号待ち行列6102の先頭に格納されているコア番号(「コアC1」)で動作する各OSのセマフォ6101の待ち行列に格納されているタスク(「タスク1A」)にリソースを獲得させる。
コア間共有リソースを解放するとき、コア番号待ち行列6102からコア間共有リソースを獲得するコア番号を取得できる。そして、取得したコア番号のコア上のタスクがコア間共有リソースを獲得する。その手順については図16にて後述する。
コア間優先度情報6103は、各コアにそれぞれ優先順位を設定し、コア番号待ち行列6102の待ち順を制御するための情報である。
ロック変数6104は、コア間リソース管理情報610自身を複数コア21間で排他制御するための変数である。ロック変数6104は、セット状態およびリセット状態という二つの状態を持つ。コア21の内のあるコアがロック変数6104をセット状態にした場合、該コアがロック変数をリセット状態にするまで、他コアからは、コア間リソース管理情報610に対してはロック変数6104以外のアクセスが制限される。
コア間共有関数群620は、コア間共有リソースに関する排他制御などの処理を実行するために実行する関数の集まりである。コア間共有関数群620に含まれる関数は、コア間リソース管理情報610とコア間OS管理情報630を利用して排他制御などの処理を実行する。なお、コア間共有関数群620は、RAM41ではなく、ROMなどに予め記憶しておいてもよい。
コア間OS管理情報630は、コア間共有関数群620に含まれる関数においてOSシステムコールを実行するために、各OSのシステムコールポインタ群631を格納するものである。なお、コア間OS管理情報630は、OSシステムコールの登録において複数コアの登録待ちを行うためにウエイト変数632を更に含むものとする。
ウエイト変数632は、各コアが各OSのOSシステムコールをコア間共有メモリ領域601に登録したかどうかの情報を格納できるものである。ウエイト変数632は、たとえばマルチコアプロセッサ2にN個のコアが含まれるとき、各コアにそれぞれ1ビットを割り当てたNビットの2進数などにすればよい。
図8は本実施例における各OSのシステムコールポインタ群631を示したものである。図5に示すOSシステムコールは、後述する図13を用いた処理によりRAM41上にあるコア間共有メモリ領域601に格納される。
各OSのシステムコールポインタ群631には、図5に示すOSシステムコールが格納されているコア間共有メモリ領域601上のアドレスがそれぞれ含まれる。OSセマフォ生成関数ポインタ801は、図5のセマフォ生成関数503をコア間共有メモリ領域601に格納したアドレスである。OSセマフォ獲得関数ポインタ802は、図5のセマフォ獲得関数504をコア間共有メモリ領域601に格納したアドレスである。OSセマフォ解放関数ポインタ803は、図5のセマフォ解放関数505をコア間共有メモリ領域601に格納したアドレスである。OSセマフォ生成関数ポインタ804は、図5のセマフォ生成関数506をコア間共有メモリ領域601に格納したアドレスである。
図9は本実施例におけるコア間共有関数群620を示したものである。コア間共有関数群620には、各コアOSシステムコール登録関数901、リソース管理情報生成関数902、リソース獲得関数903、リソース解放関数904、リソース管理情報削除関数905などがある。
各コアOSシステムコール登録関数901は、各コア上のOSが提供するシステムコールポインタ群631をコア間OS管理情報630に登録するプログラム関数である。各コアOSシステムコール登録関数901の処理の詳細は、図13を用いて後述する。
リソース管理情報生成関数902は、コア間リソース管理情報610をコア間共有メモリ領域601に生成するプログラム関数である。リソース管理情報生成関数902の処理の詳細は、図14を用いて後述する。
リソース獲得関数903は、タスクがコア間リソース管理情報610を参照してコア間共有リソースを獲得するプログラム関数である。リソース獲得関数903の詳細は、図15および図17を用いて後述する。
リソース解放関数904は、タスクがコア間リソース管理情報610を参照してコア間共有リソースを解放するプログラム関数である。リソース解放関数904の詳細は、図16を用いて後述する。
リソース管理情報削除関数905は、コア間リソース管理情報610をコア間共有メモリ領域601から削除するプログラム関数である。
図10(a)は本実施例におけるコア番号待ち行列6102を示したものである。コア番号待ち行列6102は、リソース獲得要求を待っているコア番号をノードとして、前後関係をポインタで指し示すような連結リスト型構造となっている。また、コア番号待ち行列6102には、その先頭および末尾をそれぞれ指し示すポインタHEADとTAILが存在してもよい。ポインタHEADおよびTAILは、コア番号待ち行列6102が空行列のときはNULLとすればよい。コア番号待ち行列6102では、優先順位に従ってコア番号を並び替えられるようにするため、コア番号と共に該コア番号の優先順位に関する情報を格納してもよい。各コア番号の優先順位は、どのコアがコア間共有リソースを優先的に獲得するかを示す。コア番号の優先順位に関する情報は、コア間優先度情報6103に基づいて決定される。
図9のリソース解放関数904によりコア間共有リソースが解放されるとき、解放されたコア間共有リソースを次に獲得するコア番号として、コア番号待ち行列6102における先頭のコア番号を取得する。図10(b)は、図10(a)に示したコア番号待ち行列6102において先頭のコア番号が取得された後の状態を示している。図10(b)では、取得されたコア番号の値をコア番号待ち行列6102から削除する。たとえば、コア番号のノードにつながっているポインタP1およびP2を切り離し、コア番号のノードN1を削除する。そして削除されたコア番号のノードN1につながっていたコア番号のノードN2を待ち行列の先頭とする。
図11は本実施例におけるコア間優先度情報6103の一例を示したものである。コア間優先度情報6103は、待ち順決定方法を示す値61031、各コア番号の優先順位61032、コア優先順位閾値61033を含む。これらのコア間優先度情報6103を用いてコア番号待ち行列6102は優先順位の順番に並び替えることができる。
待ち順決定方法を示す値61031は、コア番号待ち行列6102においてコア番号を並べる方法を決定するものである。待ち順決定方法には、先着順および優先順が含まれ、「コア番号の優先順位がコア優先順位閾値61033以下であれば先着順でそれ以外は優先順」というものや、「コア番号の優先順位がコア優先順位閾値61033より上であれば先着順でそれ以外は優先順」というものなど、先着順と優先順のハイブリッドにするものも想定する。コア優先順位閾値61033は、待ち順決定方法を先着順と優先順のハイブリッドにする場合において、先着順と優先順の境目を示すコア番号の優先順位の閾値を示したものである。
図12は本実施例においてコア間リソース管理情報610を生成するのに必要な初期化手順を示す処理フローの一例である。図12では、マルチコアプロセッサ2において、メインとなるコア21を予め設定し、各コア上で動くOSにおいて初期化を行うタスクを決めておく。図12では、例として、コアC1をメインとするものとする。そして、図12の処理を実行するタスクとして、コアC1ではタスク1、コアC2ではタスク2、コアCNではタスクNが生成・起動されたものとする。
図12のステップS1201では、メインとなるコアC1がタスク1により、各種初期化を行う。各種初期化の内容としては、ハードウェア割込みのクリアやマスキングなどハードウェアの初期化に必要なレジスタ設定や、コア間共有メモリ領域601のゼロクリアなどがある。
次にステップS1202では、タスク1、タスク2、タスクNなど初期化を行うタスクは、各コアOSシステムコール登録関数901を実行し、コア間OS管理情報630に各OSのシステムコールポインタ群631を登録し、コア間共通関数群620に格納されているリソース解放関数904などのコア間共通関数がOSシステムコールを使えるようにする。ステップS1202における処理の詳細については図13を用いて後述する。
最後にステップS1203では、初期化を行うコアC1のタスク1およびコアC1以外の各コアの割込みハンドラがリソース管理情報生成関数902を実行することによりコア間リソース管理情報610を生成する。ステップS1203における処理の詳細については図14を用いて後述する。コア間リソース管理情報610の生成が完了したら図12の処理を終了する。
図13は本実施例における各コアOSシステムコール登録関数901の処理フローの一例を示したものである。図13に示す処理フローは、図12のステップS1202などで実行される。各コアOSシステムコール登録関数901を実行する際、マルチコアプロセッサ2にあるコア21の中から、メインとなるコアを予め設定しておく。図13では、コアC1をメインとし、OSシステムコールを登録するタスクとして、コアC1ではタスク1、コアC2ではタスク2、コアCNではタスクNが生成・起動される。
図13のステップS1301では、タスク1はコア間OS管理情報630のウエイト変数632をゼロクリアする。
次にステップS1302では、タスク1〜Nは、それぞれのOSのOSシステムコールをコア間共有メモリ領域601に格納し、各OSシステムコールを格納したアドレスをシステムコールポインタ群631としてコア間OS管理情報630に登録する。
その後、ステップS1303では、ステップS1302においてシステムコールポインタ群の登録が完了したタスク1、タスク2、タスクNがそれぞれ、ウエイト変数632の各コアに対応したビットに、OSシステムコール登録完了を示す値、たとえば1を書き込む。
その後、ステップS1304では、タスク1、タスク2、タスクNはウエイト変数632の全ビットが書き込まれたかどうかをチェックし、全ビットが全て書き込まれるまでループで待つ。もし全てのビットが書き込まれたらループを抜けて図13の処理を終了する。
図14は本実施例におけるリソース管理情報生成関数902のフローの一例を示したものである。リソース管理情報生成関数902を実行する際、マルチコアプロセッサ2にあるコア21の中から、メインとなるコアを予め設定しておく。図14では、コアC1をメインとし、リソース管理情報生成関数902を実行するタスクに関して、コアC1ではタスク1、コアC2ではタスク2、コアCNではタスクNを設定する。
図14のステップS1401では、タスク1はコア間リソース管理情報610を生成するメモリ領域をコア間共有メモリ領域601に確保する。
次にステップS1402では、コア間リソース管理情報610の初期値設定を行う。コア間リソース管理情報610の初期値設定の詳細については、図19を用いて後述する。コア間リソース管理情報610の初期値設定を行なうとき、ロック変数6104はセットにしておく。これにより、コア間リソース管理情報610の初期値設定を行ったタスク1以外の他のタスクまたはコアからはコア間リソース管理情報610のロック変数6104以外にアクセスできなくなる。
次にステップS1403では、タスク1はコア間割込みを用いて、OSセマフォ生成要求をOS2やOSNの割込みハンドラへ送信する。
次にステップS1404では、タスク1とOS2からOSNの割込みハンドラは、コア間共有メモリ601にOSセマフォ6101を生成する。なお、前述したとおり、ロック変数6104はOSセマフォに関してはアクセスを制限しない。このときOSセマフォ6101のカウンタ値を0にしておく。
OSセマフォ6101を生成したOS2やOSNの割込みハンドラは処理を終了する。そのとき、OS2やOSNは、タスク2やタスクNに制御を移す。
その後、ステップS1405では、タスク1、タスク2、タスクNは、全コアでOSセマフォ6101を生成したかどうかをチェックする。もしいずれかのコアでOSセマフォ6101が生成されていなければ、全コアでOSセマフォ6101が作成されるまでループで待つ。全コアでOSセマフォ6101が作成されたとき、ステップS1405におけるループを抜ける。そして、ステップS1406に進み、タスク1はコア間リソース管理情報610のロック変数6104をリセット状態にして処理を終了する。
図15は本実施例におけるリソース獲得関数903のフローの一例を示したものである。図15では、OS1上においてタスク1Aおよびタスク1Bが起動しており、タスク1Aが実行状態、タスク1Bが実行可能状態にあり、タスク1Aがコア間共有リソースを獲得するものとする。
まず、図15のステップS1501では、タスク1Aはコア間リソースカウンタ6100の値を取得する。そして、ステップS1502では、ステップS1501で取得したコア間リソースカウンタ6100の値が1以上の場合、つまりコア間共有リソースが残っている場合、ステップS1513に遷移し、タスク1Aはコア間リソースカウンタ6100の値をデクリメントし、コア間共有リソースを獲得する。もしステップS1502において、コア間リソースカウンタ6100の値が0である場合、コア間共有リソースが不足していると判断し、ステップS1503に遷移してタスク1Aはコア番号待ち行列6102にコア番号を格納する。
ステップS1503にてコア番号待ち行列6102にコア番号を格納した後、ステップS1504に遷移し、タスク1AはOS1へリソース獲得待ち処理を要求するため、OS1のOSセマフォ獲得関数ポインタ802を参照してセマフォ獲得関数504を実行する。
ステップS1505では、タスク1Aは残数0のOSセマフォ6101を獲得しようとするため、実行状態から待ち状態へ移行する。そして、OS1はステップS1506に遷移する。
ステップS1506では、OS1は実行可能状態にあるタスク1Bを実行状態にする。
図16は本実施例におけるリソース解放関数904の一例を示したものである。リソース解放関数904を実行する際、マルチコアプロセッサ2の中から、メインとなるコア21を予め設定しておく。図18では、コアC1をメインとし、リソース解放関数904を実行するタスクとして、コアC1のOS1上ではタスク1Aおよびタスク1Bが、コアCNのOSN上ではタスクNがそれぞれ生成・起動されている。タスク1Aは実行状態にあり既にコア間共有リソースを獲得しており、該コア間共有リソースを解放するものとする。また、タスク1BおよびタスクNは、コア間共有リソースが獲得されていないため、待ち状態にある。そのため、コア番号待ち行列6102には、タスク1Bを処理しているコアC1のコア番号とタスクNを処理しているコアCNのコア番号が格納されているものとする。
図16のステップS1601では、タスク1Aはコア番号待ち行列6102の状態を取得する。そして、ステップS1602に遷移し、取得したコア番号待ち行列6102の状態に基づいてコア番号待ち行列6102が空であるか否かを判定する。コア番号待ち行列6102の状態とは、たとえば、コア番号待ち行列6102の先頭を指すポインタHEADなどでよく、ステップS1602ではポインタHEADの参照先がNULLか否かを判定すればよい。
ステップS1602において空であると判定された場合は、ステップS1613に遷移し、コア番号待ち行列6102が空でないと判定された場合はステップS1603に遷移する。
ステップS1613では、コア間共有リソースを解放し、該コア間共有リソースに対応するコア間リソースカウンタ6100値をインクリメントして図16の処理を終了する。
ステップS1603では、コア番号待ち行列6102の先頭にあるコア番号を取得する。先頭にあるコア番号の取得は、たとえば、ポインタHEADを参照すればよい。コア番号待ち行列6102の先頭にあるコア番号がコアC1のものである場合は、コア番号「コアC1」を取得する。また同様にコア番号待ち行列6102の先頭にあるコア番号がコアCNのものである場合は、コア番号「コアCN」を取得する。
ステップS1604では、ステップS1603で取得した待ち行列6102の先頭にあるコア番号が自コアのもの(この例ではコアC1)であるとき、ステップS1615に遷移する。一方、待ち行列6102の先頭にあるコア番号が他コアのもの(この例ではコアCN)であるとき、ステップS1605に遷移する。
ステップS1615では、タスク1Aは、OS1のセマフォ解放関数505を実行する。その結果、タスク1Aは、獲得していたコア間共有リソースを解放する。そして、コアC1のOS1は、OS1のセマフォの待ち行列に格納されているタスク1Bを待ち状態から実行状態へ遷移させることにより、実行を再開させる。
ステップS1605では、タスク1Aがコア間割込みを用いて、OSNのセマフォ解放要求をOSNの割込みハンドラへ送信し、タスク1Aは、図16の処理を終了する。
ステップS1606では、OSNの割込みハンドラがOSNのセマフォ解放関数505を実行する。このとき、OSNのセマフォのセマフォカウンタが0であるので、セマフォ解放関数505の処理によりセマフォカウンタがインクリメントされる。そして、OSNは、ステップS1607に遷移し、セマフォカウンタが1となったため、コア間共有リソースを獲得し、タスクNを待ち状態から実行状態へ遷移させる。これにより、タスクNは実行を再開する。
図17は、本実施例においてリソース獲得関数903を実行したときに、他に実行可能状態にあるタスクがない場合の動作を示した処理フローである。本処理フローでは、OS1上においてタスク1Aおよびタスク1Bおよびタスク1Cが起動しており、タスク1Aが実行状態、タスク1Bおよびタスク1Cは待ち状態にある。タスク1Aは、リソース獲得関数903を実行することにより、コア間共有リソースを獲得しようとするものとする。
タスク1Aは、ステップS1505までは図15と同様に処理を進める。ステップS1505において、タスク1Aが実行状態から待ち状態へ移行したとき、コアC1上では他に実行可能状態にあるタスクがないため、OS1は省電力機能405によりコアC1を省電力モードにして図17の処理を完了する。
図18は、コア間リソース管理情報610および複数のタスクの状態の遷移に関するタイムチャートを示したものである。本タイムチャートでは、少なくともコアC1上でOS 1が、コアCN上でOSNが動作しており、OS1上でタスク1Aとタスク1Bが、OSN上でタスクNが、それぞれ動作しているものとする。また、コア間リソースカウンタ6100が1であり、コア間共有リソースがどのタスクからも獲得されていない状態を初期状態とする。更に前述したとおり、各OSのセマフォのセマフォカウンタは、初期状態において0である。更に前述したとおり、OS1セマフォは、OS1セマフォカウンタとOS1セマフォ待ち行列とからなる。同様にOS2セマフォは、OS2セマフォカウンタとOS2セマフォ待ち行列とからなり、OSNセマフォは、OSNセマフォカウンタとOSNセマフォ待ち行列とからなる。そして、各OSのセマフォのセマフォカウンタは、初期状態において0である。
図18では、タスク1A、タスクN、タスク1Bの順にリソース獲得関数903を実行し、コア間共有リソースの獲得を要求する。そして、タスク1A、タスクN、タスク1Bの順にリソース解放関数904を実行し、コア間共有リソースの解放を要求するものとする。
図18の初期状態において、コア間リソースカウンタ6100の値は1、OS1のセマフォカウンタは獲得状態、OSNセマフォカウンタは獲得状態、待ち行列は空である。
まず、タスク1Aが実行状態になり、コア間共有リソースの獲得を要求したとき、コア間リソースカウンタ6100の値が1であるため(図15のステップS1502において「1以上」と判定)、タスク1Aはコア間共有リソースを獲得し、そのコア間リソースカウンタ6100の値をデクリメントし、0にする(図15のステップS1513)。
次に、タスクNが実行状態になり、コア間共有リソースの獲得を要求したとき、コア間リソースカウンタ6100の値が0であるため(図15のステップS1502において「0」と判定)、タスクNはコア間共有リソースを獲得できず、リソース獲得待ちのために待ち状態に遷移し、コア番号待ち行列6102に格納される(図15のステップS1503〜S1505)。このとき、コア番号待ち行列6102は[N]となる。また、OSNのセマフォの待ち行列には、タスクNが入り、[N]となる。
次に、タスク1Bが実行状態になり、コア間共有リソースの獲得を要求したとき、コア間リソースカウンタ6100の値が0であるため、タスクNと同様にタスク1Bはリソース獲得待ちのために待ち状態に遷移し、コア番号待ち行列6102は[N, 1]となる。また、OS1セマフォ待ち行列には、タスク1Bが入り、[1B]となる。
次に、実行状態であるタスク1Aがコア間共有リソースの解放を要求したとき、タスク1Aはコア間共有リソースを解放する。そして、コア番号待ち行列6102が空ではなく(図16のステップS1602 NO判定)、コア番号待ち行列6102の先頭にあるコア番号がコアCNであって他コアであるので(図16のステップS1604 「他コア」判定)、コアCNへOSNのセマフォの解放要求を行う(図16のステップS1605)。そして、OSNの割り込みハンドラによりOSNのセマフォ解放関数505が実行され、OSNセマフォカウンタがインクリメントされ1となり(図16のステップS1606)、OSNによりタスクNがコア間共有リソースを獲得することでOSNのセマフォはデクリメントされ0に戻る。そして、タスクNはリソース獲得のための待ち状態から実行状態へ遷移し(図16のステップS1607)、コア番号待ち行列6102は[1]となる。また、OSNセマフォ待ち行列は空となる。
次に、実行状態であるタスクNがコア間共有リソースの解放を要求したとき、タスクNはコア間共有リソースを解放する。そして、コア番号待ち行列6102が空ではなく(図16のステップS1602 NO判定)、コア番号待ち行列6102の先頭にあるコア番号がコアC1であって他コアであるので(図16のステップS1604 「他コア」判定)、OS1のセマフォカウンタがインクリメントされ1となり(図16のステップS1606)、OS1によりタスク1Bがコア間共有リソースを獲得することでOS1のセマフォはデクリメントされ0に戻る。タスク1Bはリソース獲得待ちのための待ち状態から実行状態へ遷移し(図16のステップS1607)、コア番号待ち行列6102は空となる。また、OS1セマフォ待ち行列は空となる。
次に、実行状態であるタスク1Bがコア間共有リソースの解放を要求したとき、タスク1Bはコア間共有リソースを解放する。そして、そして、コア番号待ち行列6102が空であるので(図16のステップS1602 YES判定)、コア間リソースカウンタ6100の値は0から1へインクリメントされる(図16のステップS1613)。
図19は、図14のステップS1402において実行されるコア間リソース管理情報610の初期値設定に関する処理フローを示したものである。図19の処理フローを実行するタスクは、OS1により生成・起動され、それをタスク1とする。
まずタスク1は、ステップS1901において、ロック変数6104をセット状態にし、他のコアからコア間リソース管理情報610へのアクセスをできないようにする。
次にステップS1902に遷移し、コア間リソースカウンタ6100の値をコア間共有リソースの残数(1以上)に設定する。
次にステップS1903に遷移し、コア番号待ち行列6102を空にする。
最後にステップS1904において、コア間優先度情報6103を設定する。
図20は、図19のステップS1904におけるコア間優先度情報6103の設定に関する処理フローについて一例を示したものである。図20では、OS1がタスク1を生成・起動し、コア間優先度情報6103を図11の形式に設定する。
図20のステップS2001では、タスク1はまずマルチコアプロセッサ2に含まれるコアの数を読み出す。本実施例では、コアの数は予め定められており、タスク1に予め設定されているものとする。
次にステップS2002に遷移し、ステップS2001で読み出したコアの数だけ、各コア番号に対してコア優先順位61032を決定し、コア間リソース管理情報610のコア間優先度情報6103に格納する。本実施例では、各コアのコア優先順位61032は、OS1において予め設定されているものとする。なお、コア優先順位61032の設定値は、コア間共有リソースごとに異なる値であってもよい。
次に、ステップS2003に遷移し、待ち順決定方法61031をコア間リソース管理情報610のコア間優先度情報6103に格納する。本実施例では、待ち順決定方法61031はタスク1に予め設定されているものとする。
次にステップS2004に遷移し、ステップS2403でコア間優先度情報6103に格納した待ち順決定方法61031がコア間優先順位閾値61033を使うものであるか否かを判定する。たとえば、図11のコア間優先度情報6103の場合は、待ち順決定方法61031の値が2以上であれば、コア間優先度情報6103を利用する。コア間優先順位閾値61033を使うと判定された場合は、ステップS2005に遷移し、コア間優先順位閾値61033を使わないと判定された場合は、図20の処理を終了する。
ステップS2005では、コア間優先順位閾値61033をコア間リソース管理情報610のコア間優先度情報6103に格納する。本実施例では、コア間優先順位閾値61033はタスク1に予め設定されているものとする。
図21は図15および図17のステップS1501において、コア間リソースカウンタ6100の値を取得する処理に関する処理フローを示したものである。図21の説明では、OS1により生成・起動されたタスク1がコア間リソースカウンタ6100の値を取得するものとする。
図21では、コア間リソースカウンタ6100を取得する際、取得中にコア間リソースカウンタ6100が変更されることを防ぐため、排他制御を行う。コア間リソースカウンタ6100の取得にかかる処理時間が短いため、ロック変数6104を使ってコア間リソースカウンタ6100値の取得をループで待つこととする。
まず、ステップS2101では、タスク1はコア間リソース管理情報610のロック変数6104の状態を取得し、もしセット状態になっていればリセット状態になるまでループで待つ。ロック変数2104がリセット状態になったとき、ステップS2102に進み、タスク1はロック変数6104をセット状態に設定する。
次にステップS2103に進み、コア間リソースカウンタ6100の値を読み込む。読み込みが完了したらステップS2104に進み、ロック変数6104をリセット状態にし、図21の処理を終了する。
図22は本実施例における、図16のステップS1601において、コア番号待ち行列6102の状態を取得する処理に関する処理フローを示したものである。コア番号待ち行列6102の状態取得においてもロック変数6104を用いる。
まず、ステップS2201では、タスク1はコア間リソース管理情報610のロック変数6104の状態を取得し、もしセット状態になっていればリセット状態になるまでループで待つ。ロック変数6104がリセット状態になったとき、ステップS2202に進み、タスク1はロック変数6104をセット状態に設定する。
次にステップS2203に進み、コア番号待ち行列6102の状態を読み込む。読み込みが完了したらステップS2204に進み、ロック変数6104をリセット状態にし、図22の処理を終了する。
次に、図15および図17のステップS1503において、コア番号待ち行列にコア番号を格納する方法について、図23〜図28の例を用いて説明する。図23は本実施例におけるコア番号待ち行列6102の例を示したものである。図24は本実施例におけるコア間優先度情報6103の例を示したものである。
図25は、本実施例においてコア間優先度情報2403の待ち順決定方法2411の値が0(先着順)である場合に、コア番号待ち行列2302へ新たにコア番号「3」のノードN251を格納するときの処理を示したものである。コア間優先度情報2403の待ち順決定方法2411の値が0(先着順)である場合は、図25のようにコア番号待ち行列2302の末尾にノードN251を格納する。
図26は、待ち順決定方法2411の値が2(コア優先順位閾値2413の値以下は先着順)である場合に、コア番号待ち行列2302へ新たにコア番号を追加するときの処理を示したものである。
コア番号「3」のノードN261のようにコア優先順位がコア優先順位閾値2413以下であるコア番号を格納するときは、先着順と判断され、コア番号待ち行列2302の末尾にノードN261を格納する。
一方、コア番号「5」のノードN262のようにコア優先順位がコア優先順位閾値2413より高いコア番号を格納するときは、コア番号待ち行列2302のコア優先順位に準拠して並んでいる部分へノードN262を格納する。
図27は本実施例においてコア間優先度情報2403の待ち順決定方法2411が1(コア優先順位に準拠)である場合に、コア番号待ち行列2302へ新たにコア番号「3」のノードN271を格納するときの処理を示したものである。図24のコア優先順位2412によれば、コア番号「3」のコア優先順位は2である。コア優先順位が2であるコア番号「3」がコア間共有リソースの獲得待ちになったとき、図27のようにコア優先順位3のコア番号「4」のノードとコア優先順位2のコア番号「3」のノードとの間に新たにコア番号「3」のノードN271を追加で格納する。
図28は本実施例においてコア間優先度情報2403の待ち順決定方法2411が3(コア優先順位閾値2413より上は先着順)である場合に、コア番号待ち行列2302へ新たにコア番号を追加するときの処理を示したものである。
コア番号「3」のようにコア優先順位がコア優先順位閾値2413以下であるコア番号を格納するときは、コア番号待ち行列2302のコア優先順位に準拠して並んでいる部分へコア番号を格納する。
一方、コア番号「5」のようにコア優先順位がコア優先順位閾値2413より高いコア番号を格納するときは、コア番号待ち行列2302の先着順に並んでいる部分の末尾へコア番号を格納する。
図29は、図15および図17のステップS1503において、コア番号待ち行列6102にリソース獲得関数903を実行したコアのコア番号(追加コア番号と呼称する)を格納する方法に関する処理フローを示したものである。
図29のステップS2901では、タスク1は、コア間優先度情報6103を取得する。
ステップS2902では、コア間優先度情報6103に含まれる待ち順決定方法61031が0(先着順)の場合、ステップS2903に進む。待ち順決定方法61031が1(コア優先順位順)の場合は、ステップS2913に進む。待ち順決定方法61031が2(コア優先順位がコア優先順位閾値以下は先着順)の場合は、ステップS2923に進む。待ち順決定方法61031が3(コア優先順位がコア優先順位閾値より上は先着順)の場合は、ステップS2933に進む。
ステップS2903では、タスク1はコア番号待ち行列6102の末尾にコア番号を格納する。その後、図29の処理を終了する。
ステップS2913では、タスク1はコア番号待ち行列6102の中でコア優先順位に準拠して並んでいる部分の要素(図26〜28)について、コア優先順位が追加コア番号のものより高いものを探索する。探索は、コア番号待ち行列6102の末尾から先頭に向かう方向に順番に行う。探索の結果、追加コア番号よりコア優先順位が高いコア番号が存在しなかった場合は、ステップS2915に進む。存在した場合は、ステップS2914に進む。
ステップS2914では、タスク1はステップS2913で探索されたコア番号の直後の位置に追加コア番号を格納する。一方、ステップS2915では、コア優先順位に準拠して並んでいる部分の末尾に追加コア番号を追加する。
ステップS2923では、タスク1は追加コア番号のコア優先順位がコア優先順位閾値61033より低いか否かを判定する。コア優先順位閾値61033より低い場合は、ステップS2903に進み、そうでない場合はステップS2913に遷移する。
ステップS2933では、タスク1は追加コア番号のコア優先順位がコア優先順位閾値61033より高いか否かを判定する。コア優先順位閾値61033より高い場合は、ステップS2934に進み、そうでない場合はステップS2913に進む。
ステップS2934では、タスク1は、コア番号待ち行列6102に含まれるコア番号のコア優先順位がコア優先順位閾値61033より高いか否かを判定し、コア番号待ち行列6102において先着順に並んでいる部分の末尾を探索する。探索はコア番号待ち行列6102の末尾から先頭に向かう順番に実行する。ステップS2934において、コア番号のコア優先順位がコア優先順位閾値61033より高いと判定されたらステップS2914に進む。一方、すべてのコア番号のコア優先順位がコア優先順位閾値61033より低かった場合、コア番号待ち行列6102に先着順で格納されている要素がないため、ステップS2935に遷移し、コア番号待ち行列6102の先頭に格納する。
[従来技術との対比と作用効果]
従来では、図30に示したような構成によりコア間共有リソースに関する排他制御を行ってきた。図30の構成による排他制御方法では、コア間共有メモリ領域3001にロック変数としてコア間リソースカウンタ3010が格納されており、各タスクがこのロック変数を設定したり読み込んだりすることにより排他制御を行う。
そして、従来では図30の構成を用いて、図31に示す処理フローによりリソース獲得を行っていた。図31のステップS3101では、タスク1Aがコア間リソースカウンタ3010の値を読み込む。そして、ステップS3102に遷移し、コア間リソースカウンタ3010の値が1以上であればステップS3103に遷移し、本実施例と同じくコア間リソースカウンタ3010値をデクリメントする。一方、コア間リソースカウンタ3010の値が0であればコア間リソースカウンタ3010の値が1になるまでループし、タスク1AはステップS3102で待つ。そのため、タスク1AがステップS3102で待っている間、実行可能状態にあるタスク1Bが実行状態に遷移しない。このように、コア間共有リソースを獲得するための処理においてコア間共有リソースの獲得待ちになると、従来ではループで待ち続けるため他のタスクが実行できない。
それに対して、本実施例では、コア間共有リソースの残数を表すコア間リソースカウンタ6100と、各OSのセマフォ6101と、コア番号待ち行列6102とを含むコア間リソース管理情報610を備え、コア間リソースカウンタ6100の値を取得し(図15のステップS1501)、取得したコア間リソースカウンタ6100の値に基づいてコア間共有リソースを獲得できるか否かを判定している(ステップS1502)。コア間共有リソースを獲得できると判定された場合は、コア間リソースカウンタ6100の値をデクリメントし(ステップS1513)、獲得できないと判定された場合は、コア番号待ち行列6102にコア番号を格納し(ステップS1503)、タスクを待ち状態にしている(ステップS1504〜S1505)。このようにコア間共有リソースを獲得できなかったとき、コア間リソース管理情報610に基づいて即座に判断してOSがタスクを待ち状態にするため他のタスクが実行でき(図15)、他の実行可能状態にあるタスクがない場合はコア21を省電力モードにすることができる(図17)。したがって本実施例では従来に比べてコンピュータ全体の処理効率が向上し、消費電力も低減できる。
[変形例]
以上の実施形態は、以下のように変形して実施できる。
以上の実施形態におけるコンピュータシステム1では、マルチコアプロセッサ2を用いたが、複数のプロセッサに分かれた形でもよい。図32は本実施例におけるコンピュータシステムのハードウェア構成の別例を示したものである。図32では、図1のマルチコアプロセッサ2の代わりにプロセッサ3201がシステムバスに複数個接続されている。このようにマルチコアプロセッサをマルチプロセッサに置き換えても、リソースであるRAM41とI/O42を各コア3201が共有するという意味でマルチコアプロセッサ自体が密結合マルチプロセッサの一集合であるため、コア間割込み機能の代わりにプロセッサ間割込み機能があれば本発明のコア間排他制御が実現可能である。
図33は本実施例におけるハードウェアおよびソフトウェアの階層の別例を示したものである。本実施例においてはOSが搭載され各OS上でそれぞれアプリが動作するコアもあれば、アプリがOSなしに動作するコア3201もあるものとする。図32のように少なくとも一つのコア3201でOSが動作している場合においても、OSの動くコア3201でコア間共有リソース獲得待ちを行う際に、OSのタスク切り替え機能または省電力機能により、システム効率を向上させ消費電力を低減することが可能である。
以上で説明した実施例は、たとえばナビゲーション装置に適用できる。たとえば、経路探索機能や、マップマッチング機能、2D/3D地図描画機能、車両誘導機能、施設検索機能などのナビゲーション装置の機能それぞれにコア21を割り当て、それぞれがRAM41や表示モニタなどのI/O42を獲得する場合の排他制御に適用できる。
以上で説明した各実施の形態や各種の変形例はあくまで一例であり、発明の特徴が損なわれない限り、本発明はこれらの内容に限定されない。
1 コンピュータシステム
2 マルチコアプロセッサ
3 システムバス
20 プロセッサ内バス
21 コア
41 RAM(コア間共有リソース)
42 I/O(コア間共有リソース)
601 コア間共有メモリ領域
610 コア間リソース管理情報
6100 コア間リソースカウンタ
6101 OSのセマフォ
6102 コア番号待ち行列
6103 コア間優先度情報
6104 ロック変数
620 コア間共有関数群
630 コア間OS管理情報
631 OSのシステムコールポインタ群

Claims (14)

  1. 各々で個別のOSを実行する複数のプロセッサと、前記複数のプロセッサが利用する1または2以上の共有リソースと、各共有リソースにそれぞれ対応する1または2以上の管理情報を記憶する記憶部とを備えたコンピュータシステムであって、
    前記管理情報の各々は、前記複数のプロセッサ上で動作するタスクを管理するOSごとのセマフォと、当該管理情報に対応する共有リソースの獲得を要求したプロセッサを特定するための情報を順番に格納する待ち行列と、当該管理情報に対応する共有リソースを獲得可能な残数を表すリソースカウンタとを含み、
    前記複数のプロセッサの各々は、
    前記タスクの処理のために獲得しようとする共有リソースに対応した管理情報に含まれる前記リソースカウンタの値を取得するカウンタ取得手段と、
    前記カウンタ取得手段により取得した前記リソースカウンタの値に基づいて当該共有リソースを獲得できるか否かを判定する獲得判定手段と、
    前記獲得判定手段により当該共有リソースを獲得できると判定されたときは、当該共有リソースを獲得すると共に対応する管理情報の前記リソースカウンタの値を小さくして、獲得できないと判定されたときは、当該プロセッサを特定するための情報を当該共有リソースに対応する管理情報の前記待ち行列に格納すると共に当該プロセッサが処理しようとしたタスクを待ち状態にするリソース獲得手段とを備えることを特徴とするコンピュータシステム。
  2. 請求項1に記載のコンピュータシステムにおいて、
    前記複数のプロセッサの各々は、
    獲得している前記共有リソースを解放するとき、当該共有リソースの前記待ち行列が空か否かを判定する空行列判定手段と、
    前記空行列判定手段により前記共有リソースの前記待ち行列が空であると判定された場合は、当該共有リソースのリソースカウンタの値を大きくすると共に当該共有リソースを解放し、前記待ち行列が空でないと判定された場合は、その待ち行列に格納されている前記情報によって特定されるプロセッサに当該共有リソースを獲得させると共に当該プロセッサ上のタスクを実行状態にさせるリソース解放手段とを更に備えることを特徴とするコンピュータシステム。
  3. 請求項1に記載のコンピュータシステムにおいて、
    前記複数のプロセッサのうちの少なくとも一つは、
    前記管理情報を生成する管理情報生成手段と、
    前記管理情報生成手段が生成した前記管理情報を前記記憶部に記憶させる管理情報格納手段とを更に備えることを特徴とするコンピュータシステム。
  4. 請求項2に記載のコンピュータシステムにおいて、
    前記複数のプロセッサのうちの少なくとも一つは、
    前記管理情報を生成する管理情報生成手段と、
    前記管理情報生成手段が生成した前記管理情報を前記記憶部に記憶させる管理情報格納手段とを更に備え、
    前記管理情報生成手段は、前記OSごとのセマフォが有するセマフォカウンタをゼロに設定した前記管理情報を生成し、
    前記リソース解放手段は、前記待ち行列が空でないと判定された場合、前記待ち行列に格納されている前記情報によって特定されるプロセッサに対応するセマフォカウンタを増加させることにより、当該プロセッサに前記共有リソースを獲得させると共に当該プロセッサ上のタスクを実行状態にさせることを特徴とするコンピュータシステム。
  5. 請求項1から4のいずれかに記載のコンピュータシステムにおいて、
    前記管理情報は、ロック変数を更に含み、
    前記複数のプロセッサの各々は、
    前記記憶部から前記管理情報を取得するとき、前記ロック変数に基づいて読み込み可能か否かを判定するロック判定手段を更に備え、
    前記カウンタ取得手段は、前記ロック判定手段により読み込み可能と判定されたとき、前記管理情報に含まれる前記リソースカウンタの値を取得することを特徴とするコンピュータシステム。
  6. 請求項2に記載のコンピュータシステムにおいて、
    前記管理情報は、ロック変数を更に含み、
    前記複数のプロセッサの各々は、
    前記記憶部から前記管理情報を取得するとき、前記ロック変数に基づいて読み込み可能か否かを判定するロック判定手段を更に備え、
    前記空行列判定手段は、前記ロック判定手段により読み込み可能と判定されたとき、前記リソース獲得手段により獲得された共有リソースに対応する管理情報において前記待ち行列が空か否かを判定することを特徴とするコンピュータシステム。
  7. 請求項1から6のいずれか一項に記載のコンピュータシステムにおいて、
    前記管理情報は、対応する共有リソースを獲得する優先順位を各プロセッサごとに規定する優先順位情報と、前記リソース獲得手段が前記待ち行列に前記情報を格納する方法を規定する待ち順決定方法情報とを更に含み、
    前記リソース獲得手段は、前記待ち順決定方法情報および前記優先順位情報に基づいて、前記情報を格納する前記待ち行列の位置を決定することを特徴とするコンピュータシステム。
  8. 請求項7に記載のコンピュータシステムにおいて、
    前記リソース獲得手段は、前記待ち順決定方法情報および前記優先順位情報に基づいて、前記待ち行列に前記情報を先着順または前記優先順位に応じた順番に格納することを特徴とするコンピュータシステム。
  9. 請求項7に記載のコンピュータシステムにおいて、
    前記管理情報は、所定の優先順位閾値を更に含み、
    前記リソース獲得手段は、前記待ち順決定方法情報と、前記優先順位情報と、前記優先順位閾値とに基づいて、前記情報を格納する前記待ち行列の位置を決定することを特徴とするコンピュータシステム。
  10. 請求項9に記載のコンピュータシステムにおいて、
    前記リソース獲得手段は、前記待ち順決定方法情報と、前記優先順位情報と、前記優先順位閾値とに基づいて、前記待ち行列に前記情報を先着順または前記優先順位に応じた順番に格納することを特徴とするコンピュータシステム。
  11. 請求項1から10のいずれか一項に記載のコンピュータシステムにおいて、
    前記記憶部は、前記複数のプロセッサ間で共通にアクセス可能なOSシステムコールと、前記OSシステムコールの位置を表すメモリアドレスとを更に記憶し、
    前記プロセッサは、前記メモリアドレスに基づいて、前記OSシステムコールを実行することを特徴とするコンピュータシステム。
  12. 請求項1に記載のコンピュータシステムにおいて実行されるプログラムであって、
    前記複数のプロセッサの各々を、前記カウンタ取得手段と、前記獲得判定手段と、前記リソース獲得手段として機能させることを特徴とするプログラム。
  13. 請求項2に記載のコンピュータシステムにおいて実行されるプログラムであって、
    前記複数のプロセッサの各々を、前記カウンタ取得手段と、前記獲得判定手段と、前記リソース獲得手段と、前記待ち行列情報取得手段と、前記空行列判定手段と、前記リソース解放手段として機能させることを特徴とするプログラム。
  14. 請求項3に記載のコンピュータシステムにおいて実行されるプログラムであって、
    前記複数のプロセッサの各々を、前記カウンタ取得手段と、前記獲得判定手段と、前記リソース獲得手段と、前記待ち行列情報取得手段と、前記空行列判定手段と、前記リソース解放手段と、前記管理情報生成手段と、前記管理情報格納手段として機能させることを特徴とするプログラム。
JP2010102612A 2010-04-27 2010-04-27 コンピュータシステムとプログラム Pending JP2011232956A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010102612A JP2011232956A (ja) 2010-04-27 2010-04-27 コンピュータシステムとプログラム
US13/094,306 US20110265093A1 (en) 2010-04-27 2011-04-26 Computer System and Program Product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010102612A JP2011232956A (ja) 2010-04-27 2010-04-27 コンピュータシステムとプログラム

Publications (1)

Publication Number Publication Date
JP2011232956A true JP2011232956A (ja) 2011-11-17

Family

ID=44816890

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010102612A Pending JP2011232956A (ja) 2010-04-27 2010-04-27 コンピュータシステムとプログラム

Country Status (2)

Country Link
US (1) US20110265093A1 (ja)
JP (1) JP2011232956A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016512361A (ja) * 2013-03-13 2016-04-25 クアルコム,インコーポレイテッド デュアルホスト組込み共有デバイスコントローラ
EP3176702A1 (en) 2015-12-02 2017-06-07 Renesas Electronics Corporation Semiconductor device and control method of semiconductor device
CN109815087A (zh) * 2019-01-07 2019-05-28 平安科技(深圳)有限公司 任务处理进程监控方法、装置、计算机设备和存储介质
JP2021060707A (ja) * 2019-10-04 2021-04-15 イーソル株式会社 同期制御システムおよび同期制御方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9128786B2 (en) * 2011-11-22 2015-09-08 Futurewei Technologies, Inc. System and method for implementing shared locks between kernel and user space for synchronize access without using a system call to the kernel
WO2013165349A1 (en) * 2012-04-30 2013-11-07 Hewlett Packard Development Company, L.P. Processor providing multiple system images
WO2014118918A1 (ja) * 2013-01-30 2014-08-07 三菱電機株式会社 数値制御装置
KR102285749B1 (ko) 2014-11-10 2021-08-05 삼성전자주식회사 세마포어 기능을 갖는 시스템 온 칩 및 그것의 세마포어 구현 방법
CN106648939A (zh) * 2016-12-30 2017-05-10 上海寰视网络科技有限公司 用于进程间资源共享的方法与设备
EP3756092A4 (en) * 2018-05-04 2021-04-14 Samsung Electronics Co., Ltd. APPARATUS AND METHOD FOR MANAGING A SHARED RESOURCE IN A MULTI-CORE PROCESSOR
CN109542617A (zh) * 2018-10-30 2019-03-29 精硕科技(北京)股份有限公司 系统资源的处理方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11203253A (ja) * 1998-01-09 1999-07-30 Matsushita Electric Ind Co Ltd 共有資源排他アクセス制御方式
JP2005309661A (ja) * 2004-04-20 2005-11-04 Yaskawa Electric Corp 送信キュー管理方法
JP2007047866A (ja) * 2005-08-05 2007-02-22 Mitsubishi Electric Corp リアルタイム組込み簡易モニタプログラム
JP2007179190A (ja) * 2005-12-27 2007-07-12 Mitsubishi Electric Corp セマフォ管理方法、およびセマフォ管理プログラム
JP2009098907A (ja) * 2007-10-16 2009-05-07 Toshiba Corp デバッグ装置及びデバッグ方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6760840B1 (en) * 1994-03-15 2004-07-06 Kabushiki Kaisha Toshiba File editing system and shared file editing system with file content secrecy, file version management, and asynchronous editing
US20090006402A1 (en) * 2007-06-28 2009-01-01 Holger Bohle Methods and systems for the dynamic selection of a locking strategy
US8146091B2 (en) * 2008-05-01 2012-03-27 International Business Machines Corporation Expansion and contraction of logical partitions on virtualized hardware
US8707315B2 (en) * 2008-07-31 2014-04-22 Wind River Systems, Inc. Method and system for implementing realtime spinlocks
US8341643B2 (en) * 2010-03-29 2012-12-25 International Business Machines Corporation Protecting shared resources using shared memory and sockets

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11203253A (ja) * 1998-01-09 1999-07-30 Matsushita Electric Ind Co Ltd 共有資源排他アクセス制御方式
JP2005309661A (ja) * 2004-04-20 2005-11-04 Yaskawa Electric Corp 送信キュー管理方法
JP2007047866A (ja) * 2005-08-05 2007-02-22 Mitsubishi Electric Corp リアルタイム組込み簡易モニタプログラム
JP2007179190A (ja) * 2005-12-27 2007-07-12 Mitsubishi Electric Corp セマフォ管理方法、およびセマフォ管理プログラム
JP2009098907A (ja) * 2007-10-16 2009-05-07 Toshiba Corp デバッグ装置及びデバッグ方法

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016512361A (ja) * 2013-03-13 2016-04-25 クアルコム,インコーポレイテッド デュアルホスト組込み共有デバイスコントローラ
EP3176702A1 (en) 2015-12-02 2017-06-07 Renesas Electronics Corporation Semiconductor device and control method of semiconductor device
US10191872B2 (en) 2015-12-02 2019-01-29 Renesas Electronics Corporation Semiconductor device and control method of semiconductor device
US10642768B2 (en) 2015-12-02 2020-05-05 Renesas Electronics Corporation Semiconductor device and control method of semiconductor device
CN109815087A (zh) * 2019-01-07 2019-05-28 平安科技(深圳)有限公司 任务处理进程监控方法、装置、计算机设备和存储介质
CN109815087B (zh) * 2019-01-07 2022-05-20 平安科技(深圳)有限公司 任务处理进程监控方法、装置、计算机设备和存储介质
JP2021060707A (ja) * 2019-10-04 2021-04-15 イーソル株式会社 同期制御システムおよび同期制御方法
JP7054688B2 (ja) 2019-10-04 2022-04-14 イーソル株式会社 同期制御システムおよび同期制御方法
JP2022079764A (ja) * 2019-10-04 2022-05-26 イーソル株式会社 同期制御システムおよび同期制御方法
JP7346649B2 (ja) 2019-10-04 2023-09-19 イーソル株式会社 同期制御システムおよび同期制御方法

Also Published As

Publication number Publication date
US20110265093A1 (en) 2011-10-27

Similar Documents

Publication Publication Date Title
JP2011232956A (ja) コンピュータシステムとプログラム
JP6897574B2 (ja) アクセラレータ制御装置、アクセラレータ制御方法およびプログラム
CN100481014C (zh) 用于信息处理的系统和方法
CN103559014B (zh) 用于处理嵌套流事件的方法和系统
US9367459B2 (en) Scheduling method and multi-core processor system
US8418181B1 (en) Managing program execution based on data storage location
US8117615B2 (en) Facilitating intra-node data transfer in collective communications, and methods therefor
US8171267B2 (en) Method and apparatus for migrating task in multi-processor system
WO2019218708A1 (zh) 一种任务处理方法及处理装置、计算机系统
JP2012104140A (ja) 待機状態にあるプロセッサ実行リソースの共有
CN102027452A (zh) 调度器中的调度集合
JP2010079622A (ja) マルチコアプロセッサシステム、および、そのタスク制御方法
KR101150661B1 (ko) 정보 처리 장치 및 메모리 영역 관리 방법
JP2004171234A (ja) マルチプロセッサシステムにおけるタスク割り付け方法、タスク割り付けプログラム及びマルチプロセッサシステム
KR20210057184A (ko) 이종 cpu/gpu 시스템에서 데이터 흐름 신호 처리 애플리케이션 가속화
KR102334511B1 (ko) 작업 의존성 관리
JP2003030050A (ja) マルチスレッド実行方法及び並列プロセッサシステム
CN107329822B (zh) 面向多源多核系统的基于超任务网的多核调度方法
JP2018528515A (ja) 効率的な並列コンピューティングのための簡略化されたタスクベースランタイムのための方法
JP2007188523A (ja) タスク実行方法およびマルチプロセッサシステム
CN102047217A (zh) 重新获取对执行外部执行上下文的处理资源的控制
US20080134187A1 (en) Hardware scheduled smp architectures
Al-Bayati et al. Partitioning and selection of data consistency mechanisms for multicore real-time systems
Al-Bayati et al. Task placement and selection of data consistency mechanisms for real-time multicore applications
CN101847128A (zh) 管理tlb的方法和装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131112

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140109

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140430