(57)【要約】【課題】マルチレイヤバス構成を採用する半導体装置において、処理の競合を抑制する技術を提供する。【解決手段】マルチレイヤバス構成を採用する半導体装置は、各バスマスタから各メモリへのアクセスを制御するための制御装置と、各メモリに含まれる記憶領域を識別する識別情報と記憶領域が属するグループとの対応関係を記憶するための記憶装置とを備え、制御装置は、グループの指定を含む記憶領域の確保命令に基づいて、記憶装置に格納される対応関係から命令で指定されたグループと識別情報との対応関係を参照して、指定されたグループに属する１以上の記憶領域を特定し、特定した記憶領域の使用状況に基づいて、バスマスタによって使用される記憶領域を確保し、確保された記憶領域にアクセスするための情報を命令に対応するバスマスタに出力する。【選択図】図７
2019057071.tif 000002
【特許請求の範囲】
【請求項１】
複数のバスマスタと、
複数のバスとを備え、各前記バスは各前記バスマスタにそれぞれ接続されており、
複数のメモリをさらに備え、各前記メモリは、
前記複数のバスの少なくともいずれかに接続されており、
少なくとも１以上の記憶領域を含み、
各前記バスマスタから、当該バスマスタに接続されている前記バスを介した前記複数のメモリのいずれかへのアクセスを制御するための制御装置と、
各前記記憶領域を識別する識別情報と当該記憶領域が属するグループとの対応関係を記憶するための記憶装置とをさらに備え、
前記制御装置は、
各前記記憶領域の使用状況を検出し、
前記複数のバスマスタのいずれかによって使用される記憶領域を前記複数の記憶領域のいずれかから確保する命令に基づいて、前記対応関係から前記命令で指定されたグループと前記識別情報との対応関係を参照して、前記複数の記憶領域の中から前記指定されたグループに属する１以上の記憶領域を特定し、
前記検出された使用状況に基づいて、前記特定された１以上の記憶領域の中から前記使用される記憶領域を確保し、
前記確保された記憶領域にアクセスするための情報を前記命令に対応する前記バスマスタに出力する、半導体装置。
【請求項２】
前記制御装置は、
前記使用状況として、複数の前記記憶領域の各々について、前記識別情報を指定する処理によって使用されているか否か、および前記グループを指定する処理によって使用されているか否か検出し、
前記検出された使用状況に基づいて前記使用される記憶領域を確保する場合に、前記特定された１以上の記憶領域の中から、前記グループを指定する処理によって使用されていない記憶領域を抽出し、前記抽出した記憶領域の中から前記使用される記憶領域を確保するように構成される、請求項１に記載の半導体装置。
【請求項３】
前記制御装置は、
前記使用状況として、複数の前記記憶領域の各々について、前記識別情報を指定する処理によって使用されているか否か、および前記グループを指定する処理によって使用されているか否か検出し、
前記検出された使用状況に基づいて前記使用される記憶領域を確保する場合に、前記特定された１以上の記憶領域の中から、前記グループを指定する処理および前記識別情報を指定する処理によって使用されていない記憶領域を抽出し、前記抽出した記憶領域の中から前記使用される記憶領域を確保するように構成される、請求項１に記載の半導体装置。
【請求項４】
前記制御装置は、前記抽出した１以上の記憶領域が全て前記識別情報を指定する処理によって使用されている場合、当該１以上の記憶領域の中から前記識別情報を指定する処理によって使用されている数が最も少ない記憶領域を特定し、当該特定した記憶領域の中から前記使用される記憶領域を確保するように構成される、請求項２に記載の半導体装置。
【請求項５】
前記制御装置は、前記特定された１以上の記憶領域の中に前記グループを指定する処理によって使用されていない記憶領域が存在しない場合に、前記特定された１以上の記憶領域の中から、前記グループを指定する処理によって使用されている数が最も少ない記憶領域を抽出し、前記抽出した記憶領域の中から前記使用される記憶領域を確保するように構成される、請求項２に記載の半導体装置。
【請求項６】
前記制御装置は、前記グループを指定する処理によって使用されている数が最も少ない複数の記憶領域が存在する場合に、当該複数の記憶領域の中から、前記識別情報を指定する処理によって使用されている数が最も少ない記憶領域を抽出し、前記抽出した記憶領域の中から前記使用される記憶領域を確保するように構成される、請求項５に記載の半導体装置。
【請求項７】
前記識別情報は、各前記メモリを識別する情報を含む、請求項１に記載の半導体装置。
【請求項８】
前記記憶装置は、各前記記憶領域を識別する識別情報と、当該記憶領域が属するグループと、各前記メモリを識別する識別情報との対応関係を記憶しており、
前記制御装置は、前記検出された使用状況に基づいて前記使用される記憶領域を確保する場合に、前記検出された使用状況と前記対応関係とから検出される各前記メモリの使用状況に基づいて、前記特定された１以上の記憶領域の中から前記使用される記憶領域を確保するように構成される、請求項１に記載の半導体装置。
【請求項９】
複数のバスマスタと、
複数のバスとを備え、各前記バスは各前記バスマスタにそれぞれ接続されており、
複数のメモリをさらに備え、各前記メモリは前記複数のバスの少なくともいずれかに接続されており、
各前記バスマスタから、当該バスマスタに接続されている前記バスを介した前記複数のメモリのいずれかへのアクセスを制御するための制御装置と、
各前記メモリを識別する識別情報と、各前記メモリが属するグループとの対応関係を記憶するための記憶装置とをさらに備え、
前記制御装置は、
各前記メモリの使用状況を検出し、
前記複数のバスマスタのいずれかによって使用される記憶領域を前記複数のメモリのいずれかから確保する命令に基づいて、前記対応関係から前記命令で指定されたグループと前記識別情報との対応関係を参照して、前記複数のメモリの中から前記指定されたグループに属する１以上のメモリを特定し、
前記検出された使用状況に基づいて、前記特定された１以上のメモリの中から前記使用される記憶領域を確保し、
前記確保された記憶領域にアクセスするための情報を前記命令に対応する前記バスマスタに出力する、半導体装置。
【請求項１０】
マルチレイヤバス構成を採用する半導体装置の制御装置によって実行されるプログラムであって、
前記半導体装置は、複数のバスマスタと複数のメモリとを備え、
各前記メモリは、少なくとも１以上の記憶領域を含み、
前記半導体装置は、各前記記憶領域を識別する識別情報と当該記憶領域が属するグループとの対応関係を記憶するための記憶装置をさらに備え、
前記プログラムは前記制御装置に、
各前記記憶領域の使用状況を検出するステップと、
前記複数のバスマスタのいずれかによって使用される記憶領域を前記複数の記憶領域のいずれかから確保する命令に基づいて、前記対応関係から前記命令で指定されたグループと前記識別情報との対応関係を参照して、前記複数の記憶領域の中から前記指定されたグループに属する１以上の記憶領域を特定するステップと、
前記検出された使用状況に基づいて、前記特定された１以上の記憶領域の中から前記使用される記憶領域を確保するステップとを実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、半導体装置に関し、より特定的には、マルチレイヤバス構成を採用する半導体装置に関する。
【背景技術】
【０００２】
近年、半導体製造技術の向上に伴い半導体集積回路が微細化され、プロセッサコアと複数の機能ブロックとが同一チップに搭載されるシステムオンチップ化が進展している。システムオンチップは主に、機能ごとに複数のバスを予め設けるマルチレイヤバス構成を採用されている。このバス構成によれば、複数のバスマスタが異なるバススレーブに同時にアクセスできる。
【０００３】
マルチレイヤバス構成を採用する半導体装置に関し、例えば、特開平１０−２２８４１３号公報（特許文献１）は、「マスタがメモリにリード／ライトするデータを複数のメモリバンクの各々に設けたマスタごとのバッファを経由させ、メモリバンクに関するバッファのアクセスの競合を調停手段で調停する」装置を開示している（［要約］参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−２２８４１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
基本的に、バスマスタからメモリ（バススレーブ）へのアクセスは、予めソフトウェア開発者によって設計されている。開発者は複数のバスマスタが同じメモリへ同じタイミングでアクセスしないように（競合しないように）、ソフトウェアを設計する。その理由は、競合した処理（タスク）に要する時間が長くなってしまうためである。しかしながら、複数の処理が競合しないようにソフトウェアを設計するのは難しい場合がある。そのため、ある局面において、処理の競合が生じないようにする技術が必要とされている。
【０００６】
また、開発者は処理の競合が生じないように、いずれのメモリを用いて処理（タスク）を行なうかを考えながらソフトウェアを開発しなければならないため、効率よくソフトウェアを開発することが難しい。そのため、ある局面において、開発者がソフトウェア開発を容易に行なうことができる技術が必要とされている。
【０００７】
本開示は、上記のような問題を解決するためになされたものであって、ある局面における目的は、マルチレイヤバス構成を採用する半導体装置における処理の競合を抑制する技術を提供することである。
【０００８】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
ある実施形態に従う半導体装置は、複数のバスマスタと、複数のバスとを備える。各バスは各バスマスタにそれぞれ接続されている。半導体装置は、複数のメモリをさらに備える。各メモリは、複数のバスの少なくともいずれかに接続されており、少なくとも１以上の記憶領域を含む。半導体装置は、各バスマスタから当該バスマスタに接続されているバスを介した複数のメモリのいずれかへのアクセスを制御するための制御装置と、各記憶領域を識別する識別情報と当該記憶領域が属するグループとの対応関係を記憶するための記憶装置とをさらに備える。制御装置は、各記憶領域の使用状況を検出し、複数のバスマスタのいずれかによって使用される記憶領域を複数の記憶領域のいずれかから確保する命令に基づいて、対応関係から命令で指定されたグループと識別情報との対応関係を参照して、複数の記憶領域の中から指定されたグループに属する１以上の記憶領域を特定し、検出された使用状況に基づいて、特定された１以上の記憶領域の中から使用される記憶領域を確保し、確保された記憶領域にアクセスするための情報を命令に対応するバスマスタに出力する。
【発明の効果】
【００１０】
ある実施形態に従う半導体装置は、異なるバスマスタが同時に同じメモリにアクセスしようとすること（競合）を抑制し得る。
【図面の簡単な説明】
【００１１】
【図１】関連技術に従う半導体装置の構成を表す図である。
【図２】関連技術に従う管理テーブルのデータ構造を表す。
【図３】関連技術に従う半導体装置が処理領域を確保する処理を表すフローチャートである。
【図４】関連技術に従うリアルタイムオペレーティングシステムのタスクスケジューリングを表す図である。
【図５】実施形態１に従う半導体装置の構成を表す図である。
【図６】実施形態１に従う管理テーブルのデータ構造の一例を表す。
【図７】実施形態１に従う半導体装置が処理領域を確保する処理を表すフローチャートである。
【図８】ある局面に従う管理テーブルの使用状況を表す図である。
【図９】実施形態１に従うリアルタイムオペレーティングシステムのタスクスケジューリングを表す図である。
【図１０】実施形態２に従う半導体装置の構成を表す図である。
【図１１】実施形態２に従う管理テーブルのデータ構造の一例を表す。
【図１２】実施形態２に従う半導体装置が処理領域を確保する処理を表すフローチャートである。
【図１３】ある局面に従う管理テーブルの使用状況を表す図である。
【図１４】変形例１に従う半導体装置の構成を説明する図である。
【図１５】変形例１に従う管理テーブルのデータ構造の一例を表す。
【図１６】実施形態３に従う半導体装置の構成を表す図である。
【図１７】実施形態３に従う管理テーブルのデータ構造の一例を表す。
【図１８】実施形態３に従う半導体装置が処理領域を確保する処理を表すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、この技術的思想の実施形態について図面を参照しながら詳細に説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。なお、以下で説明される各実施形態および各変形例は、適宜選択的に組み合わされてもよい。
【００１３】
まず、関連技術に従う半導体装置の構成および課題について説明し、その上で当該課題を解決し得る実施形態に従う半導体装置について説明する。
【００１４】
［関連技術］
（半導体装置１００Ｘの構成）
図１は、関連技術に従う半導体装置１００Ｘの構成を表す図である。図１を参照して、半導体装置１００Ｘは、装置の全体的な動作を制御する制御装置として機能するＣＰＵ（Central  Processing  Unit）１１０と、バスマスタとして機能するマスタ１２１〜１２３とを有する。ＣＰＵ１１０と各マスタ１２１〜１２３とは、バス１３０を介して接続されている。
【００１５】
マスタ１２１〜１２３は、例えば、ＤＭＡＣ（Direct  Memory  Access  Controller）又は他のＣＰＵであり得る。
【００１６】
半導体装置１００Ｘはさらに、複数のバス１３１〜１３３を有する。各バス１３１〜１３３は、各マスタ１２１〜１２３にそれぞれ接続されている。具体的には、マスタ１２１はバス１３１に、マスタ１２２はバス１３２に、マスタ１２３はバス１３３にそれぞれ接続されている。
【００１７】
バス１３１〜１３３の各々は、マルチプレクサ１４１〜１４５に接続されている。各マルチプレクサ１４１〜１４５は、バススレーブとして機能する各メモリ１５１〜１５５にそれぞれ接続されている。また、バス１３１〜１３３は、バスアービタ１７１〜１７３にて制御されている。バスアービタ１７１〜１７３は、各マスタ１２１〜１２３からのアクセス要求を識別しメモリ１５１〜１５５のどのメモリに対してアクセス要求を行うかを決定する。
【００１８】
各マルチプレクサ１４１〜１４５は、バス１３１〜１３３からのアクセス要求に基づいて、いずれか一つのバスと対応するメモリとを電気的に接続するようにバスを選択する。各マルチプレクサ１４１〜１４５は、同時に複数のバスからアクセス要求を受け付けた場合には、マルチプレクサ内の優先順位に基づいて、いずれか一つのバスを選択しバスと対応するメモリとを電気的に接続する。各マルチプレクサ１４１〜１４５は、選択しているバスのアクセスが完了した場合には、マルチプレクサ内の優先順位に基づいて次のバスを選択し、アクセス要求のあるバスを順次切り替えてバスと対応するメモリとを電気的に接続する。
【００１９】
メモリ１５１〜１５５は例えば、ＣＤ（Compact  Disk）やＤＶＤ（Digital  Versatile  Disc）、ＨＤＤ（Hard  Disk  Drive）などの大容量ストレージデバイス、ＣＰＵが実行するプログラムの格納やプログラム実行時のワーク領域として用いられるＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）、フラッシュ・メモリなどのメモリデバイスであり得る。
【００２０】
上記の例では、各メモリ１５１〜１５５は、マルチプレクサを介してバス１３１〜１３３の各々に接続されているが、他の局面において、バス１３１〜１３３の少なくともいずれかに接続されていればよい。また、各メモリ１５１〜１５５は、少なくとも１以上の候補領域を含む。候補領域は、メモリの全記憶領域のうち、複数のマスタ１２１〜１２３のいずれかによって使用される可能性のある領域である。以下、候補領域のうち、複数のマスタ１２１〜１２３のいずれかによって使用される領域を「処理領域」と言う。つまり、処理領域は候補領域に属し、候補領域はメモリの全記憶領域に属する。
【００２１】
上記のように、半導体装置１００Ｘのマスタ１２１〜１２３には互いに異なるバス１３１〜１３３が接続されており、これらの各バス１３１〜１３３には、メモリ１５１〜１５５が接続されている。半導体装置１００Ｘはこのようなマルチレイヤバス構成を採用することにより、複数のマスタ（バスマスタ）が異なるメモリ（バススレーブ）に同時にアクセスできる。
【００２２】
半導体装置１００Ｘはさらに記憶装置１６０を有する。記憶装置１６０は、アプリケーションプログラム（以下、単に「アプリ」とも言う）１６１Ｘと、リアルタイムオペレーティングシステムＯＳ１６２Ｘと、管理テーブル１６４Ｘとを保持している。以下、リアルタイムオペレーティングシステムを単に「ＯＳ」とも言う。アプリ１６１Ｘは、ＯＳ１６２Ｘ上で動作する。また、アプリ１６１Ｘは、複数の処理（タスク）を実現するための命令を含む。ＣＰＵ１１０は、記憶装置１６０にアクセス可能に構成される。なお、他の局面において、制御プログラム１６２Ｘおよび管理テーブル１６４Ｘは、メモリ１５１〜１５５のいずれかに格納されていてもよい。係る場合、半導体装置１００Ｘは、記憶装置１６０を有さなくともよい。
【００２３】
ある局面において、アプリ１６１Ｘは、マスタがタスクを実行するために必要な処理領域を確保する命令（システムコール）をＯＳ１６２Ｘ（のカーネル）に通知する。ＯＳ１６２Ｘは、システムコールに応じて、複数の候補領域のいずれかから処理領域を確保する。ＯＳ１６２Ｘは、確保された処理領域にアクセスするための情報（例えば、アドレス）をアプリ１６１Ｘに出力する。アプリ１６１Ｘは、マスタ１２１〜１２３のうちシステムコールに対応するマスタ（つまり、タスクを実行するマスタ）に対して当該アドレスを出力する。当該マスタは、入力されたアドレスに基づいて処理領域にアクセスし、当該処理領域を使用してタスクを実行する。
【００２４】
上記のようにＣＰＵ１１０は、ＯＳ１６２Ｘを実行することにより、各マスタ１２１〜１２３から当該マスタに接続されているバスを介した複数のメモリ１５１〜１５５のいずれかへのアクセスを制御する制御装置として機能する。
【００２５】
（関連技術に従うＯＳ１６２Ｘが処理領域を確保する処理）
次に、図２および図３を用いてＯＳ１６２Ｘが処理領域を確保する処理をより具体的に説明する。
【００２６】
図２は、関連技術に従う管理テーブル１６４Ｘのデータ構造を表す。図２を参照して、管理テーブル１６４Ｘは、複数の候補領域の各々を識別するＩＤと、当該候補領域のアドレスと、当該候補領域の使用状況と、の対応関係を保持している。使用状況は、対応する候補領域を使用しているタスクを識別する情報と、当該タスクによって使用されている処理領域のアドレスとを含む。
【００２７】
図１および図２に示される例において、ＩＤ「１」の候補領域と、ＩＤ「６」の候補領域とはメモリ１５１に属する。ＩＤ「２」の候補領域はメモリ１５２に属する。ＩＤ「３」の候補領域はメモリ１５３に属する。ＩＤ「４」の候補領域はメモリ１５４に属する。ＩＤ「５」の候補領域はメモリ１５５に属する。また、図２に示される例において、ＩＤ「１」の候補領域は、タスク１とタスク２によって使用されている。
【００２８】
図３は、関連技術に従う半導体装置１００Ｘが処理領域を確保する処理を表すフローチャートである。図３に示される各処理は、ＣＰＵ１１０がＯＳ１６２Ｘ又はアプリ１６１Ｘを実行することにより実現される。
【００２９】
ある局面においてアプリ１６１Ｘは、タスクを実行するにあたり、複数のマスタ１２１〜１２３のいずれかによって使用される処理領域を確保する命令（システムコール）をＯＳ１６２Ｘに通知する。より具体的には、アプリ１６１Ｘの各タスクには、候補領域を識別するＩＤが設定されている。アプリ１６１Ｘは、タスクに設定されているＩＤを含むシステムコールをＯＳ１６２Ｘに通知する。ＯＳ１６２Ｘは、アプリ１６１Ｘからシステムコールを受け付けたことに応じて（ステップＳ３１０でＹＥＳ）、ステップＳ３２０の処理を実行する。
【００３０】
ステップＳ３２０において、ＯＳ１６２Ｘは、指定されたＩＤ（システムコールに含まれるＩＤ）に対応する候補領域が十分に空いているか否かを判断する。より具体的には、ＯＳ１６２Ｘを実行するＣＰＵ１１０は、管理テーブル１６４Ｘを参照して、指定されたＩＤに対応する候補領域の使用状況に基づいて、当該候補領域のうちタスクによって使用されていない記憶領域の容量（空き容量）を算出する。ＣＰＵ１１０は、算出した空き容量がタスクを実行するのに必要な記憶領域の容量以上である場合に、指定されたＩＤに対応する候補領域が十分に空いていると判断する。
【００３１】
ＯＳ１６２Ｘは、指定されたＩＤに対応する候補領域が十分に空いていると判断した場合（ステップＳ３２０でＹＥＳ）、空いている記憶領域の中から処理領域を確保する。ＯＳ１６２Ｘはさらに、管理テーブル１６４Ｘの使用状況に確保した処理領域の情報を登録する。
【００３２】
一方、ＯＳ１６２Ｘは、指定されたＩＤに対応する候補領域が十分に空いていないと判断した場合（ステップＳ３２０でＮＯ）、指定されたＩＤに対応する候補領域が十分に空くまで待機する。
【００３３】
ステップＳ３４０において、ＯＳ１６２Ｘは、確保した処理領域のアドレスをアプリ１６１Ｘに出力する。アプリ１６１Ｘは、複数のマスタ１２１〜１２３のうちステップＳ３１０の命令（システムコール）に対応するマスタ（つまり、タスクの実行主体）に当該アドレスを出力する。これにより、マスタは、確保された処理領域を使用してタスクを実行する。
【００３４】
アプリ１６１Ｘは、マスタによるタスク（処理）が終了すると、その旨をＯＳ１６２Ｘに通知する。ＯＳ１６２Ｘは当該通知に応じて、確保していた処理領域を解放する。ＯＳ１６２Ｘはさらに、管理テーブル１６４Ｘの使用状況から解放した処理領域の情報を削除する。
【００３５】
（関連技術に従う半導体装置１００Ｘにおいて生じ得る競合）
上記のように関連技術に従うＯＳ１６２Ｘは、タスクごとに予め設定されているＩＤに対応する候補領域から処理領域を確保する。このＩＤは、アプリ１６１Ｘの開発者がタスクごとに予め設定する。より具体的には、アプリ１６１Ｘの開発者は、１つのメモリが複数のタスクによって使用されないように、タスクごとにＩＤを設定する。しかし、場合によってはタスクごとのＩＤが適切に設定されないこともある。
【００３６】
図４は、関連技術に従うＯＳ１６２Ｘのタスクスケジューリングを表す図である。図４を参照して、ＯＳ１６２Ｘは、時刻Ｔ１〜時刻Ｔ３において、マスタ１２１がタスク１を実行するために必要な記憶領域として、ＩＤ「１」およびＩＤ「２」の候補領域（に属する処理領域）を確保する。なお、２つの候補領域を確保する理由は、パイプライン処理を実現するためであって、必ずしも複数の候補領域を確保する必要はない。
【００３７】
ＯＳ１６２Ｘは、時刻Ｔ２〜時刻Ｔ５において、マスタ１２２がタスク２を実行するために必要な記憶領域として、ＩＤ「３」およびＩＤ「４」の候補領域を確保する。ＯＳ１６２Ｘは、時刻Ｔ４〜時刻Ｔ７において、マスタ１２３がタスク３を実行するために必要な記憶領域として、ＩＤ「４」およびＩＤ「５」の候補領域を確保する。ＯＳ１６２Ｘは、時刻Ｔ６〜時刻Ｔ８において、マスタ１２１がタスク１を実行するために必要な記憶領域として、ＩＤ「１」およびＩＤ「２」の候補領域を確保する。
【００３８】
上記の場合、時刻Ｔ４〜時刻Ｔ５（ハッチング部分）において、ＩＤ「４」に対応するメモリ１５４に複数のマスタ（マスタ１２２とマスタ１２３）がアクセスしようとしている。ある局面において、ＯＳ１６２Ｘは、優先順位などに従い、ＩＤ「４」に対応するメモリ１５４へのアクセス主体（マスタ）を時分割で切り替える。この場合、タスク２およびタスク３に要する時間が長くなってしまう。
【００３９】
他の局面において、ＯＳ１６２Ｘはまず、優先順位が高い一方のタスクの実行主体（マスタ）にＩＤ「４」に対応するメモリへのアクセス権（バス占有権）を与える。ＯＳ１６２Ｘは、当該タスクが完了した後に、他方のタスクの実行主体にＩＤ「４」に対応するメモリへのアクセス権（バス占有権）を与える。この場合、優先順位が低いタスクに要する時間が長くなってしまう。
【００４０】
上記のように、関連技術に従う半導体装置１００Ｘは、タスクごとのＩＤが適切に設定されない場合、複数のタスクが競合し、これらタスクに要する時間が長くなってしまう。以下に、このような課題を解決し得る実施形態に従う半導体装置１００の構成および制御について説明する。
【００４１】
［実施形態１］
（概要）
ある局面において、実施形態１に従うタスクには複数の候補領域が設定される。実施形態１に従う制御装置（ＯＳ１６２）は、当該複数の候補領域の使用状況に基づいて、複数の候補領域の中から競合（遅延）が生じにくい処理領域を確保する。バスマスタは、確保された処理領域を使用してタスクを実行する。
【００４２】
（半導体装置１００の構成）
図５は、実施形態１に従う半導体装置１００の構成を表す図である。実施形態１に従う半導体装置１００のハードウェア構成は、関連技術に従う半導体装置１００Ｘのハードウェア構成と同じである。ただし、実施形態１に従う記憶装置１６０に格納されるデータと、関連技術に従う記憶装置１６０に格納されるデータとは相違する。具体的には、実施形態１に従う記憶装置１６０は、アプリ１６１Ｘ、ＯＳ１６２Ｘ、および管理テーブル１６４Ｘに替えてアプリ１６１、ＯＳ１６２、および管理テーブル１６４を保持している。
【００４３】
（管理テーブル１６４）
図６は、管理テーブル１６４のデータ構造の一例を表す。管理テーブル１６４は、候補領域の各々を識別するＩＤと、当該候補領域のアドレスと、グループＩＤと、当該候補領域の使用状況と、の対応関係を保持している。
【００４４】
グループＩＤは、候補領域が属するグループを識別する。関連技術に従うアプリ１６１Ｘを構成する各タスクには、ＩＤが設定されている、つまり、タスクごとに予め使用する候補領域が設定されている。一方、実施形態１に従うアプリ１６１を構成する各タスクには、ＩＤ又はグループＩＤが設定されている。実施形態１に従うＯＳ１６２は、ＩＤを指定するタスク（以下、「ＩＤタスク」とも言う）に対して、指定されたＩＤに対応する候補領域から処理領域を確保する。また、ＯＳ１６２は、グループＩＤを指定するタスク（以下、「ＧＩＤタスク」とも言う）に対して、指定されたグループＩＤにより特定されるグループに属する候補領域の中から処理領域を確保する。
【００４５】
ある局面において、アプリ１６１の開発者は、処理時間（バスの占有時間）の長いタスク（例えば、ＤＭＡＣに接続される周辺機器から画像データを受信するタスク）に対してグループＩＤを設定し、処理時間の短いタスクに対してＩＤを設定する。その理由は、処理時間の長いタスクどうしが競合してタスクの終了タイミングが大幅に遅延することを避けるためである。
【００４６】
他の局面において、アプリ１６１の開発者は、他のタスクとの競合を必ず避ける必要のあるタスクに対して１つの候補領域のみで構成されるグループのグループＩＤを設定する。これにより、当該１つの候補領域に対応するＩＤ又はグループＩＤを設定されたタスクは、他のタスクとの競合を避けることができる。
【００４７】
ある局面において、アプリ１６１を構成する各タスクには、優先順位が設定されていてもよい。ＯＳ１６２は、複数のタスクが競合した場合に、優先順位が高いタスクに対応するマスタに優先的にバス占有権を付与するように構成される。
【００４８】
使用状況は、対応する候補領域を使用しているタスクを識別する情報と、当該タスクによって使用されている処理領域のアドレスと、当該タスクがＩＤタスクであるか又はＧＩＤタスクであるかを判別するフラグとを含む。一例として、ＩＤタスクはフラグが「０」に設定され、ＧＩＤタスクはフラグが「１」に設定される。
【００４９】
図５および図６に示される例において、ＩＤ「１」、ＩＤ「２」、ＩＤ「３」、ＩＤ「６」の候補領域（が属するメモリ１５１〜１５３）はグループＩＤ「１」のグループに属し、ＩＤ「４」、ＩＤ「５」の候補領域（が属するメモリ１５４、１５５）はグループＩＤ「２」のグループに属する。
【００５０】
また、ＩＤ「１」の候補領域のうち、アドレス「０ｘ０００〜０ｘ１ＦＦＦ」の処理領域は、グループＩＤを指定するタスク１によって使用されている。また、ＩＤ「１」の候補領域のうち、アドレス「０ｘ２０００〜０ｘ３ＦＦＦ」の処理領域は、ＩＤを指定するタスク２によって使用されている。
【００５１】
各候補領域に対応するグループＩＤは、例えば、ＯＳ１６２の開発者によって設定される。開発者は、メモリの特性（例えば転送速度）およびバス構成を考慮して、グループＩＤを設定する。例えば、転送速度が略同じである複数のメモリが同じグループに属するようにグループＩＤが設定される。例えば、タスクの実行主体（マスタ）からバスブリッジを介さずにアクセスできる複数のメモリが同じグループに属するようにグループＩＤが設定される。これにより、半導体装置１００は、ＧＩＤタスクに要する時間がバラつくことを抑制できる。
【００５２】
（制御構造）
図７は、実施形態１に従う半導体装置１００が処理領域を確保する処理を表すフローチャートである。図７に示される各処理は、ＣＰＵ１１０がＯＳ１６２又はアプリ１６１を実行することにより実現される。
【００５３】
ある局面において、アプリ１６１は、タスクを実行するにあたりＯＳ１６２に対して処理領域の確保命令（システムコール）を通知する。このとき、アプリ１６１は、タスクに設定されているＩＤ又はグループＩＤを含むシステムコールをＯＳ１６２に通知する。ＯＳ１６２は、アプリ１６１からシステムコールを受け付けたことに応じて（ステップＳ３１０でＹＥＳ）、ステップＳ７１０の処理を実行する。
【００５４】
ステップＳ７１０において、ＯＳ１６２は、ＩＤを指定する処理領域の確保命令を受け付けたか、又はグループＩＤを指定する処理領域の確保命令を受け付けたかを判断する。ＯＳ１６２は、グループＩＤを指定する処理領域の確保命令を受け付けたと判断した場合（ステップＳ７１０でグループＩＤ）、ステップＳ７１５の処理を実行する。一方、ＯＳ１６２は、ＩＤを指定する処理領域の確保命令を受け付けたと判断した場合（ステップＳ７１０でＩＤ）、ステップＳ３２０〜Ｓ３４０の処理を実行する。なお、ステップＳ３２０〜Ｓ３４０の処理は、上述の処理と同じであるため、繰り返し説明しない。
【００５５】
ステップＳ７１５において、ＯＳ１６２は、管理テーブル１６４を参照して、指定されたグループＩＤのグループに属する候補領域を特定する。ＯＳ１６２はさらに、管理テーブル１６４に保持される候補領域の使用状況に基づいて、特定された候補領域の中から１以上の処理領域を特定する（ステップＳ７２０〜Ｓ７９５）。
【００５６】
ステップＳ７２０において、ＯＳ１６２は、管理テーブル１６４の使用状況を参照して、特定された候補領域のうち空き容量が十分な候補領域が存在するか否かを判断する。例えば、ＯＳ１６２は、タスクを実行するのに必要な記憶領域の容量以上の空き容量を有する候補領域を、空き容量が十分な候補領域であると判断する。ＯＳ１６２は、空き容量が十分な候補領域が存在すると判断した場合に（ステップＳ７２０でＹＥＳ）、ステップＳ７３０の処理を実行する。
【００５７】
ＯＳ１６２は、十分な空き容量を有する候補領域が存在しないと判断した場合（ステップＳ７２０でＮＯ）、いずれかの候補領域が十分に空くまで待機する（ステップＳ７４０）。
【００５８】
なお、タスクによってはリアルタイム処理が求められるもの、つまり、待機できないものもある（例えば、モータ制御処理）。係る場合、ＯＳ１６２は、実行中の優先順位の低いタスクを一時的に停止することで、ステップＳ３１０で入力されたタスクによって使用される処理領域を確保してもよい。
【００５９】
ステップＳ７３０において、ＯＳ１６２は、ステップＳ７２０で特定した候補領域のうち、ＧＩＤタスクによって使用されていない候補領域が存在するか否かを判断する。例えば、ＯＳ１６２は、管理テーブル１６４の使用状況を参照して、ステップＳ７２０で特定した候補領域のうち、フラグ「１」のタスクによって使用されていない候補領域が存在するか否かを判断する。ＯＳ１６２は、ＧＩＤタスクによって使用されていない候補領域が存在すると判断した場合（ステップＳ７３０でＹＥＳ）、ステップＳ７５０の処理を実行する。そうでない場合（ステップＳ７３０でＮＯ）、ＯＳ１６２は、ステップＳ７８０の処理を実行する。
【００６０】
ステップＳ７５０において、ＯＳ１６２は、ＧＩＤタスクによって使用されていない候補領域のうち、ＩＤタスクによって使用されていない候補領域が存在するか否かを判断する。換言すれば、ＯＳ１６２は、タスクによって全く使用されていない候補領域が存在するか否かを判断する。例えば、ＯＳ１６２は、管理テーブル１６４の使用状況を参照して、ＧＩＤタスクによって使用されていない候補領域のうち、フラグ「０」のタスクによって使用されていない候補領域が存在するか否かを判断する。ＯＳ１６２は、タスクによって全く使用されていない候補領域が存在すると判断した場合（ステップＳ７５０でＹＥＳ）、当該候補領域の中から処理領域を確保する（ステップＳ７６０）。一方、ＯＳ１６２は、タスクによって全く使用されていない候補領域が存在しないと判断した場合（ステップＳ７５０でＮＯ）、ＩＤタスクによって使用されている数が最も少ない候補領域の中から処理領域を確保する（ステップＳ７７０）。ＯＳ１６２は、処理領域を確保した後に、管理テーブル１６４の使用状況に当該処理領域の情報を登録する。
【００６１】
ステップＳ７８０において、ＯＳ１６２は、ステップＳ７２０で特定した候補領域のうち、ＧＩＤタスクによって使用されている数が最も少ない複数の候補領域が存在するか否かを判断する。ＯＳ１６２は、ＧＩＤタスクによって使用されている数が最も少ない複数の候補領域が存在すると判断した場合（ステップＳ７８０でＹＥＳ）、ステップＳ７９０の処理を実行する。そうでない場合（ステップＳ７８０でＮＯ）、ＯＳ１６２はステップＳ７９５の処理を実行する。
【００６２】
ステップＳ７９０において、ＯＳ１６２は、ステップＳ７８０で特定した複数の候補領域のうち、ＩＤタスクによって使用されている数が最も少ない候補領域から処理領域を確保する。ステップＳ７９５において、ＯＳ１６２は、ステップＳ７８０で特定した１の候補領域から処理領域を確保する。ステップＳ７６０、Ｓ７７０、Ｓ７９０、Ｓ７９５の後、ＯＳ１６２は、ステップＳ３４０の処理を実行する。
【００６３】
次に、図８を用いて具体例を説明する。図８は、ある局面に従う管理テーブル１６４の使用状況を表す図である。図８に示される使用状況の場合に、ＯＳ１６２にグループＩＤ「１」を指定する処理領域の確保命令が入力されたとする。この場合、ＯＳ１６２はまず、グループＩＤ「１」に対応するＩＤ「１」、「２」、「３」、および「６」の候補領域を特定する（ステップＳ７１５）。これらの候補領域はいずれも十分な空き容量を有しているものとする。続いて、ＯＳ１６２は、これらの候補領域はいずれもＧＩＤタスク（フラグ「１」のタスク）によって使用中であると判断する（ステップＳ７３０でＮＯ）。
【００６４】
ＯＳ１６２はさらに、特定した候補領域ごとにＧＩＤタスクの数をカウントする。ＩＤ「１」の候補領域は２個のＧＩＤタスクによって使用されており、ＩＤ「２」、「３」、および「６」の候補領域は１個のＧＩＤタスクによって使用されている。そのため、ＯＳ１６２は、ＧＩＤタスクによって使用されている数が最も少ない候補領域としてＩＤ「２」、「３」、および「６」の候補領域を特定する（ステップＳ７８０でＹＥＳ）。
【００６５】
次にＯＳ１６２は、ＩＤ「２」、「３」、および「６」の候補領域のうち、ＩＤタスクによって使用されていない候補領域として、ＩＤ「３」および「６」の候補領域を抽出する。ＯＳ１６２は、抽出した候補領域の中から１以上の処理領域を確保する（ステップＳ７９０）。
【００６６】
図９は、実施形態１に従うＯＳ１６２のタスクスケジューリングを表す図である。図９において、タスク１〜３に対応するシステムコールがＯＳ１６２に入力されるタイミング（時刻Ｔ１、Ｔ２、Ｔ４、Ｔ６）は、図４に示される例と同じであるとする。以下では、実施形態１に従うＯＳ１６２のタスクスケジューリングと、図４で説明した関連技術に従うＯＳ１６２Ｘのタスクスケジューリングとの相違点について説明する。
【００６７】
実施形態１に従うＯＳ１６２は、時刻Ｔ４において、アプリ１６１からグループＩＤの指定を含むシステムコールを受け付ける。ＯＳ１６２は、指定されたグループＩＤ（グループ）に属する候補領域の中から、時刻Ｔ４においてＧＩＤタスクおよびＩＤタスクによって使用されていないＩＤ「１」および「２」の候補領域（に属する処理領域）を確保する（ステップＳ７６０）。
【００６８】
これにより、実施形態１に従う半導体装置１００は、図４に示される例において生じていたマスタ１２２および１２３によるタスクどうしの競合を抑制できる。その結果、タスク２に要する時間は、時刻Ｔ２〜時刻Ｔ５から時刻Ｔ２〜時刻Ｔ５１に短縮される。また、タスク３に要する時間も、時刻Ｔ４〜時刻Ｔ７から時刻Ｔ４〜時刻Ｔ７１に短縮される。
【００６９】
上記によれば、実施形態１に従う半導体装置１００は、タスクに設定されるグループに属する候補領域の中から、他のタスクによって全く使用されていない又はあまり使用されていない候補領域を特定し、特定した候補領域の中から処理領域を確保する。そのため、半導体装置１００は、タスクの終了タイミングの遅延を抑制し得る。
【００７０】
また、半導体装置１００は、タスクの終了タイミングの遅延を抑制できるため、高度のリアルタイム処理を実現し得る。また、半導体装置１００は、タスクに要する時間を抑制できるため、消費電力を削減し得る。
【００７１】
また、関連技術に従うアプリ１６１Ｘの開発者は複数のタスクが競合しないように意識しながらタスクにＩＤを設定しなければいけないが、実施形態１に従うアプリ１６１の開発者はタスクを実行するマスタに応じたグループＩＤをタスクに設定するだけでよい。
【００７２】
また、半導体装置１００は、ＧＩＤタスクによって使用されていない候補領域から優先的に処理領域を確保するように構成されている。これにより、半導体装置１００は、ＧＩＤタスク（処理時間の長いタスク）どうしが競合すること抑制できる。その結果、半導体装置１００は、タスクの終了タイミングが大幅に遅延することを抑制できる。
【００７３】
［実施形態２］
実施形態１に従う半導体装置１００は、候補領域と当該候補領域が属するグループとを利用して、タスクの競合を抑制するように構成されている。しかしながら、１つのメモリに複数の候補領域が設定されている場合、タスクどうしの競合が生じ得る。
【００７４】
図５を参照して、メモリ１５１には、ＩＤ「１」およびＩＤ「６」の候補領域が設定されている。例えばＯＳ１６２は、ＩＤ「１」の候補領域がマスタ１２１によって使用されているにも関わらず、マスタ１２２用にＩＤ「６」の候補領域を確保する。この場合、マスタ１２１が実行するタスクと、マスタ１２２が実行するタスクとが競合してしまい、これらのタスクに要する時間が長くなってしまう。
【００７５】
実施形態２に従う半導体装置１００Ａは、メモリを識別する識別情報（以下、「スレーブＩＤ」とも言う）を利用することにより、上記の競合を抑制する。以下、その具体的な構成および制御について説明する。
【００７６】
（半導体装置１００Ａの構成）
図１０は、実施形態２に従う半導体装置１００Ａの構成を表す図である。実施形態２に従う半導体装置１００Ａのハードウェア構成は、実施形態１に従う半導体装置１００のハードウェア構成と同じである。ただし、実施形態２に従う記憶装置１６０に格納されるデータと、実施形態１に従う記憶装置１６０に格納されるデータとは相違する。具体的には、実施形態２に従う記憶装置１６０は、ＯＳ１６２および管理テーブル１６４に替えて、ＯＳ１６２Ａおよび管理テーブル１６４Ａを保持している。
【００７７】
（管理テーブル１６４Ａ）
図１１は、管理テーブル１６４Ａのデータ構造の一例を表す。管理テーブル１６４Ａは、実施形態１に従う管理テーブル１６４が保持するデータに加え、さらに複数のメモリ１５１〜１５５の各々を識別するスレーブＩＤを保持する。図１０および図１１の例において、スレーブＩＤ「１」はメモリ１５１を、スレーブＩＤ「２」はメモリ１５２を、スレーブＩＤ「３」はメモリ１５３を、スレーブＩＤ「４」はメモリ１５４を、スレーブＩＤ「５」はメモリ１５５をそれぞれ表す。図１１の例において、ＩＤ「１」および「６」の候補領域はスレーブＩＤ「１」のメモリ１５１に属している。これにより、実施形態２に従う半導体装置１００Ａは、複数の候補領域が同じメモリに属していることを把握できる。
【００７８】
（制御構造）
図１２は、実施形態２に従う半導体装置１００Ａが処理領域を確保する処理を表すフローチャートである。図１２に示される各処理は、ＣＰＵ１１０がＯＳ１６２Ａ又はアプリ１６１を実行することにより実現される。なお、図１２に示される処理のうち上述の処理と同じ処理については同じ符号を付している。そのため、その処理についての説明は繰り返さない。
【００７９】
ＯＳ１６２Ａは、ステップＳ７１５で特定された候補領域のうち、十分な空き容量を有する候補領域が存在する場合（ステップＳ７２０でＹＥＳ）、ステップＳ１２１０の処理を実行する。
【００８０】
ステップＳ１２１０において、ＯＳ１６２Ａは、管理テーブル１６４Ａを参照して、十分な空き容量を有する候補領域が属するメモリ（のスレーブＩＤ）を検出する。ＯＳ１６２Ａはさらに、検出したメモリのうち、ＧＩＤタスクによって使用されていないメモリが存在するか否かを判断する。例えば、ＯＳ１６２Ａは、管理テーブル１６４Ａの使用状況を参照して、検出したメモリのうち、フラグ「１」のタスクによって使用されていないメモリが存在するか否かを判断する。ＯＳ１６２Ａは、ＧＩＤタスクによって使用されていないメモリが存在すると判断した場合（ステップＳ１２１０でＹＥＳ）、ステップＳ１２２０の処理を実行する。そうでない場合（ステップＳ１２１０でＮＯ）、ＯＳ１６２Ａは、ステップＳ１２５０の処理を実行する。
【００８１】
ステップＳ１２２０において、ＯＳ１６２Ａは、ＧＩＤタスクによって使用されていないメモリのうち、ＩＤタスクによって使用されていないメモリが存在するか否かを判断する。換言すれば、ＯＳ１６２は、タスクによって全く使用されていないメモリが存在するか否かを判断する。例えば、ＯＳ１６２Ａは、管理テーブル１６４Ａの使用状況を参照して、ＧＩＤタスクによって使用されていないメモリのうち、フラグ「０」のタスクによって使用されていないメモリが存在するか否かを判断する。ＯＳ１６２Ａは、タスクによって全く使用されていないメモリが存在する場合（ステップＳ１２２０でＹＥＳ）、当該メモリに属する候補領域から処理領域を確保する（ステップＳ１２３０）。一方、ＯＳ１６２Ａは、タスクによって全く使用されていないメモリが存在しない場合（ステップＳ１２２０でＮＯ）、ＩＤタスクによって使用されている数が最も少ないメモリから処理領域を確保する（ステップＳ１２４０）。ＯＳ１６２Ａは処理領域を確保した後、管理テーブル１６４Ａの使用状況に当該処理領域の情報を登録する。
【００８２】
ステップＳ１２５０において、ＯＳ１６２Ａは、ステップＳ１２１０で検出したメモリ（十分な空き容量を有する候補領域が属するメモリ）のうち、ＧＩＤタスクによって使用されている数が最も少ない複数のメモリが存在するか否かを判断する。ＯＳ１６２Ａは、ＧＩＤタスクによって使用されている数が最も少ない複数の候補領域が存在すると判断した場合（ステップＳ１２５０でＹＥＳ）、ステップＳ１２６０の処理を実行する。そうでない場合（ステップＳ１２５０でＮＯ）、ＯＳ１６２ＡはステップＳ１２７０の処理を実行する。
【００８３】
ステップＳ１２６０において、ＯＳ１６２Ａは、ステップＳ１２５０で特定した複数のメモリのうち、ＩＤタスクによって使用されている数が最も少ないメモリに属する候補領域から処理領域を確保する。ステップＳ１２７０において、ＯＳ１６２Ａは、ステップＳ１２５０で特定した１以上の候補領域から処理領域を確保する。ステップＳ１２３０、Ｓ１２４０、Ｓ１２６０、Ｓ１２７０の後、ＯＳ１６２Ａは、ステップＳ３４０の処理を実行する。
【００８４】
次に、図１３を用いて具体例を説明する。図１３は、ある局面に従う管理テーブル１６４Ａの使用状況を表す図である。なお、図１３に示される使用状況と図８に示される使用状況とは同じである。図１３に示される使用状況の場合に、ＯＳ１６２ＡにグループＩＤ「１」を指定する処理領域の確保命令が入力されたとする。この場合、ＯＳ１６２Ａはまず、グループＩＤ「１」に対応するＩＤ「１」、「２」、「３」、および「６」の候補領域を特定する（ステップＳ７１５）。これらの候補領域はいずれも十分な空き容量を有するものとする。続いて、ＯＳ１６２Ａは、これらの候補領域に対応するスレーブＩＤ「１」〜「３」のメモリ１５１〜１５３はいずれも、ＧＩＤタスク（フラグ「１」のタスク）によって使用中であると判断する（ステップＳ１２１０でＮＯ）。
【００８５】
ＯＳ１６２Ａはさらに、特定したメモリごとにＧＩＤタスクの数をカウントする。スレーブＩＤ「１」のメモリ１５１は３個のＧＩＤタスクによって使用されており、スレーブＩＤ「２」、「３」のメモリ１５２、１５３は１個のＧＩＤタスクによって使用されている。そのため、ＯＳ１６２Ａは、ＧＩＤタスクによって使用されている数が最も少ないメモリとしてスレーブＩＤ「２」、「３」のメモリ１５２、１５３を特定する（ステップＳ１２５０でＹＥＳ）。
【００８６】
次にＯＳ１６２Ａは、スレーブＩＤ「２」、「３」のメモリ１５２、１５３のうち、ＩＤタスクによって使用されていないメモリとして、スレーブＩＤ「３」のメモリ１５３を抽出し。ＯＳ１６２Ａは、抽出したメモリ１５３から処理領域を確保する（ステップＳ１２６０）。
【００８７】
上記によれば、実施形態２に従う半導体装置１００Ａは、メモリを識別する情報（スレーブＩＤ）を利用することにより、実施形態１に従う半導体装置１００に比してタスクどうしの競合をより抑制し得る。
【００８８】
（変形例１）
実施形態１に従う半導体装置１００および実施形態２に従う半導体装置１００Ａは、バスブリッジを有さない簡易な構成であった。そこで、バスブリッジを有する半導体装置の構成についても説明する。
【００８９】
図１４は、変形例１に従う半導体装置１００Ｂの構成を説明する図である。半導体装置１００Ｂは、実施形態２に従う半導体装置１００Ａに比べて、バスブリッジ１７０、マスタ１２４、バス１３４、１３５、マルチプレクサ１４６、１４７、メモリ１５６、１５７、およびバスアービタ１７４、１７５をさらに有する点において相違する。
【００９０】
バスブリッジ１７０は、各バス１３０〜１３３とバス１３４とを中継する。マスタ１２４は、バス１３５に接続されている。バス１３４および１３５の各々は、マルチプレクサ１４６および１４７に接続されている。マルチプレクサ１４６はメモリ１５６に、マルチプレクサ１４７はメモリ１５７にそれぞれ接続されている。バス１３４、１３５は、バスアービタ１７４、１７５にてそれぞれ制御されている。バスアービタ１７４、１７５は、各マスタ１２１〜１２４からのアクセス要求を識別しメモリ１５６およびメモリ１５７のいずれに対してアクセス要求を行うかを決定する。
【００９１】
各マルチプレクサ１４６、１４７は、バス１３４、１３５からのアクセス要求に基づいて、いずれかのバスと対応するメモリとを電気的に接続するようにバスを選択する。各マルチプレクサ１４６、１４７は、同時にバス１３４、１３５からアクセス要求を受け付けた場合には、マルチプレクサ内の優先順位に基づいて、いずれか一つのバスを選択しバスと対応するメモリとを電気的に接続する。各マルチプレクサ１４６、１４７は、選択しているバスのアクセスが完了した場合には、マルチプレクサ内の優先順位に基づいて次のバスを選択し、アクセス要求のあるバスを順次切り替えてバスと対応するメモリとを電気的に接続する。
【００９２】
当該構成によれば、マスタ１２１〜１２３はバスブリッジ１７０を介してメモリ１５６および１５７にアクセス可能であって、マスタ１２４はバスブリッジ１７０を介してメモリ１５１〜１５５にアクセス可能である。記憶装置１６０は、アプリ１６１Ｂと、実施形態２で説明したＯＳ１６２Ａと、管理テーブル１６４Ｂとを保持している。アプリ１６１Ｂを構成する各タスクには、上記説明したアプリ１６１と同様に、ＩＤ又はグループＩＤが設定されている。
【００９３】
ＣＰＵ１１０を基準としてバスブリッジ１７０の前段を第１階層、バスブリッジ１７０の後段を第２階層としてそれぞれ定義する。この場合、第１階層に存在するマスタ１２１〜１２３は、同じ第１階層に存在するメモリ１５１〜１５５に速くアクセスできる。一方、マスタ１２１〜１２３が第２階層に存在するメモリ１５６および１５７にアクセスする場合、バスブリッジ１７０における遅延が生じる。
【００９４】
同様に、第２階層に存在するマスタ１２４は、同じ第２階層に存在する１５６および１５７に速くアクセスできるが、第１階層に存在するメモリ１５１〜１５５にアクセスしようとするとバスブリッジ１７０における遅延が生じる。
【００９５】
図１５は、管理テーブル１６４Ｂのデータ構造の一例を表す。図１４および図１５に示される例において、グループＩＤ「１」のグループには、第１階層に存在するメモリ１５１〜１５５（スレーブＩＤ「１」〜「５」）が属する。また、グループＩＤ「３」のグループには、第２階層に属するメモリ１５６および１５７（スレーブＩＤ「６」および「７」）が属する。このように、ある局面において、各メモリに設定されるグループＩＤは、同じ階層に存在するメモリが属するように設定される。つまり、各メモリに設定されるグループＩＤは、マスタ（タスクの実行主体）からグループに属するメモリへのアクセス速度が等しくなるように設定される。また、グループＩＤ「２」のグループには、メモリ１５１〜１５７が属する。
【００９６】
ある局面において、アプリ１６１Ｂの開発者は、マスタ１２１〜１２３によって実行されるタスクにメモリ１５１〜１５５が属するグループのグループＩＤ「１」を設定する。また、開発者は、マスタ１２４によって実行されるタスクにメモリ１５６〜１５７が属するグループのグループＩＤ「３」を設定する。これにより、タスクの終了タイミングが遅延すること、およびタスクに要する時間がバラつくことが抑制されるためである。
【００９７】
また、タスクによってはリアルタイム性をあまり要求されないものもある。係る場合、アプリ１６１Ｂの開発者は、当該タスクに、メモリ１５１〜１５７が属するグループのグループＩＤ「２」を設定し得る。
【００９８】
なお、半導体装置１００Ｂが処理領域を確保する制御構造は、上述した半導体装置１００Ａが処理領域を確保する制御構造と同じである。そのため、半導体装置１００Ｂが処理領域を確保する制御構造は繰り返し説明しない。
【００９９】
（変形例２）
管理テーブル１６４Ａは、各候補領域を識別するＩＤと、各メモリを識別するスレーブＩＤと、各グループを識別するグループＩＤと、の対応関係を保持するように構成されている。他の局面において、管理テーブルは、各メモリを識別するスレーブＩＤと、各メモリが属するグループを識別するグループＩＤとの対応関係を保持するように構成されてもよい。
【０１００】
係る場合、各タスクには、スレーブＩＤおよびグループＩＤのいずれかが設定される。ＯＳは、タスクごとに設定されるスレーブＩＤ又はグループＩＤを読み取る。ＯＳは、タスクにスレーブＩＤが設定されている場合、当該スレーブＩＤに対応するメモリから処理領域を確保する。
【０１０１】
一方、ＯＳは、タスクにグループＩＤが設定されている場合、当該グループＩＤのグループに属するスレーブＩＤのメモリを特定し、空き容量が十分なメモリをさらに特定する。その後、ＯＳは、「ＩＤタスク」を「スレーブＩＤを指定するタスク」と読み替えて上記説明したＳ１２１０〜Ｓ１２７０の処理を実行することにより、処理領域を確保する。
【０１０２】
上記によれば、変形例２に従う半導体装置は、管理テーブル１６４Ａに比して管理テーブルを記憶するために必要な容量を削減できる。
【０１０３】
［実施形態３］
実施形態３に従う半導体装置１００Ｃは、メモリを識別するスレーブＩＤと、メモリが属するグループを識別するグループＩＤとの対応関係に基づいて、処理領域を確保する。
【０１０４】
（半導体装置１００Ｃの構成）
図１６は、実施形態３に従う半導体装置１００Ｃの構成を表す図である。実施形態３に従う半導体装置１００Ｃのハードウェア構成は、実施形態２に従う半導体装置１００のハードウェア構成と同じである。ただし、実施形態３に従う記憶装置１６０に格納されるデータと、実施形態２に従う記憶装置１６０に格納されるデータとは相違する。具体的には、実施形態３に従う記憶装置１６０は、アプリ１６１Ａ、ＯＳ１６２Ａ、および管理テーブル１６４Ａに替えて、アプリ１６１Ｃ、ＯＳ１６２Ｃおよび管理テーブル１６４Ｃを保持している。
【０１０５】
（管理テーブル１６４Ｃ）
図１７は、管理テーブル１６４Ｃのデータ構造の一例を表す。管理テーブル１６４Ｃは、各メモリ１５１〜１５５を識別するスレーブＩＤと、各メモリ１５１〜１５５が属するグループを識別するグループＩＤと、各メモリ１５１〜１５５における候補領域のアドレスと、各メモリ１５１〜１５５の使用状況と、の対応関係を記憶している。
【０１０６】
アプリ１６１Ｃを構成する各タスクは、グループＩＤが設定されており、スレーブＩＤは設定されていない。そのため、管理テーブル１６４Ｃは、タスクがスレーブＩＤを設定されているか又はグループＩＤを設定されているかを判別するフラグを保持していない。
【０１０７】
（制御構造）
図１８は、実施形態３に従う半導体装置１００Ｃが処理領域を確保する処理を表すフローチャートである。図１８に示される各処理は、ＣＰＵ１１０がＯＳ１６２Ｃ又はアプリ１６１Ｃを実行することにより実現される。
【０１０８】
ＯＳ１６２Ｃは、アプリ１６１ＣからグループＩＤを指定する処理領域の確保命令（システムコール）を受け付けたことに基づいて（ステップＳ１８１０でＹＥＳ）、ステップＳ１８１５の処理を実行する。
【０１０９】
ステップＳ１８１５において、ＯＳ１６２Ｃは、管理テーブル１６４Ｃを参照して、指定されたグループＩＤに属するメモリを特定する。
【０１１０】
ステップＳ１８２０において、ＯＳ１６２Ｃは、指定されたグループＩＤにより特定されるグループに属するメモリの候補領域が十分な空き容量を有しているか否かを判断する。より具体的には、ＯＳ１６２Ｃは、管理テーブル１６４Ｃに保持される各メモリの使用状況のうち、指定されたグループＩＤに属するメモリの使用状況に基づいて上記判断を行なう。なお、メモリが十分な空き容量を有しているか否かの判断方法は、ステップＳ７２０の方法と同じであるため、繰り返し説明しない。
【０１１１】
ＯＳ１６２Ｃは、特定されたメモリの候補領域が十分な空き容量を有している場合（ステップＳ１８２０でＹＥＳ）、ステップＳ１８３０の処理を実行する。そうでない場合（ステップＳ１８２０でＮＯ）、ＯＳ１６２Ｃは、特定されたメモリが十分な空き容量を有するまで待機する（ステップＳ１８４０）。
【０１１２】
ステップＳ１８３０において、ＯＳ１６２Ｃは、十分な空き容量を有する候補領域が属するメモリのうち、タスク（ＧＩＤタスク）によって使用されていないメモリが存在するか否かを判断する。ＯＳ１６２Ｃは、タスクによって使用されていないメモリが存在する場合（ステップＳ１８３０でＹＥＳ）、当該メモリに属する候補領域から処理領域を確保する（ステップＳ１８５０）。一方、ＯＳ１６２Ｃは、タスクによって使用されていないメモリが存在しない場合（ステップＳ１８３０でＮＯ）、タスクによって使用されている数が最も少ないメモリに属する候補領域から処理領域を確保する（ステップＳ１８６０）。ＯＳ１６２Ｃは、処理領域を確保した後に、管理テーブル１６４Ｃの使用状況に当該処理領域の情報を登録する。
【０１１３】
ステップＳ１８７０において、ＯＳ１６２Ｃは、確保した処理領域にアクセスするための情報として当該処理領域のアドレスを、アプリ１６１Ｃを介してシステムコールに対応するマスタに出力する。
【０１１４】
上記によれば、実施形態３に従う半導体装置１００Ｃは、グループに属するメモリの中から、他のタスクによって全く使用されていない又はあまり使用されていないメモリを特定し、特定したメモリ（に属する候補領域）から処理領域を確保する。そのため、半導体装置１００Ｃは、タスクどうしの競合を抑制し得る。
【０１１５】
また、実施形態３に従う管理テーブル１６４Ｃは、各候補領域を識別するＩＤ、およびフラグを有していない。そのため、管理テーブル１６４Ｃを記憶するために必要な記憶容量は、実施形態１および２に従う管理テーブルを記憶するために必要な記憶容量よりも小さい。
【０１１６】
また、半導体装置１００Ｃは、同一グループに属する複数のメモリの使用率が偏らないように制御できる。これにより、半導体装置１００Ｃは、複数のタスクが競合することを抑制し得る。
【０１１７】
なお、他の局面において、管理テーブル１６４Ｃは、候補領域のアドレスを保持しなくともよい。係る場合、ＯＳ１６２Ｃは、１つのメモリの全記憶領域を候補領域として扱う。
【０１１８】
［構成］
以上に開示された技術的特徴は、以下のように要約され得る。
【０１１９】
（構成１）  ある実施形態に従うと、半導体装置は、複数のマスタ１２１〜１２３と、複数のバス１３１〜１３３とを備える。各バスは各マスタにそれぞれ接続されている。半導体装置は、複数のメモリ１５１〜１５５をさらに備える。各メモリは、複数のバスの少なくともいずれかに接続されている。各メモリは、少なくとも１以上の候補領域を含む。半導体装置は、各マスタから当該マスタに接続されているバスを介した複数のメモリのいずれかへのアクセスを制御するためのＣＰＵ１１０と、各候補領域を識別するＩＤと候補領域が属するグループを識別するグループＩＤとの対応関係を保持する管理テーブル１６４を記憶するための記憶装置１６０とをさらに備える。ＣＰＵ１１０はＯＳ１６２を実行することにより、以下の処理を実行する。ＣＰＵ１１０は、各候補領域の使用状況を検出する。ＣＰＵ１１０は、複数のマスタのいずれかによって使用される処理領域を複数の候補領域のいずれかから確保する命令（システムコール）がグループＩＤを含むことに基づいて（ステップＳ７１０でＹＥＳ）、管理テーブル１６４を参照して、複数の候補領域の中から指定されたグループに属する１以上の候補領域を特定する（ステップＳ７１５）。ＣＰＵ１１０は、検出された使用状況に基づいて、特定された１以上の候補領域の中から処理領域を確保する（ステップＳ７２０〜Ｓ７９５）。ＣＰＵ１１０は、確保された処理領域にアクセスするための情報として、当該処理領域のアドレスを、命令の通知元のアプリ１６１を介して、命令に対応するマスタ（タスクを実行するマスタ）に出力する（ステップＳ３４０）。
【０１２０】
（構成２）  （構成１）に従うＣＰＵ１１０は、使用状況として、各候補領域について、ＩＤタスクによって使用されているか否か、およびグループタスクによって使用されているか否か検出する（図６）。ＣＰＵ１１０は、検出された使用状況に基づいて処理領域を確保する場合に、特定された１以上の候補領域の中から、ＧＩＤタスクによって使用されていない候補領域を絞り込み（ステップＳ７３０でＹＥＳ）、絞り込んだ候補領域の中から処理領域を確保するように構成される（ステップＳ７５０〜Ｓ７７０）。
【０１２１】
（構成３）  （構成１）に従うＣＰＵ１１０は、使用状況として、各候補領域について、ＩＤタスクによって使用されているか否か、およびグループタスクによって使用されているか否か検出する（図６）。ＣＰＵ１１０は、検出された使用状況に基づいて処理領域を確保する場合に、特定された１以上の候補領域の中から、ＧＩＤタスクおよびＩＤタスクによって使用されていない候補領域を絞り込み（ステップＳ７５０でＹＥＳ）、絞り込んだ候補領域の中から処理領域を確保するように構成される（ステップＳ７６０）。
【０１２２】
（構成４）  （構成２）に従うＣＰＵ１１０は、絞り込んだ１以上の候補領域が全てＩＤタスクによって使用されている場合（ステップＳ７５０でＮＯ）、当該１以上の候補領域の中からＩＤタスクによって使用されている数が最も少ない候補領域を特定し、当該特定した特定された１以上の候補領域の中から処理領域を確保するように構成される（ステップＳ７７０）。
【０１２３】
（構成５）  （構成２）に従うＣＰＵ１１０は、特定された１以上の候補領域の中にＧＩＤタスクによって使用されていない候補領域が存在しない場合（ステップＳ７３０でＮＯ）に、特定された１以上の候補領域の中から、ＧＩＤタスクによって使用されている数が最も少ない候補領域を絞り込み、絞り込んだ候補領域の中から処理領域を確保するように構成される（ステップＳ７９５）。
【０１２４】
（構成６）  （構成５）に従うＣＰＵ１１０は、ＧＩＤタスクによって使用されている数が最も少ない複数の候補領域が存在する場合に（ステップＳ７８０でＹＥＳ）、当該複数の候補領域の中から、ＩＤタスクによって使用されている数が最も少ない候補領域を絞り込み、絞り込んだ候補領域の中から処理領域を確保するように構成される（ステップＳ７９０）。
【０１２５】
（構成７）  （構成１）〜（構成６）において、候補領域を識別するＩＤに替えて、各メモリ１５１〜１５５を識別するスレーブＩＤを用いてもよい。
【０１２６】
（構成８）  （構成１）に従う記憶装置１６０は、各候補領域を識別するＩＤと、候補領域が属するグループを識別するグループＩＤと、各メモリを識別するスレーブＩＤとの対応関係を保持する管理テーブル１６４Ａを記憶している。ＣＰＵ１１０は、管理テーブル１６４Ａを参照して、各候補領域の使用状況と、当該候補領域が属するメモリとに基づいて、各メモリの使用状況を検出する。ＣＰＵ１１０は、各メモリの使用状況に基づいて、特定された１以上の候補領域の中から処理領域を確保するように構成される（ステップＳ１２１０〜１２７０）。例えば、ＣＰＵ１１０は、十分に空いている候補領域が属するメモリを検出し、当該メモリの中からＧＩＤタスクによって使用されていないメモリを特定し、当該メモリに属する候補領域から処理領域を確保する（ステップＳ１２１０〜Ｓ１２４０）。また、ＣＰＵ１１０は、ＧＩＤタスクによって使用されていないメモリが存在しない場合（ステップＳ１２１０でＮＯ）、ＧＩＤタスクによって使用されている数が最も少ないメモリに属する候補領域から処理領域を確保する（ステップＳ１２５０〜Ｓ１２７０）。
【０１２７】
（構成９）  他の実施形態に従うと、半導体装置１００Ｃは、複数のマスタ１２１〜１２３と、複数のバス１３１〜１３３とを備える。各バスは各マスタにそれぞれ接続されている。半導体装置１００Ｃは、複数のメモリ１５１〜１５５をさらに備える。各メモリは複数のバスの少なくともいずれかに接続されている。半導体装置１００Ｃは、各マスタから当該マスタに接続されているバスを介した複数のメモリのいずれかへのアクセスを制御するためのＣＰＵ１１０と、各メモリを識別するＩＤと、各候補領域が属するグループを識別するグループＩＤとの対応関係を保持する管理テーブル１６４Ｃを記憶するための記憶装置１６０とをさらに備える。ＣＰＵ１１０は、ＯＳ１６２Ｃを実行することにより以下の処理を実行する。ＣＰＵ１１０は、各メモリの使用状況を検出する。ＣＰＵ１１０は、複数のマスタのいずれかによって使用される処理領域を複数のメモリのいずれかから確保する命令（システムコール）がグループＩＤを含むことに基づいて（ステップＳ１８１０でＹＥＳ）、管理テーブル１６４Ｃを参照して、複数のメモリの中から指定されたグループに属する１以上のメモリを特定する（ステップＳ１８１５）。ＣＰＵ１１０は、検出された使用状況に基づいて、特定された１以上のメモリの中から処理領域を確保し（ステップＳ１８２０〜Ｓ１８６０）、確保された処理領域にアクセスするための情報として当該処理領域のアドレスを、命令の通知元のアプリ１６１Ｃを介して、命令に対応するマスタ（タスクを実行するマスタ）に出力する（ステップＳ１８７０）。
【０１２８】
（構成１０）  他の局面に従うと、マルチレイヤバス構成を採用する半導体装置のＣＰＵ１１０によって実行されるプログラム（ＯＳ）が提供される。半導体装置は、複数のマスタ１２１〜１２３と複数のメモリ１５１〜１５５とを備える。各メモリは、少なくとも１以上の候補領域を含む。半導体装置は、各候補領域を識別するＩＤと候補領域が属するグループを識別するグループＩＤとの対応関係を保持する管理テーブル１６４を記憶するための記憶装置１６０をさらに備える。プログラムはＣＰＵ１１０に、各メモリの使用状況を検出するステップと、複数のマスタのいずれかによって使用される処理領域を複数の候補領域のいずれかから確保する命令がグループの指定を含む場合に（ステップＳ７１０でＹＥＳ）、管理テーブル１６４を参照して、複数の候補領域の中から指定されたグループに属する１以上の候補領域を特定するステップと（ステップＳ７１５）、検出された使用状況に基づいて、特定された１以上の候補領域の中から処理領域を確保するステップ（ステップＳ７２０〜Ｓ７９５）とを実行させる。
【０１２９】
上記説明した各種処理は、１つのＣＰＵ１１０によって実現されるものとしてあるが、これに限られない。これらの各種機能は、少なくとも１つのプロセッサのような半導体集積回路、少なくとも１つの特定用途向け集積回路ＡＳＩＣ（Application  Specific  Integrated  Circuit）、少なくとも１つのＤＳＰ（Digital  Signal  Processor）、少なくとも１つのＦＰＧＡ（Field  Programmable  Gate  Array）、および／又はその他の演算機能を有する回路によって実装され得る。
【０１３０】
これらの回路は、有形の読取可能な少なくとも１つの媒体から、１以上の命令を読み出すことにより上記の各種処理を実行しうる。
【０１３１】
このような媒体は、磁気媒体（たとえば、ハードディスク）、光学媒体（例えば、コンパクトディスク（ＣＤ）、ＤＶＤ）、揮発性メモリ、不揮発性メモリの任意のタイプのメモリなどの形態をとるが、これらの形態に限定されるものではない。
【０１３２】
揮発性メモリはＤＲＡＭ（Dynamic  Random  Access  Memory）およびＳＲＡＭ（Static  Random  Access  Memory）を含み得る。不揮発性メモリは、ＲＯＭ、ＮＶＲＡＭを含み得る。
【０１３３】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１３４】
１００，１００Ａ，１００Ｂ，１００Ｃ，１００Ｘ  半導体装置、１１０  制御装置、１２１，１２２，１２３，１２４  マスタ、１３０，１３１，１３２，１３３，１３４，１３５  バス、１４１，１４５，１４６，１４７  マルチプレクサ、１５１，１５２，１５３，１５４，１５５，１５６，１５７  メモリ、１６０  記憶装置、１６１，１６１Ａ，１６１Ｂ，１６１Ｃ，１６１Ｘ  アプリ、１６２Ｘ  制御プログラム、１６４，１６４Ａ，１６４Ｂ，１６４Ｃ，１６４Ｘ  管理テーブル、１７０  バスブリッジ。
【図１】
2019057071.tif 000003
【図２】
2019057071.tif 000004
【図３】
2019057071.tif 000005
【図４】
2019057071.tif 000006
【図５】
2019057071.tif 000007
【図６】
2019057071.tif 000008
【図７】
2019057071.tif 000009
【図８】
2019057071.tif 000010
【図９】
2019057071.tif 000011
【図１０】
2019057071.tif 000012
【図１１】
2019057071.tif 000013
【図１２】
2019057071.tif 000014
【図１３】
2019057071.tif 000015
【図１４】
2019057071.tif 000016
【図１５】
2019057071.tif 000017
【図１６】
2019057071.tif 000018
【図１７】
2019057071.tif 000019
【図１８】
2019057071.tif 000020