(57)【要約】      （修正有）【課題】利便性の高いメモリ装置を提供する。【解決手段】メモリ装置３は、不揮発性メモリ５と、不揮発性メモリを制御するコントローラ４とを備える。コントローラは、第１乃至第３のプロセッサを備える。第１のプロセッサは、実行待ちであり第１乃至第３のプロセッサのいずれでも実行可能な新たな処理の実行先を決定する。コントローラは、新たな処理に関する優先度を含む優先度情報に基づいて、第２及び第３のプロセッサのうちの１つによって次に実行されるために、第１のプロセッサによって決定された実行先を持つ新たな処理の少なくとも１つを決定する。【選択図】図１
2019091492.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリを制御するコントローラと、
を具備し、
前記コントローラは、第１乃至第３のプロセッサを具備し、
前記第１のプロセッサは、実行待ちであり前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てな新たな処理の実行先を決定し、
前記コントローラは、前記新たな処理に関する優先度を含む優先度情報に基づいて、前記第２及び第３のプロセッサのうちの１つによって次に実行されるために、前記第１のプロセッサによって決定された実行先によって実行され得る前記新たな処理の少なくとも１つを決定する、
メモリ装置。
【請求項２】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
前記プログラムは、前記優先度情報を参照し、管理先が前記第１の管理部から前記第２及び第３の管理部のうちの１つへ変更される前記新たな処理を決定する、
請求項１のメモリ装置。
【請求項３】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
前記プログラムは、前記第２の管理部によって管理されている前記処理に関する優先度を含む前記優先度情報を参照し、前記第２の管理部によって管理されている前記処理のうち、次に実行される処理を決定し、
前記プログラムは、前記第３の管理部によって管理されている前記処理に関する優先度を含む前記優先度情報を参照し、前記第３の管理部によって管理されている前記処理のうち、次に実行される処理を決定する、
請求項１のメモリ装置。
【請求項４】
不揮発性メモリと、
前記不揮発性メモリを制御するコントローラと、
を具備し、
前記コントローラは、第１乃至第３のプロセッサを具備し、
前記第１のプロセッサは、実行待ちであり前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てな新たな処理の実行先を決定し、
前記第２のプロセッサは、前記第２のプロセッサによって実行された処理が、前記第２のプロセッサによって実行された前記処理に続いて起動される次の処理が前記第２のプロセッサによって実行されるべきであるという依存関係を持つか否か決定し、前記第２のプロセッサによって実行された前記処理が前記依存関係を持つ場合に、前記次の処理が前記第２のプロセッサによって実行されるべきであると決定する、
メモリ装置。
【請求項５】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
前記次の処理が前記第２のプロセッサによって実行されるべきである場合に、前記プログラムは、前記第２の管理部を使用して前記次の処理を管理し、
前記次の処理が前記第２及び第３のプロセッサのいずれによっても実行可能な場合に、前記プログラムは、前記第１の管理部を使用して前記次の処理を管理する、
請求項４のメモリ装置。
【請求項６】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
前記次の処理が前記第２の処理によって実行されるべきである場合に、前記プログラムは、前記第２の管理部を使用して前記次の処理を管理し、
前記次の処理が前記第２及び第３のプロセッサのいずれでも実行可能であり、かつ、前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記ブログラムは、前記第２の管理部を使用して前記次の処理を管理し、前記次の処理が前記第２の及び第３のプロセッサのいずれでも実行可能であり、かつ、前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第３の管理部を使用して前記次の処理を管理し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値より多く、かつ、前記第３の管理部によって管理されている処理の数が前記第２のしきい値より多い場合に、前記プログラムは、前記第１の管理部を使用して前記次の処理を管理する、
請求項４のメモリ装置。
【請求項７】
不揮発性メモリと、
前記不揮発性メモリを制御するコントローラと、
を具備し、
前記コントローラは、第１乃至第３のプロセッサを具備し、
前記第１のプロセッサは、実行待ちであり前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てな新たな処理の実行先を決定し、
前記コントローラは、前記第１乃至第３のプロセッサで共有される共有メモリをさらに具備し、実行前の処理に対して、前記実行前の処理で使用される前記共有メモリのメモリ領域を割り当てる、
メモリ装置。
【請求項８】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更する、
請求項７のメモリ装置。
【請求項９】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
前記プログラムは、前記コントローラの一部を示すハードウェア識別情報と関連付けられている処理を、前記第１乃至第３の管理部のうち前記ハードウェア識別情報に対応する管理部で管理する、
請求項７のメモリ装置。
【請求項１０】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
第１の処理は、前記第２及び第３のプロセッサのうちのいずれかで実行され、
第２の処理は、前記第２及び第３のプロセッサのうちのいずれかで、前記第１の処理の後に実行され、
前記第１の処理は、前記第１の処理で使用される前記共有メモリのメモリ領域の少なくとも一部が前記第２の処理で使用される場合に、前記メモリ領域の少なくとも一部の領域情報を、前記第２の処理に通知する、
請求項７のメモリ装置。
【請求項１１】
前記コントローラによって実行されるプログラムを記憶するメモリをさらに具備し、
前記第１乃至第３のプロセッサは、前記プログラムによって制御され、
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記コントローラは、
前記第１のプロセッサに対応し、前記新たな処理及び前記新たな処理の実行順序を管理する第１の管理部と、
前記第２のプロセッサに対応し、前記第２のプロセッサによって実行されるべき処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理する第２の管理部と、
前記第３のプロセッサに対応し、前記第３のプロセッサによって実行されるべき処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理する第３の管理部と、
を具備し、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更し、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムは、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更し、
第１の処理は、前記第２及び第３のプロセッサのうちのいずれかで実行され、
第２の処理は、前記第２及び第３のプロセッサのうちのいずれかで、前記第１の処理の後に実行され、
第３の処理は、前記第２及び第３のプロセッサのうちのいずれかで、前記第２の処理の後に実行され、
前記第２の処理は、前記第１の処理から、前記第１乃至第３の処理のうちの少なくとも１つを示す識別情報を受け、前記第２の処理で用いられる情報を、前記第１乃至第３の処理のうちの少なくとも１つに対応する前記共有メモリの第１のメモリ領域から読み出し、前記第２の処理の実行結果を、前記第１乃至第３の処理のうちの少なくとも１つに対応する第２のメモリ領域へ格納する、
請求項７のメモリ装置。
【請求項１２】
前記第２の処理は、前記第１の処理に対応するメモリ領域から前記第２の処理で用いられる情報を読み出し、前記第２の処理の実行結果を、前記第３の処理に対応するメモリ領域へ格納する、
請求項１１のメモリ装置。
【請求項１３】
不揮発性メモリと、
前記不揮発性メモリを制御するコントローラと、
を具備し、
前記コントローラは、第１乃至第３のプロセッサを具備し、
前記第１のプロセッサは、実行待ちであり前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てな新たな処理の実行先を決定し、
前記コントローラは、前記第１乃至第３のプロセッサで共有される共有メモリをさらに具備し、実行前の処理に対して、前記実行前の処理で使用される前記共有メモリのメモリ領域を割り当て、
第１の処理は、前記第２及び第３のプロセッサのうちのいずれかで実行され、
第２の処理は、前記第２及び第３のプロセッサのうちのいずれかで、前記第１の処理の後に実行され、
第３の処理は、前記第２及び第３のプロセッサのうちのいずれかで、前記第２の処理の後に実行され、
前記第２の処理は、前記第１の処理から、前記第１乃至第３の処理のうちの少なくとも１つを示す識別情報を受け、前記第２の処理で用いられる情報を、前記第１乃至第３の処理のうちの少なくとも１つに対応する前記共有メモリの第１のメモリ領域から読み出し、前記第２の処理の実行結果を、前記第１乃至第３の処理のうちの少なくとも１つに対応する第２のメモリ領域へ格納する、
メモリ装置。
【請求項１４】
前記第１のプロセッサは、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記第２の処理は、前記第１の処理に対応するメモリ領域から前記第２の処理で用いられる情報を読み出し、前記第２の処理の実行結果を、前記第３の処理に対応するメモリ領域へ格納する、
請求項１３のメモリ装置。
【請求項１５】
第１乃至第３のプロセッサを含むコントローラを具備する不揮発性メモリの制御方法であって、
前記第１のプロセッサによって、新たな処理の実行先を決定し、前記新たな処理は、実行待ちであり、前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てである、ことと、
前記コントローラによって、前記新たな処理に関する優先度を含む優先度情報に基づいて、前記第２及び第３のプロセッサのうちの１つによって次に実行されるされるために、前記第１のプロセッサによって決定された実行先によって実行され得る前記新たな処理の少なくとも１つを決定することと、
を具備する制御方法。
【請求項１６】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
を具備し、
前記プログラムは、前記優先度情報を参照し、管理先が前記第１の管理部から前記第２及び第３の管理部のうちの１つへ変更される前記新たな処理を決定する、
請求項１５の制御方法。
【請求項１７】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部により、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部により、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部により、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
を具備し、
前記プログラムは、前記第２の管理部によって管理されている新たな処理に関する優先度を含む前記優先度情報を参照し、前記第２の管理部によって管理されている前記処理のうち、次に実行される処理を決定し、
前記プログラムは、前記第３の管理部によって管理されている新たな処理に関する優先度を含む前記優先度情報を参照し、前記第３の管理部によって管理されている前記処理のうち、次に実行される処理を決定する、
請求項１５の制御方法。
【請求項１８】
第１乃至第３のプロセッサを含むコントローラを具備する不揮発性メモリの制御方法であって、
前記第１のプロセッサによって、新たな処理の実行先を決定し、前記新たな処理は、実行待ちであり、前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てである、ことと、
前記第２のプロセッサによって、前記第２のプロセッサによって実行された処理が、前記第２のプロセッサによって実行された前記処理に続いて起動される次の処理が前記第２のプロセッサによって実行されるべきであるという依存関係を持つか否か決定することと、
前記第２のプロセッサによって、前記第２のプロセッサによって実行された前記処理が前記依存関係を持つ場合に、前記次の処理が前記第２のプロセッサによって実行されるべきであると決定することと、
を具備する制御方法。
【請求項１９】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
前記次の処理が前記第２のプロセッサによって実行されるべきである場合に、前記プログラムによって、前記第２の管理部を使用して前記次の処理を管理することと、
前記次の処理が前記第２及び第３のプロセッサのいずれによっても実行可能な場合に、前記プログラムによって、前記第１の管理部を使用して前記次の処理を管理することと、
を具備する、
請求項１８の制御方法。
【請求項２０】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
前記次の処理が前記第２の処理によって実行されるべきである場合に、前記プログラムによって、前記第２の管理部を使用して前記次の処理を管理することと、
前記次の処理が前記第２及び第３のプロセッサのいずれでも実行可能であり、かつ、前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記ブログラムによって、前記第２の管理部を使用して前記次の処理を管理することとと、前記次の処理が前記第２の及び第３のプロセッサのいずれでも実行可能であり、かつ、前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第３の管理部を使用して前記次の処理を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値より多く、かつ、前記第３の管理部によって管理されている処理の数が前記第２のしきい値より多い場合に、前記プログラムによって、前記第１の管理部を使用して前記次の処理を管理することと、
を具備する、
請求項１８のメモリ装置。
【請求項２１】
第１乃至第３のプロセッサを含むコントローラを具備する不揮発性メモリの制御方法であって、
前記第１のプロセッサによって、新たな処理の実行先を決定し、前記新たな処理は、実行待ちであり、前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てである、ことと、
前記コントローラによって、実行前の処理に対して、前記実行前の処理で使用される共有メモリのメモリ領域を割り当て、前記共有メモリは前記第１乃至第３のプロセッサで共有される、ことと、
を具備する制御方法。
【請求項２２】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
を具備する、
請求項２１の方法。
【請求項２３】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
を具備し、
前記プログラムは、前記コントローラの一部を示すハードウェア識別情報と関連付けられている処理を、前記第１乃至第３の管理部のうち前記ハードウェア識別情報に対応する管理部で管理する、
請求項２１の制御方法。
【請求項２４】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
第１の処理を、前記第２及び第３のプロセッサのうちのいずれかで実行することと、
第２の処理を、前記第２及び第３のプロセッサのうちのいずれかで、前記第１の処理の後に実行することと、
を具備し、
前記第１の処理は、前記第１の処理で使用される前記メモリ領域の少なくとも一部が前記第２の処理で使用される場合に、前記メモリ領域の少なくとも一部の領域情報を、前記第２の処理に通知する、
請求項２１の制御方法。
【請求項２５】
前記コントローラは、第１乃至第３の管理部を具備し、
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記制御方法は、
前記コントローラを制御するプログラムを実行することと、
前記第１のプロセッサに対応する前記第１の管理部によって、前記新たな処理及び前記新たな処理の実行順序を管理することと、
前記第２のプロセッサに対応する前記第２の管理部によって、前記第２のプロセッサによって実行されるべき前記処理及び前記第２のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第３のプロセッサに対応する前記第３の管理部によって、前記第３のプロセッサによって実行されるべき前記処理及び前記第３のプロセッサによって実行されるべき前記処理の実行順序を管理することと、
前記第２の管理部によって管理されている処理の数が前記第１のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の管理先を、前記第１の管理部から前記第２の管理部へ変更することと、
前記第３の管理部によって管理されている処理の数が前記第２のしきい値以下の場合に、前記プログラムによって、前記第１の管理部によって管理されている前記新たな処理の前記管理先を、前記第１の管理部から前記第３の管理部へ変更することと、
第１の処理を、前記第２及び第３のプロセッサのうちのいずれかで実行することと、
第２の処理を、前記第２及び第３のプロセッサのうちのいずれかで、前記第１の処理の後に実行することと、
第３の処理を、前記第２及び第３のプロセッサのうちのいずれかで、前記第２の処理の後に実行することと、
を具備し、
前記第２の処理は、前記第１の処理から、前記第１乃至第３の処理のうちの少なくとも１つを示す識別情報を受け、前記第２の処理で用いられる情報を、前記第１乃至第３の処理のうちの少なくとも１つに対応する前記共有メモリの第１のメモリ領域から読み出し、前記第２の処理の実行結果を、前記第１乃至第３の処理のうちの少なくとも１つに対応する第２のメモリ領域へ格納する、
請求項２１の制御方法。
【請求項２６】
前記第２の処理において、前記第１の処理に対応するメモリ領域から前記第２の処理で用いられる情報を読み出し、前記第２の処理の実行結果を、前記第３の処理に対応するメモリ領域へ格納する、
請求項２５の制御方法。
【請求項２７】
第１乃至第３のプロセッサを含むコントローラを具備する不揮発性メモリの制御方法であって、
前記第１のプロセッサによって、新たな処理の実行先を決定し、前記新たな処理は、実行待ちであり、前記第１乃至第３のプロセッサのいずれでも実行可能であるが未割り当てである、ことと、
前記コントローラによって、実行前の処理に対して、前記実行前の処理で使用される共有メモリのメモリ領域を割り当て、前記共有メモリは前記第１乃至第３のプロセッサで共有される、ことと、
第１の処理を、前記第２及び第３のプロセッサのうちのいずれかで実行することと、
第２の処理を、前記第２及び第３のプロセッサのうちのいずれかで、前記第１の処理の後に実行することと、
第３の処理を、前記第２及び第３のプロセッサのうちのいずれかで、前記第２の処理の後に実行することと、
を具備し、
前記制御方法は、前記第２の処理において、前記第１の処理から、前記第１乃至第３の処理のうちの少なくとも１つを示す識別情報を受けることと、前記第２の処理で用いられる情報を、前記第１乃至第３の処理のうちの少なくとも１つに対応する前記共有メモリの第１のメモリ領域から読み出すことと、前記第２の処理の実行結果を、前記第１乃至第３の処理のうちの少なくとも１つに対応する第２のメモリ領域へ格納することと、を具備する、
制御方法。
【請求項２８】
前記第１のプロセッサによって、前記第２のプロセッサによって実行されるべき実行待ち処理の数が第１のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第２のプロセッサであると決定し、前記第３のプロセッサによって実行されるべき実行待ち処理の数が第２のしきい値以下の場合、前記第１のプロセッサによって管理される前記新たな処理の前記実行先が前記第３のプロセッサであると決定し、
前記第２の処理において、前記第１の処理に対応するメモリ領域から前記第２の処理で用いられる情報を読み出すことと、前記第２の処理の実行結果を、前記第３の処理に対応するメモリ領域へ格納することと、を具備する、
請求項２７の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリ装置及び不揮発性メモリの制御方法に関する。
【背景技術】
【０００２】
ソリッドステートドライブ（ＳＳＤ）は、例えば、ＮＡＮＤ型フラッシュメモリなどのような不揮発性メモリを備える。ＮＡＮＤ型フラッシュメモリは、複数のブロック（物理ブロック）を備える。複数のブロックは、ワード線とビット線との交点に配置される複数のメモリセルを含む。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１４１９４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本実施形態は、利便性の高いメモリ装置及び不揮発性メモリの制御方法を提供する。
【課題を解決するための手段】
【０００５】
本実施形態によれば、メモリ装置は、不揮発性メモリと、不揮発性メモリを制御するコントローラとを含む。コントローラは、第１乃至第３のプロセッサを含む。第１のプロセッサは、実行待ちであり第１乃至第３のプロセッサのいずれでも実行可能な新たな処理の実行先を決定する。コントローラは、新たな処理に関する優先度を含む優先度情報に基づいて、第２及び第３のプロセッサのうちの１つによって次に実行されるために、第１のプロセッサによって決定された実行先を持つ新たな処理の少なくとも１つを決定する。
【図面の簡単な説明】
【０００６】
【図１】第１の実施形態に係る情報処理システムの構成の一例を示すブロック図。
【図２】第１の実施形態に係る制御プログラムの構成の一例を示すブロック図。
【図３】第１の実施形態に係るメモリ装置の組み込み状態の一例を示すブロック図。
【図４】第１の実施形態に係る情報処理システムの構成要素間の関係の一例を示すブロック図。
【図５】第１の実施形態に係る制御プログラム及びハードウェア部によって実行される処理の一例を示すフローチャート。
【図６】第２の実施形態に係る情報処理システムの構成要素間の関係の一例を示すブロック図。
【図７】第３の実施形態に係るメモリ装置の構成要素間の関係の一例を示すブロック図。
【図８】第３の実施形態に係るプロセッサ及びメモリの関係の一例を示すブロック図。
【図９】第３の実施形態に係るスケジューラの第１の処理の一例を示すフローチャート。
【図１０】第３の実施形態に係るスケジューラの第２の処理の一例を示すフローチャート。
【図１１】第３の実施形態に係るタスク間の領域情報の通知状態の一例を示すブロック図。
【図１２】第３の実施形態に係るタスク及びメモリ領域の関係の一例を示すブロック図。
【図１３】第４の実施形態に係る情報処理システムの詳細構成の一例を示すブロック図。
【図１４】第４の実施形態に係るストレージシステムの一例を示す斜視図。
【図１５】第５の実施形態に係るソフトウェア定義型プラットフォームの構成の一例を示すブロック図。
【図１６】第５の実施形態に係るソフトウェア定義型ＳＳＤプラットフォームで実現される２種類のスケジューリングを例示する図。
【図１７】第５の実施形態に係るメモリ装置の各階層で保持されるパラメータの例を示す図。
【図１８】第５の実施形態に係るスケジューリングの一例を示すフローチャート。
【図１９】第５の実施形態に係るスケジューリングの第１の例を示す図。
【図２０】第５の実施形態に係るスケジューリングの第２の例を示す図。
【図２１】第５の実施形態に係るスケジューリングの第３の例を示す図。
【図２２】第５の実施形態に係るタスクチェーンの例を示す図。
【図２３】第５の実施形態に係るタスク間での情報の受け渡しの例を示す図。
【図２４】第５の実施形態に係るタスクに対応する作業領域の例を示す図。
【図２５】第５の実施形態に係るＨＡＬによる通信の例を示すフローチャート。
【図２６】第５の実施形態に係るＨＡＬによる通信の例を示すブロック図。
【図２７】第５の実施形態に係るＮＡＮＤフラッシュドライバに対するＨＡＬ ＡＰＩに準拠した処理の例を示すフローチャート。
【図２８】第５の実施形態に係るＮＡＮＤフラッシュドライバに対するＨＡＬ ＡＰＩの例を示すブロック図。
【図２９】第５の実施形態に係るＮＣＱを用いたタスクの割り当ての例を示すブロック図。
【図３０】第５の実施形態に係るソフトウェア定義型ＳＳＤプラットフォームの機能の一例を示すブロック図。
【発明を実施するための形態】
【０００７】
以下、図面を参照しながら各実施形態について説明する。以下の説明において、略同一の機能及び構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【０００８】
［第１の実施形態］
本実施形態は、ソフトウェア定義型（Software Defined）プラットフォームを備えるメモリ装置について説明する。
【０００９】
ソフトウェア定義型プラットフォームは、例えば、メモリ装置の機能をハードウェアの制御から切り離し、ソフトウェアにより制御を実行する。
【００１０】
本実施形態において、メモリ装置は、例えばＳＳＤであるとするが、メモリカード、ハードディスクドライブ（ＨＤＤ）、ＨＤＤとＳＳＤとを含むハイブリッド型メモリ装置、光ディスク、ストレージ装置、メモリサーバなど様々な種別のメモリ装置でもよい。メモリ装置がＳＳＤの場合には、当該メモリ装置はＨＤＤと同じ通信インタフェースを持つ。
【００１１】
ＳＳＤであるメモリ装置は、不揮発性メモリを含む。本実施形態では、不揮発性メモリがＮＡＮＤ型フラッシュメモリを含む場合について説明する。しかしながら、不揮発性メモリは、例えば、ＮＯＲ型フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＰＲＡＭ（Phase change Random Access Memory）、ＲｅＲＡＭ（Resistive Random Access Memory）、又は、ＦｅＲＡＭ（Ferroelectric Random Access Memory）などＮＡＮＤ型フラッシュメモリではない他の種別のメモリを含むとしてもよい。また、不揮発性メモリは、３次元構造のフラッシュメモリを含むとしてもよい。
【００１２】
不揮発性メモリは、消去単位エリアごとに、データが一括して消去される。消去単位エリアは、複数の書き込み単位エリア及び複数の読み出し単位エリアを含む。不揮発性メモリがＮＡＮＤ型フラッシュメモリの場合、消去単位エリアはブロックに相当する。書き込み単位エリア及び読み出し単位エリアはページに相当する。
【００１３】
本実施形態において、アクセスとは、メモリへデータを書き込むこと、及び、メモリからデータを読み出すことの双方を意味する。
【００１４】
本実施形態において、処理単位は、タスクとする。しかしながら、例えば、ジョブ、プロセス、トランザクション、スレッドなど他の処理単位が用いられてもよい。例えば、スレッドは並列処理に対応した最小の処理単位であり、換言すれば分解すると同時処理できない最小の単位としてもよい。例えば、タスクは１以上のスレッドを含むとしてもよい。例えば、プロセスは１以上のタスクを含むとしてもよい。例えば、トランザクションは矛盾防止のために管理される処理単位であり、１以上のプロセスを含むとしてもよい。例えば、ジョブは情報処理装置又はプログラムに依頼される命令に対して実行される処理の単位としてもよい。
【００１５】
本実施形態において、プログラムは、コンピュータプログラムとする。コンピュータプログラムでは、コンピュータが行うべき処理が順序付けて記述されている。プログラムは、コンピュータで実行されることにより、コマンド、データ、及び、情報の発行及び受付、データ処理及び演算などの各種機能を実現可能である。
【００１６】
本実施形態において、コンピュータとは、例えば、命令にしたがって演算又は処理を実行する機械である。例えば、コンピュータは、メモリとプロセッサとを含む。メモリは、プログラムを記憶する。プロセッサは、メモリに記憶されているプログラムに記述された命令セット（例えば、データの転送、計算、加工、制御、管理）を実行するためのハードウェアである。本実施形態において、コンピュータは、広義に解釈されるべきであり、例えば、情報処理装置、メモリ装置のコントローラ、パーソナルコンピュータ、大型コンピュータ、マイクロコンピュータ、サーバ装置などを含む。本実施形態においては、コンピュータに代えて、複数のコンピュータが連携して動作するコンピュータシステムが用いられてもよい。
【００１７】
図１は、本実施形態に係る情報処理システムの一例を示すブロック図である。
【００１８】
情報処理システム１は、情報処理装置２とメモリ装置３とを含む。情報処理装置２は、メモリ装置３に対応するホスト装置として動作可能である。
【００１９】
メモリ装置３は、情報処理装置２に内蔵されてもよく、情報処理装置２とメモリ装置３とは、ネットワークなどによりデータを送受信可能に接続されるとしてもよい。メモリ装置３は、複数の情報処理装置２と通信可能に接続されてもよい。また、複数のメモリ装置３が、１以上の情報処理装置２と通信可能に接続されてもよい。
【００２０】
メモリ装置３は、制御回路の一例としてのコントローラ４と、不揮発性メモリ５とを含む。コントローラ４と不揮発性メモリ５とは、着脱可能とし、メモリ装置３のメモリ容量は自由に拡張できるとしてもよい。ここで、メモリ容量とは、メモリに書き込み可能な最大のデータ量とする。
【００２１】
コントローラ４のハードウェア部は、インタフェース部６、メモリ７Ａ，７Ｂ、プロセッサＰ0〜ＰN、メモリコントローラ９を含む。コントローラ４は、例えば不揮発性メモリ５と電気的に接続される。本実施形態においては、コントローラ４が複数のプロセッサＰ0〜ＰNを備える場合を例として説明するが、コントローラ４に備えられるプロセッサの数は１以上で自由に変更可能である。
【００２２】
インタフェース部６は、例えば情報処理装置２などのような外部装置からのデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などの受信を制御し、外部装置への送信を制御する。
【００２３】
メモリ７Ａは、作業用メモリとして使用される。メモリ７Ａは、例えばプロセッサＰ0〜ＰNによる処理対象のプログラム、データ、情報などを格納する。メモリ７Ａは、例えばＤＲＡＭ（Dynamic Random Access Memory）又はＳＲＡＭ（Static Random Access Memory）などのような揮発性メモリでもよく、又は、不揮発性メモリでもよい。
【００２４】
メモリ７Ｂは例えば不揮発性メモリとする。しかしながら、メモリ７Ｂの一部は揮発性メモリでもよい。メモリ７Ｂは、アドレス変換データ１０、制御プログラム１１、プログラムＦ0〜ＦMを格納する。なお、アドレス変換データ１０、制御プログラム１１、プログラムＦ0〜ＦMの一部又は全部は、プロセッサＰ0〜ＰN内のメモリ、メモリ７Ａ、不揮発性メモリ５などのような他のメモリに格納されていてもよい。
【００２５】
図１の例では、コントローラ４が複数のプログラムＦ0〜ＦMを備える場合を例として説明するが、コントローラ４に備えられるプログラムの数は１以上で自由に変更可能である。
【００２６】
アドレス変換データ１０は、書き込みデータ又は読み出しデータの論理アドレス（例えばLogical Block Addressing（ＬＢＡ））と物理アドレス（例えばPhysical Block Addressing（ＰＢＡ））とを関係付けたデータであり、例えばＬＵＴ（Look Up Table）である。アドレス変換データ１０は、テーブル形式のデータ構造を持つとしてもよく、例えばリスト形式などのような他のデータ構造を持つとしてもよい。
【００２７】
本実施形態に係るソフトウェア定義型プラットフォームは、制御プログラム１１、コントローラ４のハードウェア部、不揮発性メモリ５を含む。例えば、メモリ装置３がＳＳＤの場合、制御プログラム１１、コントローラ４のハードウェア部、不揮発性メモリ５は、ソフトウェア定義型のＳＳＤプラットフォーム（メモリ装置プラットフォーム）である。ソフトウェア定義型のＳＳＤプラットフォームを用いることで、ＳＳＤの機能をハードウェアの制御から切り離して、ソフトウェア制御可能である。
【００２８】
本実施形態において、プラットフォームとは、ハードウェア又はソフトウェアを動作させるために必要な基盤となるハードウェア、オペレーティングシステム（ＯＳ）、ミドルウェア、それらの組み合わせ、設定、環境などの総体を意味する。
【００２９】
プロセッサＰ0〜ＰNは、制御プログラム１１及びプログラムＦ0〜ＦMを実行する。プロセッサＰ0〜ＰNは、それぞれ管理部Ｃ0〜ＣNを備える。しかしながら、プロセッサＰ0〜ＰNと管理部Ｃ0〜ＣNとは別構成としてもよい。本実施形態において、プロセッサＰ0はマスタのプロセッサであり、プロセッサＰ1〜ＰNはマスタに従属して動作する従属のプロセッサであるとする。なお、プロセッサＰ0はマスタのプロセッサとしての機能に加えて、プロセッサＰ1〜ＰNと同様に従属のプロセッサとしての機能を含むとしてもよい。例えば、管理部Ｃ0〜ＣNとしては、キューが用いられ、実行待ちタスクは先入先出方式で管理されてもよい。しかしながら、管理部Ｃ0〜ＣNにおける実行待ちタスクは、例えば、複数の実行待ちタスクのうち高優先度のタスクが実行されるなど、他の基準にしたがって管理されてもよい。
【００３０】
制御プログラム１１は、ハードウェア部を抽象化する。例えば、ハードウェア部の抽象化は、プログラムＦ0〜ＦMと制御プログラム１１との間でやり取りされるデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などが特定のインタフェースに準拠することで実現される。例えば、プログラムＦ0〜ＦMは、特定のインタフェースに準拠したコマンドを制御プログラム１１に発行することで、制御プログラム１１によって実現される機能を使用可能である。制御プログラム１１は、プログラムＦ0〜ＦMによって発行された特定のインタフェースに準拠するコマンドにしたがってハードウェア部に対して処理を実行し、又は、プログラムＦ0〜ＦMから受けた特定のインタフェースに準拠する情報をハードウェア部に対応する形式の情報に変換する。
【００３１】
本実施形態において、特定のインタフェースは、例えば、一方のプログラムが他方のプログラムを利用するために定義されている規約及び手順である。より具体的には、特定のインタフェースは、例えば、あるプログラムの機能及び管理するデータなどを、他のプログラムから呼び出し、呼び出された機能及び管理するデータなどを利用するための手順及びデータ形式などを定めた規約である。
【００３２】
制御プログラム１１は、プログラムＦ0〜ＦMがメモリ装置３の例えばコントローラ４などのようなハードウェア部に非依存となるように、プログラムＦ0〜ＦMとハードウェア部との間で基本動作を実現し、ハードウェアの違いを吸収する共通モジュールである。本実施形態において、非依存とは、少なくとも、協働する他方のソフトウェア又はハードウェアが取り替えられたとしても、引き続き利用可能な性質とする。そのため、制御プログラム１１は、ＡＰＩ（Application Programming Interface）、例えばＬＢＡインタフェースなどの論理インタフェース、及び、例えばＰＢＡインタフェースなどの物理インタフェースに準拠している。例えば、制御プログラム１１は、ＡＰＩ及び論理インタフェースにより、ハードウェア部に非依存な取り替え可能ＳＳＤモジュールとデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。例えば、後で説明する図４のモジュール１３１〜１３６は、ＳＳＤモジュールでもよい。
【００３３】
本実施形態において、例えば、物理インタフェースは、ハードウェアインタフェースでもよい。
【００３４】
本実施形態において、例えば、論理インタフェースは、ソフトウェアインタフェースでもよく、例えば、物理インタフェースの上に論理的に構成され、例えば、物理インタフェース上のアドレスの追加などに使用される。
【００３５】
例えば、制御プログラム１１は、コントローラ４のハードウェア部で実行された場合に、コマンド、情報、データなどを受け取るために定義された特定のインタフェースにしたがってプログラムＦ0〜ＦMのうちのいずれかによって発行されたコマンドを受け、コマンドにしたがってコントローラ４のハードウェア部及び不揮発性メモリ５に対する制御を実行するドライバを含み、コントローラ４のハードウェア部に不揮発性メモリ５に対するアクセスを実行させる。
【００３６】
また、制御プログラム１１は、不揮発性メモリ５に対する管理情報を管理し、特定のインタフェースにしたがってプログラムＦ0〜ＦMのうちのいずれかによって発行された管理情報の出力コマンドを受けた場合に、管理情報を出力コマンドの発行元へ送る。
【００３７】
さらに、制御プログラム１１は、特定のインタフェースにしたがってプログラムＦ0〜ＦMのうちのいずれかによって発行された不揮発性メモリ５に対する処理の設定情報を受けた場合に、設定情報にしたがって不揮発性メモリ５に対する処理を実行する。
【００３８】
本実施形態において、プログラムＦ0〜ＦMは、自由に組み合わせてもよい。
【００３９】
制御プログラム１１は、例えばタスクのスケジューリングを行う。これにより、プロセッサＰ0は、プロセッサＰ1〜ＰNに備えられている管理部Ｃ1〜ＣNの状態を監視し、管理部Ｃ0で管理されているタスクを、待ち状態のタスクの少ない管理部Ｃ1〜ＣNのいずれかに割り振る。それぞれのプロセッサＰ1〜ＰNは、管理部Ｃ1〜ＣNで管理されているタスクを実行する。
【００４０】
本実施形態において、メモリ７Ａ，７Ｂにおける制御プログラム１１の格納位置、プログラムＦ0〜ＦMの格納位置、制御プログラム１１の作業領域の位置、各プログラムＦ0〜ＦMの作業領域の位置は、メモリ装置３の起動時に決定され、その後起動中は再配置されない。これにより、再配置のための時間が不要となり、処理を高速化することができる。
【００４１】
プログラムＦ0〜ＦMは、ＡＰＩを用いることにより、制御プログラム１１の機能を利用可能であり、制御プログラム１１と連携して動作する。プログラムＦ0〜ＦMは、例えば、ファームウェア、アプリケーションプログラム、モジュール、又はハンドラなどのような各種のソフトウェアである。例えば、ハンドラとは、処理リクエストが発生した場合に起動されるプログラムである。本実施形態において、プログラムＦ0〜ＦMはファームウェアの場合を例として説明するが、プログラムＦ0〜ＦMの種別についてはこれに限定されない。本実施形態において、プログラムＦ0〜ＦMは、例えば、メモリ装置３のユーザが作成したプログラムでもよく、メモリ装置３のメーカーが作成したプログラムでもよい。
【００４２】
例えば、プロセッサＰ0〜ＰNは、制御プログラム１１とプログラムＦ0〜ＦMとの協働により、受付部８１、アドレス変換部８２、書き込み部８３、読み出し部８４として機能する。
【００４３】
プログラムＦ0〜ＦMと制御プログラム１１とがメモリ装置３において協働して動作するため、プログラムＦ0〜ＦMのソフトウェア開発者は、メモリ装置３のハードウェア部を考慮することなく、プログラムＦ0〜ＦMを生成することができる。
【００４４】
メモリコントローラ９は、不揮発性メモリ５に対するアクセスを制御する。
【００４５】
データ書き込み時に、情報処理装置２は、メモリ装置３へ、書き込みコマンドと、書き込みデータと、書き込みデータを示す論理アドレスとを送信する。
【００４６】
プロセッサＰ0〜ＰNで実現される受付部８１は、情報処理装置２からインタフェース部６経由で、書き込みコマンド、書き込みデータ、論理アドレスを受ける。
【００４７】
アドレス変換部８２は、受付部８１によって書き込みコマンドが受け付けられた場合に、アドレス変換データ１０に対して、書き込みコマンドに付されていた論理アドレスを、不揮発性メモリ５の物理アドレスに変換するための関係付けを行う。
【００４８】
書き込み部８３は、メモリコントローラ９経由で、アドレス変換部８２によって得られた不揮発性メモリ５の物理アドレスの示す位置に、書き込みデータを書き込む。
【００４９】
データ読み出し時に、情報処理装置２は、メモリ装置３へ、読み出しコマンドと、読み出しデータを示す論理アドレスとを送信する。
【００５０】
受付部８１は、情報処理装置２からインタフェース部６経由で、読み出しコマンドと論理アドレスとを受ける。
【００５１】
アドレス変換部８２は、受付部８１によって読み出しコマンドが受け付けられた場合に、アドレス変換データ１０を用いて、読み出しコマンドに付されていた論理アドレスを物理アドレスに変換する。
【００５２】
読み出し部８４は、メモリコントローラ９経由で、不揮発性メモリ５の物理アドレスの示す位置から、読み出しデータを読み出す。そして、読み出し部８４は、読み出しデータを、インタフェース部６経由で、情報処理装置２に送る。
【００５３】
図２は、本実施形態に係る制御プログラム１１の構成の一例を示すブロック図である。
【００５４】
制御プログラム１１は、ＡＰＩに準拠している。このため、プログラムＦ0〜ＦMは制御プログラム１１の各種の機能を使用可能である。ここで、ＡＰＩとは、例えば、複数のプログラムが互いにデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取りするために使用する仕様である。ＡＰＩは、例えば、サブルーチン、データ構造、オブジェクトクラス、変数などの仕様を含む。
【００５５】
また、制御プログラム１１は，論理インタフェース、及び物理インタフェースに準拠している。このため、メモリ装置３は、典型的なＳＳＤと同様の動作を実現可能である。ここで、論理インタフェースは、例えば、ソフトウェアとの間で論理アドレスを扱う際の仕様である。物理インタフェースは、例えば、ハードウェアとの間で物理アドレスを扱う際の仕様である。
例えば、制御プログラム１１は、モジュール間通信部１１１、優先制御部１１２、割り込みハンドラ１１３、アクセス部１１４、情報管理部１１５、ハードウェアドライバ１１６、処理実行部１１７を含む。
【００５６】
モジュール間通信部１１１は、特定のインタフェースにしたがって、例えば、各種のプログラム間でのデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などの送信及び受信を行う。
【００５７】
優先制御部１１２は、例えば、プログラムＦ0〜ＦMの優先度に応じて、実行するプログラムＦ0〜ＦMを切り替える。より具体的には、優先制御部１１２は、例えば、各種のプログラムＦ0〜ＦMの優先度をタスク単位で管理し、優先度の高いタスクを優先して実行する。
【００５８】
割り込みハンドラ１１３は、メモリ装置３のいずれかのハードウェア又はソフトウェアからの割り込みイベントを検知し、検知された割り込みに応じた処理を実行する。
【００５９】
アクセス部１１４は、不揮発性メモリ５に対する消去、読み出し、書き込みなどの基本動作を制御する。
【００６０】
情報管理部１１５は、不揮発性メモリ５に対する各種の管理情報１１５ａを管理する。例えば、情報管理部１１５は、例えば統計情報、集計情報、制御情報などを含む管理情報１１５ａを生成及び管理する。情報管理部１１５で管理される管理情報１１５ａは、少なくとも、不揮発性メモリ５に対する処理で用いられる設定情報１１７ａの生成に必要な情報である。管理情報１１５ａは、例えば、不揮発性メモリ５に含まれているＮＡＮＤ型フラッシュメモリの各ブロックに対する消去回数、各ブロックに対する消去頻度、各ページに対する読み出し回数、各ページに対する読み出し頻度、各ページに対する書き込み回数、各ページに対する書き込み頻度、各ブロックの大きさ、各ブロック内のページの数、各ページの大きさ、推定書き込み速度、推定書き込み遅延時間、推定読み出し速度、推定読み出し遅延時間、などのうちの少なくとも１つを含む。
【００６１】
情報管理部１１５は、プログラムＦ0〜ＦMのうちのいずれかから管理情報１１５ａの出力コマンドを受けた場合に、出力コマンドの発行元へ管理情報１１５ａを送る。
【００６２】
ハードウェアドライバ１１６は、メモリ装置３の各種のハードウェアを制御する。ハードウェアドライバ１１６の種別としては、例えば、インタフェース部６を制御するドライバ、電源を制御するドライバ、タイマーを制御するドライバなどがある。
【００６３】
処理実行部１１７は、プログラムＦ0〜ＦMのうちのいずれかから不揮発性メモリ５に対する処理の設定情報１１７ａを受けた場合に、設定情報１１７ａにしたがって不揮発性メモリ５に対する処理を実行する。
【００６４】
例えば、設定情報１１７ａは、少なくとも、不揮発性メモリ５に対する処理で用いられるパラメータとしてもよい。より具体的には、例えば、設定情報１１７ａは、ガーベージコレクションの実行条件情報であり、処理実行部１１７は、ガーベージコレクションの実行条件情報にしたがってガーベージコレクションを実行するとしてもよい。また、例えば、設定情報１１７ａは、不揮発性メモリ５のどの位置にどのようなデータを書き込むかの書き込み位置情報であり、処理実行部１１７は、不揮発性メモリ５における書き込み位置情報の示す位置にデータを書き込むとしてもよい。
【００６５】
図３は、本実施形態に係るメモリ装置３の組み込み状態の一例を示すブロック図である。この図３では、プログラムＦ0を組み込む場合を例として説明するが、例えばプログラムＦ1〜ＦMなどのような他のプログラムを組み込む場合も同様である。
【００６６】
メモリ装置３のメーカーは、メモリ装置３を生成する。メモリ装置３は、初期的には、制御プログラム１１、コントローラ４のハードウェア部４Ｈ、不揮発性メモリ５を含むソフトウェア定義型のＳＳＤプラットフォームを備える。本実施形態においては、メモリ装置３は、初期的に、ファームウェア又はアプリケーションプログラムなどのようなプログラムＦ0を備えていなくてもよい。ここで、初期的とは、例えば、製品出荷時、納品時、又は、販売時である。なお、メモリ装置３は、初期的に、ソフトウェア定義型のＳＳＤプラットフォームと協働し、メーカーが推奨する典型的なプログラム又は標準のプログラムを備えているとしてもよい。
【００６７】
また、メーカーは、プログラムＦ0の開発を支援するソフトウェア開発装置１３を、例えばユーザ、顧客、メモリ装置３の購入者、又は、ソフトウェア開発者などのような第三者に、提供又は販売する。本実施形態では、ソフトウェア開発装置１３をソフトウェア開発者が使用する場合を例として説明する。
【００６８】
ソフトウェア開発装置１３は、不揮発性メモリ５のエミュレータ、メモリ装置３のシミュレータを備える。これにより、例えば、外部ネットワークとは物理的に遮断されているような閉じた開発環境であっても、ソフトウェア開発者は、ソフトウェア開発装置１３を用いてプログラムＦ0の開発を進めることができる。
【００６９】
ソフトウェア開発装置１３は、ソフトウェア開発者によるプログラムＦ0の開発を支援する。ソフトウェア開発者は、例えば、メモリ装置３のユーザ又は購入者などでもよい。本実施形態において、プログラムＦ0は、例えばユーザ定義の取り替え可能モジュールであり、制御プログラム１１の上位層モジュールである。
【００７０】
制御プログラム１１は、ＡＰＩ及び論理インタフェースに準拠しているため、ソフトウェア開発者は、効率的に、メモリ装置３のユーザ又は購入者の要望に応じたプログラムＦ0を生成し、プログラムＦ0を制御プログラム１１とともに協働させることが可能である。
【００７１】
プログラムＦ0が生成されると、メモリ装置３のユーザ、購入者、又は、ソフトウェア開発者は、メモリ装置３に対してプログラムＦ0を組み込む。
【００７２】
本実施形態においては、制御プログラム１１がメモリ装置３に備えられているため、プログラムＦ0はハードウェア部４Ｈを意識することなく動作可能である。
【００７３】
ユーザ又は購入者は、自己に適したプログラムＦ0をメモリ装置３に容易に実装し、使用することができる。
【００７４】
本実施形態においては、不揮発性メモリ５とハードウェア４Ｈとの間で第１のインタフェース又はプロトコルが適用される。ハードウェア４Ｈと制御プログラム１１との間で第２のインタフェース又はプロトコルが適用される。プログラムＦ0〜ＦMと制御プログラム１１との間で第３のインタフェース又はプロトコルが適用される。これにより、不揮発性メモリ５、ハードウェア４Ｈ、制御プログラム１１、プログラムＦ0〜ＦMのうちの少なくとも一部が取り替えられても、他のソフトウェア又はハードウェアを引き続き利用可能である。
【００７５】
図４は、本実施形態に係る情報処理システム１の構成要素間の関係の一例を示すブロック図である。
【００７６】
メモリ装置３は、主に２つの抽象化レイヤを備えることにより、取り替え可能ＳＳＤモジュール１３１〜１３７の開発を支援する。上記プログラムＦ0〜ＦMは取り替え可能ＳＳＤモジュール１３３〜１３６に相当する。
【００７７】
第１の抽象化レイヤは、ソフトウェア定義型のＳＳＤプラットフォームを含む。ソフトウェア定義型のＳＳＤプラットフォームは、制御プログラム１１、ハードウェア部４Ｈ、不揮発性メモリ５を含む。ソフトウェア定義型のＳＳＤプラットフォームは、例えばメモリ装置３のメーカーによって生成され、メモリ装置３に実装される。第１の抽象化レイヤにおいて、不揮発性メモリ５は、例えば、複数のＮＡＮＤ型フラッシュメモリＢ0〜ＢPを含む。
【００７８】
第２の抽象化レイヤは、取り替え可能ＳＳＤモジュール１３１〜１３７を含む。第２の抽象化レイヤは、上位でメモリ制御を実行する。取り替え可能ＳＳＤモジュール１３１〜１３６は、例えばＡＰＩ及び論理インタフェースにより、制御プログラム１１とデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。第２の抽象化レイヤにおいて、割り込みハンドラ１３７は、制御プログラム１１を用いることなく、ハードウェア部４Ｈと、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。
【００７９】
第２の抽象化レイヤにおいて、ＳＳＤモジュール１３１及び新しいモジュール１３２は、例えば、メーカーによって生成され、標準のＳＳＤモジュール又は機能としてメモリ装置３に組み込まれる。
【００８０】
モジュール１３３〜１３５、ドライバモジュール１３６、割り込みハンドラ１３７は、ソフトウェア開発者などの第三者によって生成され、メモリ装置３に組み込まれる。
【００８１】
ＳＳＤモジュール１３１、新しいモジュール１３２、モジュール１３３〜１３５は、例えば情報処理装置２などのような外部装置に備えられているドライバ１４１〜１４５との間で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。
【００８２】
ドライバモジュール１３６、割り込みハンドラ１３７は、例えばネットワーク機器、撮影装置、又はセンサなどのような外部ハードウェア部１４６との間で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。ドライバモジュール１３６は、外部ハードウェア部１４６を制御可能である。割り込みハンドラ１３７は、外部ハードウェア部１４６又はハードウェア部４Ｈからの割り込みイベントを検知し、検知された割り込みに応じた処理をハードウェア部４Ｈ又は外部ハードウェア部１４６に対して実行する。
【００８３】
さらに、モジュール１３３〜１３５とドライバモジュール１３６は、特定のインタフェースにしたがって、制御プログラム１１と、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などをやり取り可能である。
【００８４】
図５は、本実施形態に係る制御プログラム１１及びハードウェア部４Ｈによって実行される処理の一例を示すフローチャートである。
【００８５】
ステップＳ５０１において、制御プログラム１１は、プログラムＦ0〜ＦMのいずれかから、特定のインタフェースにしたがって、アクセスコマンドを受ける。例えば、制御プログラム１１は、書き込みコマンド、論理アドレス、書き込みデータを受ける。例えば、制御プログラム１１は、読み出しコマンド、論理アドレスを受ける。
【００８６】
ステップＳ５０２において、制御プログラム１１及びハードウェア部４Ｈは、アクセスコマンドにしたがって、論理アドレスを物理アドレスに変換し、不揮発性メモリ５に対して書き込みデータの書き込み、又は、読み出しデータの読み出しを行う。制御プログラム１１は、不揮発性メモリ５から読み出しデータが読み出された場合に、読み出しデータを、読み出しコマンドの発行元に送る。
【００８７】
ステップＳ５０３において、制御プログラム１１は、不揮発性メモリ５に対する管理情報１１５ａを生成する。
【００８８】
ステップＳ５０４において、制御プログラム１１は、プログラムＦ0〜ＦMのいずれかから、特定のインタフェースにしたがって、管理情報１１５ａの出力コマンドを受ける。
【００８９】
ステップＳ５０５において、制御プログラム１１は、出力コマンドにしたがって、管理情報１１５ａを出力コマンドの発行元に送る。
【００９０】
ステップＳ５０６において、制御プログラム１１は、プログラムＦ0〜ＦMのいずれかから、特定のインタフェースにしたがって、処理実行コマンドと設定情報１１７ａとを受ける。
【００９１】
ステップＳ５０７において、制御プログラム１１及びハードウェア部４Ｈは、処理実行コマンドと設定情報１１７ａとにしたがって不揮発性メモリ５に対する処理を実行する。
【００９２】
以上説明した本実施形態においては、メモリ装置３のハードウェア部４Ｈに依存することなく、プログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３６を生成し、プログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３６をメモリ装置３に組み込み、メモリ装置３を用いることができる。
【００９３】
これにより、メモリ装置３の利便性を向上させることができる。
【００９４】
本実施形態においては、メモリ装置３のハードウェア部４Ｈが変更又はバージョンアップされた場合であっても、新たなメモリ装置３においてプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３６を継続して使用可能である。
【００９５】
プログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３６は、メモリ装置３のハードウェア部４Ｈを意識することなく、開発することができる。
【００９６】
メモリ装置３のユーザ又は購入者は、もし新たなメモリ装置３を導入する場合であっても、先に生成されたプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３６を新たなメモリ装置３で継続して用いることができる。
【００９７】
したがって、本実施形態においては、メモリ装置３の開発、保守、メンテナンスの労力、費用、時間を削減することができ、開発作業を効率化することができる。
【００９８】
本実施形態においては、メモリ装置３のユーザ又は購入者が自分に適したプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３７を使用することができる。したがって、ユーザは、メモリ装置３の運用に、自己のノウハウを導入容易である。
【００９９】
本実施形態において、メモリ装置３のメーカーは、メモリ装置３を大量に生産・販売することができる。
【０１００】
本実施形態において、ユーザは、例えばファームウェア又はアプリケーションプログラムなどのようなプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３７を独自に開発し、メモリ装置３へプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３７を容易に実装することができる。
【０１０１】
本実施形態においては、ネットワーク機器、撮影装置、又は、センサなどの外部ハードウェア部１４６とメモリ装置３とを容易に接続し、外部ハードウェア部１４６から受けたデータを不揮発性メモリ５に書き込むことができる。換言すれば、本実施形態においては、メモリ装置３がドライバモジュール１３６を備えることにより、メモリ装置３が外部ハードウェア部１４６との間の通信インタフェースを容易に実装することができる。したがって、本実施形態に係るメモリ装置３は、例えば、ＩｏＴ（Internet of Things）に適している。
【０１０２】
本実施形態においては、例えば、メモリ装置３のメーカーは、自社の不揮発性メモリ５を購入・使用するユーザに、安く又は無償で、制御プログラム１１、ハードウェア部４Ｈ、ソフトウェア開発装置１３のうちの少なくとも１つを提供する。これにより、メモリ装置３のメーカーは自社の不揮発性メモリ５の販売を促進することができる。
【０１０３】
本実施形態においては、メモリ装置３を販売又は納品する前であっても、ソフトウェア開発者はソフトウェア開発装置１３を用いてプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３７を生成することができる。本実施形態において、メモリ装置３のメーカーは、ユーザ又は購入者に固有のプログラムを開発することなく、メモリ装置３を迅速に販売又は納品することができる。したがって、メモリ装置３の製造からユーザ又は購入者へメモリ装置３を納品するまでの期間を短縮することができる。
【０１０４】
メモリ装置３のユーザ又は購入者は、ガーベージコレクションの実行条件の変更、ガーベージコレクションの削除、どのようなデータを不揮発性メモリ５のどの位置に書き込むかの決定を、自由に実行させることができ、自己の使用態様に応じて不揮発性メモリ５の寿命を延ばすことができる。
【０１０５】
本実施形態において、制御プログラム１１の格納位置、プログラムＦ0〜ＦMの格納位置、制御プログラム１１の作業用領域の位置、各プログラムＦ0〜ＦMの作業用領域の位置は、メモリ装置３の起動時に決定され、その後動作中は再配置されない。これにより、プログラム及びデータの再配置が必要なく、メモリ装置３の動作を高速化することができる。
【０１０６】
本実施形態においては、不揮発性メモリ５、ハードウェア部４Ｈ、制御プログラム１１、プログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３７のうちの少なくとも一部が取り替えられても、他のソフトウェア又はハードウェアを引き続き利用可能である。例えば、不揮発性メモリ５の開発に伴って、不揮発性メモリ５の世代に変更が生じた場合であっても、既存のプログラムＦ0〜ＦM、取り替え可能ＳＳＤモジュール１３１〜１３７、コントローラ４のハードウェア部４Ｈ、及び制御プログラム１１を再利用できる。
【０１０７】
［第２の実施形態］
本実施形態においては、上記第１の実施形態で説明した情報処理システム１の変形例について説明する。
【０１０８】
本実施形態において、メモリ装置３は、仮想マシンごとに、仮想メモリ装置（仮想ＳＳＤ）を割り当てる。
【０１０９】
図６は、本実施形態に係る情報処理システムの構成要素間の関係の一例を示すブロック図である。
【０１１０】
本実施形態に係る情報処理システム１Ａは、メモリ装置３と仮想マシンＶＭ0〜ＶＭPとを備える。
【０１１１】
メモリ装置３は、大きなメモリ容量を持つ。メモリ装置３は、仮想メモリ装置ＶＳ0〜ＶＳPと、制御プログラム１１と、ＮＡＮＤ型フラッシュメモリＢ0〜ＢPとを備える。ＮＡＮＤ型フラッシュメモリＢ0〜ＢPは、上記図１の不揮発性メモリ５に相当する。
【０１１２】
仮想メモリ装置ＶＳ0〜ＶＳPは、それぞれ仮想マシンＶＭ0〜ＶＭPに対応付けられている。それぞれの仮想メモリ装置ＶＳ0〜ＶＳPは、互いに独立して動作可能であり、これにより安定したパフォーマンスを実現する。
【０１１３】
制御プログラム１１は、標準コマンドセット（Common Command Set）にしたがって、動作可能である。制御プログラム１１は、メモリ装置３において、複数の仮想メモリ装置ＶＳ0〜ＶＳPと協働する。制御プログラム１１は、各仮想メモリ装置ＶＳ0〜ＶＳPのパラメータを個別に変更及び管理する。
【０１１４】
例えば、制御プログラム１１は、仮想メモリ装置ＶＳ0〜ＶＳPごとに、メモリ容量、ガーベージコレクションの設定、オーバープロビショニングの設定、メモリの粒度（Granularity）の設定、信頼性（エラー訂正能力）の程度を変更可能である。ここで、ガーベージコレクションとは、プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能である。オーバープロビショニングとは、予備領域を確保することをいう。メモリの粒度とは、例えば、ＮＡＮＤ型フラッシュメモリのブロック及びページのサイズ、ハードディスクのセクタのサイズなど、書き込みを行う単位のサイズ、読み出しを行う単位のサイズ、及び、消去を行う単位のサイズを意味する。
【０１１５】
制御プログラム１１は、各仮想メモリ装置ＶＳ0〜ＶＳPの数、各仮想メモリ装置ＶＳ0〜ＶＳPのメモリ容量を適宜変更可能である。
【０１１６】
制御プログラム１１は、仮想メモリ装置ＶＳ0〜ＶＳPごとの異なるソフトウェアポートを備える。制御プログラム１１は、各仮想メモリ装置ＶＳ0〜ＶＳPに対して、ＮＡＮＤ型フラッシュメモリＢ0〜ＢPを割り当てる。例えば、制御プログラム１１は、各仮想メモリ装置ＶＳ0〜ＶＳPに対して割り当てられたＮＡＮＤ型フラッシュメモリＢ0〜ＢPを、各仮想メモリ装置ＶＳ0〜ＶＳPに対応するネームスペースにより管理する。換言すれば、不揮発性メモリ５は複数のネームスペースに分割され、各仮想メモリ装置ＶＳ0〜ＶＳPが自己に対応するネームスペースに対応付けられている。
【０１１７】
本実施形態において、ネームスペースとは、不揮発性メモリ５に含まれる複数のブロックを区分けすることによって得られるメモリのスペースである。仮想メモリ装置ＶＳ0〜ＶＳPごとにネームスペースを割り当てることにより、仮想メモリ装置ＶＳ0〜ＶＳPのうちの少なくとも２つの仮想メモリ装置で論理アドレスが重複する場合であっても、ネームスペースの識別情報と論理アドレスとを用いて適切なデータをアクセスすることができる。
【０１１８】
以上説明した本実施形態においては、１つのメモリ装置３を複数の仮想メモリ装置ＶＳ0〜ＶＳPとして扱うことができ、メモリ装置３の利便性をさらに向上させることができる。
【０１１９】
本実施形態においては、ネームスペースを用いて、各仮想メモリ装置ＶＳ0〜ＶＳPに対するＮＡＮＤ型フラッシュメモリＢ0〜ＢPの割り当てを管理するため、仮想メモリ装置ＶＳ0〜ＶＳPからＮＡＮＤ型フラッシュメモリＢ0〜ＢPに対するアクセスの精度を向上させることができる。
【０１２０】
本実施形態においては、それぞれの仮想メモリ装置ＶＳ0〜ＶＳPが互いに独立して動作可能であるため、安定したパフォーマンスを実現することができる。
【０１２１】
［第３の実施形態］
本実施形態においては、上記第１及び第２の実施形態の変形例であり、スケジューラを含む制御プログラム１１によって複数のプロセッサを制御するメモリ装置について説明する。
【０１２２】
図７は、本実施形態に係るメモリ装置３の構成要素間の関係の一例を示すブロック図である。この図７において、制御プログラム１１と、モジュール１３１〜１３６と、割り込みハンドラ１３７とは、ソフトウェアとする。ドライバ１４１〜１４５及び外部ハードウェア部１４６は、ハードウェアとする。
【０１２３】
メモリ装置３は、制御プログラム１１と、ハードウェア部４Ｈと、複数のＮＡＮＤ型フラッシュメモリＢ0〜ＢPとを含む。ハードウェア部４Ｈは、複数のプロセッサＰ1〜ＰNと、メモリ７Ａとを含む。
【０１２４】
制御プログラム１１は、スケジューラ１５としての機能を含む。なお、スケジューラ１５は、ハードウェアにより実現されてもよい。
【０１２５】
メモリ７Ａは、複数のプロセッサＰ1〜ＰNによって共有される。プロセッサＰ1〜ＰNのいずれかがメモリ７Ａにデータ、情報、信号、コマンド、メッセージ、リクエスト、指令を格納し、プロセッサＰ1〜ＰNのうちの他のプロセッサがメモリ７Ａからデータ、情報、信号、コマンド、メッセージ、リクエスト、指令を読み出すことにより、プロセッサＰ1〜ＰN間でデータ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取り可能である。
【０１２６】
例えば、モジュール１３１〜１３６と制御プログラム１１との間は、標準化された特定のインタフェースにより、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取り可能とする。
【０１２７】
例えば、ＳＳＤモジュール１３１〜１３６と、外部装置に備えられているドライバ１４１〜１４５及び外部ハードウェア部１４６との間は、独自のインタフェースにより、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取り可能とする。外部ハードウェア部１４６は、例えば、メモリ装置３に対する外部のメモリ装置としてもよく、外部のＮＡＮＤ型フラッシュメモリとしてもよい。
【０１２８】
例えば、複数のＮＡＮＤ型フラッシュメモリＢ0〜ＢPは、不揮発性メモリ５のメーカーによって生成される。
【０１２９】
例えば、ハードウェア部４Ｈは、コントローラ４のメーカーによって生成される。
【０１３０】
例えば、制御プログラム１１は、不揮発性メモリ５のメーカー、コントローラ４のメーカー、又は、第１のソフトウェア開発者によって生成される。
【０１３１】
例えば、モジュール１３１，１３２は、不揮発性メモリ５のメーカー、コントローラ４のメーカー、又は、第１のソフトウェア開発者によって生成される。
【０１３２】
例えば、モジュール１３３〜１３５、ドライバモジュール１３６、割り込みハンドラ１３７は、第２のソフトウェア開発者によって生成される。
【０１３３】
本実施形態において、スケジューラ１５は、例えば、どのプロセッサに、どのタスクを実行させるか、を動的に決定する。換言すれば、スケジューラ１５は、例えば、動的タスクスケジューラを含む。
【０１３４】
以下で、本実施形態に係る制御プログラム１１による制御の例について説明する。
【０１３５】
図８は、本実施形態に係るプロセッサＰ0〜Ｐ2及びメモリ７Ａの関係の一例を示すブロック図である。この図８では、説明を簡略化するためにプロセッサが３つの場合を例とし
て説明するが、プロセッサが４以上の場合も同様である。また、マスタのプロセッサＰ0が従属のプロセッサとしての機能も含む場合、プロセッサは２以上であればよい。
【０１３６】
プロセッサＰ0〜Ｐ2は、それぞれ管理部Ｃ0〜Ｃ2とスケジューラ１５０〜１５２とを備える。プロセッサＰ0〜Ｐ2は、ハードウェア部４Ｈの他のハードウェアを制御し、これにより不揮発性メモリ５に対する書き込みデータの書き込み、読み出しデータの読み出し、書き込まれたデータの消去を制御する。
【０１３７】
管理部Ｃ0は、プロセッサＰ0に対応しており複数の実行待ち処理とその実行順序を管理可能である。
【０１３８】
管理部Ｃ1は、プロセッサＰ1で実行される実行待ち処理とその実行順序を管理可能である。
【０１３９】
管理部Ｃ2は、プロセッサＰ2で実行される実行待ち処理とその実行順序を管理可能である。
【０１４０】
本実施形態において、管理部Ｃ1，Ｃ2で管理可能な最大のタスク数は、２とするが、３以上でもよい。
【０１４１】
スケジューラ１５は、プロセッサＰ0でスケジューリングを行うスケジューラ１５０と、プロセッサＰ1でスケジューリングを行うスケジューラ１５１と、プロセッサＰ2でスケジューリングを行うスケジューラ１５２とを含む。しかしながら、スケジューラ１５は、分散されることなく、例えばプロセッサＰ0で集中的に動作してもよい。
【０１４２】
スケジューラ１５０は、マスタスケジューラであり、従属のプロセッサＰ1，Ｐ2の負荷、又は、管理部Ｃ1，Ｃ2内の実行待ちタスクの数、が均等化されるように、管理部Ｃ0の実行待ちタスクをスケジューラ１５１，１５２に配分する。
【０１４３】
スケジューラ１５１，１５２は、従属のスケジューラであり、プロセッサＰ1，Ｐ2の処理時間及び遅延時間を短縮化する。
【０１４４】
スケジューラ１５１，１５２は、それぞれ管理部Ｃ1，Ｃ2のタスクの数を求める。
【０１４５】
スケジューラ１５１は、管理部Ｃ1で管理されている実行待ちタスクの数が第１のしきい値以下か否か判断し、判断結果をマスタスケジューラ１５０に送る。
【０１４６】
スケジューラ１５２は、管理部Ｃ2で管理されている実行待ちタスクの数が第２のしきい値以下か否か判断し、判断結果をマスタスケジューラ１５０に送る。
【０１４７】
スケジューラ１５０は、管理部Ｃ1で管理されている実行待ちタスクの数が第１のしきい値以下の場合に、管理部Ｃ0で管理されている実行待ちタスクを、スケジューラ１５１に通知する。スケジューラ１５１は、スケジューラ１５０から通知された実行待ちタスクを、管理部Ｃ1で管理する。
【０１４８】
スケジューラ１５０は、管理部Ｃ2で管理されている実行待ちタスクの数が第２のしきい値以下の場合に、管理部Ｃ0で管理されている実行待ちタスクを、スケジューラ１５２に通知する。スケジューラ１５２は、スケジューラ１５０から通知された実行待ちタスクを、管理部Ｃ2で管理する。
【０１４９】
本実施形態において、スケジューラ１５０は、実行待ちタスクを識別するためのタスク識別情報と、当該実行待ちタスクの実行優先度とを関連付けた優先度情報１６をメモリ７Ａに格納する。
【０１５０】
スケジューラ１５０は、管理部Ｃ0から管理部Ｃ1又は管理部Ｃ2へ実行待ちタスクの管理先を変更する場合には、優先度情報１６を参照し、管理部Ｃ0で管理されている高優先度の実行待ちタスクを、管理先が変更されるタスクとして決定する。より具体的には、例えば、スケジューラ１５０は、最も優先度の高い実行待ちタスクを、管理先が変更されるタスクとして決定してもよい。例えば、スケジューラ１５０は、管理部Ｃ0で管理されている実行待ちタスクの中で、優先度が上位のグループに属する実行待ちタスクのうちのいずれかを、管理先が変更されるタスクとして決定してもよい。例えば、スケジューラ１５０は、管理部Ｃ0で優先度が所定の値以上の実行待ちタスクが管理されている場合には、優先度が所定の値以上の実行待ちタスクを管理先が変更されるタスクとして決定し、管理部Ｃ0で優先度が所定の値以上の実行待ちタスクが管理されていない場合には、先入先出方式にしたがって管理先が変更されるタスクを決定してもよい。
【０１５１】
以下において、プロセッサＰ1，Ｐ2で同様の処理は、プロセッサＰ1を用いて説明し、プロセッサＰ2については説明を省略するか、又は、簡単に説明する。
【０１５２】
スケジューラ１５１は、プロセッサＰ1でタスク実行が終了した場合に、管理部Ｃ1で管理されている次のタスクを実行する。
【０１５３】
スケジューラ１５１は、管理部Ｃ1で管理されている次のタスクを実行する場合に、優先度情報１６を参照し、管理部Ｃ1で管理されている高優先度の実行待ちタスクを、次に実行されるタスクとして決定する。より具体的には、例えば、スケジューラ１５１は、最も優先度の高いタスクを、次に実行されるタスクとして決定してもよい。例えば、スケジューラ１５１は、管理部Ｃ1で管理されているタスクの中で、優先度が上位のグループに属するタスクのうちのいずれかを、次に実行されるタスクとして決定してもよい。例えば、スケジューラ１５１は、管理部Ｃ1で優先度が所定の値以上のタスクが管理されている場合には、優先度が所定の値以上のタスクを次に実行されるタスクとして決定し、管理部Ｃ1で優先度が所定の値以上のタスクが管理されていない場合には、先入先出方式にしたがって次に実行されるタスクを決定してもよい。
【０１５４】
スケジューラ１５１は、プロセッサＰ1でタスク実行が終了した場合に、タスク実行が終了したことを示すタスク終了情報をスケジューラ１５０に送る。スケジューラ１５０は、管理部Ｃ0で実行待ちタスクが管理されている場合に、管理先が変更されるタスクを決定し、タスク終了情報を発したスケジューラ１５１へ管理先が変更されるタスクを通知する。スケジューラ１５１は、スケジューラ１５０から通知されたタスクを、管理部Ｃ1で管理する。
【０１５５】
スケジューラ１５１は、プロセッサＰ1で実行されたタスクの次に起動される新たなタスクがプロセッサＰ1，Ｐ2のうちの一方のプロセッサで実行される場合、新たなタスクを一方のプロセッサに対応するスケジューラに通知するとしてもよい。この場合、一方のプロセッサに対応するスケジューラは、一方のプロセッサに対応する管理部に、新たなタスクを管理させる。
【０１５６】
スケジューラ１５１は、プロセッサＰ1で実行されたタスクの次に起動される新たなタスクがプロセッサＰ1，Ｐ2のうちのいずれでも実行可能な場合、新たなタスクをプロセッサＰ0に対応するスケジューラ１５０に通知してもよい。この場合、スケジューラ１５０は、管理部Ｃ0に、新たなタスクを管理させる。
【０１５７】
スケジューラ１５１は、プロセッサＰ1で実行されたタスクの次に起動される新たなタスクがプロセッサＰ1，Ｐ2のうちのいずれでも実行可能であり、管理部Ｃ1で管理されているタスクの数が第１のしきい値以下の場合、新たなタスクをプロセッサＰ1に対応するスケジューラ１５１に通知してもよい。この場合、スケジューラ１５１は、管理部Ｃ1に、新たなタスクを管理させる。
【０１５８】
スケジューラ１５１は、プロセッサＰ1で実行されたタスクの次に起動される新たなタスクがプロセッサＰ1，Ｐ2のうちのいずれでも実行可能であり、管理部Ｃ2で管理されているタスクの数が第２のしきい値以下の場合、新たなタスクをプロセッサＰ2に対応するスケジューラ１５２に通知してもよい。この場合、スケジューラ１５２は、管理部Ｃ2に、新たなタスクを管理させる。
【０１５９】
スケジューラ１５１は、プロセッサＰ1で実行されたタスクの次に起動される新たなタスクがプロセッサＰ1，Ｐ2のうちのいずれでも実行可能であり、管理部Ｃ2，Ｃ3で管理されているタスクの数が第１のしきい値及び第２のしきい値より多い場合、新たなタスクをプロセッサＰ0に対応するスケジューラ１５０に通知してもよい。この場合、スケジューラ１５０は、管理部Ｃ0に、新たなタスクを管理させる。
【０１６０】
プロセッサＰ1，Ｐ2で実行されるタスクは、ハードウェア部４Ｈをアクセスするための待ち合わせタスクを含まない。例えば、待ち合わせタスクとは、あるイベントが発生するまで待ち状態となるタスクであってもよい。この場合、プロセッサＰ1，Ｐ2でタスクの実行が開始されると、プロセッサＰ1，Ｐ2で割り込みなどを受け例外処理が発生した場合を除き、中断が生じない。
【０１６１】
制御プログラム１１は、メモリ装置３の起動時、又は、管理部Ｃ1，Ｃ2で管理されているタスクがプロセッサＰ1，Ｐ2によって実行される前に、全タスクに対して、必要とされるメモリ７Ａのメモリ領域２０を割り当てる。
【０１６２】
制御プログラム１１は、実行されるタスクと当該タスクに割り当てられているメモリ領域２０とを関連付けた領域情報１７をメモリ７Ａに格納する。制御プログラム１１は、領域情報１７を参照し、タスクを実行する場合に使用されるメモリ領域２０を決定する。
【０１６３】
制御プログラム１１は、プロセッサＰ1，Ｐ2のうちの少なくとも１つを停止する場合に、プロセッサＰ0に対応する管理部Ｃ0から停止されるプロセッサに対応する管理部へのタスクの管理先の変更を止め、プロセッサＰ0に対応する管理部Ｃ0から停止されないプロセッサに対応する管理部へタスクの管理先を変更する。例えば、プロセッサは、電源供給が停止されることにより、停止される。
【０１６４】
制御プログラム１１は、プロセッサＰ1が割り込みを受けた場合に、割り込みに続くタスクを、プロセッサＰ1に対応する管理部Ｃ1で管理する。
【０１６５】
制御プログラム１１は、タスクがハードウェア部４Ｈの一部で実行される必要がある場合に、タスクと当該タスクの実行で使用されるハードウェア部４Ｈの一部を識別するためのハードウェア識別情報とを関連付けたハードウェア情報１９をメモリ７Ａに格納する。制御プログラム１１は、ハードウェア情報１９を参照し、タスクを実行する場合に当該タスクの実行で使用されるハードウェア部を決定する。そして、制御プログラム１１は、決定されたハードウェア部に対応する管理部で、タスクを管理する。具体的には、制御プログラム１１は、情報処理装置２からアクセスリクエストとハードウェア識別情報とを受けた場合に、アクセスリクエストに対応するタスクとハードウェア識別情報とを関連付けたハードウェア情報１９をメモリ９に格納する。制御プログラム１１は、アクセスリクエストに対応するタスクを実行する場合に、ハードウェア識別情報の示すプロセッサに対応する管理部で、当該タスクを管理する。
【０１６６】
図９は、本実施形態に係るスケジューラ１５の第１の処理の一例を示すフローチャートである。この図９においては、タスクの管理先が管理部Ｃ0から管理部Ｃ1に変更されるまでの処理を例示している。しかしながら、タスクの管理先が管理部Ｃ0から例えば管理部Ｃ2などのような他の管理部に変更されるまでの処理も同様である。
【０１６７】
ステップＳ９０１において、スケジューラ１５は、管理部Ｃ0でタスクを管理する。
【０１６８】
ステップＳ９０２において、スケジューラ１５は、管理部Ｃ1で管理されているタスクの数が第１のしきい値以下か判断する。
【０１６９】
管理部Ｃ1で管理されているタスクの数が第１のしきい値以下ではない場合、処理はステップＳ９０５に移る。
【０１７０】
管理部Ｃ1で管理されているタスクの数が第１のしきい値以下の場合、ステップＳ９０３において、スケジューラ１５は、優先度情報１６を参照し、管理部Ｃ0から管理部Ｃ1に管理先が変更されるタスクを選択する。
【０１７１】
ステップＳ９０４において、スケジューラ１５は、選択されたタスクの管理先を管理部Ｃ1に変更する。
【０１７２】
ステップＳ９０５において、スケジューラ１５は、処理継続の場合にステップＳ９０１に処理を移し、処理継続でない場合に処理を終える。
【０１７３】
図１０は、スケジューラ１５の第２の処理の一例を示すフローチャートである。この図１０においては、実行されたタスクの次に起動される新たなタスクが管理部Ｃ0〜Ｃ2のいずれかに割り当てられるまでの処理を例示している。
【０１７４】
ステップＳ１００１において、スケジューラ１５は、実行されたタスクの次に起動される新たなタスクが、プロセッサＰ1で実行されるか、プロセッサＰ2で実行されるか、プロセッサＰ1，Ｐ2のいずれでも実行可能か、を判断する。
【０１７５】
新たなタスクの実行先がプロセッサＰ1の場合、ステップＳ１００２において、スケジューラ１５は、新たなタスクを管理部Ｃ1で管理する。
【０１７６】
新たなタスクの実行先がプロセッサＰ2の場合、ステップＳ１００３において、スケジューラ１５は、新たなタスクを管理部Ｃ2で管理する。
【０１７７】
新たなタスクの実行先がプロセッサＰ1，Ｐ2のいずれでも可能な場合、ステップＳ１００４において、スケジューラ１５は、新たなタスクを管理部Ｃ0で管理する。
【０１７８】
図１１は、本実施形態に係るタスク間の領域情報の通知状態の一例を示すブロック図である。
【０１７９】
第１のタスクＴ1は、プロセッサＰ1，Ｐ2のいずれかで実行される。メモリ領域１８１は、第１のタスクＴ1で使用されるメモリ領域である。
【０１８０】
第２のタスクＴ2は、プロセッサＰ1，Ｐ2のいずれかで実行される。
【０１８１】
第２のタスクＴ2は、第１のタスクＴ1で使用されるメモリ領域１８１の一部又は全部を、使用する。この場合、第１のタスクＴ1は、第２のタスクＴ2へメモリ領域１８１の領域情報を、通知する。領域情報は、例えば、メモリ領域１８１の位置情報を含む。
【０１８２】
第１のタスクＴ1から第２のタスクＴ2への領域情報の通知は、メモリ装置３の電源が投入され、タスクＴ1にメモリ領域１８１が割り当てられた場合に、実行されるとしてもよい。また、第１のタスクＴ1から第２のタスクＴ2への領域情報の通知は、第２のタスクＴ2の起動により実行されるとしてもよい。
【０１８３】
本実施形態において、制御プログラム１１は、タスクの実行が終了した場合であっても、当該タスクに対応するメモリ領域を他のタスクに割り当てない。また、タスクの実行終了後に同一のタスクを再実行する場合には、同じメモリ領域が再使用される。
【０１８４】
タスクは、ブートプログラムのタスクでもよい。この場合、メモリ装置３の電源投入に基づいて、電源投入処理を実行するタスクが、プロセッサＰ0〜Ｐ2の管理部Ｃ0〜Ｃ2のいずれかで管理される。
【０１８５】
ハードウェア部４Ｈと制御プログラム１１とのうちの少なくとも一方は、エラー検出を行うとしてもよい。エラーが検出された場合、エラー訂正処理を実行するタスクが、プロセッサＰ0〜Ｐ2の管理部Ｃ0〜Ｃ2のいずれかで管理される。
【０１８６】
本実施形態において、メモリ装置３の制御プログラム１１は、ＮＡＮＤ型フラッシュメモリＢ0〜ＢPのブロックごとの消去回数、ブロック内のページ数、ブロックサイズ、ページサイズなどのようなメモリ情報を、モジュール１３１〜１３６などに送るとしてもよい。
【０１８７】
制御プログラム１１は、タスクから、ＮＡＮＤ型フラッシュメモリＢ0〜ＢPの割り当てリクエスト又は解放リクエストを受けた場合に、割り当て処理又は解放処理を実行し、タスクに対して割り当てられた又は解放されたＮＡＮＤ型フラッシュメモリＢ0〜ＢPのブロックを、タスクへ通知するとしてもよい。
【０１８８】
図１２は、本実施形態に係るタスク及びメモリ領域の関係の一例を示すブロック図である。
【０１８９】
タスクＴ1〜Ｔ3のうちの少なくとも１つは、他の複数のタスクからリクエストを受けるとしてもよい。
【０１９０】
タスクＴ1が実行されると、タスクＴ1は、タスクＴ1の後に実行されるタスクＴ2にリクエストと当該リクエストを発したタスクＴ1の識別情報を送る。また、タスクＴ1は、実行によって得られた情報を、タスクＴ1に対応するメモリ領域１８１に格納するか、又は、タスクＴ2に対応するメモリ領域１８２に格納する。
【０１９１】
タスクＴ2は、メモリ領域１８１に格納されている情報、又は、メモリ領域１８２に格納されている情報を用いて実行される。すると、タスクＴ2は、タスクＴ2の後に実行されるタスクＴ3にリクエストと当該リクエストを発したタスクＴ2の識別情報を送る。また、タスクＴ2は、実行によって得られた情報を、タスクＴ2に対応するメモリ領域１８２に格納するか、又は、タスクＴ3に対応するメモリ領域１８３に格納する。
【０１９２】
例えば、タスクＴ2が複数の他のタスクからリクエストを受ける場合、タスクＴ1は、リクエストを発したタスクＴ1の識別情報と、タスクＴ2の後に実行されるタスクＴ3の識別情報とを、タスクＴ2に送る。タスクＴ2は、タスクＴ1に対応するメモリ領域１８１又はタスクＴ3に対応するメモリ領域１８３の情報を用いて実行される。そして、タスクＴ2は、タスクＴ1に対応するメモリ領域１８１又はタスクＴ3に対応するメモリ領域１８３へ、実行によって得られた情報を格納する。
【０１９３】
例えば、タスクＴ2が複数の他のタスクからリクエストを受ける場合、タスクＴ1は、リクエストを発したタスクＴ1の識別情報と、タスクＴ2の後に実行されるタスクＴ3の識別情報とを、タスクＴ2に送る。タスクＴ2は、タスクＴ1に対応するメモリ領域１８１の情報を用いて実行される。そして、タスクＴ2は、タスクＴ3に対応するメモリ領域１８３へ、実行によって得られた情報を格納する。
【０１９４】
制御プログラム１１は、情報処理装置２からコマンドと後続処理の識別情報とを受けた場合に、コマンド実行後に、後続処理の識別情報で示されるタスクを実行するとしてもよい。これにより、同じコマンドにしたがって処理を実行した後に、後続の処理を切り替えることができる。
【０１９５】
例えば、メモリ装置３のハードウェア部４Ｈは複数の部分に区分けされており、後続処理の識別情報は、ハードウェア部４Ｈのうちの一部を示すとしてもよい。
【０１９６】
後続処理の識別情報は、メモリ装置３内で管理されているコマンドキューのキュー番号としてもよい。
【０１９７】
以上説明した本実施形態においては、メモリ装置３で、物理メモリを共有して管理するメモリ共有型並列コンピューティング方式（Symmetric Multiprocessing）が採用される。
【０１９８】
本実施形態においては、自動で、モジュール１３１〜１３６のスケジューリングを行うことができる。
【０１９９】
本実施形態においては、メモリ装置３に対して、外部装置及び外部ハードウェア部１３６を容易に適用することができる。
【０２００】
本実施形態においては、メモリ装置３の複数のプロセッサＰ1〜ＰNを効率的に使用することができ、メモリ装置３の性能を向上させることができる。
【０２０１】
本実施形態において、第２のソフトウェア開発者は、タスクのスケジューリングを意識することなく、モジュール１３３〜１３６を開発することができる。
【０２０２】
本実施形態においては、タスクが実行されると、当該タスクの実行が完了するまで、中断は発生しない。本実施形態においては、処理が完了するまでプロセッサＰ1，Ｐ2間でデータ又は情報のやり取りなどが発生しない。本実施形態においては、タスクの実行開始まではタスクの実行順序を入れ替え可能であるが、タスクの実行を開始した後でタスクの実行順序を入れ替えない。本実施形態においては、例えば、割り込みハンドラ１３７から割り込みを受ける場合を除き、タスクの実行は中断しない。したがって、本実施形態においては、タスク実行中にタスクのスイッチングが実行されることを低減することができ、処理を高速化することができる。また、本実施形態においては、タスクの総実行時間は変化せず、実行待ち時間のみが変化する。このため、メモリ装置３において発生する遅延時間を安定化させることができる。
【０２０３】
本実施形態においては、メモリ７Ａの動的な割り当てはメモリ装置３の起動時に実行され、タスクのスイッチング時に割り当ては変更されない。本実施形態においては、関連するタスクの間での情報のやり取りに、共有のメモリ７Ａが用いられ、タスク間でメモリ保護は実施されない。本実施形態においては、各タスクが対応するメモリ領域を参照する。本実施形態においては、タスクの中断の発生回数及び発生頻度を減らすことができる。したがって、本実施形態においては、タスクのスイッチングによる遅延時間を減らすことができる。
【０２０４】
本実施形態においては、複数のコントローラ４で共通のソフトウェアを使用することができ、ソフトウェアのアップデート及び機能追加が容易である。
【０２０５】
［第４の実施形態］
本実施形態においては、上記第１乃至第３の実施形態で説明した情報処理システム１，１Ａの詳細構成について説明する。
【０２０６】
図１３は、本実施形態に係る情報処理システムの詳細構成の一例を示すブロック図である。
【０２０７】
情報処理システム１Ｂは、情報処理装置２とメモリシステム３Ｂとを含む。
【０２０８】
本実施形態に係るメモリシステム３Ｂは、プログラムＦ0〜ＦM、制御プログラム１１を実行可能である。
【０２０９】
上記第１乃至第３の実施形態に係るメモリ装置３は、メモリシステム３Ｂに対応する。
【０２１０】
メモリ装置３のプロセッサＰ0〜ＰNは、ＣＰＵ（Central Processing Unit）４３Ａ，４３Ｂに対応する。
【０２１１】
インタフェース部６は、ホストインタフェース４１及びホストインタフェースコントローラ４２に対応する。
【０２１２】
メモリ７Ａ，７Ｂは、ＤＲＡＭ４７に対応する。
【０２１３】
アドレス変換データ１０は、ＬＵＴ４５に対応する。
【０２１４】
メモリコントローラ９は、ＮＡＮＤＣ（NAND Controller）５０に対応する。
【０２１５】
情報処理装置２は、メモリシステム３Ｂのホスト装置として機能する。
【０２１６】
メモリシステム３Ｂのコントローラ４は、フロントエンド４Ｆと、バックエンド４Ｂとを備える。
【０２１７】
フロントエンド（ホスト通信部）４Ｆは、ホストインタフェース４１、ホストインタフェースコントローラ４２、暗号化／復号化部（Advanced Encryption Standard (AES)）４４、及びＣＰＵ４３Ｆを備える。
【０２１８】
ホストインタフェース４１は、情報処理装置２との間で、リクエスト（書き込みコマンド、読み出しコマンド、消去コマンドなど）、ＬＢＡ、データなどを通信する。
【０２１９】
ホストインタフェースコントローラ（制御部）４２は、ＣＰＵ４３Ｆの制御にしたがって、上記ホストインタフェース４１の通信を制御する。
【０２２０】
暗号化／復号化部４４は、データ書き込み動作において、ホストインタフェースコントローラ４２から送信される書き込みデータ（平文）を暗号化する。暗号化／復号化部４４は、データ読み出し動作において、バックエンド４ＢのリードバッファＲＢから送信される暗号化された読み出しデータを復号化する。なお、この暗号化／復号化部４４を介さずに、書き込みデータ及び読み出しデータを送信することも、必要に応じて可能である。
【０２２１】
ＣＰＵ４３Ｆは、フロントエンド４Ｆの上記各構成４１，４２，４４を制御し、フロントエンド４Ｆの全体の動作を制御する。
【０２２２】
バックエンド（メモリ通信部）４Ｂは、ライトバッファＷＢ、リードバッファＲＢ、ＬＵＴ４５、ＤＤＲＣ４６、ＤＲＡＭ４７、ＤＭＡＣ４８、ＥＣＣ４９、ランダマイザＲＺ、ＮＡＮＤＣ５０、及びＣＰＵ４３Ｂを備える。
【０２２３】
ライトバッファ（ライトデータ転送部）ＷＢは、情報処理装置２から送信された書き込みデータを一時的に格納する。具体的には、ライトバッファＷＢは、当該書き込みデータが不揮発性メモリ５に適した所定のデータサイズになるまで、一時的にデータを格納する。
【０２２４】
リードバッファ（リードデータ転送部）ＲＢは、不揮発性メモリ５から読み出された読み出しデータを一時的に格納する。具体的には、リードバッファＲＢにおいて、読み出しデータは、情報処理装置２に適した順序（情報処理装置２が指定した論理アドレスＬＢＡの順序）になるように並び替えられる。
【０２２５】
ＬＵＴ４５は、論理アドレスＬＢＡを物理アドレスＰＢＡに変換するためのテーブルである。
【０２２６】
ＤＤＲＣ４６は、ＤＲＡＭ４７におけるＤＤＲ（Double Data Rate）を制御する。
【０２２７】
ＤＲＡＭ４７は、例えば、ＬＵＴ４５を格納する揮発性のメモリである。
【０２２８】
ＤＭＡＣ（Direct Memory Access Controller）４８は、内部バスＩＢを介して、書き込みデータや読み出しデータなどを転送する。図１３においては１つのＤＭＡＣ４８が図示されているが、コントローラ４は、２以上のＤＭＡＣ４８を備えるとしてもよい。ＤＭＡＣ４８は、必要に応じて、コントローラ４内の様々な位置に設定される。
【０２２９】
ＥＣＣ４９は、ライトバッファＷＢから送信される書き込みデータにＥＣＣ（Error Correcting Code）を付加する。ＥＣＣ４９は、リードバッファＲＢに送信する際に、付加したＥＣＣを用いて、不揮発性メモリ５から読み出した読み出しデータを必要に応じて訂正する。
【０２３０】
ランダマイザＲＺ（又はScrambler）は、データ書き込み動作の際に、書き込みデータが不揮発性メモリ５の特定のページ又はワード線方向などに偏らないように、書き込みデータを分散させる。このように、書き込みデータを分散させることで、書き込み回数を平準化でき、不揮発性メモリ５のメモリセルＭＣのセル寿命を長期化できる。そのため、不揮発性メモリ５の信頼性を向上できる。また、ランダマイザＲＺは、データ読み出し動作の際に、書き込み時のランダマイズ処理の逆処理を実行し、元のデータを復元する。
【０２３１】
ＮＡＮＤＣ５０は、所定の速度の要求を満たすため、複数のチャンネル（ここでは、４つのチャンネルＣＨ０〜ＣＨ３）を用いて、並列に不揮発性メモリ５にアクセスする。
【０２３２】
ＣＰＵ４３Ｂは、バックエンド４Ｂの上記各構成（４５〜５０，ＲＺ）を制御し、バックエンド４Ｂの全体の動作を制御する。
【０２３３】
なお、図１３に示したコントローラ４の構成は例示であり、この構成に限定されることはない。
【０２３４】
図１４は、本実施形態に係るストレージシステムの一例を示す斜視図である。
【０２３５】
ストレージシステム１００は、ＳＳＤとしてのメモリシステム３Ｂを備える。
【０２３６】
メモリシステム３Ｂは、例えば比較的小型のモジュールである。なお、メモリシステム３Ｂの大きさ及び寸法は、種々の大きさのものに適宜変更可能である。
【０２３７】
また、メモリシステム３Ｂは、例えば、企業（エンタープライズ）で運用されるデータセンター又はクラウドコンピューティングシステムにおいて、サーバのような情報処理装置２に装着されて使用可能である。そのため、メモリシステム３Ｂは、エンタープライズ用ＳＳＤ（ｅＳＳＤ）であってもよい。
【０２３８】
メモリシステム３Ｂは、例えば上方に開口した複数のコネクタ（例えばスロット）１０１を備える。
【０２３９】
複数のメモリシステム３Ｂは、情報処理装置２のコネクタ１０１にそれぞれ装着され、略垂直方向に起立した姿勢で互いに並べて支持される。このような構成によれば、複数のメモリシステム３Ｂをコンパクトに纏めて実装可能であり、メモリシステム３Ｂの小型化を図ることができる。さらに、本実施形態に係るメモリシステム３Ｂの各形状は、２．５型のＳＦＦ（Small Form Factor)である。このような形状により、メモリシステム３Ｂは、エンタープライズ用ＨＤＤ（ｅＨＤＤ）と互換形状（コンパチ形状）を図ることができ、ｅＨＤＤとの容易なシステム互換性を実現することができる。
【０２４０】
なお、メモリシステム３Ｂは、エンタープライズ用に限られない。例えば、メモリシステム３Ｂは、ノートブック型ポータブルコンピュータ又はタブレット型端末のようなコンシューマ用の電子機器の記憶媒体としても適用可能である。
【０２４１】
以上説明したように、本実施形態で説明した構成を持つ情報処理システム１Ｂ及びストレージシステム１００においては、大容量の記憶に、上記第１乃至第３の実施形態と同様の効果を得ることができる。
【０２４２】
［第５の実施形態］
本実施形態では、上記第１乃至第４の実施形態の変形例又は具体例を説明する。
【０２４３】
本実施形態においては、ソフトウェア定義型ＳＳＤプラットフォームの機能について説明する。
【０２４４】
本実施形態に係るソフトウェア定義型ＳＳＤプラットフォームは、例えば、複数のプロセッサを備えるコントローラに対して移植可能なＯＳであり、並列処理を実現する。
【０２４５】
ソフトウェア定義型ＳＳＤプラットフォームは、例えば、統一されたＦＴＬ（Flash Translation Layer）設計にしたがって生成されている。より具体的には、ソフトウェア定義型ＳＳＤプラットフォームは、上位から下位への順で、共通インタフェースレイヤ、ＦＴＬ、デバイスドライバを含む。共通インタフェースレイヤは、プログラムに対する共通インタフェースを提供する。共通インタフェースレイヤの下位レイヤであるＦＴＬは、不揮発性メモリに対する例えばブロックなどの領域の割り当て、アドレス変換、ウェアレベリング、ガーベージコレクションなどの全体的な管理を行う。ここで、ウェアレベリングとは、例えば、不揮発性半導体メモリに対するデータの書き換えを均等に分散させて使用寿命を延ばす処理である。
【０２４６】
さらに、ソフトウェア定義型ＳＳＤプラットフォームは、ネームスペースの割り当て、サイズ、数の管理、アクセス制御を行う。
【０２４７】
これらのソフトウェア定義型ＳＳＤプラットフォームによる管理は、管理情報にしたがって実行される。
【０２４８】
ソフトウェア定義型ＳＳＤプラットフォームは、自動性能チューニング（Automatic Performance Tuning）機能と、動的負荷分散（Dynamic Load Balancing）機能、タスクスケジューリング機能を含み、ハードウェア部４Ｈを抽象化する。
【０２４９】
図１５は、本実施形態に係るソフトウェア定義型プラットフォームの構成の一例を示すブロック図である。
【０２５０】
プログラムＦは、例えば、ファームウェア、アプリケーションプログラム、モジュール、又はハンドラなどのような各種ソフトウェアである。本実施形態において、プログラムＦはＳＳＤファームウェアの場合を例として説明するが、プログラムＦの種別についてはこれに限定されない。
【０２５１】
プログラムＦは、処理内容ごとに、タスクとして複数のモジュールに分割される。例えば、プログラムＦは、ホストインタフェース制御部Ｆａ、書き込み制御部Ｆｂ、読み込み制御部Ｆｃ、又はこれら以外のモジュール単位に分割されてもよい。さらに、プログラムＦは、例えば、ＦＴＬ部、ウェアレベリング部を含むとしてもよい。
【０２５２】
複数のモジュールは、タスク間で通信をするためにタスク間通信（Inter task Communication）ＡＰＩに準拠しており、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取りする。
【０２５３】
ソフトウェア定義型プラットフォームは、動的タスクスケジューラ１５Ｄ、ＨＡＬ（Hardware Abstruction Layer、ハードウェア抽象化レイヤ）３０１と、デバイスドライバ３１１と、ハードウェア部４Ｈと、不揮発性メモリ５とを含む。
【０２５４】
動的タスクスケジューラ１５Ｄは、タスクの実行順序を制御する。より具体的には、動的タスクスケジューラ１５Ｄは、ＨＡＬ ＡＰＩに準拠しており、複数のモジュールに対して、及び、ＨＡＬ３０１に対して、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取りする。
【０２５５】
ＨＡＬ３０１は、ハードウェア部４Ｈを抽象化する。例えば、ＨＡＬ３０１は、メモリ装置のハードウェア部４Ｈ及びデバイスドライバ３１１とメモリ装置上で動作するプログラムＦとの間に存在するソフトウェアで実装される。ＨＡＬ３０１は、プログラムＦ及び動的タスクスケジューラ１５Ｄから、ハードウェアごとに異なる差異を隠蔽する。より具体的には、ＨＡＬ３０１は、プログラムＦ及び動的タスクスケジューラ１５Ｄがハードウェア部４Ｈ及びデバイスドライバ３１１に非依存となるように、動的タスクスケジューラ１５Ｄとハードウェア部４Ｈ及びデバイスドライバ３１１との間で基本動作を実現し、ハードウェア部４Ｈの違いを吸収する共通モジュールである。例えばハードウェア部４Ｈ又はデバイスドライバ３１１に仕様変更が生じた場合は、仕様変更に合わせてＨＡＬ３０１のみを修正すればよく、プログラムＦ及び動的タスクスケジューラ１５Ｄはハードウェア部４Ｈ又はデバイスドライバ３１１の仕様変更の影響を受けない。
【０２５６】
デバイスドライバ３１１は、ハードウェア部４Ｈをアクセスするためのソフトウェアである。デバイスドライバ３１１は、複数のデバイスドライバを含んでいてもよく、例えばＮＡＮＤフラッシュ用のデバイスドライバ３１１ａ、周辺装置用のデバイスドライバ３１１ｂ、ホスト装置用のデバイスドライバ３１１ｃ、又はこれら以外のデバイスドライバを含む。なお、デバイスドライバ３１１は、ハードウェアで実現されてもよい。
【０２５７】
ハードウェア部４Ｈは、ハードウェアであり、例えば、デバイスドライバ３１１と、複数のプロセッサＰ1〜ＰNと、メモリ７Ａとを含む。
【０２５８】
上述のように、ソフトウェア定義型ＳＳＤプラットフォームにおいては、不揮発性メモリ５へのアクセスは、プログラムＦより、動的タスクスケジューラ１５Ｄ、ＨＡＬ３０１、デバイスドライバ３１１、ハードウェア部４Ｈを通じて、階層的に行われる。
【０２５９】
図１６は、本実施形態に係るソフトウェア定義型ＳＳＤプラットフォームで実現される２種類のスケジューリングを例示する図である。この図１６では、共有メモリＳＭにアクセス可能なプロセッサの数が４つの場合を例示している。しかしながら、共有メモリＳＭにアクセス可能なプロセッサの数は２以上であればよい。図１６では、相互接続ネットワークＮで通信可能なプロセッサの数が４つの場合を例示している。しかしながら、相互接続ネットワークＮで通信可能なプロセッサの数は２以上であればよい。
【０２６０】
ソフトウェア定義型ＳＳＤプラットフォームは、動的タスクスケジューラ１５Ｄと、静的タスクスケジューラ１５Ｓとを含む。
【０２６１】
動的タスクスケジューラ１５Ｄは、複数のプロセッサのうち、どのプロセッサにタスクを割り当てるかを管理する。
【０２６２】
静的タスクスケジューラ１５Ｓは、各プロセッサに割り当てられたタスクの実行順序を管理する。
【０２６３】
メモリＭ0〜Ｍ8は、それぞれプロセッサＰ0〜Ｐ8に対応しており、それぞれプロセッサＰ0〜Ｐ8によってアクセスされる。共有メモリＳＭは、複数のプロセッサＰ0〜Ｐ3からアクセス可能である。相互接続ネットワークＮは、複数のプロセッサＰ5〜Ｐ8間で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などの送信及び受信を行うためのネットワークである。
【０２６４】
第１のアーキテクチャには、共有メモリプラットフォームが適用される。第１のアーキテクチャでは、複数のプロセッサＰ0〜Ｐ3が互いに共有メモリＳＭを経由して、データ、情報、信号、コマンド、メッセージ、リクエスト、指令をやり取りする。動的タスクスケジューラ１５Ｄは、タスクをどのプロセッサに割り当てるか担当する。静的タスクスケジューラ１５Ｓは、プロセッサＰ0〜Ｐ3ごとに、割り当てられたタスクのうちの次に実行するタスクを決定する。
【０２６５】
共有メモリプラットフォームでは、どのプロセッサＰ0〜Ｐ3も同じ共有メモリＳＭにアクセスできる。このため、動的タスクスケジューラ１５Ｄは、負荷の低いプロセッサを検出しタスクを割り振ることで、各プロセッサの負荷が一定となるようパフォーマンスを調整する。
【０２６６】
第２のアーキテクチャは、単一のプロセッサＰ4とこのプロセッサＰ4に対応するメモリＭ4とを含む。静的タスクスケジューラ１５Ｓは、プロセッサＰ4で次に実行するタスクを決定する。
【０２６７】
第３のアーキテクチャには、分散メモリプラットフォームが適用される。第３のアーキテクチャでは、複数のプロセッサＰ5〜Ｐ8が、互いに相互接続ネットワークＮ経由で、データ、情報、信号、コマンド、メッセージ、リクエスト、指令を送信及び受信する。静的タスクスケジューラ１５Ｓは、プロセッサＰ5〜Ｐ8ごとに次に実行するタスクを決定する。
【０２６８】
分散メモリプラットフォームでは、各プロセッサＰ5〜Ｐ8が一連のタスク（以下、タスクチェーンと呼ぶ）を実行する場合、タスク内容に応じて、あらかじめタスクごとに処理するプロセッサを決めておくことにより、処理を高速化することができる。例えば、読み出しタスク、ホスト通信タスク、書き込みタスクを順に処理するタスクチェーンが多量に入力される場合、読み出しはプロセッサＰ5、ホスト通信はホスト通信インタフェースを持つプロセッサＰ6、書き込みはプロセッサＰ7が行うよう割り振られる。
【０２６９】
しかしながら、分散メモリプラットフォームでは、プロセッサＰ5〜Ｐ8間での通信が必要となる。例えば、読み出しタスクを実行したプロセッサＰ5は、ホスト通信タスクを実行するプロセッサＰ6に読み出しタスクの処理結果（読み出しデータなどを含む）を渡す。ここで、プロセッサＰ5〜Ｐ8間の通信時間がタスクの処理時間に対して十分小さくない場合は、タスクごとに処理するプロセッサを分離すると、処理が遅くなる場合がある。この場合は、特定のプロセッサにある程度まとまったタスクを割り振ることで、処理の高速化を行う。すなわち、同じタスクチェーンに属するタスクは、ある程度（例えば所定の数）同じプロセッサに割り当てることで、タスクチェーンの実行が複数のプロセッサ間で順送り（例えばたらい回し）されることを防止する。
【０２７０】
本実施形態では、タスクチェーンの実行において、読み出しと書き込みとが同時にならないとする。
【０２７１】
本実施形態において、タスクを生成する規則としては、例えば、グローバル変数、静的変数、ヒープメモリ、例えばマロック関数及びフリー関数などのような動的にメモリを確保する関数を用いない。
【０２７２】
タスクを生成する規則としては、例えば、スピンロックを用いることなく、優先順位をつけるキューを用いる。
【０２７３】
タスクを生成する規則としては、例えば、直接ハードウェアを制御しない。
【０２７４】
タスクを生成する規則としては、自動変数を用いてもよく、ＨＡＬ３０１経由でハードウェアアクセラレータを用いてもよい。ここで、ハードウェアアクセラレータは、例えば、コンピュータの処理を高速化するために追加されるハードウェアとする。
【０２７５】
本実施形態において、動的タスクスケジューラ１５Ｄは、静的タスクスケジューラ１５Ｓとともに、低レイテンシのタスク切り替えを行う。
【０２７６】
本実施形態に係るタスクは、各プロセッサで協働的に優先付けされた順序で実行される。
【０２７７】
動的タスクスケジューラ１５Ｄは、例えば、Lock-freeアルゴリズムを用いる。Lock-freeアルゴリズムとは、共有データにロックをかけて保護するアルゴリズムとは違い、複数のタスクが同時並行的に、ある対象データを壊すことなしに、読み出し、及び、書き込み可能なアルゴリズムである。
【０２７８】
動的タスクスケジューラ１５Ｄは、例えば、Run-To-Completionスケジューリングを行う。Run-To-Completionスケジューリングとは、タスクを、完全に終了するか、又は、明示的に制御をスケジューラに明け渡すまで実行させるスケジューリングモデルである。
【０２７９】
タスク間通信には、例えば、メッセージパッシング型のタスク間通信が用いられる。
【０２８０】
本実施形態において、マスタスケジューラはタスクの移植を可能とし、動的負荷分散及び自動性能チューニングを行う。従属スケジューラはタスクの切り替えレイテンシを低減する。
【０２８１】
図１７は、本実施形態に係るメモリ装置の各階層で保持されるパラメータの一例を示す図である。
【０２８２】
上述のように、プログラムＦは、動的タスクスケジューラ１５Ｄ、ＨＡＬ３０１、デバイスドライバ３１１、及びハードウェア部４Ｈを通じてＮＡＮＤフラッシュメモリＢ0〜ＢPへ階層的にアクセスする。ここで、アクセスの際に各階層で保持されるパラメータは、同じパラメータであっても階層ごとに異なる形式で表記されていてもよい。これにより、階層ごとに適切な抽象度でパラメータを保持することができる。
【０２８３】
例えば、図１７は不揮発性メモリ５に対するアクセスにおいて許容されるアクセス遅延時間の、各階層における記述方式を例示する。なお、不揮発性メモリ５に対するアクセスにおいて遅延時間を許容することで、データ送受信の際の処理に時間をかけることできるため、例えば誤り訂正符号を長くすることにより読み出し及び書き込みの際のエラーを低減させることができる。
【０２８４】
パラメータＰ１７０１は、プログラムＦで保持されるアクセス遅延時間を示す。プログラムＦでは、例えばアクセス遅延時間は２ビットの情報であり、４種類の遅延時間（遅延を許容しない、短い遅延を許容する、一般的な遅延を許容する、長い遅延を許容する）が定義される。このアクセス遅延時間は、例えば規格により定義されていてもよい。
【０２８５】
パラメータＰ１７０２は、ＨＡＬ３０１で保持されるアクセス遅延時間を示す。ＨＡＬ３０１では、例えばアクセス遅延時間は８ビットの情報として定義される。この場合、プログラムＦからＨＡＬ３０１へアクセスする際に、パラメータの変換が行われる。例えば、プログラムＦで「00」であれば、ＨＡＬ３０１では０となり、プログラムＦで「01」であれば、ＨＡＬ３０１では１〜８５のいずれかとなり、プログラムＦで「10」であれば、ＨＡＬ３０１では８６〜１７０のいずれかとなり、プログラムＦで「11」であれば、ＨＡＬ３０１では１７１〜２５５のいずれかとなる。プログラムＦにおけるパラメータＰ１７０１は、他のパラメータとの関連などにより、ＨＡＬ３０１上での適切な値に変換される。
【０２８６】
パラメータＰ１７０３は、ハードウェア部４Ｈで保持されるアクセス遅延時間を示す。ハードウェア部４Ｈでは、例えばアクセス遅延時間は３種類のパラメータ（ＤＬＡ（Direct Look Ahead）方式の有無、繰り返し復号回数、遅延時間しきい値）として定義される。ＤＬＡ方式とは、メモリセル間の干渉によるしきい値電圧のシフトの影響を、読み出し動作において補償する方法である。各パラメータの取りうる値は、例えばＤＬＡ方式の有無はＯｎ又はＯｆｆの１ビットの情報、繰り返し復号回数は１〜５、遅延時間しきい値は１〜５などであってもよい。ハードウェア部４Ｈは、これらの値の組み合わせをパラメータセットとして、いくつか保持していてもよい。ＨＡＬ３０１におけるパラメータＰ１７０２は、他のパラメータなどとの関連により、ハードウェア部４Ｈ上での適切なパラメータの組又はパラメータセット番号に変換される。
【０２８７】
なお、本実施形態ではパラメータＰ１７０１はプログラムＦ、パラメータＰ１７０２はＨＡＬ３０１、パラメータＰ１７０３はハードウェア部４Ｈとしたが、パラメータが保持される階層はこれらと異なる階層であってもよい。例えば、パラメータＰ１７０２はＮＡＮＤコントローラ又はＮＡＮＤフラッシュのデバイスドライバ３１１ａに保持されてもよく、パラメータＰ１７０３はＮＡＮＤフラッシュメモリＢ0〜ＢPに保持されてもよい。
【０２８８】
図１８乃至図２１を用いて、タスクスケジューラの動作について述べる。以下の図１８乃至図２１では、それぞれのタスクの実行を命令する実行コマンドが各種のキューで管理される場合を例として説明する。しかしながら、各種のキューで管理される対象は、実行コマンドに代えてタスク本体でもよい。
【０２８９】
図１８は、本実施形態に係るスケジューリングの一例を示すフローチャートである。
【０２９０】
図１９は、本実施形態に係るスケジューリングの第１の例を示す図であり、図１８のＳ１８０１の動作を示す。
【０２９１】
図２０は、本実施形態に係るスケジューリングの第２の例を示す図であり、図１８のＳ１８０２の動作を示す。
【０２９２】
図２１は、本実施形態に係るスケジューリングの第３の例を示す図であり、図１８のＳ１８０３の動作を示す。
【０２９３】
ハードウェア部４Ｈは、マスタプロセッサＰmと、従属プロセッサＰS1，ＰS2とを備える。マスタプロセッサＰmは、マスタキューＭＱと従属キューＳＱ0とに対応付けられている。従属プロセッサＰS1，ＰS2は、それぞれ従属キューＳＱ1，ＳＱ2に対応付けられている。
【０２９４】
マスタキューＭＱは、動的タスクスケジューラ１５Ｄによって管理される。
【０２９５】
従属キューＳＱ0，ＳＱ1，ＳＱ2は、静的タスクスケジューラ１５Ｓによって管理される。
【０２９６】
タスクには、移植可能タスクと、専用タスクとがある。移植可能タスクは、マスタプロセッサＰm、従属プロセッサＰS1，ＰS2のいずれでも実行可能である。専用タスクは、マスタプロセッサＰmと従属のプロセッサＰS1，ＰS2とのうち特定のプロセッサで実行することを必要とするタスクである。
【０２９７】
ステップＳ１８０１において、動的タスクスケジューラ１５Ｄは、移植可能タスクの実行コマンドを複数のプロセッサの負荷分散のためにマスタキューＭＱに格納する。
【０２９８】
図１９の例では、従属プロセッサＰS1及び従属プロセッサＰS2は、動的タスクスケジューラ１５Ｄにしたがって、マスタキューＭＱに、移植可能タスクの実行コマンドＣＯ1〜ＣＯ4を格納する。
【０２９９】
ステップＳ１８０２において、動的タスクスケジューラ１５Ｄは、所定の時間内に全ての処理が終わるよう、マスタキューＭＱによって管理されている実行コマンドの中から選択された実行コマンドを、負荷の低いプロセッサに対応する静的タスクスケジューラ１５Ｓに渡す。静的タスクスケジューラ１５Ｓは、受けた実行コマンドを従属キューに格納する。具体的には、動的タスクスケジューラ１５Ｄは、各プロセッサＰm，ＰS1，ＰS2の状態を監視し、最も処理負荷の低いプロセッサの従属キューへ移植可能タスクの実行コマンドを移動させる。処理負荷の高低は、例えば動的タスクスケジューラ１５Ｄが、各従属キューＳＱ0，ＳＱ1，ＳＱ2に蓄積されたタスクの実行コマンドの量（数）が所定量を超えているか否かにより判定するとしてもよい。処理負荷が低いプロセッサがない場合は、動的タスクスケジューラ１５Ｄはタスクの実行コマンドの移動を行わなくてもよい。
【０３００】
図２０の例では、動的タスクスケジューラ１５Ｄは、マスタプロセッサＰm、従属プロセッサＰS1、従属プロセッサＰS2の処理負荷が低いと判断し、マスタキューＭＱが保持するタスクの実行コマンドＣＯ1〜ＣＯ4のうち、タスクの実行コマンドＣＯ3を従属キューＳＱ0へ、タスクの実行コマンドＣＯ1を従属キューＳＱ1へ、タスクの実行コマンドＣＯ2を従属キューＳＱ2へそれぞれ移動させる。
【０３０１】
ステップＳ１８０３において、動的タスクスケジューラ１５Ｄは、専用タスクの実行コマンドを、直接、専用タスクに対応するプロセッサの静的タスクスケジューラ１５Ｓに渡し、静的タスクスケジューラ１５Ｓは受けた実行コマンドを従属キューに格納する。
【０３０２】
図２１の例では、マスタプロセッサＰm、従属プロセッサＰS1は、動的タスクスケジューラ１５Ｄにしたがって従属プロセッサＰS1の専用タスクの実行コマンドＣＯ5，ＣＯ6を静的タスクスケジューラ１５Ｓに渡し、静的タスクスケジューラ１５Ｓは専用タスクの実行コマンドＣＯ5，ＣＯ6を従属キューＳＱ1に格納する。また、従属プロセッサＰS2は、動的タスクスケジューラ１５ＤにしたがってマスタプロセッサＰmの専用タスクの実行コマンドＣＯ7を静的タスクスケジューラ１５Ｓに渡し、静的タスクスケジューラ１５Ｓは専用タスクの実行コマンドＣＯ7を従属キューＳＱ0に格納する。
【０３０３】
ステップＳ１８０４において、静的タスクスケジューラ１５Ｓは、各従属キューに格納された移植可能タスクの実行コマンド又は専用タスクの実行コマンドの実行順序を管理し、例えば先入先出方式にしたがって実行すべき実行コマンドを選択する。すなわち、静的タスクスケジューラ１５Ｓは、キューの先頭にある実行コマンドを処理対象として選択し、処理対象となった実行コマンドをキューから削除する。
【０３０４】
ステップＳ１８０５において、静的タスクスケジューラ１５Ｓは、実行の結果発生した次のタスクの実行コマンドが移植可能タスクの実行コマンドか否か判断する。
【０３０５】
次のタスクの実行コマンドが移植可能タスクの実行コマンドの場合、ステップＳ１８０６において、静的タスクスケジューラ１５Ｓは、次のタスクの実行コマンドを、動的タスクスケジューラ１５Ｄに渡し、動的タスクスケジューラ１５Ｄは受けた実行コマンドを、マスタキューＭＱに格納する。
【０３０６】
次のタスクの実行コマンドが専用タスクの実行コマンドの場合、ステップＳ１８０７において、静的タスクスケジューラ１５Ｓは、次のタスクの実行コマンドを、実行先のプロセッサの静的タスクスケジューラ１５Ｓに渡し、静的タスクスケジューラ１５Ｓは受けた実行コマンドを、対応する従属キューに格納する。
【０３０７】
なお、Ｓ１８０３と、Ｓ１８０１及びＳ１８０２との順番は、前後してもよい。また、図１９乃至図２１では、従属プロセッサが２つである場合を例として説明したが、従属プロセッサの数はｎ個（ｎは任意の正数）であってもよい。移植可能タスクが存在しない場合には、ステップＳ１８０１及びステップＳ１８０２が省略されてもよい。専用タスクが存在しない場合には、ステップＳ１８０３が省略されてもよい。
【０３０８】
図２２は、タスクチェーンの例を示す図である。
【０３０９】
図２２のそれぞれのキューＱは、マスタキューＭＱ、従属キューＳＱ0〜ＳＱn、又は、マスタキューＭＱと従属キューＳＱ0〜ＳＱnとの双方に対応するとしてもよい。図２２において、タスクの実行コマンドは、発生後、対応するタスクが実行されるまでキューＱで管理される。
【０３１０】
タスクチェーンとは、例えば、連続して実行される２以上のタスクのつながりである。ＨＡＬ３０１ｈは、特定のインタフェースにしたがって、外部から、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などを受ける。例えば、ＨＡＬ３０１ｈは、ホスト装置又は不揮発性メモリからの入出力コマンド、電源イベント、タイマーイベント、ＮＡＮＤフラッシュメモリのイベントなどの外部割込みイベントに基づいて、実行コマンドを発行し、ＨＡＬ３０１ｈとタスクＴとの間のキューＱに格納する。より具体的には、外部割込みイベントは、例えばＨＡＬ３０１ｈに対するデータ送受信コマンド、不揮発性メモリ５に対する読み出し又は書き込み又は消去コマンド、電源制御イベント、又は、タイマー割込みイベントなどである。なお、外部割込みイベントは、上述のものに限られない。
【０３１１】
タスクチェーンの終了後、ＨＡＬ３０１ｈは、特定のインタフェースにしたがって、外部へデータ、情報、信号、コマンド、メッセージ、リクエスト、指令などを送る。
【０３１２】
すべてのタスクチェーンは、割り込みハンドラによって呼び出し可能である。タスクは、次のタスクを呼び出す前に、次のタスクで必要なすべての情報（パラメータ）を準備する。
【０３１３】
タスクの実行後、この実行されたタスクは複数のタスクの中から次に実行されるタスクを選択可能としてもよい。例えば、タスクＴが正常終了した場合には、タスクＴは通常処理としてタスクチェーンＴＣ1を選択し、次に処理されるタスクＴnの実行コマンドをキューＱに格納してもよい。タスクＴが異常終了した場合には、タスクＴは例外処理としてタスクチェーンＴＣ2を選択し、次に処理されるタスクＴｅの実行コマンドをキューＱに格納してもよい。
【０３１４】
また、通常処理のタスクチェーンＴＣ1及び例外処理のタスクチェーンＴＣ2が例えば従属プロセッサＰS1で処理中である場合、動的タスクスケジューラ１５Ｄはタスクチェーンに含まれるタスクの実行コマンドを一旦マスタキューＭＱへ送信すると、送受信時間がかかり処理が遅延する。そのため、動的タスクスケジューラ１５Ｄは、従属プロセッサＰS1の負荷が低いと判断した場合は、次に処理するタスクの実行コマンドを従属プロセッサＰS1の静的タスクスケジューラに渡してもよい。
【０３１５】
ホスト装置側のハードウェア抽象化レイヤであるＨＡＬ３０１ｈは、デバイスへのアクセスを行わない。実際のデバイスアクセスは、タスクＴが起動するタスクチェーンＴＣ1又はタスクチェーンＴＣ2に含まれるデバイスドライバＨＡＬ３０１ｄにより行われる。ＨＡＬ３０１ｄによるデバイスアクセスの詳細については、図２５乃至図２８で後述する。
【０３１６】
タスクＴは、実行中に分岐先のタスクを呼び出し可能としてもよい。具体的には、タスクＴは、通常処理のタスクチェーンＴＣ1又は例外処理のタスクチェーンＴＣ2内の並列処理可能な１以上のタスク（例えばＴb1及びＴb2）を、負荷の低いプロセッサに割り振ってもよい。この場合、タスクＴは分岐処理のタスクチェーンＴＣ3及びＴＣ4を生成する。分岐処理は、タスクチェーンＴＣ3のようにＨＡＬ３０１ｄへのアクセスがない分岐処理であってもよく、タスクチェーンＴＣ4のようにＨＡＬ３０１ｄへのアクセスがある分岐処理であってもよい。分岐処理は、例えばログ記録などである。
【０３１７】
ＨＡＬ３０１ｄは、タスクチェーンの終端のタスクの実行後、キューＱに格納された実行コマンドを、キューＱから取り出し、取り出された実行コマンドを実行し、例えば外部へ、データ、情報、信号、コマンド、メッセージ、リクエスト、指令などを送る。
【０３１８】
図２３は、タスク間での情報の受け渡しの例を示す図である。例えば、タスク間で受け渡しされる情報を、タスク間メッセージと呼ぶ。
【０３１９】
この図２３において、現在処理中又は処理済のタスクＴpは作業領域ＷＡpに、タスクＴpが正常終了した場合に選択する次タスクＴnは作業領域ＷＡnに、タスクＴpが異常終了した場合に選択する例外タスクＴeは作業領域ＷＡeに、それぞれ対応付けられており、それぞれのタスクは対応する作業領域より情報を書き込み及び読み出し可能である。作業領域ＷＡp、作業領域ＷＡn、及び作業領域ＷＡeは、図１６のメモリＭ0〜Ｍ8に含まれる。
【０３２０】
タスクＴp、次タスクＴn、例外タスクＴeは、それぞれ、共有作業領域ＣＷＡに、情報を格納（書き込み）及び参照（読み出し）可能である。共有作業領域ＣＷＡは、図１６の共有メモリＳＭに含まれる。
【０３２１】
作業領域ＷＡp、作業領域ＷＡn、作業領域ＷＡe、及び共有作業領域ＣＷＡは、複数種類のメモリ（例えばＳＲＡＭ、ＤＲＡＭ）を含んでいてもよい。
【０３２２】
上述のように、タスクＴpが実行された後に発生される次のタスクの実行コマンド又は例外タスクの実行コマンドは、キューＱで管理される。次タスクＴnが実行された後に発生される実行コマンド、及び、例外タスクＴeが実行された後に発生される実行コマンドも同様にそれぞれキューＱによって管理される。なお、図２３では、タスクＴpと次タスクＴn及び例外タスクＴeとの間に存在するキューＱの記載を省略している。
【０３２３】
タスクＴpは、当該タスクＴpが実行される前に実行されたタスクに対応する作業領域における情報を参照可能としてもよい。
【０３２４】
タスクＴpは、当該タスクＴpが実行された後に実行される次タスクＴnに対応する作業領域ＷＡn、又は例外タスクＴeに対応する作業領域ＷＡeに、情報を格納可能としてもよい。
【０３２５】
次タスクＴn、及び、例外タスクＴeは、次タスクＴn、及び、例外タスクＴeが実行される前に実行されたタスクＴpに対応する作業領域ＷＡpにおける情報を参照可能としてもよい。
【０３２６】
次タスクＴn、及び、例外タスクＴeは、次に実行されるタスクに対応する作業領域に、情報を格納可能としてもよい。
【０３２７】
より具体的には、タスク間メッセージの受け渡しを行う方法は、次の第１乃至第３の方法が挙げられる。なお、図２３における矢印は、タスク間メッセージが移動する方向を示す。
【０３２８】
第１の方法は、矢印Ｓ２３０１に示すように、タスクＴpの作業領域ＷＡpにタスク間メッセージを格納する方法である。この場合、次に処理されるタスク（次タスクＴn又は例外タスクＴe）が作業領域ＷＡpをアクセスし、タスク間メッセージを参照する。
【０３２９】
第２の方法は、矢印Ｓ２３０２に示すように、タスクＴpが、次に処理されるタスクの作業領域にタスク間メッセージを格納する方法である。次に処理されるタスクが次タスクＴnの場合は、タスク間メッセージは作業領域ＷＡnに格納され、次タスクＴnは作業領域ＷＡｎに格納されたタスク間メッセージを参照する。次に処理されるタスクが例外タスクＴeの場合は、タスク間メッセージは作業領域ＷＡeに格納され、例外タスクＴeは作業領域ＷＡeに格納されたタスク間メッセージを参照する。
【０３３０】
第３の方法は、矢印Ｓ２３０３に示すように、共有作業領域ＣＷＡにおけるタスク間メッセージを複数のタスクがアクセスする方法である。タスクＴpは、共有作業領域ＣＷＡにタスク間メッセージを格納し、次に処理されるタスク（次タスクＴn又は例外タスクＴe）は、共有作業領域ＣＷＡに格納されたタスク間メッセージを参照する。
【０３３１】
各タスクは、前のタスク又は外部のハンドラによって呼び出される。前のタスクは、次のタスクを呼び出す前に、すべての必要な情報（パラメータ）を準備する。各タスクは、タスク間メッセージを、タスクを実行するプロセッサに対応する作業領域と次のタスクの作業領域とのうちの少なくとも一方に格納する。
【０３３２】
図２４は、タスクに対応する作業領域の例を示す図である。
【０３３３】
作業領域は、高速アクセス可能な作業領域ＷＡfと、記憶容量の大きい作業領域ＷＡlとを含む。タスク制御ＡＰＩは、タスク間の関係と、ローカルの作業領域情報のやり取りとを規定する。タスクＴは、前のタスクＴppの後に実行される。タスクＴの実行後、次タスクＴn又は例外タスクＴeが実行される。タスクＴは、他のタスクの作業領域をアクセス可能としてもよい。タスクＴは、共有作業領域ＣＷＡの情報を参照又は共有作業領域ＣＷＡへ情報を格納する。
【０３３４】
なお、複数のタスクの間で階層構造を持つとしてもよい。親タスク及び子タスクがそれぞれ保持するリソースは、相互に参照可能でもよい。例えば、タスクＴの親タスクＴpaが存在する場合、タスクＴは親タスクＴpaのタスク制御構造とタスク制御構造における作業領域位置とを参照可能としてもよい。
【０３３５】
ＨＡＬ ＡＰＩは、ホストインタフェース制御、ＮＡＮＤ制御、電源制御、タイマー制御に用いられる。
【０３３６】
ホストインタフェース制御は、コマンド到着、データ到着、など、ホストイベントをスケジューラへ通知する。
【０３３７】
ＮＡＮＤ制御は、優先度を用いて読み出しコマンド、書き込みコマンド、消去コマンドをキューイングする。ＮＡＮＤ制御は、ＮＡＮＤフラッシュメモリに関するＮＡＮＤイベントをスケジューラへ通知する。
【０３３８】
電源制御は、電源イベントをスケジューラへ通知し、電源モードを制御する。
【０３３９】
タイマー制御は、タイマーへパラメータをセット又はリセットする。タイマー制御は、タイマーイベントをスケジューラへ通知する。
【０３４０】
図２５及び図２６を用いて、ＨＡＬを用いたタスク間通信について述べる。
【０３４１】
図２５は、本実施形態に係るＨＡＬによる通信の例を示すフローチャートである。
【０３４２】
図２６は、本実施形態に係るＨＡＬによる通信の例を示すブロック図である。
【０３４３】
ＨＡＬ３０１ｄは、デバイスドライバタスクＴd及び割り込みハンドラ３０３を含む。また、ＨＡＬ３０１ｄは、デバイスドライバタスクＴdの処理順序を管理するためのデバイスドライバタスクキューＤＱ及び作業領域ＷＡhを備える。なお、図２６では、タスクＴpとデバイスドライバタスクＴdとの間に存在するキューＱ、割り込みハンドラ３０３と次タスクＴn及び例外タスクＴeとの間に存在するキューＱの記載を省略している。デバイスドライバタスクキューＤＱ及び作業領域ＷＡhは、同じメモリ空間上に配置されていてもよい。作業領域ＷＡhは、他のタスクからアクセス不可である。
【０３４４】
ステップＳ２５０１において、タスクＴpは、ＨＡＬ３０１ｄを起動する。具体的には、タスクＴpは、タスクＴpの処理完了後にキューＱにデバイスドライバタスクＴdの実行コマンドを格納し、静的タスクスケジューラ１５Ｓ又は動的タスクスケジューラ１５Ｄが、キューＱに格納されている実行コマンドにしたがって次に処理されるデバイスドライバタスクＴdを起動する。
【０３４５】
ステップＳ２５０２において、デバイスドライバタスクＴdは、次に処理する次タスクＴnの情報及びデバイスアクセスに必要なパラメータを取得する。デバイスドライバタスクＴdは、次タスクＴnの情報及び必要なパラメータを、タスク間メッセージとしてタスクＴpの作業領域ＷＡpから読み込んでもよい。
【０３４６】
ステップＳ２５０３において、デバイスドライバタスクＴdは、デバイスアクセスリクエストを発行する。デバイスアクセスリクエストは、デバイスドライバタスクキューＤＱに格納される。また、デバイスドライバタスクＴdは、ステップＳ２５０２で読み込んだタスク間メッセージを作業領域ＷＡhに格納する。
【０３４７】
ステップＳ２５０４において、デバイスドライバタスクＴdは、デバイスドライバタスクキューＤＱよりデバイスアクセスリクエストを１つ取り出し、デバイスアクセスのための割り込みを発生させる。
【０３４８】
ステップＳ２５０５において、ステップＳ２５０４で発生した割り込みにより、割り込みハンドラ３０３が起動する。
【０３４９】
ステップＳ２５０６において、割り込みハンドラ３０３にしたがって、すなわち割り込みハンドラ３０３の処理シーケンス内で、デバイスドライバ３１１がデバイスへアクセスを行い、リクエストされた処理を行う。
【０３５０】
ステップＳ２５０７において、割り込みハンドラ３０３は、デバイスドライバ３１１より得られたデバイスアクセス結果（戻り値）を、タスクＴpの作業領域ＷＡpに格納してもよい。
【０３５１】
ステップＳ２５０８において、割り込みハンドラ３０３は、デバイスドライバタスクＴdの処理結果に応じて、キューＱに次タスクＴnの実行コマンド又は例外タスクＴeの実行コマンドを格納する。静的タスクスケジューラ１５Ｓ又は動的タスクスケジューラ１５Ｄは、次に処理される次タスクＴn又は例外タスクＴeを起動する。
【０３５２】
次に処理されるタスクが次タスクＴnである場合、ステップＳ２５０９において、次タスクＴnはタスクＴpの作業領域ＷＡpを参照し、ステップＳ２５０７で格納されたデバイスアクセス結果（戻り値）を取得する。なお、次に処理されるタスクが例外タスクＴeの場合でも、同様に例外タスクＴeは作業領域ＷＡpよりデバイスアクセス結果（戻り値）を取得する。
【０３５３】
なお、ＨＡＬ３０１ｄは、複数のタスクから呼び出されてもよい。この場合、ＨＡＬ３０１ｄは複数のタスクのうちどのタスクのデバイスアクセスリクエストであるかを識別する識別情報を、作業領域ＷＡhに格納されたタスク間メッセージより取得してもよい。また、複数のタスクは、それぞれの次タスク又は例外タスクを特定可能である。
【０３５４】
本実施形態において、ＨＡＬ３０１ｄはデバイスアクセス結果をタスク間メッセージとしてタスクＴpの作業領域ＷＡpに格納し、次に処理されるタスクはタスクＴpの作業領域ＷＡpを参照してタスク間メッセージを得る。これにより、タスクＴpと次に処理される次タスクＴnは、ＨＡＬ３０１ｄの存在を意識することなく、直接タスク間通信を行うように振る舞う。すなわち、タスク間通信において、ＨＡＬ３０１ｄを秘匿することができる。
【０３５５】
図２７は、ＮＡＮＤフラッシュドライバに対するＨＡＬ ＡＰＩに準拠した処理の例を示すフローチャートである。
【０３５６】
図２８は、ＮＡＮＤフラッシュドライバに対するＨＡＬ ＡＰＩの例を示すブロック図である。
【０３５７】
ステップＳ２７０１では、デバイスドライバタスクＴdは、タスクＴpの次に実行される次タスクＴnの識別情報及びデバイスアクセスに必要なＮＡＮＤフラッシュパラメータを、タスク間メッセージとしてタスクＴpの作業領域ＷＡpから読み込む。
【０３５８】
ステップＳ２７０２において、キューＱで管理されているＮＡＮＤフラッシュアクセスリクエストがＮＡＮＤフラッシュドライバ３１１ａへ発行される。デバイスアクセスリクエストは、デバイスドライバタスクキューＤＱに格納される。デバイスドライバタスクＴdは、ステップＳ２７０１で読み込んだタスク間メッセージを作業領域ＷＡhに格納する。
【０３５９】
また、ＮＡＮＤフラッシュドライバ３１１ａは、ＮＡＮＤフラッシュメモリＢ0〜Ｂpにアクセスする。
【０３６０】
ステップＳ２７０３において、デバイスドライバタスクＴdは、ＮＡＮＤフラッシュメモリＢ0〜Ｂpへのアクセス完了後、タスクＴpの作業領域ＷＡpにアクセス結果を格納する。アクセス結果は、例えばＮＡＮＤフラッシュメモリＢ0〜Ｂpの状態を表すメモリステータス情報であってもよい。
【０３６１】
ステップＳ２７０４において、デバイスドライバタスクＴdは、キューＱに次に処理されるタスクである次タスクＴnの実行コマンドを格納する。静的タスクスケジューラ１５Ｓ又は動的タスクスケジューラ１５Ｄは、次タスクＴnの実行コマンドにしたがって次タスクＴnを起動する。
【０３６２】
本実施形態において、ソフトウェア定義型のＳＳＤプラットフォームは、ホスト制御を実行する。ホスト制御は、例えば、コマンドをサポートし、ネームスペースを制御し、ＱｏＳ（Quality of Service）制御を行う。
【０３６３】
コマンドのサポートとして、例えば、ホスト制御は、読み出し及び書き込みにおける複数のコマンドを最も効率のよい順序に並び替えて実行するネイティブコマンドキューイング（NCQ:Native Command Queuing）を行う。
【０３６４】
ネームスペースの制御として、例えば、ホスト制御は、各ネームスペースに対するＱｏＳ制御を行う。ＱｏＳ制御は、例えば、トラフィックの属性に応じて、転送処理に差異をつけること、及び、帯域を保証すること、を含む。例えば、ホスト制御は、各ネームスペースに対応するタスクチェーンを特定する。
【０３６５】
ＱｏＳ制御として、例えば、ホスト制御は、ＮＡＮＤフラッシュコントローラに対する受付可能レイテンシ情報、タスク制御に対する優先制御を管理する。
【０３６６】
図２９は、ＮＣＱを用いたタスクの割り当ての例を示すブロック図である。
【０３６７】
各タスクチェーンＴＣ1〜ＴＣnは、ＩＤによって区別される。各タスクチェーンＴＣ1〜ＴＣnは、独立して処理される。タスクのプログラムＰ1〜Ｐmは、複数のタスクチェーンＴＣ1〜ＴＣnで共有可能としてもよい。それぞれのタスクチェーンＴＣ1〜ＴＣnに含まれるタスクＴ1〜Ｔmに対応する作業領域ＷＡ1〜ＷＡmは、タスクチェーンＴＣ1〜ＴＣnごとに独立して確保される。
【０３６８】
具体的には、例えばホスト装置から不揮発性メモリ５へのアクセスの際、ホスト装置よりｎ個の読み込みコマンドが発行され、ｎ個の読み込みコマンドに対応するタスクチェーンＴＣ1〜ＴＣnが実行される。タスクチェーンＴＣ1〜ＴＣnは、それぞれｍ個のタスクＴ1〜タスクＴmを含む。タスクチェーンＴＣ1〜ＴＣnには、例えばホスト装置又はメモリ装置により、それぞれタスクチェーンＩＤが付与されてもよい。
【０３６９】
ここで、タスクチェーンＴＣ1〜ＴＣnは全て読み込みコマンドであるため、タスクチェーンＴＣ1〜ＴＣnに含まれるタスクＴ1〜タスクＴmは、タスクチェーンＩＤによらず共通である。このため、タスクＴ1〜タスクＴmのプログラムＰ1〜ＰmはタスクチェーンＴＣ1〜ＴＣn間で共有されることにより、タスクチェーンＴＣ1〜ＴＣnごとに独立したプログラムを保持する場合と比べ、システム全体が管理するリソースが減る。具体的には、各タスクチェーンＴＣ1〜ＴＣnのタスクＴ１はプログラムＰ１を共有し、各タスクチェーンＴＣ1〜ＴＣnのタスクＴmはプログラムＰmを共有する。
【０３７０】
上述のように、各タスクチェーンＴＣ1〜ＴＣnは同じタスクを処理するプログラムを共有するため、異なるタスクチェーンに含まれる同じタスクは、同時に処理されない。例えば、プログラムＰ1により処理されるタスクチェーンＴＣ1〜タスクチェーンＴＣnのタスクＴ1は、同時に処理されない。なお、各タスクチェーンＴＣ1〜ＴＣnにおいて、１つのタスクチェーン内では、同時に複数のコマンドは実行されない。
【０３７１】
また、異なるタスクチェーンに含まれる同じタスクは、それぞれ異なるパラメータを保持するため、それぞれ異なる作業領域を確保する。例えば、タスクＴ1は作業領域ＷＡ1を確保し、タスクＴmは作業領域ＷＡmを確保する。タスクが保持するパラメータは、例えば処理範囲（経過）を表す進行管理パラメータ及びタスクの処理結果などを含む。
【０３７２】
なお、図２９はタスクチェーンＴＣ1〜ＴＣnがすべて同じコマンドである場合を例示したが、タスクチェーンＴＣ1〜ＴＣnが互いに異なるコマンドのタスクチェーンであってもよい。
【０３７３】
図３０は、本実施形態に係るソフトウェア定義型ＳＳＤプラットフォームの機能の一例を示すブロック図である。図３０は、図１５に示されるソフトウェア定義型ＳＳＤプラットフォームの構成を、機能ブロック単位で分割し、機能ブロック同士の関係を表現している。以下では、プログラムＦがアクセスする不揮発性メモリ５はＮＡＮＤフラッシュメモリである場合について説明するが、不揮発性メモリ５はＮＡＮＤフラッシュメモリに限定されない。
【０３７４】
ソフトウェア定義型ＳＳＤプラットフォームは、例えばコマンド制御部３１０１、送受信制御部３１０２、書き込み制御部３１０３、読み出し制御部３１０４、書き込みバッファ３１０５、ＮＡＮＤ書き込み制御部３１０６、読み出しバッファ３１０７、ＮＡＮＤ読み出し制御部３１０８、ルックアップテーブル３１０９、ルックアップテーブルキャッシュ３１１０、ＮＡＮＤ制御部３１１１、ガーベージコレクション制御部３１１２を含む。
【０３７５】
コマンド制御部３１０１は、ホスト装置との間で、コマンドを送受信する。コマンド制御部３１０１は、ホスト装置から受信したコマンドが書き込みコマンドである場合は、書き込み制御部３１０３へ書き込みコマンドを送る。また、コマンド制御部３１０１は、ホスト装置から受信したコマンドが読み出しコマンドである場合は、読み出し制御部３１０４へ読み出しコマンドを送る。
【０３７６】
なお、ホスト装置とコマンド制御部３１０１との間で送受信されるコマンドと、ソフトウェア定義型ＳＳＤプラットフォーム内部で送受信されるコマンドとが同じ名称の場合でも、コマンド形式はそれぞれ異なっていてもよい。
【０３７７】
送受信制御部３１０２は、ホスト装置との間で、データを送受信する。送受信制御部３１０２は、ホスト装置から受信したデータを書き込みバッファ３１０５へ格納する。送受信制御部３１０２は、ＮＡＮＤフラッシュメモリから読み出されたデータを読み出しバッファ３１０７より受信し、ホスト装置へ送信する。
【０３７８】
書き込み制御部３１０３は、コマンド制御部３１０１からの書き込みコマンドにしたがって、書き込みバッファ３１０５及びＮＡＮＤ書き込み制御部３１０６を制御する。具体的には、書き込みバッファ３１０５に格納されているデータをＮＡＮＤフラッシュメモリに書き込むよう、ＮＡＮＤ書き込み制御部３１０６へコマンドを送る。
【０３７９】
読み出し制御部３１０４は、コマンド制御部３１０１からの読み出しコマンドにしたがって、読み出しバッファ３１０７及びＮＡＮＤ読み出し制御部３１０８を制御する。具体的には、ＮＡＮＤフラッシュメモリに格納されているデータを読み出した後、読み出しバッファ３１０７へ格納するよう、ＮＡＮＤ読み出し制御部３１０８へコマンドを送る。
【０３８０】
ＮＡＮＤ書き込み制御部３１０６は、ＮＡＮＤ制御部３１１１へ書き込みコマンドを送信する。この際、ルックアップテーブル３１０９を参照し、参照結果をＮＡＮＤ制御部３１１１へ送信してもよい。
【０３８１】
ＮＡＮＤ読み出し制御部３１０８は、読み出したデータを読み出しバッファ３１０７へ格納する。
【０３８２】
ルックアップテーブルキャッシュ３１１０は、ルックアップテーブル３１０９へのアクセスを高速化するためのキャッシュメモリであり、ルックアップテーブル３１０９のうちの少なくとも一部を格納する。また、ルックアップテーブルキャッシュ３１１０は、書き込み制御部３１０３より書き込みバッファ３１０５を経由して書き換えられてもよく、読み出し制御部３１０４より読み出しバッファ３１０７を経由して読み出されてもよい。
【０３８３】
ＮＡＮＤ制御部３１１１は、ＮＡＮＤフラッシュメモリに対し、書き込みコマンド及び読み出しコマンドにしたがって、データの書き込み及び読み出しを行う。ＮＡＮＤ制御部３１１１は、読み出しデータをＮＡＮＤ読み出し制御部３１０８へ送信する。
【０３８４】
ガーベージコレクション制御部３１１２は、書き込み制御部３１０３及び読み出し制御部３１０４を制御することにより、ガーベージコレクションを行う。
【０３８５】
なお、書き込み制御部３１０３及びＮＡＮＤ書き込み制御部３１０６は、分離されていなくてもよい。読み出し制御部３１０４及びＮＡＮＤ読み出し制御部３１０８は、分離されていなくてもよい。
【０３８６】
以上説明した本実施形態において、ハードウェア部４Ｈは、ＨＡＬ３０１により秘匿される。また、タスクＴpの次に処理される次タスクＴnは、タスクＴpのＨＡＬ３０１に対するアクセス結果を、タスクＴpの作業領域ＷＡpを参照することにより得る。すなわち、タスク間通信において、ハードウェア部４Ｈは秘匿されるため、通信の安全性が高まる。また動的タスクスケジューラ１５Ｄ及びプログラムＦは、ハードウェア部４Ｈ又はデバイスドライバ３１１の仕様変更を意識しなくてよいため、プログラムコードの保守管理が容易となる。
【０３８７】
本実施形態においては、共有メモリプラットフォームが採用される。このため、ソフトウェア定義型ＳＳＤプラットフォームは、動的タスクスケジューリングにより複数のプロセッサの負荷が一定となるようパフォーマンスを調整可能である。
【０３８８】
本実施形態に係るソフトウェア定義型ＳＳＤプラットフォームは、各階層で同じパラメータを保持する場合、上位の階層（例えば、プログラムＦ）と下位の階層（例えばＨＡＬ３０１、デバイスドライバ３１１、ハードウェア部４Ｈ）とで、パラメータの内容を変化
させる。これにより、階層ごとに適切な抽象度でパラメータを保持することができる。
【０３８９】
本実施形態において、タスクチェーンは、タスクＴの処理結果に応じて、通常処理のタスクチェーンと例外処理のタスクチェーンとに分岐されてもよい。これにより、タスクチェーン内で通常処理か例外処理かの複雑な分岐処理が不要となるため、タスクＴをハードウェアに容易に置き換え可能である。
【０３９０】
本実施形態においては、処理中のタスクＴは、通常処理のタスクチェーンＴＣ1又は例外処理のタスクチェーンＴＣ2内の並列処理可能な１以上のタスクを、負荷の低いプロセッサに割り振る。これにより、ソフトウェア定義型ＳＳＤプラットフォーム全体の処理時間を短縮できる。
【０３９１】
本実施形態においては、タスク間通信の方法として、タスクＴpの作業領域ＷＡpにタスク間メッセージを格納する方法、タスクＴpが次に処理される次タスクＴnの作業領域ＷＡnにタスク間メッセージを格納する方法、及び共有作業領域ＣＷＡを用いてタスク間メッセージをタスク同士で参照する方法を用意する。これにより、開発者は最適なタスク間通信の方法を選択して実装を行うことができる。
【０３９２】
本実施形態においては、ホスト装置からの複数のコマンドにしたがって実行される複数のタスクチェーンの間で共有されるタスクが、共通のプログラムに基づいて実行される。これにより、タスクチェーンごとに独立してプログラムを保持する場合と比べ、システム全体が管理するリソースを減らすことができる。
【０３９３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３９４】
１…情報処理システム、２…情報処理装置、３…メモリ装置、４…コントローラ、５…不揮発性メモリ、６…インタフェース部、７Ａ，７Ｂ…メモリ、Ｐ0〜ＰN…プロセッサ、Ｃ0〜ＣN…管理部、８１…受付部、８２…アドレス変換部、８３…書き込み部、８４…読み出し部、９…メモリコントローラ、１０…アドレス変換データ、１１…制御プログラム、Ｆ0〜ＦM…プログラム、１１１…モジュール間通信部、１１２…優先制御部、１１３…割り込みハンドラ、１１４…アクセス部、１１５…情報管理部、１１６…ハードウェアドライバ、４Ｈ…ハードウェア部、Ｂ0〜ＢP…ＮＡＮＤ型フラッシュメモリ、１３１〜１３７…取り替え可能ＳＳＤモジュール、１４１〜１４５…ドライバ、１４６…外部ハードウェア部、ＶＳ0〜ＶＳP…仮想メモリ装置、ＶＭ0〜ＶＭP…仮想マシン。
【図１】
2019091492.tif 000003
【図２】
2019091492.tif 000004
【図３】
2019091492.tif 000005
【図４】
2019091492.tif 000006
【図５】
2019091492.tif 000007
【図６】
2019091492.tif 000008
【図７】
2019091492.tif 000009
【図８】
2019091492.tif 000010
【図９】
2019091492.tif 000011
【図１０】
2019091492.tif 000012
【図１１】
2019091492.tif 000013
【図１２】
2019091492.tif 000014
【図１３】
2019091492.tif 000015
【図１４】
2019091492.tif 000016
【図１５】
2019091492.tif 000017
【図１６】
2019091492.tif 000018
【図１７】
2019091492.tif 000019
【図１８】
2019091492.tif 000020
【図１９】
2019091492.tif 000021
【図２０】
2019091492.tif 000022
【図２１】
2019091492.tif 000023
【図２２】
2019091492.tif 000024
【図２３】
2019091492.tif 000025
【図２４】
2019091492.tif 000026
【図２５】
2019091492.tif 000027
【図２６】
2019091492.tif 000028
【図２７】
2019091492.tif 000029
【図２８】
2019091492.tif 000030
【図２９】
2019091492.tif 000031
【図３０】
2019091492.tif 000032