(57)【特許請求の範囲】
【請求項１】
複数のプロセスの実行に用いられるメモリの空き容量を監視し、前記メモリの空き容量の不足を検出すると、動作中のプロセスのいずれかを終了させることで前記メモリの空き容量を増やすメモリ管理部と、
前記メモリ管理部が終了させたプロセスの種類または動作状態が予め定められた条件を満たす場合に、前記メモリにおいてオペレーティングシステムのキャッシュ領域として確保されていた領域を解放することで前記メモリの空き容量をさらに増やすシステムキャッシュ解放部と、
を備えるメモリ管理システム。
【請求項２】
前記システムキャッシュ解放部は、前記メモリ管理部が終了させたプロセスが、ユーザが動作を知覚できない状態のプロセスであった場合に、前記キャッシュ領域を解放する、
請求項１に記載のメモリ管理システム。
【請求項３】
前記システムキャッシュ解放部は、前記メモリ管理部が終了させたプロセスが、他のプロセスとデータを共有するためのプロセスであった場合に、前記キャッシュ領域を解放する、
請求項１に記載のメモリ管理システム。
【請求項４】
前記システムキャッシュ解放部は、前記メモリ管理部が終了させたプロセスが、何も実行していない状態のプロセスであった場合に、前記キャッシュ領域を解放する、
請求項１に記載のメモリ管理システム。
【請求項５】
前記システムキャッシュ解放部が解放させる前記キャッシュ領域を、ページキャッシュ領域にするか、スラブキャッシュ領域にするか、あるいはページキャッシュ領域およびスラブキャッシュ領域の両方にするかを設定可能である、
請求項１に記載のメモリ管理システム。
【請求項６】
前記メモリ管理部は、前記メモリの空き容量の不足が検出されたとき、前記メモリの空き容量、各プロセスの種類、各プロセスの動作状態、各プロセスによる前記メモリの使用量のうちの１つ以上に基づいて、どのプロセスを終了させるかを選定する、
請求項１に記載のメモリ管理システム。
【請求項７】
前記複数のプロセスの各々には、そのプロセスの種類または動作状態に基づく優先度が定められ、
前記メモリ管理部は、
前記メモリの空き容量の不足を検出すると、前記メモリの空き容量に基づいて、終了させるプロセスの候補を選定し、
終了させるプロセスの候補が複数あれば、そのうち前記優先度が最も低いプロセスを終了させ、
終了させるプロセスの候補の中に前記優先度の最も低いプロセスが複数あれば、そのうち前記メモリの使用量が最も大きいものを終了させる、
請求項１に記載のメモリ管理システム。
【請求項８】
請求項１に記載のメモリ管理システムと、
前記複数のプロセスを実行するプロセス実行部と、
前記メモリと、
を備える情報処理装置。
【請求項９】
複数のプロセスの実行に用いられるメモリの管理方法であって、
メモリ管理システムのメモリ管理部が、前記メモリの空き容量を監視し、前記メモリの空き容量の不足を検出すると、動作中のプロセスのいずれかを終了させることで前記メモリの空き容量を増やし、
前記メモリ管理部が終了させたプロセスの種類または動作状態が予め定められた条件を満たす場合に、前記メモリ管理システムのシステムキャッシュ解放部が、前記メモリにおいてオペレーティングシステムのキャッシュ領域として確保されていた領域を解放することで前記メモリの空き容量をさらに増やす、
メモリの管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリの空き容量を確保するメモリ管理システムに関するものである。
【背景技術】
【０００２】
パーソナルコンピュータやスマートフォンなどの情報処理装置に搭載される高機能オペレーティングシステム（ＯＳ）の多くでは、メモリの空き容量が不足したときに、動作中のプロセスのいずれかを強制終了させることでメモリの空き容量を確保するメモリ管理システムが採用されている。例えば、Android（登録商標）は、Low Memory Killerと呼ばれるメモリ管理システムを搭載している。【０００３】
上記のようなメモリ監視システムを備えた情報処理装置では、メモリの空き容量不足を防止できるが、例えばユーザの使用頻度が高いアプリケーションのプロセスが強制終了されると、次にそのアプリケーションを使用する際の起動時間が長くなるため、情報処理装置の使い勝手が悪くなるという問題が生じる。【０００４】
例えば下記の特許文献１，２では、この問題を解決するための技術が提案されている。特許文献１のメモリ管理システムは、各プロセスが確保するメモリ領域のそれぞれに、優先度を表すランクを設定し、メモリの空き容量が不足したときにランクの低いメモリ領域を解放する。また、特許文献２のメモリ管理システムでは、優先度の高いプロセスを、強制終了禁止プロセスとして設定することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−２２１２１７号公報
【特許文献２】特開２００８−１８６１６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１，２の技術は、いずれも優先度の低いプロセスを終了させてメモリの空き容量を増やすものである。特許文献１の技術では、優先度の低いプロセスを終了させても空き容量を十分に確保できなかった場合には、優先度の高いプロセスを終了せざるを得ず、上記の問題が生じる。また、特許文献２の技術では、強制終了禁止プロセスが多数動作していた場合に、メモリの空き容量を十分に確保できないおそれがある。【０００７】
本発明は以上のような課題を解決するためになされたものであり、優先度の高いプロセスが強制終了されることを防止しつつ、メモリの空き容量を十分に確保できるメモリ管理システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係るメモリ管理システムは、複数のプロセスの実行に用いられるメモリの空き容量を監視し、メモリの空き容量の不足を検出すると、動作中のプロセスのいずれかを終了させることでメモリの空き容量を増やすメモリ管理部と、メモリ管理部が終了させたプロセスの種類または動作状態が予め定められた条件を満たす場合に、メモリにおいてオペレーティングシステムのキャッシュ領域として確保されていた領域を解放することでメモリの空き容量をさらに増やすシステムキャッシュ解放部と、を備えるものである。
【発明の効果】
【０００９】
本発明によれば、メモリ管理部が予め定められた条件を満たすプロセスを終了させたときに、システムキャッシュ解放部がオペレーティングシステムのキャッシュ領域として確保されていた領域を解放してメモリの空き容量を増やす。メモリ管理部が優先度の高いプロセスを終了させる前にメモリの空き領域を効果的に増やすことができるため、メモリ管理部によって優先度の高いプロセスが終了させることが防止される。よって、優先度の高いプロセスが強制終了されることを防止しつつ、メモリの空き容量を十分に確保することができる。【００１０】
本発明の目的、特徴、態様、および利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施の形態に係る情報処理装置の主要部の構成を概念的に示すブロック図である。
【図２】各プロセスの種類または動作状態と優先度および空き容量の閾値との関係の例を示す図である。
【図３】設定ファイルの記述の例を示す図である。
【図４】本発明の実施の形態に係るメモリ管理システムの動作を説明するための図である。
【図５】本発明の実施の形態に係るメモリ管理システムの動作を説明するための図である。
【図６】本発明の実施の形態に係るメモリ管理システムの動作を説明するための図である。
【図７】本発明の実施の形態に係るメモリ管理システムの動作を説明するための図である。
【図８】Low Memory Killerの動作を説明するための図である。
【図９】Low Memory Killerの動作を説明するための図である。
【図１０】Low Memory Killerの動作を説明するための図である。
【図１１】Low Memory Killerの動作を説明するための図である。
【図１２】本発明の実施の形態に係るメモリ管理システムの動作を示すフローチャートである。
【発明を実施するための形態】
【００１２】
図１は、本発明の実施の形態に係る情報処理装置の主要部の構成を概念的に示すブロック図である。図１のように、情報処理装置は、プロセッサ１、メモリ２およびストレージ３を備えている。情報処理装置の具体例としては、パーソナルコンピュータやスマートフォン、タブレット端末、ナビゲーション装置、オーディオディスプレイ装置などがある。例えば、情報処理装置がスマートフォンやタブレット端末などの携帯型機器である場合、図１に示した要素の他、画像表示部や、音声出力部、操作入力部なども、情報処理装置の構成要素に含まれることになるが、それらの図示は省略する。
【００１３】
プロセッサ１は、ソフトフェア（プログラム）を実行することにより各種の機能を実現する。プロセッサ１は、例えば、中央処理装置（ＣＰＵ：Central Processing Unit）、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、ＤＳＰ（Digital Signal Processor）などとも呼ばれることもある。
【００１４】
メモリ２は、プロセッサ１の主記憶装置であり、例えばＲＡＭ（Random Access Memory）等により構成される。プロセッサ１は、ソフトウェアを実行する際、その実行に必要なデータやプログラムをメモリ２に記憶させる。
【００１５】
ストレージ３は、プロセッサ１の補助記憶装置であり、プロセッサ１が実行するソフトウェアのプログラム等を記憶する。ここで、ストレージ３には、オペレーティングシステム１０を構築するためのシステムソフトウェア３１と、各種の設定値が記述された設定ファイル３２と、複数のアプリケーションソフトウェア３３（以下、単に「アプリケーション３３」という）とが記憶されているものとする。
【００１６】
ストレージ３の例としては、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）などの半導体メモリ、ＨＤＤ（Hard Disk Drive）、光ディスク、磁気ディスク、フレキシブルディスク等がある。ストレージ３は、それらの記憶媒体を組み合わせて構成されもよい。例えば、システムソフトウェア３１や設定ファイル３２をＲＯＭに記憶させ、アプリケーション３３をフラッシュメモリとしてのメモリカードに記憶させる形態が考えられる。
【００１７】
プロセッサ１は、ストレージ３に記憶されているシステムソフトウェア３１を実行することによって、オペレーティングシステム１０を構築する。オペレーティングシステム１０は、プロセス実行部１１およびメモリ管理システム１２の機能ブロックを備えている。
【００１８】
プロセス実行部１１は、ユーザの操作またはオペレーティングシステム１０の指示に従って、ストレージ３に記憶されたアプリケーション３３を実行する。すなわち、プロセス実行部１１は、アプリケーション３３のプログラムに従って、各種のプロセスを実行する。プロセス実行部１１は、複数のアプリケーション３３のプロセスを同時に実行することができる。また、１つのアプリケーション３３によって複数のプロセスが起動されることもある。
【００１９】
メモリ管理システム１２は、メモリ２の空き容量が不足したときに、その不足を解消するための処理を行う。図１のように、メモリ管理システム１２は、メモリ管理部１２１とシステムキャッシュ解放部１２２とを備えている。
【００２０】
メモリ管理部１２１は、メモリ２の空き容量を監視し、メモリ２の空き容量の不足を検出すると、動作中のプロセスのいずれかを終了させることでメモリ２の空き容量を増やす。より具体的には、メモリ管理部１２１は、メモリ２の空き容量が予め定められた閾値よりも小さくなったことを検出すると、動作中のプロセスのうちから終了させるプロセスを選定し、選定したプロセスの終了を要求する信号をプロセス実行部１１へ出力する。例えば、オペレーティングシステム１０がAndroidである場合、メモリ管理部１２１は公知のLow Memory Killerでよい。
【００２１】
システムキャッシュ解放部１２２は、メモリ管理部１２１が出力した信号を監視して、メモリ管理部１２１がどのプロセスを終了させたかのかを確認し、そのプロセスの種類および動作状態（終了される直前の動作状態を指す）をチェックする。そして、システムキャッシュ解放部１２２は、メモリ管理部１２１が終了させたプロセスの種類または動作状態が予め定められたトリガー条件を満たしていた場合に、メモリ２においてオペレーティングシステム１０のキャッシュ領域として確保されていた領域（以下「システム用キャッシュ領域」という）を解放することでメモリ２の空き容量をさらに増やす。トリガー条件の具体例は後述する。
【００２２】
本実施の形態では、オペレーティングシステム１０はAndroidであり、メモリ管理部１２１はLow Memory Killerであるものとする。Low Memory Killerにおいては、動作中の各プロセスが、プロセスの種類および動作状態に基づいて、例えば図２に示すような複数の類型に分類される。また、それぞれの類型に対し、優先度を表すａｄｊ値と、強制終了の候補となるか否かの判断基準となるメモリ２の空き容量の閾値とが規定されている。ａｄｊ値が小さいものほど優先度は高くなる。また、図２ではメモリ２の空き容量の閾値をページ数で表しており、Androidでは１ページは４ｋＢとされている。例えば、２０４８ページは、４ｋＢ×２０４８＝８１９２ｋＢを意味している。
【００２３】
図２において、「FOREGROUND_APP」は、フォアグラウンドで動作している状態のプロセスであり、そのａｄｊ値は０、空き容量の閾値は２０４８と設定されている。「VISIBLE_APP」は、実行画面の一部または全部が表示部に表示されている状態のプロセスであり、そのａｄｊ値は１、空き容量の閾値は４０９６と設定されている。「PERCEPTIBLE_APP」は、バックグラウンドで動作しているがユーザがその動作を知覚できる状態（例えば音楽を再生している状態）のプロセスであり、そのａｄｊ値は２、空き容量の閾値は８１９２と設定されている。
【００２４】
「HEAVY_WEIGHT_APP」は、プロセッサ１またはメモリ２への負荷が大きなプロセスであり、そのａｄｊ値は３、空き容量の閾値は８１９２と設定されている。「SECONDARY_SERVER」は、他のプロセスに機能を提供するプロセスであり、そのａｄｊ値は４、空き容量の閾値は１６３８４と設定されている。「BACKUP_APP」は、データのバックアップを行うプロセスであり、そのａｄｊ値は５、空き容量の閾値は２００００と設定されている。
【００２５】
「HOME_APP」は、ユーザがアプリケーションを起動させるためのホーム画面を表示するプロセス（いわゆるドロワーやホームアプリのプロセス）であり、そのａｄｊ値は６、空き容量の閾値は２５０００と設定されている。「HIDDEN_APP」は、バックグラウンドで動作しておりユーザがその動作を知覚できない状態のプロセスであり、そのａｄｊ値は７、空き容量の閾値は３００００と設定されている。「CONTENT_PROVIDER」は、複数のプロセス間でデータを共有するためのプロセスであり、そのａｄｊ値は１４、空き容量の閾値は３５０００と設定されている。「EMPTY_APP」は、何も実行していない状態のプロセスであり、そのａｄｊ値は１５、空き容量の閾値は４００００と設定されている。
【００２６】
図２に示した各設定値は、図３に示すようなフォーマットで設定ファイル３２に記述されており、オペレーティングシステム１０の起動時にメモリ管理システム１２に読み込まれる。
【００２７】
Low Memory Killerは、メモリ２の空き容量が一定の値を下回ると、メモリ２の空き容量に基づいて、終了させるプロセスの候補を選定する。例えば、Low Memory Killerに図２に示した設定値が設定されていた場合、Low Memory Killerは、メモリ２の空き容量が４００００ページ（１６００００ｋＢ）より小さくなると起動し、例えばメモリ２の空き容量が３００００ページ（１２００００ｋＢ）を下回れば、ａｄｊ値が７以上のプロセスを終了させるプロセスの候補として選定し、メモリ２の空き容量が２００００ページ（８００００ｋＢ）を下回れば、ａｄｊ値が５以上のプロセスを終了させるプロセスの候補として選定する。
【００２８】
終了させるプロセスの候補が複数見つかった場合、Low Memory Killerは、そのうち優先度が最も低いプロセス、つまりａｄｊ値が最も大きいプロセスを終了させる。また、終了させるプロセスの候補の中に優先度の最も低いプロセスが複数見つかった場合には、そのうちメモリ使用量が最も大きいものを終了させる。Low Memory Killerは、以上の動作を、メモリ２の空き容量が一定の値以上になるまで、あるいは、終了させるプロセスの候補が無くなるまで、繰り返し行う。
【００２９】
また、システムキャッシュ解放部１２２に設定されるトリガー条件は、図２に示したプロセスの類型に基づいて設定される。トリガー条件には、メモリ管理部１２１（Low Memory Killer）によって終了されることを抑制したいプロセスよりも優先度の低い類型が設定される。
【００３０】
本実施の形態では、「HOME_APP」以上の優先度をもつプロセスがメモリ管理部１２１（Low Memory Killer）によって終了されることを抑制するものとする。この場合、トリガー条件を満たすプロセスの類型として、「HOME_APP」よりも優先度の低いプロセスの類型が設定される。ここでは、「HIDDEN_APP」、「CONTENT_PROVIDER」および「EMPTY_APP」が、トリガー条件を満たすプロセスの類型として設定されるものとする。なお、トリガー条件の設定値は、ストレージ３に保存された設定ファイル３２に記述されているものとする。
【００３１】
以下、具体的な例を示しつつ、情報処理装置のメモリ管理システム１２の動作を説明する。図４は、メモリ２内に確保されるメモリ領域の例を示す図である。メモリ２には、まず、オペレーティングシステム１０用のメモリ領域２ｓ（以下「システム用メモリ領域２ｓ」という）が確保される。システム用メモリ領域２ｓには、オペレーティングシステム１０がユーザの操作に対する反応時間を短縮させるために使用するキャッシュ領域２ｓｃ（以下「システム用キャッシュ領域２ｓｃ」という）が含まれている。
【００３２】
ここで、システム用メモリ領域２ｓとして確保される領域の大きさは一定ではない。オペレーティングシステム１０がメモリ２にキャッシュするデータが増えるにつれてシステム用キャッシュ領域２ｓｃは徐々に大きくなり、それに伴ってシステム用メモリ領域２ｓも大きくなる。
【００３３】
またここでは、プロセス実行部１１が、「FOREGROUND_APP」に分類されるプロセスＡ、「VISIBLE_APP」に分類されるプロセスＢ、「PERCEPTIBLE_APP」に分類されるプロセスＣ、「SECONDARY_SERVER」に分類されるプロセスＤ、「BACKUP_APP」に分類されるプロセスＥ、「HOME_APP」に分類されるプロセスＦ、「HIDDEN_APP」に分類されるプロセスＧ、「CONTENT_PROVIDER」に分類されるプロセスＨ、「EMPTY_APP」に分類されるプロセスＩをそれぞれ実行しており、メモリ２内に、プロセスＡ〜Ｉ用のメモリ領域２ａ〜２ｉがそれぞれ確保されている。図２に示すように、このときメモリ２の空き領域２ｘは、４００００ページ（８００００ｋＢ）以上確保されている。
【００３４】
図４の状態から、例えば「HEAVY_WEIGHT_APP」に分類されるプロセスＪが起動し、メモリ２にプロセスＪ用メモリ領域２ｊが新たに確保され、その結果、図５のように空き領域２ｘが１６３８４ページ（６５５３６ｋＢ）を下回ったとする。図２を参照すると、この場合、メモリ管理部１２１は、「SECONDARY_SERVER」であるプロセスＤ、「BACKUP_APP」であるプロセスＥ、「HOME_APP」であるプロセスＦ、「HIDDEN_APP」であるプロセスＧ、「CONTENT_PROVIDER」であるプロセスＨ、「EMPTY_APP」であるプロセスＩを、終了させるプロセスの候補として選定する。そして、メモリ管理部１２１は、それらの候補のうち優先度が最も低い（ａｄｊ値が最も高い）プロセスＩを終了させる。その結果、プロセスＩ用メモリ領域２ｉが解放され、図６のように、その分だけ空き領域２ｘが増える。
【００３５】
このとき、システムキャッシュ解放部１２２は、メモリ管理部１２１が「EMPTY_APP」であるプロセスＩを終了させたことを検出する。本実施の形態では「EMPTY_APP」はトリガー条件として設定されている類型であるため、システムキャッシュ解放部１２２は、メモリ管理部１２１がプロセスＩを終了させたことを検出すると、システム用キャッシュ領域２ｓｃを解放する。その結果、図７のように、空き領域２ｘがさらに増える。
【００３６】
図７の状態では、空き領域２ｘが４００００ページ（１６００００ｋＢ）を下回っているため、メモリ管理部１２１は、「EMPTY_APP」のプロセスが実行されていれば、それを終了させるプロセスの候補として選定する。しかし、図７の状態で動作中のプロセスＡ〜プロセスＨプロセスの中には、「EMPTY_APP」のプロセスが存在しないため、メモリ管理部１２１はどのプロセスも終了させない。
【００３７】
従って、「HOME_APP」であるプロセスＦは動作を継続することができる。「HOME_APP」であるプロセスＦは、ユーザが頻繁に起動させるものであるため、プロセスＦの動作が継続されることで、情報処理装置の使い勝手が悪くなることが抑制される。なお、システム用キャッシュ領域２ｓｃが解放されると、一時的にオペレーティングシステム１０の反応速度が低下することもあるが、「HOME_APP」のプロセスのようにユーザが頻繁に起動させるプロセスの起動時間が長くなることに比べると、ユーザの使用感に与える影響は小さいと考えられる。
【００３８】
上の説明では、強制終了を回避したい「HOME_APP」よりも優先度の低い「HIDDEN_APP」、「CONTENT_PROVIDER」および「EMPTY_APP」の全てが、トリガー条件を満たすプロセスの類型として設定される例を示した。しかし、それらのうちの１つ以上が、トリガー条件を満たすプロセスの類型として設定されればよい。例えば、「EMPTY_APP」を、トリガー条件を満たすプロセスの類型から外すと、メモリ管理部１２１が「EMPTY_APP」を終了させただけではシステム用キャッシュ領域２ｓｃは解放されないので、上記の例よりもシステム用キャッシュ領域２ｓｃが解放される頻度を低くできる。
【００３９】
このように、本実施の形態では、「HOME_APP」であるプロセスＦがメモリ管理部１２１によって終了されることを防止できる。この効果をより明確するために、以下では、従来のメモリ管理システムであるLow Memory Killerの動作を説明する。
【００４０】
上の例と同様に、図４に示した状態から「HEAVY_WEIGHT_APP」に分類されるプロセスＪが起動して、図５の状態になり、空き領域２ｘが１６３８４ページ（６５５３６ｋＢ）を下回ったとする。この場合、Low Memory Killerは、「SECONDARY_SERVER」であるプロセスＤ、「BACKUP_APP」であるプロセスＥ、「HOME_APP」であるプロセスＦ、「HIDDEN_APP」であるプロセスＧ、「CONTENT_PROVIDER」であるプロセスＨ、「EMPTY_APP」であるプロセスＩを、終了させるプロセスの候補として選定する。そして、Low Memory Killerは、それらの候補のうち優先度が最も低いプロセスＩを終了させる。その結果、プロセスＩ用メモリ領域２ｉが解放され、図８のように、その分だけ空き領域２ｘが増える。
【００４１】
図８の状態では、空き領域２ｘは２００００ページ（８００００ｋＢ）を下回っているため、Low Memory Killerは、「BACKUP_APP」であるプロセスＥ、「HOME_APP」であるプロセスＦ、「HIDDEN_APP」であるプロセスＧ、「CONTENT_PROVIDER」であるプロセスＨを、終了させるプロセスの候補として選定する。そして、Low Memory Killerは、それらの候補のうち優先度が最も低いプロセスＨを終了させる。その結果、プロセスＨ用メモリ領域２ｈが解放され、図９のように、その分だけ空き領域２ｘが増える。
【００４２】
図９の状態では、空き領域２ｘは２５０００ページ（１０００００ｋＢ）を下回っているため、Low Memory Killerは、「HOME_APP」であるプロセスＦ、「HIDDEN_APP」であるプロセスＧを、終了させるプロセスの候補として選定する。そして、Low Memory Killerは、それらの候補のうち優先度が最も低いプロセスＧを終了させる。その結果、プロセスＧ用メモリ領域２ｇが解放され、図１０のように、その分だけ空き領域２ｘが増える。
【００４３】
図１０の状態では、空き領域２ｘは２５０００ページ（１０００００ｋＢ）を下回っているため、Low Memory Killerは、「HOME_APP」であるプロセスＦを終了させるプロセスの候補として選定し、それを終了させる。その結果、プロセスＦ用メモリ領域２ｆが解放され、図１１のように、その分だけ空き領域２ｘが増えるが、「HOME_APP」であるプロセスＦが終了することにより、情報処理装置の使い勝手が悪くなる。
【００４４】
それに対し、本実施の形態に係るメモリ管理システム１２では、メモリ管理部１２１がトリガー条件を満たすプロセスを終了させたときに、システムキャッシュ解放部１２２がシステム用キャッシュ領域２ｓｃを解放して、空き領域２ｘを増やす。そのため、メモリ管理システム１２が「HOME_APP」のような優先度の高いプロセスを終了させる前にメモリ２の空き領域２ｘを効果的に増やすことができ、その結果として、メモリ管理部１２１が優先度の高いプロセスを終了させることが防止される。よって、優先度の高いプロセスが強制終了されることを防止しつつ、メモリの空き容量を十分に確保することができる。
【００４５】
図１２は、メモリ管理システム１２の動作を示すフローチャートである。図４〜図７を用いて説明したメモリ管理の動作は、メモリ管理システム１２が図１２のフローを実行することによって実現される。
【００４６】
情報処理装置のオペレーティングシステム１０が起動すると、メモリ管理システム１２は、まずストレージ３から設定ファイル３２を読み込み、設定ファイル３２の記述に基づいてメモリ管理部１２１およびシステムキャッシュ解放部１２２の初期設定を行う（ステップＳ１）。具体的には、メモリ管理部１２１に、図２に示したようなプロセスの類型、ａｄｊ値、メモリ２の空き容量の閾値の関係を表すテーブルを記憶させたり、システムキャッシュ解放部１２２にトリガー条件が設定させたりする処理が行われる。
【００４７】
次に、メモリ管理部１２１は、メモリ２の空き容量の大きさを確認し（ステップＳ２）、メモリ２の空き容量に不足が生じているか否か判断する（ステップＳ３）。例えば、図２に示したテーブルがメモリ管理部１２１に設定されている場合、メモリ２の空き容量が４００００ページ（１６００００ｋＢ）より小さくなると空き容量に不足が生じたと判断される。メモリ２の空き容量に不足が生じていなければ（ステップＳ３でＮＯ）、ステップＳ２，Ｓ３が繰り返し実行される。
【００４８】
メモリ２の空き容量に不足が生じていれば（ステップＳ３でＹＥＳ）、メモリ管理部１２１は、メモリ２の空き容量の大きさに基づいて、終了させるプロセスの候補を選定する（ステップＳ４）。図２に示したテーブルがメモリ管理部１２１に設定されている場合、例えばメモリ２の空き容量が３００００ページ（１２００００ｋＢ）を下回れば、ａｄｊ値が７以上のプロセスを終了させるプロセスの候補として選定し、メモリ２の空き容量が２００００ページ（８００００ｋＢ）を下回れば、ａｄｊ値が５以上のプロセスを終了させるプロセスの候補として選定する。このとき、終了させるプロセスの候補が見つからなければ（ステップＳ５でＮＯ）、ステップＳ２へ戻る。
【００４９】
メモリ管理部１２１は、終了させるプロセスの候補が見つかれば（ステップＳ５でＹＥＳ）、優先度が最も低い（ａｄｊ値が最も大きい）候補のうち、メモリ２の使用量が最も大きいプロセスを終了させることで、メモリ２の空き容量を増やす（ステップＳ６）。つまり、メモリ管理部１２１は、終了させるプロセスの候補の中から優先度が最も低いプロセスを選出し、優先度が最も低いプロセスが複数あれば、さらにその中からメモリ２の使用量が最も大きいプロセスを選出し、最終的に選出されたプロセスを終了させる。
【００５０】
メモリ管理部１２１がプロセスを終了させると、システムキャッシュ解放部１２２は、当該プロセスがトリガー条件を満たすプロセスであったか否かを確認する（ステップＳ７）。当該プロセスがトリガー条件を満たすプロセスであった場合（ステップＳ７でＹＥＳ）、システムキャッシュ解放部１２２は、システム用メモリ領域を解放することで、更にメモリ２の空き領域を増やし（ステップＳ８）、ステップＳ２へ戻る。
【００５１】
メモリ管理部１２１が終了させたプロセスがトリガー条件を満たすプロセスでなかったときは（ステップＳ７でＮＯ）、システムキャッシュ解放部１２２がシステム用メモリ領域を解放することなく、ステップＳ２に戻る。
【００５２】
メモリ管理システム１２は、以上の動作を繰り返し実行する。
【００５３】
＜変形例＞
一般に、オペレーティングシステム１０用のキャッシュ領域（システム用キャッシュ領域）には、ページキャッシュ領域とスラブキャッシュ領域とが含まれる。上記の例では、システムキャッシュ解放部１２２がシステム用キャッシュ領域の全体を解放するものとしたが、メモリ管理部１２１は、ページキャッシュ領域およびスラブキャッシュ領域のいずれか片方のみを解放するようにしてもよい。そうすることにより、システム用キャッシュ領域の全体を解放する場合よりも、システムキャッシュ解放部１２２の動作によってオペレーティングシステム１０の反応速度が低下することを抑制することができる。
【００５４】
例えば、システムキャッシュ解放部１２２がページキャッシュ領域のみを解放するか、スラブキャッシュ領域のみを解放するか、あるいはページキャッシュ領域およびスラブキャッシュ領域の両方を解放するかを、情報処理装置ごとに設定可能にしてもよい。その場合、システムキャッシュ解放部１２２がどの領域を解放するかの設定値を、設定ファイル３２に記述しておき、オペレーティングシステム１０の起動時に（例えば図１２のステップＳ１）、システムキャッシュ解放部１２２が設定ファイル３２から当該設定値を読み込むようにするとよい。
【００５５】
また、上の説明では、オペレーティングシステム１０の例としてAndroidを示したが、本発明は、メモリ２の空き容量が不足したときに動作中のプロセスを終了させてメモリの空き容量を確保するメモリ管理部１２１を備えるオペレーティングシステム１０、例えばｉＯＳ（登録商標）、Windows（登録商標）、Linux（登録商標）などにも適用可能である。システムキャッシュ解放部１２２と組み合わせるメモリ管理部１２１は、Low Memory Killerなどの一般的なものでよいため、本発明の汎用性は高い。
【００５６】
なお、本発明は、その発明の範囲内において、実施の形態を適宜、変形、省略することが可能である。
【００５７】
本発明は詳細に説明されたが、上記した説明は、すべての態様において、例示であって、この発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。
【符号の説明】
【００５８】
１  プロセッサ、２  メモリ、３  ストレージ、１０  オペレーティングシステム、１１  プロセス実行部、１２  メモリ管理システム、１２１  メモリ管理部、１２２  システムキャッシュ解放部、３１  システムソフトウェア、３２  設定ファイル、３３  アプリケーション。
【図１】
0006541930.tif 000002
【図２】
0006541930.tif 000003
【図３】
0006541930.tif 000004
【図４】
0006541930.tif 000005
【図５】
0006541930.tif 000006
【図６】
0006541930.tif 000007
【図７】
0006541930.tif 000008
【図８】
0006541930.tif 000009
【図９】
0006541930.tif 000010
【図１０】
0006541930.tif 000011
【図１１】
0006541930.tif 000012
【図１２】
0006541930.tif 000013