(57)【要約】実施形態は、時間変動アドレス空間レイアウトランダム化のための装置によってインプリメントされるコンピューティングデバイス、装置、方法を含む。装置は、システムサービスの第１の複数のバージョンを起動し、システムサービスの第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当て得る。装置は、第１のアプリケーションからシステムサービスを実行するための第１の要求を受信し得る。装置は、システムサービスの第１の複数のバージョンからシステムサービスの第１のバージョンをランダムに選択し、システムサービスの第１のバージョンのデータを使用してシステムサービスを実行し得る。【選択図】図４Ａ
2019513270.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上の時間変動アドレス空間ランダム化の方法であって、
システムサービスの第１の複数のバージョンを起動することと、
前記システムサービスの前記第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることと、
第１のアプリケーションから前記システムサービスを実行するための第１の要求を受信することと、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することと、
前記システムサービスの前記第１のバージョンのデータを使用して前記システムサービスを実行することと
を備える、方法。
【請求項２】
前記第１のアプリケーションから前記システムサービスを実行するための第２の要求を受信することと、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択することと、
前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行することと
を備える、請求項１に記載の方法。
【請求項３】
前記システムサービスの前記第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てること、ここにおいて、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なる、と、
前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることと、
前記システムサービス識別子および前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の相関を記憶することと、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることと、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
をさらに備える、請求項１に記載の方法。
【請求項４】
前記システムサービスを実行するための前記第１の要求は、前記システムサービス識別子を含み、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することは、前記システムサービス識別子と相関された前記システムサービスの前記第１の複数のバージョンから前記システムサービスの前記第１のバージョンをランダムに選択することを備え、
前記方法は、
前記システムサービスの前記第１のバージョンの第１のシステムサービスバージョン識別子を前記第１のアプリケーションに提供することと、
前記第１のアプリケーションから前記第１のシステムサービスバージョン識別子を有する前記システムサービスの前記第１のバージョンを実行するための要求を受信することと
をさらに備える、請求項３に記載の方法。
【請求項５】
前記第１のシステムサービスバージョン識別子と前記第１のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第１のシステムサービスバージョンのランダム仮想アドレスを位置付けることと、
前記システムサービスの前記第１のバージョンの前記データが記憶される物理アドレスに前記第１のシステムサービスバージョンの前記ランダム仮想アドレスを変換することと、
前記システムサービスの前記第１のバージョンの前記データを検索することと
を備える、請求項４に記載の方法。
【請求項６】
前記システムサービスの前記第１の複数のバージョンの各々に処理識別子を割り当てることをさらに備え、
前記システムサービスの前記第１の複数のバージョンの各々のための前記処理識別子は、同じであり、
前記システムサービスの前記第１の複数のバージョンの各々に、ランダム仮想アドレス空間レイアウトを割り当てること、前記システムサービスの前記第１の複数のバージョンの各々に、システムサービスバージョン識別子を割り当てること、および前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることは、前記処理識別子を割り当てた前記システムサービスの前記第１の複数のバージョンの各々のために生じる、
請求項３に記載の方法。
【請求項７】
コードバッファ空間に、前記システムサービスの前記第１のバージョンの実行の動的に生成されたコードに割り振るための要求を受信することと、
コードバッファアドレスをランダムに選択することと、
前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定することと、
前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで動的に生成されたコードを記憶することと
をさらに備える、請求項１に記載の方法。
【請求項８】
第２のアプリケーションから前記システムサービスを実行するための第２の要求を受信することと、
前記第２のアプリケーションから前記システムサービスを実行するための前記第２の要求が前記システムサービスに対する攻撃であると検出することと、
前記システムサービスの第２の複数のバージョンを起動することと、
前記システムサービスの前記第２の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てること、ここにおいて、前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第２の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
前記システムサービスの前記第１の複数のバージョンおよび前記システムサービスの前記第２の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択することと、
前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行することと
を備える、請求項１に記載の方法。
【請求項９】
システムサービスの第１の複数のバージョンを起動することは、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの１つ上で前記システムサービスの前記第１の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動することを備え、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することは、前記システムサービスの前記第１のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第１の異種のプロセッサコアをランダムに選択することを備え、
前記システムサービスの前記第１のバージョンの前記データを使用する前記システムサービスは、前記第１の異種のプロセッサコアによって前記システムサービスを実行することを備え、
前記方法は、
前記第１のアプリケーションから前記第１の異種のプロセッサコアに前記システムサービスを実行するための前記第１の要求を転送することと、
前記第１の異種のプロセッサコアによる前記システムサービスの前記実行の出力を受信することと、
前記第１のアプリケーションに前記出力を返すことと
さらに備える、請求項１に記載の方法。
【請求項１０】
コンピューティングデバイスであって、
システムサービスの第１の複数のバージョンを起動することを備える動作を実行するように構成されるラウンチャと、
前記ラウンチャに通信可能に結合され、前記システムサービスの前記第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることを備える動作を実行するように構成されるマッパと、
前記ラウンチャと通信可能に結合され、
第１のアプリケーションから前記システムサービスを実行するための第１の要求を受信することと、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することと
を備える動作を実行するように構成された要求調整器と、
前記要求調整器に通信可能に結合され、前記システムサービスの前記第１のバージョンのデータを使用して前記システムサービスを実行することを備える動作を実行するように実行可能な命令で構成されるプロセッサと
を備える、コンピューティングデバイス。
【請求項１１】
前記要求調整器は、
前記第１のアプリケーションから前記システムサービスを実行するための第２の要求を受信することと、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択することと
をさらに備える動作を実行するように構成され、
前記プロセッサは、前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行することを備える動作を実行するように実行可能な命令で構成される、
請求項１０に記載のコンピューティングデバイス。
【請求項１２】
前記ラウンチャは、前記システムサービスの前記第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てることをさらに備える動作を実行するように構成され、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なり、
前記要求調整器は、
前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子はを相関させることと、
前記システムサービス識別子および前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
をさらに備える動作を実行するように構成される、
前記プロセッサは、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の相関させることと、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
をさらに備える動作を実行するように実行可能な命令で構成される、請求項１０に記載のコンピューティングデバイス。
【請求項１３】
前記要求調整器は、
前記第１のアプリケーションから前記システムサービスを実行するための前記第１の要求を受信することは、前記システムサービス識別子を受信することを備え、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することは、前記システムサービス識別子と相関された前記システムサービスの前記第１の複数のバージョンから前記システムサービスの前記第１のバージョンをランダムに選択することを備える、
ような動作を実行するように構成され、
前記プロセッサは、
前記システムサービスの前記第１のバージョンの第１のシステムサービスバージョン識別子を前記第１のアプリケーションに提供することと、
前記第１のアプリケーションから前記第１のシステムサービスバージョン識別子を有する前記システムサービスの前記第１のバージョンを実行するための要求を受信することと
をさらに備える動作を実行するように実行可能な命令で構成される、請求項１２に記載のコンピューティングデバイス。
【請求項１４】
前記プロセッサは、
前記第１のシステムサービスバージョン識別子と前記第１のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第１のシステムサービスバージョンのランダム仮想アドレスを位置付けることと、
前記システムサービスの前記第１のバージョンの前記データが記憶される物理アドレスに前記第１のシステムサービスバージョンの前記ランダム仮想アドレスを変換することと、
前記システムサービスの前記第１のバージョンの前記データを検索することと
をさらに備える動作を実行するように実行可能な命令で構成される、請求項１３に記載のコンピューティングデバイス。
【請求項１５】
前記ラウンチャは、前記システムサービスの前記第１の複数のバージョンの各々に処理識別子を割り当てることをさらに備える動作を実行するように構成され、前記システムサービスの前記第１の複数のバージョンの各々の前記処理識別子は、同じであり、
前記マッパは、前記システムサービスの前記第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることが、前記処理識別子を割り当てられた前記システムサービスの前記第１の複数のバージョンの各々について生じるような動作を実行するように構成され、
前記ラウンチャは、前記システムサービスの前記第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てることが、前記処理識別子を割り当てられた前記システムサービスの前記第１の複数のバージョンの各々について生じるような動作を実行するように構成され、
前記プロセッサは、前記システムサービスのシステムサービス識別子に前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることが、前記処理識別子を割り当てられた前記システムサービスの前記第１の複数のバージョンの各々について生じるような動作を実行するように実行可能な命令で構成される、
請求項１２に記載のコンピューティングデバイス。
【請求項１６】
前記要求調整器に通信可能に結合され、
コードバッファ空間に、前記システムサービスの前記第１のバージョンの実行の動的に生成されたコードに割り振るための要求を受信することと、
コードバッファアドレスをランダムに選択することと、
前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定することと、
前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで動的に生成されたコードを記憶することと
を備える動作を実行するように構成されるメモリ割り振り器をさらに備える、請求項１０に記載のコンピューティングデバイス。
【請求項１７】
前記要求調整器は、
第２のアプリケーションから前記システムサービスを実行するための第２の要求を受信することと、
前記第２のアプリケーションから前記システムサービスを実行するための前記第２の要求が前記システムサービスに対する攻撃であると検出することと
をさらに備える動作を実行するように構成され、
前記ラウンチャは、前記システムサービスの第２の複数のバージョンを起動することをさらに備える動作を実行するように構成され、
前記マッパは、前記システムサービスの前記第２の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることをさらに備える動作を実行するように構成され、前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第２の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
前記要求調整器は、前記システムサービスの前記第１の複数のバージョンおよび前記システムサービスの前記第２の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択することをさらに備える動作を実行するように構成され、
前記プロセッサは、前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行することを備える動作を実行するように実行可能な命令で構成される、
請求項１０に記載のコンピューティングデバイス。
【請求項１８】
前記ラウンチャは、システムサービスの第１の複数のバージョンを起動することが、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの１つ上で前記システムサービスの前記第１の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動することを備えるような動作を実行するように構成され、
前記要求調整器は、前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することが、前記システムサービスの前記第１のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第１の異種のプロセッサコアをランダムに選択することを備えような動作を実行するように構成され、
前記プロセッサは、前記第１の異種のプロセッサコアであり、前記システムサービスの前記第１のバージョンのデータを使用する前記システムサービスが、前記第１の異種のプロセッサコアによって前記システムサービスを実行するような動作を実行するように実行可能な命令で構成され、
前記要求調整器は、
前記第１のアプリケーションから前記第１の異種のプロセッサコアに前記システムサービスを実行するための前記第１の要求を転送することと、
前記第１の異種のプロセッサコアによって前記システムサービスの前記実行の出力を受信することと、
前記第１のアプリケーションに前記出力を返すことと
をさらに備える動作を実行するように構成される、請求項１０に記載のコンピューティングデバイス。
【請求項１９】
コンピューティングデバイスであって、
システムサービスの第１の複数のバージョンを起動するための手段と、
前記システムサービスの前記第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てるための手段と、
第１のアプリケーションからシステムサービスを実行するための第１の要求を受信するための手段と、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択するための手段と、
前記システムサービスの前記第１のバージョンのデータを使用して前記システムサービスを実行するための手段と
を備える、コンピューティングデバイス。
【請求項２０】
前記第１のアプリケーションから前記システムサービスを実行するための第２の要求を受信するための手段と、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択するための手段と、
前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行するための手段と
を備える、請求項１９に記載のコンピューティングデバイス。
【請求項２１】
前記システムサービスの前記第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てるための手段、ここにおいて、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なる、と、
前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子はを相関させるための手段と、
前記システムサービス識別子および前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶するための手段と、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の相関させるための手段と、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶するための手段と
をさらに備える、請求項１９に記載のコンピューティングデバイス。
【請求項２２】
前記システムサービスを実行するための前記第１の要求は、前記システムサービス識別子を含み、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択するための手段は、前記システムサービス識別子と相関された前記システムサービスの前記第１の複数のバージョンから前記システムサービスの前記第１のバージョンをランダムに選択するための手段を備え、
前記コンピューティングデバイスは、
前記システムサービスの前記第１のバージョンの第１のシステムサービスバージョン識別子を前記第１のアプリケーションに提供するための手段と、
前記第１のアプリケーションから前記第１のシステムサービスバージョン識別子を有する前記システムサービスの前記第１のバージョンを実行するための要求を受信するための手段と
をさらに備える、請求項２１に記載のコンピューティングデバイス。
【請求項２３】
前記第１のシステムサービスバージョン識別子と前記第１のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第１のシステムサービスバージョンのランダム仮想アドレスを位置付けるための手段と、
前記システムサービスの前記第１のバージョンの前記データが記憶される物理アドレスに前記第１のシステムサービスバージョンの前記ランダム仮想アドレスを変換するための手段と、
前記システムサービスの前記第１のバージョンの前記データを検索するための手段と
をさらに備える、請求項２２に記載のコンピューティングデバイス。
【請求項２４】
前記システムサービスの前記第１の複数のバージョンの各々に処理識別子を割り当てるための手段をさらに備え、前記システムサービスの前記第１の複数のバージョンの各々の前記処理識別子は、同じであり、
前記システムサービスの前記第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てるための手段は、前記処理識別子を割り当てられた前記システムサービスの前記第１の複数のバージョンの各々のための前記システムサービスの前記第１の複数のバージョンの各々に、前記ランダム仮想アドレス空間レイアウトを割り当てるための手段を備え、
前記システムサービスの前記第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てるための手段は、前記処理識別子を割り当てられた前記システムサービスの前記第１の複数のバージョンの各々のための前記システムサービスの前記第１の複数のバージョンの各々に、前記システムサービスバージョン識別子を割り当てるための手段を備え、
前記システムサービスの前記システムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させるための手段は、前記処理識別子を割り当てられた前記システムサービスの前記第１の複数のバージョンの各々のための前記システムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させるための手段を備える、
請求項２１に記載のコンピューティングデバイス。
【請求項２５】
コードバッファ空間に、前記システムサービスの前記第１のバージョンの実行の動的に生成されたコードに割り振るための要求を受信するための手段と、
コードバッファアドレスをランダムに選択するための手段と、
前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定するための手段と、
前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで前記動的に生成されたコードを記憶するための手段と
を備える、請求項１９に記載のコンピューティングデバイス。
【請求項２６】
第２のアプリケーションから前記システムサービスを実行するための第２の要求を受信するための手段と、
前記第２のアプリケーションから前記システムサービスを実行するための前記第２の要求が前記システムサービスに対する攻撃であると検出するための手段と、
前記システムサービスの第２の複数のバージョンを起動するための手段と、
前記システムサービスの前記第２の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てるための手段、ここにおいて、前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第２の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
前記システムサービスの前記第１の複数のバージョンおよび前記システムサービスの前記第２の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択するための手段と、
前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行するための手段と
を備える、請求項１９に記載のコンピューティングデバイス。
【請求項２７】
システムサービスの第１の複数のバージョンを起動するための手段は、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの１つ上で前記システムサービスの前記第１の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動するための手段を備え、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択するための手段は、前記システムサービスの前記第１のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第１の異種のプロセッサコアをランダムに選択するための手段を備え、
前記システムサービスの前記第１のバージョンのデータを使用する前記システムサービスは、前記第１の異種のプロセッサコアによって前記システムサービスを実行するための手段を備え、
前記コンピューティングデバイスは、
前記第１のアプリケーションから前記第１の異種のプロセッサコアに前記システムサービスを実行するための前記第１の要求を転送するための手段と、
前記第１の異種のプロセッサコアによって前記システムサービスの前記実行の出力を受信するための手段  と、
前記第１のアプリケーションに前記出力を返すための手段と
さらに備える、請求項１９に記載のコンピューティングデバイス。
【請求項２８】
コンピューティングデバイスのプロセッサに、
システムサービスの第１の複数のバージョンを起動することと、
前記システムサービスの前記第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることと、
第１のアプリケーションから前記システムサービスを実行するための第１の要求を受信することと、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することと
を備える動作を実行するように構成された要求調整器と、
前記システムサービスの前記第１のバージョンのデータを使用して前記システムサービスを実行することと
を備える動作を実行させるように構成された、その上に記憶されたプロセッサ実行可能命令を有する非一時的プロセッサ可読記憶媒体。
【請求項２９】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
前記第１のアプリケーションから前記システムサービスを実行するための第２の要求を受信することと、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択することと、
前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行することと
をさらに備える動作を実行させるように構成される、請求項２８に記載の非一時的プロセッサ可読記憶媒体。
【請求項３０】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
前記システムサービスの前記第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てること、ここにおいて、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子は、異なる、と、
前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子はを相関させることと、
前記システムサービス識別子および前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと、
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の相関させることと
前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトのうちの対応する１つと、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子の前記相関を記憶することと
をさらに備える動作を実行させるように構成される、請求項２８に記載の非一時的プロセッサ可読記憶媒体。
【請求項３１】
前記システムサービスを実行するための前記第１の要求は、前記システムサービス識別子を含み、
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することは、前記システムサービス識別子と相関された前記システムサービスの前記第１の複数のバージョンから前記システムサービスの前記第１のバージョンをランダムに選択することを行わせるように構成され、
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
前記システムサービスの前記第１のバージョンの第１のシステムサービスバージョン識別子を前記第１のアプリケーションに提供することと、
前記第１のアプリケーションから前記第１のシステムサービスバージョン識別子を有する前記システムサービスの前記第１のバージョンを実行するための要求を受信することと
をさらに備える動作を実行させるように構成される、請求項３０に記載の非一時的プロセッサ可読記憶媒体。
【請求項３２】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
前記第１のシステムサービスバージョン識別子と前記第１のシステムサービスバージョンの前記ランダム仮想アドレス空間レイアウトとの間の相関を使用して前記第１のシステムサービスバージョンのランダム仮想アドレスを位置付けることと、
前記システムサービスの前記第１のバージョンの前記データが記憶される物理アドレスに前記第１のシステムサービスバージョンの前記ランダム仮想アドレスを変換することと、
前記システムサービスの前記第１のバージョンの前記データを検索することと
をさらに備える動作を実行させるように構成される、請求項３１に記載の非一時的プロセッサ可読記憶媒体。
【請求項３３】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、前記システムサービスの前記第１の複数のバージョンの各々に処理識別子を割り当てることをさらに備える動作を実行させるように構成され、前記システムサービスの前記第１の複数のバージョンの各々の前記処理識別子は、同じであり、
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、前記システムサービスの前記第１の複数のバージョンの各々に、ランダム仮想アドレス空間レイアウトを割り当てること、前記システムサービスの前記第１の複数のバージョンの各々に、システムサービスバージョン識別子を割り当てること、および前記システムサービスのシステムサービス識別子に、前記システムサービスの前記第１の複数のバージョンの各々の前記システムサービスバージョン識別子を相関させることが、前記処理識別子を割り当てた前記システムサービスの前記第１の複数のバージョンの各々のために生じるような動作を実行させるように構成される、
請求項３０に記載の非一時的プロセッサ可読記憶媒体。
【請求項３４】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
コードバッファ空間に、前記システムサービスの前記第１のバージョンの実行の動的に生成されたコードに割り振るための要求を受信することと、
コードバッファアドレスをランダムに選択することと、
前記コードバッファアドレスと相関されたコードバッファ空間が前記動的に生成されたコードを記憶するために十分な大きさがあり利用可能であるかどうかを決定することと、
前記コードバッファ空間が前記動的に生成されたコードを記憶するために十分に大きいと決定することに応答して前記コードバッファアドレスで前記動的に生成されたコードを記憶することと
をさらに備える動作を実行させるように構成される、請求項２８に記載の非一時的プロセッサ可読記憶媒体。
【請求項３５】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
第２のアプリケーションから前記システムサービスを実行するための第２の要求を受信することと、
前記第２のアプリケーションから前記システムサービスを実行するための前記第２の要求が前記システムサービスに対する攻撃であると検出することと、
前記システムサービスの第２の複数のバージョンを起動することと、
前記システムサービスの前記第２の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てること、ここにおいて、前記システムサービスの前記第１の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトおよび前記システムサービスの前記第２の複数のバージョンの各々の前記ランダム仮想アドレス空間レイアウトは、異なる、と、
前記システムサービスの前記第１の複数のバージョンおよび前記システムサービスの前記第２の複数のバージョンから前記システムサービスの第２のバージョンをランダムに選択することと、
前記システムサービスの前記第２のバージョンのデータを使用して前記システムサービスを実行することと
をさらに備える動作を実行させるように構成される、請求項２８に記載の非一時的プロセッサ可読記憶媒体。
【請求項３６】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
システムサービスの第１の複数のバージョンを起動することが、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの１つ上で前記システムサービスの前記第１の複数のバージョンの前記システムサービスの複数のバージョンの各々を起動することを備え、
前記システムサービスの前記第１の複数のバージョンから前記システムサービスの第１のバージョンをランダムに選択することが、前記システムサービスの前記第１のバージョンが起動された、前記複数の異種のプロセッサコアのうちの第１の異種のプロセッサコアをランダムに選択することを備え、
前記システムサービスの前記第１のバージョンのデータを使用する前記システムサービスが、前記第１の異種のプロセッサコアによって前記システムサービスを実行することを備える、
ような動作を実行させるように構成され、
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに、
前記第１のアプリケーションから前記第１の異種のプロセッサコアに前記システムサービスを実行するための前記第１の要求を転送することと、
前記第１の異種のプロセッサコアによって前記システムサービスの前記実行の出力を受信することと、
前記第１のアプリケーションに前記出力を返すことと
をさらに備える動作を実行させるように構成される、請求項２８に記載の非一時的プロセッサ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]ハッカーは、モバイデバイスを含む、コンピューティングデバイスを攻撃するために様々な戦略を使用する。多くの戦略は、システムサービスにおける既知の脆弱性が分かることによって違法に使われることができるようにアプリケーションのメモリレイアウトを識別するように試みを包含し、ここで、サービスは、メモリ中に位置付けられる。こうした攻撃は、リターン指向プログラミング（ＲＯＰ：return oriented programming）のような、システムサービスを標的とする「制御ハイジャック攻撃」を具体化し得る。ＲＯＰ攻撃の目標は、特権増大であり、利益を追及する。このような攻撃はしばしば、攻撃者が脆弱なまたはガジェットコード／データロケーションを見出すために処理アドレス空間を徹底的に探索する総当たり戦術を採用する。力づくな戦術は、攻撃の被害者システムサービスがクラッシュすることを引き起こさせることができる。攻撃の別の形式は、情報漏洩の利点を用いる。こうした技法は、ある情報（例えば、復帰アドレスおよびそれについてのいくつかのライブラリ関数ロケーション）を得るために書式文字列脆弱を違法に使う。脆弱な処理の情報漏洩は、別の処理、特に動的共有されるライブラリを使用する処理に不正アクセスすることができる。攻撃は、１つまたは複数の処理によって使用されるアドレス空間の不正利用可能な脆弱性をより効率的に発見する技法を組み合わせることが出来る。
【０００２】
[0002]アドレス空間レイアウトランダム化（ＡＳＬＲ）は、実行時間でのメモリ中のランダムな選択ロケーション中にプログラムの異なるセクションを記憶することと、プログラム実行を可能にするためにアドレス空間を使用することとによってハッキング攻撃に対抗する保護アプリケーションの周知の技法である。ＡＳＬＲは、プログラムセクションが特定の固定（例えば、連続的な）ロケーションでロードされる従来のアプリケーションマッピングによってもたらすことができないハッキングに対抗する保護を提供する。ＡＳＬＲは、攻撃者がアクティブに実行している処理のアドレス空間中の異なるコードロケーションを見出すのを困難にすることを行う。しかしながら、ＡＳＬＲは、まだ攻撃される可能性が有る。アプリケーションコードがＡＳＬＲを使用してランダムかされるときでさえ、総当たり攻撃中に攻撃者によって集められた情報は、被害者システムサービスの再初期化に使用されることができ、何故なら、同じアドレス空間が使用されることができる空である。
【発明の概要】
【０００３】
[0003]様々な実施形態の方法および装置は、システムサービスの第１の複数のバージョンを起動することと、システムサービスの第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることとを含む、コンピューティングデバイス上の時間変動アドレス空間レイアウトランダム化のための装置および方法を提供する。様々な実施形態は、第１のアプリケーションからシステムサービスを実行するために第１の要求を受信することと、システムサービスの第１の複数のバージョンからシステムサービスの第１のバージョンをランダムに選択することと、システムサービスの第１のバージョンのデータを使用してシステムサービスを実行することとをさらに含み得る。
【０００４】
[0004]様々な実施形態は、第１のアプリケーションからシステムサービスを実行するために第２の要求を受信することと、システムサービスの第１の複数のバージョンからシステムサービスの第２のバージョンをランダムに選択することと、システムサービスの第２のバージョンのデータを使用してシステムサービスを実行することとをさらに含み得る。
【０００５】
[0005]いくつかの実施形態は、システムサービスの第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てることを含み得る。システムサービスの第１の複数のバージョンの各々のシステムサービスバージョン識別子は、異なり得る。様々な実施形態は、システムサービスのシステムサービス識別子にシステムサービスの第１の複数のバージョンの各々のシステムサービスバージョン識別子を相関させることと、システムサービスの第１の複数のバージョンの各々のシステムサービスバージョン識別子およびシステムサービス識別子の相関を記憶することとをさらに含み得る。様々な実施形態は、システムサービスの第１の複数のバージョンの各々のランダム仮想アドレス空間レイアウトのうちの対応する１つとシステムサービスの第１の複数のバージョンの各々のシステムサービスバージョン識別子を相関させることをさらに含み得る。様々な実施形態は、システムサービスの第１の複数のバージョンの各々のランダム仮想アドレス空間レイアウトのうちの対応する１つとシステムサービスの第１の複数のバージョンの各々のシステムサービスバージョン識別子を記憶することをさらに含み得る。
【０００６】
[0006]いくつかの実施形態では、システムサービスを実行するための第１の要求は、システムサービス識別子を含み、システムサービス第１の複数のバージョンからシステムサービスの第１のバージョンをランダムに選択することは、システムサービス識別子と相関されたシステムサービスの第１の複数のバージョンからシステムサービス第１のバージョンをランダムに選択することとを含み得る。様々な実施形態は、システムサービスの第１のバージョンの第１のシステムサービスバージョン識別子で第１のアプリケーションを適用することと、第１のアプリケーションから第１のシステムサービスバージョン識別子を有するシステムサービスの第１のバージョンを実行するあｔめの要求を受信することとをさらに含み得る。
【０００７】
[0007]いくつかの実施形態は、第１のシステムサービスバージョン識別子と第１のシステムサービスバージョンのランダム仮想アドレス空間レイアウトとの間の相関を使用して第１のシステムサービスバージョンのランダム仮想アドレスを位置付けることをさらに含み得る。こうした実施形態は、システムサービスの第１のバージョンのデータが記憶される物理アドレスに第１のシステムサービスバージョンのランダム仮想アドレスを翻訳することと、システムサービスの第１のバージョンのデータを検索することとをさらに含み得る。
【０００８】
[0008]いくつかの実施形態は、システムサービスの第１の複数のバージョンの各々に処理識別子を割り当てることをさらに含み得る。こうした実施形態では、システムサービスの第１の複数のバージョンの各々のための処理識別子は、同じであり得る。こうした実施形態では、システムサービスの第１の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てること、システムサービスの第１の複数のバージョンの各々にシステムサービスバージョン識別子を割り当てること、およびシステムサービスのシステムサービス識別子にシステムサービスの第１の複数のバージョンの各々のシステムサービスバージョン識別子を相関させることは、処理識別子を割り当てたシステムサービスの第１の複数のバージョンの各々のために生じ得る。
【０００９】
[0009]いくつかの実施形態は、システムサービスの第１のバージョンの実行の動的に生成されたコードのためにコードバッファ空間を割り振るための要求を受信することと、コードバッファアドレスをランダムに選択することと、コードバッファアドレスに関連付けられたコードバッファ空間が動的に生成されたコードを記憶するために十分に大きく利用可能かどうかを決定することとをさらに含み得る。このような実施形態は、コードバッファ空間が動的に生成されたコードを記憶するために十分に大きいと決定することに応答してコードバッファアドレスで動的に生成されたコードを記憶得することをさらに含み得る。
【００１０】
[0010]いくつかの実施形態は、第２のアプリケーションからシステムサービスを実行するために第２の要求を受信することと、第２のアプリケーションからシステムサービスをじっくするための第２の要求が第２のアプリケーションからシステムサービスを実行するための第２の要求市捨て得サービス上の攻撃であると検出することと、システムサービスの第２の複数のバージョンからを起動することとをさらに含み得る。このような実施形態は、システムサービスの第２の複数のバージョンの各々にランダム仮想アドレス空間レイアウトを割り当てることをさらに含み得る。システムサービスの第１の複数のバージョンの各々のランダム仮想アドレス空間レイアウトおよびシステムサービスの第２の複数のバージョンの各々のランダム仮想アドレス空間レイアウトは、異なり得る。このような実施形態は、システムサービスの第１のアプリケーションからシステムサービスの第２のバージョンおよびシステムサービスの第２の複数のバージョンをランダムに選択することと、システムサービスの第２のバージョンのデータを使用してシステムサービスを実行することとをさらに含み得る。
【００１１】
[0011]いくつかの実施形態では、システムサービスの第１の複数のバージョンを起動することは、異なる命令セットアーキテクチャを有する複数の異種のプロセッサコアのうちの１つ上でシステムサービスの第１の複数のバージョンのシステムサービスの複数のバージョンの各々を起動することを含み得る。こうした実施形態では、システムサービスの第１の複数のバージョンのからシステムサービスの第１のバージョンをランダムに選択することは、システムサービスの第１のバージョンが起動された複数の異種のプロセッサコアのうちの第１の異種のプロセッサコアをランダムに選択することを含み得る。こうした実施形態では、システムサービスの第１のバージョンのデータを使用するシステムサービスは、第１の異種のプロセッサコアによってシステムサービスを実行することを含み得る。こうした実施形態は、第１のアプリケーションから第１の異種のプロセッサコアにシステムサービスを実行するための第１の要求を転送することと、第１の異種のプロセッサコアによってシステムサービスの実行の出力を受信することと、第１のアプリケーションに出力を返すこととをさらに含み得る。
【００１２】
[0012]様々な実施形態は、ラウンチャ（launcher）と、ラウンチャにを有するコンピューティングデバイスに通信のために結合されるマッパと、ラウンチャに通信のために結合される要求調整器と、要求調整器に通信のために結合されるプロセッサとを含み得る。ラウンチャ、マッパ、要求調整器、およびプロセッサは、上で要約された実施形態の方法のうちの１つまたは複数の動作を事項するように構成され得る。
【００１３】
[0013]様座な実施形態は、上で要約された実施形態の方法のうちの１つまたは複数の機能を実行するための手段を有するコンピューティングデバイスを含み得る。
【００１４】
[0014]様々な実施形態は、コンピューティングデバイスのプロセッサに、上で要約された実施形態の方法農地の１つまたは複数の動作を実行させる、プロセッサ実行可能な命令を記憶した非一時的なプロセッサ可読記憶媒体を含み得る。
【図面の簡単な説明】
【００１５】
[0015]本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、様々な実施形態の例の実施形態を例示し、上記で述べられた概略的な説明および下記で述べられる詳細な説明とともに、請求項の特徴を説明する役目をする。
【図１】実施形態をインプリメントするために適切な、コンピューティングデバイスを例示するコンポーネントブロック図。
【図２】実施形態をインプリメントするために適切な、実例となる複数コアプロセッサを例示するコンポーネントブロック図。
【図３】システムサービスの様々なバージョンを生成する時間変動アドレス空間レイアウトランダム化の実例を例示する図。
【図４Ａ】実施形態をインプリメントするために適切な実例となる時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。
【図４Ｂ】実施形態をインプリメントするために適切な動的コード生成システムを用いる、実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。
【図５】システムサービスのバージョンを実行する実施形態をインプリメントするために適切な実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。
【図６】システムサービスの複数のバージョンを実行する実施形態をインプリメントするために適切な実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。
【図７】複数のアプリケーションのためのシステムサービスの複数のバージョンを実行する実施形態をインプリメントするために適切な実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。
【図８】システムサービスの複数のバージョンを実行する実施形態をインプリメントするために適切なオブジェクトマネージャを用いて、実例の時間変動アドレス空間レイアウトランダム化システムを例示するコンポーネントブロックおよびシグナリング図。
【図９】実施形態に従って時間変動アドレス空間レイアウトランダム化をインプリメントするための方法を例示する処理フローチャート。
【図１０】実施形態に従って時間変動アドレス空間レイアウトにおけるシステムサービスのバージョンに仮想アドレス空間レイアウトのランダム割当てをインプリメントするための方法を例示する処理フローチャート。
【図１１】実施形態に従って時間変動アドレス空間レイアウトランダム化を使用してシステムサービス実行をインプリメントするための方法を例示する処理フローチャート。
【図１２】実施形態に従って動的コード生成を用いて、時間変動アドレス空間レイアウトランダム化を使用してシステムサービス実行をインプリメントするための方法を例示する処理フローチャート。
【図１３】様々な実施形態を用いた使用に適した実例となるモバイルコンピューティングデバイスを例示するコンポーネントブロック図。
【図１４】様々な実施形態を用いた使用に適した実例となるモバイルコンピューティングデバイスを例示するコンポーネントブロック図。
【図１５】様々な実施形態を用いた使用に適した実例となるサーバを例示するコンポーネントブロック図。
【発明を実施するための形態】
【００１６】
[0032]様々な態様が、添付の図面を参照して詳細に説明されることになる。可能な限り、同じ参照番号は、同じまたは類似の部分を指すように、図面全体で使用されることになる。特定の例およびインプリメンテーションについての参照は、例示を目的としており、特許請求の範囲を限定するようには意図されない。
【００１７】
[0033]本明細書では、「コンピューティングデバイス」、および「モバイルコンピューティングデバイス」という用語は、セルラ電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、タブレットコンピュータ、コンバーチブルラップトップ／タブレット（２−ｉｎ−１コンピュータ）、スマートブック、ウルトラブック、ネットブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラ電話、モバイルゲーミングコンソール、ワイヤレスゲーミングコントローラ、ならびに、プログラマブルプロセッサおよびメモリを含む類似したパーソナル電子デバイスのうちのいずれか１つまたはすべてを指すために、交換可能に使用される。「コンピューティングデバイス」という用語は、パーソナルコンピュータ、デスクトップコンピュータ、オールインワン（ａｌｌ−ｉｎ−ｏｎｅ）コンピュータ、ワークステーション、スーパーコンピュータ、メインフレームコンピュータ、組込型コンピュータ、サーバ、ホームシアターコンピュータ、ならびにゲームコンソールを含む固定されたコンピューティングデバイスをさらに指し得る。
【００１８】
[0034]様々な実施形態は、アドレス空間レイアウトランダム化（ＡＳＬＲ）が時間次元においてアプリケーションによって使用されるシステムサービスのアドレス空間レイアウトもランダム化することによって攻撃を防ぐためのこうした方法をインプリメントする方法、システム、およびデバイスを含む。様々な実施形態は、ランダムに選ばれ得る異なるアドレス空間レイアウトを有するシステムサービスの各バージョンを持つ、システムサービスの複数のバージョンを起動することを含み得、アプリケーションによるシステムサービスのための各要求は、システムサービスバージョンのうちのランダムに選ばれた１つに向けられ得る。
【００１９】
[0035]概して、時間変動ＡＳＬＲは、システムのブート時間またはシステムをブートした後のシステムサービスのための第１の要求に応答してシステムサービスの様々なバージョンを作り出し得る。システムサービスの各バージョンは、ランダムに生成されたアドレス空間レイアウトを割り当てられ得る。各システムサービスのための各アドレス空間レイアウトは、処理スタック、ヒープ、データ、関数ポインタ、またはライブラリメモリマップを含む、対応するシステムサービスをインプリメントするための項目を記憶し得る。システムサービスの各バージョンのためのアドレス空間は、仮想アドレス空間中に作り出され得、各仮想アドレス空間は、物理アドレス空間中に記憶される、システムサービスのコード、例えばシステムサービスのためのコードライブラリにマッピングする異なるメモリを有し得る。要求調整器は、システムサービスのための要求を受信し、要求されたシステムサービスを実行するためにシステムサービスの様々なバージョンのうちの１つをランダムに割り当てるようにインプリメントされ得る。
【００２０】
[0036]時間変動ＡＤＬＲに対して、毎回、要求が同じシステムサービスのために受信され、要求調整器は、要求されたシステムサービスに対応するシステムサービスのバージョンのうちの１つにランダム割り当てを行い得る。これは、時間変動ＡＳＬＲと呼ばれ、システムサービスのための各要求のためのシステムサービスの異なるバージョンをランダムに割り当てることによって遂行される。様々な実施形態の時間変動ＡＳＬＲがインプリメントされるとき、総当たり攻撃を実行している攻撃者は、攻撃者がシステムサービスのために提出する各要求のための異なる仮想アドレス空間を観測することになる。また、システムサービスのうちの１つのバージョンのために取得された情報がシステムサービスの他のバージョンに適用されないので、漏洩情報は、使用するのにより困難になるだろう。これは、システムサービス上で成功裏の総当たり攻撃のために必要とされる試行数を大幅に増大させることになる。
【００２１】
[0037]いくつかの実施形態では、要求調整器は、通常でない要求パターンを認識するために要求をモニタすることによって攻撃を検出または疑うように構成され得る。攻撃が検出または疑われるとき、要求調整器は、システムサービスの新規コピー（または複数のシステムサービス）を作り出し得、ランダムアドレス空間レイアウトを使用して新規コピーを記憶することににより、ＡＳＬＲシステムにおけるランダム性をさらに増大させる。
【００２２】
[0038]粗粒の（coarse-grained）時間変動ＡＳＬＲについて、ヒープ、スタック、実行ファイル、共有ライブラリ、等の開始ロケーションは、同じシステムサービスの可変バージョンのために変化し得る。実例のシステムでは、ラウンチャのような、ユーザ空間コンポーネントは、同じシステムサービスの複数のバージョンを起動し得る。各バージョンは、異なるアドレス空間レイアウトを持つ分離処理として起動され得る。異なるバージョンは、処理グループ中に含まれ得、同じ処理グループ識別子（処理グループＩＤ）に関連付けられ得る。カーネル空間マッピング関数は、システムサービスのバージョンであるすべての処理を認識するために処理グループＩＤを使用し、異なるランダムアクセス空間レイアウトに各処理をマップし得る。
【００２３】
[0039]作成処理およびマッピングフェーズの間、カーネルコードは、新規にランダムに生成されたアドレスがシステムサービスの既存のバージョンの任意のものと衝突しないことを保証し得る。システムサービスの各バージョンは、ハンドル、ラベル、または他の参照のような、システムサービスバージョン識別子を割り当てられ得、それは、システムサービスのバージョンおよびオブジェクトの実際のアドレスを一意に認識するように使用される。
【００２４】
[0040]システムによって実行されるアプリケーションは、処理またはシステムサービスのバージョンのためのシステムサービスバージョン識別子を検索するためにルックアップ方法を使用してシステムサービスをルックアップし得る。要求調整器は、要求アプリケーションに要求されたシステムサービスのバージョンに対応するランダムに選択されたシステムサービスバージョン識別子を返し得る。アプリケーションは、システムサービスにその呼の全てにおいてこのシステムサービスバージョン識別子を使用し得る。要求調整器は、同じシステムサービスのためにルックアップ方法の異なる実行のためにランダムに選択されたシステムサービスバージョン識別子を返し得る。
【００２５】
[0041]仮想マシン内で動的に生成されたコードを有するシステムサービスにおける細粒の（fine-grained）時間変動ＡＳＬＲについて、コードバッファ中の動的コードの異なるピースのロケーションは、（コードバッファの開始を含む）コードバッファ中のランダムロケーションに位置され得る。コードバッファ中の動的コードのランダム化は、組み込みコードライブラリのメモリ割り振り関数を使用するランダムメモリ割り振り器によってインプリメントされる、またはカーネルのランダムメモリ割り振り器によって同様の手法においてインプリメントされ得る。どちらか一方の例では、ランダムメモリ割り振り器は、システムサービスの各バージョンのための動的コードのために割り当てられたバッファアドレスおよびシステムサービスのバージョンを識別するシステムサービスバージョン識別子のリストを維持し得る。システムサービスバージョン識別子によって識別されたシステムサービスの異なるバージョンがサイズｎバイトのバッファアドレスを割り振るために試みるとき、ランダムメモリ割り振り器は、各バージョンのためのリストをトラバースし、システムサービスのバージョンのために使用されていないバッファアドレスがあるかどうか決定し、システムサービスバージョン識別子のために使用されていないバッファアドレスを割り当て得る。
【００２６】
[0042]図１は、様々な実施形態で使用のために適切なリモートコンピューティングデバイス５０と通信しているコンピューティングデバイス１０を含むシステムを示す。コンピューティングデバイス１０は、プロセッサ１４、メモリ１６、通信インターフェース１８、および記憶メモリインターフェース２０を持つシステムオンチップ（ＳｏＣ）１２を含み得る。コンピューティングデバイスは、ワイヤレス通信リンクを確立するための、ワイヤード又はワイヤレスモデム、記憶メモリ２４、アンテナ２６のような通信コンポーネント２２をさらに含み得る。プロセッサ１４は、様々なハードウェアコア、例えば、多数のプロセッサコアのうちの任意のものを含み得る。
【００２７】
[0043]「システムオンチップ」（ＳｏＣ）という用語は、典型的であるが排他的でない、ハードウェアコア、メモリ、および通信インターフェースを含む、相互接続電子回路のセットを参照するように本明細書において使用される。ハードウェアコアは、汎用プロセッサ、中央処理ユニット（ＣＰＵ）、デジタル信号プロセッサ（ＤＳＰ）、グラフィック処理プロセッサ（ＧＰＵ）、アクセレーテッド処理ユニット（ＡＰＵ：accelerated processing unit）、補助プロセッサ、単一コアプロセッサ、およびマルチコアプロセッサのような様々な異なるタイプのプロセッサを含み得る。ハードウェアコアは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、他のプログラマブル論理デバイス、ディスクリートゲート論理、トランジスタ論理、性能モニタハードウェア、モニタハードウェア、および時間基準のような、他のハードウェアおよびハードウェアの組み合わせをさらに統合し得る。集積回路は、集積回路のコンポーネントが、シリコンのような、半導体材料の単一ピースに存在するとして構成され得る。
【００２８】
[0044]ＳｏＣ１２は、１つまたは複数のプロセッサ１４を含み得る。コンピューティングデバイス１０は、１つより多くのＳｏＣ１２を含み、それによって、プロセッサ１４およびプロセッサコアの数を増大させ得る。コンピューティングデバイス１０はまた、ＳｏＣ１２に関連付けられないプロセッサ１４を含み得る。個別のプロセッサ１４は、図２を参照して以下で説明されるようなマルチコアプロセッサであり得る。プロセッサ１４は、各々、コンピューティングデバイス１０の他のプロセッサ１４と同じまたは異なり得る特定の目的のために構成され得る。同じまたは異なる構成のプロセッサ１４およびプロセッサコアのうちの１つまたは複数は、互いにグループ化され得る。プロセッサ１４またはプロセッサコアのグループは、マルチコアプロセッサクラスタと呼ばれ得る。
【００２９】
[0045]ＳｏＣ１２のメモリ１６は、プロセッサ１４によってアクセスするためのデータおよびプロセッサ実行可能コードを記憶するために構成される揮発性または不揮発性メモリであり得る。コンピューティングデバイス１０および／またはＳｏＣ１２は、様々な目的のために構成される１つまたは複数のメモリ１６を含み得る。１つまたは複数のメモリ１６は、ランダムアクセスメモリ（ＲＡＭ）またはメインメモリ、あるいはキャッシュメモリのような、揮発性メモリを含み得る。これらのメモリ１６は、データセンサまたはサブシステムから受信した限定された量のデータ、不揮発性メモリから要求されるデータおよび／またはプロセッサ実行可能コード命令、様々な要素に基づいて将来のアクセスの予測における不揮発性メモリからメモリ１６にロードされたもの、および／または不揮発性メモリ中に記憶されずに将来の迅速なアクセスのために一時的に記憶され、プロセッサによって生成される中間処理データおよび／またはプロセッサ実行可能コード命令を一時的に保持するように構成され得る。
【００３０】
[0046]メモリ１６は、プロセッサ１４のうちの１つまたは複数によってアクセスするために、別のメモリ１６または記憶メモリ２４のような別のメモリからメモリ１６にロードされる、データおよびプロセッサ実行可能コードを、少なくとも一時的に、記憶するように構成され得る。メモリにロードされたデータまたはプロセッサ実行可能コードは、プロセッサ１４によって関数の実行に応答してロードされ得る。関数の実行に応答してメモリ１６にデータまたはプロセッサ実行可能コードをロードすることは、不成功、またはミスになるメモリ１６へのメモリアクセス要求から生じ得る、なぜなら、要求データまたはプロセッサ実行可能コードがメモリ１６中にロードされないからである。ミスに応答して、別のメモリ１６または記憶メモリ２４からメモリデバイス１６に要求データまたはプロセッサ実行可能コードをロードするために、別のメモリ１６または記憶メモリ２４へのメモリアクセス要求が行われ得る。関数の実行に応答してメモリ１６にデータまたはプロセッサ実行可能コードをロードすることは、別のメモリ１６または記憶メモリ２４にメモリアクセス要求から生じ得、データまたはプロセッサ実行可能コードは、後のアクセスのためにメモリ１６にロードされ得る。
【００３１】
[0047]メモリ１６は、センサまたはサブシステムのような、生データソースデバイスからメモリにロードされる、生データを、少なくとも一時的に、記憶するように構成され得る。生データは、生データソースデバイスからメモリ１６に流れ、図３−図１９を参照して本明細書でさらに説明されるように機械学習アクセレータによって生データが受信および処理されることが出来るまで、メモリに記憶され得る。
【００３２】
[0048]記憶メモリインターフェース２０および記憶メモリ２４は、コンピューティングデバイス１０が不揮発性メモリ上でデータおよびプロセッサ実行可能コードを記憶することが出来るように調和して働き得る。記憶メモリ２４は、記憶メモリ２４がプロセッサ１４のうちの１つまたは複数によってアクセスするためのデータまたはプロセッサ実行可能コードをその中に記憶し得るメモリ１６の実施形態そっくりに構成され得る。不揮発性である、記憶メモリ２４は、コンピューティングデバイス１０の電力が止まったあと情報を保持し得る。電力が再び入りコンピューティングデバイス１０が再ブートするとき、記憶メモリ２４上に記憶された情報は、コンピューティングデバイス１０に利用可能であり得る。記憶メモリインターフェース２０は、記憶メモリ２４へのアクセスを制御し、プロセッサ１４が記憶メモリ２４からデータを読み出し、記憶メモリ２４にデータを書き込むことを可能にし得る。
【００３３】
[0049]コンピューティングデバイス１０のコンポーネントのうちのいくつかまたはすべては、異なってアレンジされるおよび／または組合され得る一方、引き続き必要な機能の役目を果たしている。さらに、コンピューティングデバイス１０は、コンポーネントの各々のうちの１つに限定されず、各コンポーネントの複数の例がコンピューティングデバイス１０の様々な構成中に含まれ得る。
【００３４】
[0050]図２は、実施形態をインプリメントするために適切なマルチコアプロセッサ１４を例示する。マルチコアプロセッサ１４は、複数の同種または異種プロセッサコア２００、２０１、２０２、２０３を有する。単一プロセッサ１４のプロセッサコア２００、２０１、２０２、２０３が同じ目的のために構成され同じまたは同様の性能特性を有するという点において、プロセッサコア２００、２０１、２０２、２０３は、同種であり得る。例えば、プロセッサ１４は、汎用プロセッサであり、プロセッサコア２００、２０１、２０２、２０３は、同種の汎用プロセッサコアであり得る。代替として、プロセッサ１４は、画像処理ユニットまたはデジタル信号プロセッサであり得、プロセッサコア２００、２０１、２０２、２０３は、それぞれ、同種の画像処理プロセッサまたはデジタル信号プロセッサコアであり得る。容易に参照できるように、「プロセッサ」および「プロセッサコア」という用語は、本面明細書において交換可能に使用され得る。
【００３５】
[0051]単一プロセッサ１４のプロセッサコア２００、２０１、２０２、２０３が異なる目的のために構成され異なる性能特性を有するという点において、プロセッサコア２００、２０１、２０２、２０３は、異種であり得る。このような異種のプロセッサコアの異種性は、異なる命令セットアーキテクチャ、パイプライン、動作周波数、等を含み得る。このような異種のプロセッサコアの例は、より遅い、低電力プロセッサコアがよりパワフルで電力を大量消費するプロセッサコアと結合する、「ｂｉｇ．ＬＩＴＴＬＥ」アーキテクチャとして知られるものを含み得る。同様の実施形態では、ＳｏＣ１２は、多数の同種または異種のプロセッサ１４を含み得る。
【００３６】
[0052]図２において例示される例では、マルチコアプロセッサ１４は、４つのプロセッサコア２００、２０１、２０２、２０３（つまりプロセッサコア０、プロセッサコア１、プロセッサコア２、およびプロセッサコア３）を含む。説明を簡単にするために、本明細書の例は、図２に例示される４つのプロセッサコア２００、２０１、２０２、２０３を参照し得る。４つのプロセッサコア２００、２０１、２０２、２０３が、図２に例示され説明されるけれども、本明細書は、例として単に提供され、４つのコアプロセッサシステムに様々な実施形態を限定することを全く意図したものではない。コンピューティングデバイス１０、ＳｏＣ１２、またはマルチコアプロセッサ１４は、本明細書で例示され説明される４つのプロセッサコア２００、２０１、２０２、２０３より少ないまたは多くを別個にまたは組み合わせて含み得る。
【００３７】
[0053]図３は、いくつかの実施形態に従うメモリ中に記憶されるシステムサービスの様々なバージョンを生成する時間変動ＡＳＬＲの限定されない例を例示する。図３のグラフ３００は、異なるコンピューティングデバイスが、「ｘ」の任意の整数値として、例えばコンピューティングデバイスＤ１、Ｄ２、Ｄｘまでを指定する横軸を含む。グラフ３００はまた、増大する時間を表わし、表わされた時間の至る所で異なるシステムサービス要求を表わす、縦軸を含む。グラフ３０におけるプロットは、異なるシステムサービス要求に応答して異なる時間に割り当てられた異なるコンピューティングデバイスの各々上で要求された複数のシステムサービスの様々なバージョン３１０−３３６である。例えば、コンピューティングデバイスＤ１は、単一システムサービス（Ｓ１）について時間にわたって複数のシステムサービス要求を行い、それに応じて、システムサービスＳ１の異なるバージョン（「Ｎ」の任意の整数として、ＳＶ１−１  ３１４、ＳＶ１−２  ３１２、ＳＶ１−３  ３１０、ＳＶ１−Ｎ  ３１６まで）を受信することとして例示される。様々なインプリメンテーションでは、システムサービスＳ１の異なるバージョン３１０−３１６の各々は、システムサービスＳ１のためのシステムサービス要求に応答してランダムに割り当てられ、システムサービスＳ１  ３１０−３１６の他のバージョンから異なる仮想メモリアドレスに位置付けられ得る。
【００３８】
[0054]グラフ３００は、単一システムサービス（Ｓ１）について時間にわたって複数のシステムサービス要求を行い、それに応じて、システムサービスＳ１の異なるバージョン（「Ｎ」の任意の整数として、ＳＶ１−１  ３２０、ＳＶ１−２  ３２６、ＳＶ１−３  ３２４、ＳＶ１−Ｍ  ３２２）を受信する、コンピューティングデバイスＤ２をさらに例示する。コンピューティングデバイスＤ１と同様に、様々なインプリメンテーションでは、システムサービスＳ１の異なるバージョン３２０−３２６の各々は、システムサービスＳ１のためのシステムサービス要求に応答してランダムに割り当てられ、システムサービスＳ１  ３２０−３２６の他のバージョンから異なる仮想メモリアドレスに位置付けられ得る。システムサービスＳ１の異なるバージョン３２０−３２６のランダム割当てのために、グラフ３００における例は、コンピューティングデバイスＤ２のシステムサービスＳ１の異なるバージョン３２０−３２６がコンピューティングデバイスＤ１のシステムサービスＳ１の異なるバージョン３１０−３１６と時間にわたって異なる順序において割り当てられることを例示する。システムサービスＳ１の異なるバージョン３１０−３１６および３２０−３２６がシステムサービスバージョン識別子（例えば、ＳＶ１−１、ＳＶ１−２、ＳＶ１−３）を共有するが、システムサービスＳ１の対応して識別されるバージョン３１０−３１６および３２０−３２６の各々の個別のインプリメンテーションは、異なり得る。例えば、システムサービスＳ１の対応して識別されるバージョン３１０−３１６および３２０−３２６の各インプリメンテーションは、異なるランダム仮想アドレス空間レイアウトを割り当てられ、これらそれぞれのコンピューティングデバイスＤ１またはＤ２上にシステムサービスＳ１のバージョン３１０−３１６および３２０−３２６または異なるインプリメンテーションについての異なるデータを包含し得る。
【００３９】
[0055]グラフ３００は、複数のシステムサービス（Ｓ１およびＳ２）について時間にわたって複数のシステムサービス要求を行い、それに応じて、システムサービスＳ１およびＳ２の異なるバージョン（「Ｑ」の任意の整数として、ＳＶ１−１  ３３６、ＳＶ１−２  ３３２、ＳＶ２−１  ３３４、ＳＶ２−Ｑ  ３３０）を受信する、コンピューティングデバイスＤｘをさらに例示する。グラフ３００における例は、コンピューティングデバイスＤ１およびＤ２によって要求される同じシステムサービスＳ１がコンピューティングデバイスＤ３によって要求されることを例示する。システムサービスＳ１  ３３２および３３６の異なるバージョンは、同じ手法でシステムサービスＳ１の異なるバージョン３１０−３１６および３２０−３２６とは異なり得る。システムサービスＳ２の異なるバージョン３３０および３３４は、同様に、ランダムに割り当てられた仮想アドレス空間レイアウトであり、システムサービスＳ２のバージョン３１０−３１６および３２０−３２６、異なるインプリメンテーションについての異なるデータを包含し、システムサービスＳ２のためのシステムサービス要求に応答してランダムに選択される。
【００４０】
[0056]図３において例示される例は、限定されず、コンピューティングデバイスは、任意の番号のシステムサービスの任意の番号のバージョンを有し得る。システムサービスの様々なバージョンは、対応するシステムサービスのための複数のシステムサービス要求に応答して任意の番号の時間を割り当てられ得る。
【００４１】
[0057]図４Ａは、様々な実施形態をインプリメントするために適切な実例の時間変動ＡＳＬＲシステムを例示する。コンピューティングデバイスは、図１を参照して説明されたメモリ１６および記憶メモリ２４のような、物理メモリ４００の様々な形式を含み得る。物理メモリ４００は、システムサービスＳ１  ４０２のためのコードのような、様々なシステムサービスのコードを記憶し得る。
【００４２】
[0058]コンピューティングデバイスは、様々な時間で、システムサービスＳ１  ４０３のためのコードにアクセスするように試み得る。例えば、コンピューティングデバイス上で実行されるブート処理４０４は、ブート時間の間システムサービスＳ１  ４０２のためのコードにアクセスするように試み得る。コンピューティングデバイス上で実行しているアプリケーション４０６はまた、コンピューティングデバイスが電源を入れられアプリケーション４０６を実行することができる任意の時間の間システムサービスのためのコードにアクセスするように試み得る。
【００４３】
[0059]時間変動ＡＳＬＲをインプリメントするために、システムサービス３１０−３１６の複数のバージョンは、ブート処理４０４またはアプリケーション４０６の何れかによってシステムサービス要求に応答するラウンチャによって起動され得る。様々なインプリメンテーションでは、コンピューティングデバイスは、これらのシステムサービス３１０−３１６の様々なバージョンの起動を生じる、システムサービスの任意の数のためのシステムサービス要求をブート処理４０４が行うように、事前プログラムされ得る。
【００４４】
[0060]様々なインプリメンテーションでは、アプリケーション４０６は、既に起動したシステムサービスのためのシステムサービス要求を行い、システムサービスの様々なバージョンが既に起動され得る。様々なインプリメンテーションでは、ラウンチャ４０８は、システムサービスの１つより多くのバージョンが既に存在するとき、システムサービスの更なるバージョンを起動することを控え得る。様々なインプリメンテーションでは、ラウンチャ４０８は、システムサービスの１つまたは複数のバージョンが既に存在するとき、システムサービスの限定された番号のバージョンを起動し得る。
【００４５】
[0061]様々なインプリメンテーションでは、アプリケーション４０６は、その時点で起動されたシステムサービスのバージョンを有していないシステムサービスのためのシステムサービス要求を行い得る。例えば、要求されたシステムサービスは、アプリケーションによるシステムサービス要求より前にコンピューティングデバイスの電源オンセッションの間に要求なされ得なかった。同様にコンピューティングデバイスの電源オンセッションの間に起動したシステムサービスの前のバージョンは、使用の欠如、限定されたメモリ空間、限定されたコンピューティングデバイス電力、および他の交換ポリシー並びにアルゴリズムのような、様々な理由のために破棄されてい得る。要求されたシステムサービスのバージョンがアプリケーション４０６によるシステムサービス要求の時点で存在しないとき、ラウンチャ４０８は、要求されたシステムサービスの指定された番号のバージョンを起動し得る。
【００４６】
[0062]本明細書に説明されるように、ラウンチャ４０８は、複数のソースからシステムサービス要求に応答して、要求されたシステムサービスの指定された番号のバージョンを起動し得る。要求されたシステムサービスのバージョンの番号は、要求調整器を参照して本明細書にさらに説明されるような、事前プログラムされた値、要求されたシステムサービスの測定あるいは予測された使用、要求されたシステムサービスの優先度または脆弱性、メモリ空間および電力可用性を含む）コンピューティングデバイスの状態、またはシステムサービスへの検出あるいは疑われた脅威に基づいて変更し得る。システムサービスの各バージョンは、ラウンチャ４０８によって、同じシステムサービスの他のバージョンの各々と同じ処理グループ識別子（ＩＤ）と関連付けられ得る。処理グループ識別子は、同じ処理グループ識別子を有する要求されたシステムサービス３１０−３１６のバージョンを含む処理グループ４１６を定義し得る。
【００４７】
[0063]ラウンチャ４０８は、指定された異種のプロッサ上で走り続けるべきシステムサービスの異なるバージョンを起動し得る。例えば、起動されたシステムサービスの第１のバージョンは、コンピューティングデバイスのＣＰＵによって起動されるように構成され、起動されたシステムサービスの第２のバージョンは、コンピューティングデバイスのＤＳＰによって起動されるように構成され得る。ラウンチャ４０８は、プロセッサの任意のタイプによって実行されるべきシステムサービスの異なるバージョンを起動し得る。異種のプロセッサ上で実行されるべきシステムサービスの様々なバージョンは、異なるプロセッサによるバージョンのインプリメンテーションのための異なる命令セットを要求することによって攻撃者からシステムサービスを曖昧にするのを助け得る。第２のプロセッサの実行されたバージョンからのデータを使用して第１のプロセッサのシステムサービスのバージョンを実行するように試みる攻撃者は、第１のプロセッサのための命令セットを使用してシステムサービスのバージョンを実行するために、正しいデータまたは正しいフォーマットにおけるデータを提供し得ない。
【００４８】
[0064]コンピューティングデバイスは、マッパを含み得、それは、仮想メモリ４１４にシステムサービスの様々なバージョン３１０−３１６をマップし得る。マッパ４１０は、システムサービスの様々なバージョン３１０−３１６のための仮想メモリアドレス空間レイアウトをランダムに選択することと、システムサービスのバージョン３１０−３１６を記憶するために利用可能である、ランダムに選択された仮想アドレス空間レイアウトにシステムサービスの様々なバージョン３１０−３１６をマップし得る。マッパ４１０は、前のランダム選択がシステムサービスのバージョン３１０−３１６を記憶するために利用不可能である仮想アドレス空間レイアウトをもたらすことに応答して、システムサービスのバージョン３１０−３１６のために異なる仮想アドレス空間レイアウトをランダムに選択し得る。マッパ４１０はまた、システムサービスの対応するバージョン３１０−３１６のためのシステムサービスバージョン識別子と仮想アドレス空間レイアウトを相関させ、システムサービス要求に応答してシステムサービスのバージョン３１０−３１６を割り当て、位置付けるために相関情報を記憶し得る。マッパ４１０はまた、物理メモリ４００中に対応するシステムサービス４０２の物理アドレスにシステムサービスの様々なバージョン３１０−３１６の仮想アドレス空間レイアウトのためのマッピングを提供し得る。対応するシステムサービス４０２へのシステムサービスの様々なバージョン３１０−３１６のマッピングは、システムサービス４０２の実行のためにシステムサービス４０２にシステムサービスのバージョン３１０−３１６のデータを提供するように使用され得る。
【００４９】
[0065]マッパ４１０は、システムサービスのバージョン３１０−３１６の物理アドレスにシステムサービスのバージョン３１０−３１６のための仮想アドレス空間レイアウトをマップし得る、ここで、システムサービスのバージョン３１０−３１６のデータは、記憶される。システムサービスのバージョン３１０−３１６のデータは、システムサービスのバージョン３１０−３１６をインプリメントするための、ヒープ、スタック、実行テーブル、共有ライブラリ、等を含み得る。コンピューティングデバイスは、システムサービスのバージョン３１０−３１６の仮想アドレス空間レイアウトを使用してシステムサービスのバージョン３１０−３１６のデータを検索し、システムサービスのバージョン３１０−３１６のデータを使用してシステムサービス４０２を実行し得る。いくつかの実施形態では、システムサービス３１０−３１６のバージョンのデータは、物理メモリ４００中にシステムサービス４０２を位置付けるために、ポインタのような、リファレンスを含み得る。
【００５０】
[0066]コンピューティングデバイスは、アプリケーション４０６からシステムサービス要求を受信するように構成され得る要求調整器を含み得る。システムサービス要求は、システムサービスＳ１  ４０２のような、システムサービスを指定するためにあり得る。要求調整器４１２は、システムサービスのバージョン３１０−３１６と要求されたシステムサービスを一致させるようにシステムサービス要求中に含まれたシステムサービスのシステムサービス識別子（例えば、名前、ハンドル、ラベル、または他のリファレンス）を使用し得る。要求調整器４１２は、要求されたシステムサービスを実行する際に使用するためにシステムサービスのバージョン３１０−３１６のうちの１つをランダムに選択し得る。要求調整器４１２は、システムサービスバージョン３１０−３１６のデータを位置付け、検索するために、ランダムに選択されたアドレス空間レイアウトの開始仮想アドレスのような、システムサービスのランダムに選択されたバージョン３１０−３１６の仮想アドレスを検索し得る。指定されたプロセッサによって実行されるように構成されたシステムサービスのランダムに選択されたバージョン３１０−３１６について、要求調整器４１２は、システムサービスのバージョンを有する異種のプロセッサをランダムに選択し、システムサービス要求を生じるアプリケーション４０６またはブート処理４０４あるいは異種のプロセッサ上のバージョンにまたはから、受信したシステムサービス要求および異種のプロセッサによって実行されたシステムサービスのバージョンの出力を含む、メッセージを送受信するためにプロセッサ間のメッセージを使用し得る。
【００５１】
[0067]様々なインプリメンテーションでは、システムサービスの起動されたバージョンの変動する番号は、アクティビティの異なる状態においてであり得る。アクティビティ状態は、覚醒状態、睡眠状態、様々な準覚醒／睡眠状態を含み得る。覚醒状態では、システムサービスのバージョンは、要求されたシステムサービスを実行する際の使用のために要求調整器によってランダムに選択され得る。睡眠状態では、システムサービスのバージョンは、要求されたシステムサービスを実行する際の使用のために要求調整器によってより高いアクティビティ状態バージョンを選択不可能である、またはにより高いアクティビティ状態バージョンに比べて容易にランダムに選択でき得ない。準覚醒／睡眠状態のうちの１つでは、システムサービスのバージョンは、要求されたシステムサービスを実行する際の使用のために要求調整器によってランダムに選択され得る。要求調整器４１２は、より低いレベルの準覚醒／睡眠状態または睡眠状態におけるシステムサービスのバージョンよりも、覚醒状態におけるまたはより高いレベルの準覚醒／睡眠状態におけるシステムサービスのバージョンを優先させ得る。準覚醒／睡眠状態におけるシステムサービスのバージョンは、覚醒状態におけるバージョンと比べてより遅くアクセス可能であるおよび／または実行するために覚醒状態に持ってくる電力よりも多くの電力を要求し得る。同様に、睡眠状態におけるシステムサービスのバージョンは、準覚醒／睡眠状態バージョンと比べてより時間が掛かるおよび／または覚醒状態に持ってくる電力より多くの電力を必要とし得る。
【００５２】
[0068]要求調整器４１２は、システムサービスのバージョンが様々な因子に依存して覚醒状態、準覚醒／睡眠状態、または睡眠状態にあるかどうかを制御し得る。例えば、このような因子は、プロセッサ、コンピューティングデバイス、および／またはアプリケーションのアクティビティ状態と、コンピューティングデバイス、システムサービスへの最近および／または予測される呼の数の電力状態と、プロセッサ、コンピューティングデバイス、および／またはアプリケーションの脅威状態とを含み得る。複数の呼が様々な因子に基づいてシステムサービスのために行われる可能性が高くなるほど、要求調整器４１２は、覚醒状態および／または準覚醒／睡眠状態になるために、システムサービスのバージョンのより高い番号を制御し得る。実例の因子を使用して、プロセッサ、コンピューティングデバイス、および／またはアプリケーションのアクティビティ状態が高くなるほど、覚醒状態および／または準覚醒／睡眠状態にあり得るシステムサービスのバージョンの番号が高くなる。同様に、システムサービスへの最近および／または予測される呼の番号が高くなるほど、覚醒状態および／または準覚醒／睡眠状態にあるシステムサービスのバージョンの番号が高くなる。コンピューティングデバイスに利用可能な電力が大きくなるほど、覚醒状態および／または準覚醒／睡眠状態にあるシステムサービスのバージョンの番号が高くなる。さらに、脆弱性または攻撃の可能性を示す、プロセッサ、コンピューティングデバイス、および／またはアプリケーションの脅威状態が高くなるほど、覚醒状態および／または準覚醒／睡眠状態にあり得るシステムサービスのバージョンの番号が高くなる。
【００５３】
[0069]システムサービスのバージョンの合計番号、覚醒状態におけるバージョンの番号、準覚醒／睡眠状態のバージョンの番号、および／または睡眠状態におけるバージョンの番号についての制限されたセットがある。制限は、合計および様々な状態におけるシステムサービスのバージョンの番号を制御するために使用されるプロファイルに依存して変動し得る。プロファイルは、所定の制限を含み得うる、または様々な因子に基づく制限を割り当て得る。
【００５４】
[0070]いくつかのインプリメンテーションでは、要求調整器４１２は、要求されたシステムサービスに向けられた潜在的な攻撃を検出または疑い得る。要求調整器４１２は、通常ではないアクセスパターンおよびシステムサービス要求を検出し得る。潜在的な攻撃を検出または疑うことに応じて、要求調整器４１２は、ラウンチャ４０８が要求されたシステムサービスのより多くのバージョンを起動するおよび／または増加させることを促す、警告信号をランチャ４０８に送り得る。要求されたシステムサービスの追加で起動したおよび／または増加したアクティビティ状態バージョンは、システムサービスの関係のない実行のための異なるデータのより多くのビューを生成することによって攻撃者からシステムサービスをより曖昧にするように動作し得る。追加のデータおよびデータの間の一貫性の欠如は、システムサービスを利用するために使用され得るデータを攻撃者が取得することを防ぐのに役立つ、なぜなら、１つの実行からのデータを使用することが悪意のあるシステムサービス要求に応答してシステムサービスの異なるバージョンを使用する後の実行に対応し得ないからである。悪意のあるシステムサービス要求におけるこのような対応しないデータを使用することは、システムサービスの実行を防ぐ、システムサービスを実行する無効な試みをもたらし得る。
【００５５】
[0071]図４Ｂは、いくつかの実施形態をインプリメントするために適切な動的コード生成システムを持つ時間変動ＡＳＬＲシステムの例を例示する。コンピューティングデバイスは、ユーザ空間またはカーネル空間においてインプリメントされる割り振り器４２０、システムサービスを実行するために動的に生成されたコードを記憶するためのコードバッファ４２４を含み得る。メモリ割り振り器４２０は、相関したシステムサービスを実行するために動的に生成されたコードに対応するコードバッファアドレスと相関されるシステムサービスバージョン識別子のリスト４２２（またはあるデータを別のデータとリンクするように構成される他のデータ構造）を記憶するように構成され得る。
【００５６】
[0072]システムサービスのバージョン３１０−３１６の実行は、システムサービス４０２のために動的に生成されたコードをもたらし得る。動的に生成されたコードは、再びコードを動的に生成する必要なしにシステムサービスの後の実行における使用のために生成されたコードにアクセスするために、コードバッファ４２４中に記憶され得る。メモリ割り振り器４２０は、対応するシステムサービスのシステムサービスバージョン識別子、および動的に生成されたコードのサイズを含む、動的に生成されたコードを記憶するためのパラメータを受信し得る。メモリ割り振り器４２０は、動的に生成されたコードを記憶するために利用可能であり、十分なサイズのロケーションを見出すためにコードバッファ４２４をトラバースし得る。メモリ割り振り器４２０は、コードバッファアドレスのランダム選択を含む、様々なアルゴリズムまたはパターンを使用してコードバッファ４２４をトラバースし得る。十分な大きさのロケーションを見出すと、メモリ割り振り器４２０は、ロケーションの任意のアドレスがシステムサービスバージョン識別子に既に関連付けられているかどうか決定するために、コードバッファ４２４におけるロケーションのアドレスをリスト４２２と比較し得る。システムサービスバージョン識別子と関連付けられていないロケーションは、動的に生成されたコードを記憶するために利用可能なロケーションであり得る。コードバッファ４２４において十分な大きさで利用可能なロケーションを見出すと、メモリ割り振り器４２０は、コードバッファ４２４の動的なコードロケーション（例えば、動的コードロケーション１乃至Ｙ）において動的なコードを記憶するためにコードバッファアドレスを提供し、コードバッファアドレスに動的に生成されたコードの記憶を反映するようにリスト４２２を更新し得る。コードバッファアドレスは、それについての実行が動的に生成されたコードをもたらすシステムサービスのバージョン３１０−３１６の他のデータと共に記憶され得る。
【００５７】
[0073]図５は、システムサービスのバージョンを実行するためのいくつかの実施形態をインプリメントするために適切な実例の時間変動ＡＳＬＲシステムを例示する。システムは、ユーザ空間５００およびカーネル空間５１６を含み得る。ユーザ空間５００では、複数のシステムサービス処理、例えば、システムサービスＳ１処理５０８ａ、５０８ｂは、システムサービスの異なるバージョンを実行するためにインプリメントされ得る、例えば、システムサービスＳ１処理５０８ａがシステムサービスバージョンＳＶ１−１を実行し、システムサービスＳ２処理５０８ｂがシステムサービスバージョンＳ１−２を実行し得る。各システムサービス処理５０８ａ、５０８ｂは、対応するシステムサービス処理５０８ａ、５０８ｂのコードを実行するためのシステムサービススレッドプール５１０ａ、５１０ｂを含み得る。システムサービスのバージョンを起動すると、システムサービス処理５０８ａ、５０８ｂは、要求調整器４１２またはシステムサービスマネージャでシステムサービスの対応するバージョンを登録するために、登録信号５３０ａ、５３０ｂを送り得る。
【００５８】
[0074]要求調整器４１２は、システムサービスのバージョンを登録し、要求アプリケーション４０６にシステムサービスの割り当てられたバージョンを提供するように構成され得る。いくつかのインプリメンテーションでは、アプリケーション４０６は、ユーザ空間５００において実行し得る。要求調整器４１２は、ストレージを取り扱い、システムサービスのバージョンとシステムサービスを相関するために使用される情報およびシステムサービスのランダム選択の更新するための時間変動ＡＳＬＲコテンキストマネージャ５０４を含み得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、システムサービスの複数のバージョンのオブジェクトまたはバインダリファレンス（ハンドルまたはラベル）と、システムサービス識別子を相関するために登録テーブル５０６または複数のあるデータを他のデータとリンクするように構成される他のデータ構造を使用し得る。登録テーブル５０６は、少なくとも１つのバインダ／オブジェクトとシステムサービス識別子を相関する、各システムサービス識別子のための１つまたは複数のエントリを含み得る。図５における非限定の例は、Ｎの任意の整数値に対して、システムサービスバージョンＳＶ１−１のためのＢ１、システムサービスバージョンＳＶ１−２のためのＢ２、ＢＮまでを含む、システムサービスの異なるバージョンに各々対応するバインダリファレンスのリストと相関される、システムサービス識別子、システムサービスＳ１、のためのエントリを示す。
【００５９】
[0075]カーネル空間５１６の関数は、コンピューティングデバイスのプロセッサ（例えば、図１および図２におけるプロセッサ１４）によってインプリメントされ得る。カーネル空間５１６は、システムサービスのバージョンのオブジェクトの仮想アドレスおよびオーナー処理とシステムサービスの複数のバージョンのバインダリファレンスを相関する、マッピングテーブル５２０または複数のあるデータを他のデータとリンクするように構成される他のデータ構造を含み得る。マッピングテーブル５２０は、システムサービスのバージョンが起動したとき追加され（ｐｏｐｕｌａｔｅｄ）、更新され得る。図５における非限定の例は、登録テーブル５０６のバインダリファレンスのためのマッピングテーブル５２０におけるエントリを示す。バインダリファレンスＢ１は、仮想アドレスＶＡ１およびオーナー処理Ｐｉとマッピングテーブル５２０において相関される。同様に、バインダリファレンスＢ２は、仮想アドレスＶ２およびオーナー処理Ｐｊと相関され、バインダリファレンスＢＮは、仮想アドレスＶＡＮおよびオーナー処理Ｐｋと相関される。
【００６０】
[0076]アプリケーション４０６のアプリケーション処理５１２は、要求されたシステムサービスのシステムサービス識別子を使用してシステムサービス５３２のバージョンのための要求を送り得る。要求調整器４１２は、システムサービス５３２のバージョンのための要求を受信し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、登録テーブル５０６における要求されたシステムサービスのシステムサービス識別子と相関されるバインダリファレンスのうちの１つをランダムに選択し得る。
【００６１】
[0077]いくつかのインプリメンテーションでは、時間変動ＡＳＬＲコンテキストマネージャ５０４は、アプリケーション４０６に要求されたシステムサービスのバージョンの以前の割当てのトラックを保持し、アプリケーション４０６に前に提供されなかったバインダリファレンスをランダムに選択し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、以前に提供されたバインダリファレンスを割り当てることを避け得る。例えば、時間変動ＡＳＬＲコンテキストマネージャ５０４は、ランダム選択より前に、以前に提供されたバインダリファレンスを無視することによって以前に提供されたバインダリファレンスを割り当てることを避け得る。別の例として、時間変動ＡＳＬＲコンテキストマネージャ５０４は、以前に提供されたバインダリファレンスをランダムに選択することに応答して後続のランダム選択を行うことによって以前に提供されたバインダリファレンスを割り当てることを避け得る。
【００６２】
[0078]要求調整器４１２は、アプリケーション４０６にランダムに選択されたバインダリファレンスを返し得る。アプリケーション４０６は、要求されたシステムサービスのシステムサービス識別子と相関されたランダムに選択されたバインダリファレンスを受信し、要求されたシステムサービス５３４を呼ぶためにバインダリファレンスを使用し得る。
【００６３】
[0079]サービスマネージャプロキシ５１４は、要求されたシステムサービスのバージョンにアクセスするためにカーネル空間とインターフェースし得る。サービスマネージャプロキシ５１４は、要求されたシステムサービス５３６のバージョンのための呼をバインダリファレンスに提供し得る。カーネル空間５１６におけるバインダドライバ５１８は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるためにバインダリファレンスを使用して、要求されたシステムサービス５３６のバージョンのための呼を受信し得る。バインダドライバ５１８は、要求されたシステムサービスのバージョンについての対応するシステムサービス処理５０８ａ、５０８ｂと通信し得る。そうすることで、バインダドライバ５１８は、バインダリファレンスと相関された仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービス５３８のバージョンの実行を要求し得る。
【００６４】
[0080]対応するシステムサービス処理５０８ａ、５０８ｂは、システムサービス処理５０８ａ、５０８ｂによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス５４０の実行の結果を返し得る。バインダドライバ５１８は、アプリケーション処理５１２に結果５４４ａを転送し得る、サービスマネージャプロキシ５１４に結果５４２を転送し得る。
【００６５】
[0081]図６は、システムサービスの複数のバージョンを実行することの実施形態をインプリメントするために適切な実例の時間変動ＡＳＬＲシステムを例示する。図６に示される例は、図５を参照して上で説明された例に類似する。両方の例が同じコンポーネントを共有し、システムサービスを実行するために第１の要求を表す、通信信号５３２ａ、５３４ａ、５３６ａ、５３８ａ、５４０ａ、５４２ａ、および５４４ａは、図５を参照して説明した通信信号５３２、５３４、５３６、５３８、５４０、５４２、および５４４に対応し得る。図６に示される例は、システムサービスを実行するために第２の要求をさらに含む。
【００６６】
[0082]アプリケーション処理５１２は、要求されたシステムサービスのシステムサービス識別子を使用して同じシステムサービス５３２ｂのバージョンのための第２の要求を送り得る。要求調整器４１２は、システムサービス５３２ｂのバージョンのための第２の要求を受信し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、登録テーブル５０６における要求されたシステムサービスのシステムサービス識別子と相関されるバインダリファレンスのうちの１つをランダムに選択し得る。図５を参照して説明されたように、時間変動ＡＳＬＲコンテキストマネージャ５０４は、アプリケーション４０６に要求されたシステムサービスのバージョンの以前の割り当てのトラック、例えば、システムサービスを実行するために第１の要求のための第１の割り当てのトラックを保持し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、アプリケーション４０６に前に提供されなかった第２のバインダリファレンスをランダムに選択し得る。  [0078]要求調整器４１２は、アプリケーション４０６にランダムに選択された第２のバインダリファレンスを返し得る。
【００６７】
[0083]アプリケーション４０６は、要求されたシステムサービスのシステムサービス識別子と相関されたランダムに選択された第２のバインダリファレンスを受信し、要求されたシステムサービス５３４ｂを呼ぶためにバインダリファレンスを使用し得る。サービスマネージャプロキシ５１４は、要求されたシステムサービス５３６ｂのバージョンのための呼を第２のバインダリファレンスに提供する要求されたシステムサービスのバージョンにアクセスするためにカーネル空間５１６とインターフェースし得る。バインダドライバ５１８は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるために第２のバインダリファレンスを使用して、要求されたシステムサービス５３６ｂのバージョンのための呼を受信し得る。バインダドライバ５１８は、要求されたシステムサービスのバージョンのための対応するシステムサービス処理５０８ｂと通信し得る。そうすることで、バインダドライバ５１８は、第２のバインダリファレンスと相関された仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービスのバージョン５３８ｂの実行を要求し得る。
【００６８】
[0084]対応するシステムサービス処理５０８ａ、５０８ｂは、システムサービス処理５０８ａ、５０８ｂによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス５４０の実行の結果を返し得る。バインダドライバ５１８は、アプリケーション処理５１２に結果５４４ｂを転送し得る、サービスマネージャプロキシ５１４に結果５４２ｂを転送し得る。
【００６９】
[0085]図７は、複数のアプリケーションのためのシステムサービスの複数のバージョンバージョンを実行することの実施形態をインプリメントするために適切な実例の時間変動ＡＳＬＲシステムを例示する。図７に示される例は、図５および図６を参照して上で説明された例に類似する。例のすべてが同じコンポーネントを共有するが、図７に例示される例は、複数のアプリケーション４０６ａ、４０６ｂ、複数のアプリケーションプロセッサ５１２ａ、５１２ｂ、および複数のサービスマネージャプロキシ５１４ａ、５１４ｂを含む。第１のアプリケーション４０６ａは、図５および図６を参照して説明されたアプリケーション４０６に対応し得る。第２のアプリケーション４０６ｂは、第１のアプリケーション４０６ａとして同じシステムサービスを呼ぶ任意のアプリケーションであり得る。さらに図６および図７の例は、通信信号５３２ａ、５３２ｂ、５３４ａ、５３４ｂ、５３６ａ、５３６ｂ、５３８ａ、５３８ｂ、５４０ａ、５４０ｂ、５４２ａ、５４２ｂ、５４４ａ、および５４４ｂを共有する。しかしながら、図７において例示される例では、通信信号５３２ａ、５３４ａ、５３６ａ、５３８ａ、５４０ａ、５４２ａ、および５４４ａは、第１のアプリケーションによってシステムサービスを実行するために第１の要求に関連し、通信信号５３２ｂ、５３４ｂ、５３６ｂ、５３８ｂ、５４０ｂ、５４２ｂ、および５４４ｂは、第２のアプリケーション４０６ｂによってシステムサービスを実行するために第２の要求に関連し得る。
【００７０】
[0086]様々なインプリメンテーションでは、同じアプリケーションによる同じシステムサービスを実行するための複数の要求と同様に、要求調整器４１２は、要求しているアプリケーションが同じか異なるかにかかわらず、システムサービスを実行するための連続的要求に要求されたシステムサービスの同じバージョンを割り当てることを避けるように構成され得る。システムサービスを実行するための要求が異なるアプリケーションから起こったとしても、システムサービスの同じバージョンを使用することを避けることは、ＡＳＬＲを無効にする試みにおいて複数のアプリケーションを使用する攻撃者からシステムサービスを曖昧にするのに役立ち得る。
【００７１】
[0087]要求調整器４１２は、第２のアプリケーションの第２のアプリケーション処理からシステムサービス５３２ｂのバージョンのための第２の要求を受信し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、登録テーブル５０６における要求されたシステムサービスのシステムサービス識別子と相関されるバインダリファレンスのうちの１つをランダムに選択し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、すべてのアプリケーション４０６ａ、４０６ｂへの要求されたシステムサービスのバージョンの以前の割り当てのトラックを保持し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、アプリケーション４０６ａに前に提供されなかった第２のバインダリファレンスをランダムに選択し得る。要求調整器４１２は、アプリケーション４０６ｂにランダムに選択された第２のバインダリファレンスを返し得る。
【００７２】
[0088]アプリケーション４０６ｂは、要求されたシステムサービスのシステムサービス識別子と相関されたランダムに選択された第２のバインダリファレンスを受信し、要求されたシステムサービス５３４ｂを呼ぶためにバインダリファレンスを使用し得る。サービスマネージャプロキシ５１４ｂは、要求されたシステムサービス５３６ｂのバージョンのための呼を第２のバインダリファレンスに提供する要求されたシステムサービスのバージョンにアクセスするためにカーネル空間５１６とインターフェースし得る。バインダドライバ５１８は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるために第２のバインダリファレンスを使用して、要求されたシステムサービス５３６ｂのバージョンのための呼を受信し得る。バインダドライバ５１８は、第２のバインダリファレンスと相関される仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービス５３８ｂのバージョンの実行を要求するために、要求されたシステムサービスのバージョンのための対応するシステムサービス処理５０８ｂと通信し得る。
【００７３】
[0089]対応するシステムサービス処理５０８ａ、５０８ｂは、システムサービス処理５０８ａ、５０８ｂによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス５４０の実行の結果を返し得る。バインダドライバ５１８は、第２のアプリケーション処理５１２ｂに結果５４４ｂを転送し得る、第２のサービスマネージャプロキシ５１４ｂに結果５４２ｂを転送し得る。
【００７４】
[0090]図８は、システムサービスの複数のバージョンを実行することの実施形態をインプリメントするために適切なオブジェクトマネージャを持つ実例の時間変動ＡＳＬＲシステムを例示する。図８に示される例は、図５および図６を参照して上で説明された例に類似する。例のすべては同じコンポーネントを共有するが、図８の例は、アプリケーション４０６のオブジェクトマネージャ８００を含む。さらに図６および図８の例は、通信信号５３６ａ、５３６ｂ、５３８ａ、５３８ｂ、５４０ａ、５４０ｂ、５４２ａ、および５４２ｂを共有する。
【００７５】
[0091]アプリケーション４０６のアプリケーション処理５１２は、要求されたシステムサービスのシステムサービス識別子を使用してシステムサービス８０２ａ、８０２ｂを実行するための要求を送り得る。オブジェクトマネージャ８００は、システムサービス８０２ａ、８０２ｂを実行するための要求を受信し、システムサービス識別子を含む、システムサービス８０４ａ、８０４ｂのバージョンのための要求を送り得る。オブジェクトマネージャ８００は、個々に、システムサービス８０２ａ、８０２ｂを実行するための要求のうちの１つを受信することに応答して、システムサービス８０４ａ、８０４ｂのバージョンのための各々要求を送り得る。要求調整器４１２は、システムサービス８０４ａ、８０４ｂのバージョンのための要求を受信し得る。
【００７６】
[0092]時間変動ＡＳＬＲコンテキストマネージャ５０４は、システムサービス８０４ａ、８０４ｂのための要求のうちの１つに応答して、登録テーブル５０６中に要求されたシステムサービスのためのシステムサービス識別子と相関された第１のバインダリファレンスをランダムに選択し得る。図５を参照して説明されたように、時間変動ＡＳＬＲコンテキストマネージャ５０４は、アプリケーション４０６に要求されたシステムサービスのバージョンの以前の割り当てのトラック、例えば、システムサービス８０４を実行するための第１の要求のための第１のバインダリファレンスの第１の割り当てのトラックを保持し得る。時間変動ＡＳＬＲコンテキストマネージャ５０４は、システムサービス８０４ａ、８０４ｂのバージョンのための要求のうちの他のものに応答してアプリケーション４０６に以前に提供されなかった第２のバインダリファレンスをランダムに選択し得る。要求調整器４１２は、アプリケーション４０６にランダムに選択されたバインダリファレンスを個々に返し得る。
【００７７】
[0093]オブジェクトマネージャ８００は、ランダムに選択されたバインダリファレンスを受信し、サービスマネージャプロキシ５１４に、それぞれランダムに選択されたバインダリファレンスでシステムサービス８０６ａ、８０６ｂを実行するために要求を送り得る。サービスマネージャプロキシ５１４ｂは、要求されたシステムサービス５３６ａ、５３６ｂのバージョンのための呼をバインダリファレンスに提供する要求されたシステムサービスのバージョンにアクセスするためにカーネル空間５１６とインターフェースし得る。
【００７８】
[0094]バインダドライバ５１８は、バインダリファレンスと相関される要求されたシステムサービスのバージョンのオブジェクトの仮想アドレスを位置付けるためにバインダリファレンスを使用して、要求されたシステムサービス５３６ａ、５３６ｂのバージョンのための呼を受信し得る。バインダドライバ５１８は、バインダリファレンスと相関される仮想アドレスから要求されたシステムサービスのバージョンのデータを使用して要求されたシステムサービス５３８ａ、５３８ｂのバージョンの実行を要求する、要求されたシステムサービスのバージョンのための対応するシステムサービス処理５０８ａ、５０８ｂと通信し得る。
【００７９】
[0095]対応するシステムサービス処理５０８ａ、５０８ｂは、システムサービス処理５０８ａ、５０８ｂによるシステムサービスの指定されたバージョンのデータを使用して実行の完了の後、要求されたシステムサービス５４０の実行の結果を返し得る。バインダドライバ５１８は、オブジェクトマネージャ８００に結果８０８ａ、８０８ｂを転送し得る、サービスマネージャプロキシ５１４に結果５４２ｂを転送し得る。オブジェクトマネージャ８００は、アプリケーション処理に結果８１０ａ、８１０ｂを転送し得る。
【００８０】
[0096]図９は、実装形態に従う時間変動ＡＳＬＲをインプリメントするための方法９００を例示する。方法９００は、プロセッサ（例えば、図１および図２中のプロセッサ１４）中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ＡＳＬＲ内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法９００をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
【００８１】
[0097]ブロック９０２ではコンピューティングデバイスは、システムサービスを起動または実行するための要求を受信し得る。システムサービスを起動または実行するための要求は、システムサービスのシステムサービス識別子を含み得る。
【００８２】
[0098]ブロック９０２で受信したシステムサービスを起動するための要求は、コンピューティングデバイスによって実行されるブート処理から起こり得る。システムサービスを起動するための要求は、サービスがシステムサービスを実行するための要求に応答して後の実行のために利用可能になるだろうシステムサービスを起動するためのものであり得る。言い換えると、システムサービスを起動するための要求は、コンピューティングデバイスにシステムサービスを実行せずにシステムサービスを起動するように促し得る。
【００８３】
[0099]ブロック９０２で受信したシステムサービスを起動するための要求は、コンピューティングデバイスによって実行されるアプリケーションから起こり得る。システムサービスを実行するためのこのような要求は、システムサービスが要求の時間において起動していない場合、コンピューティングデバイスにシステムサービスを起動するように促し得る。
【００８４】
[0100]決定ブロック９０４では、要求されたシステムサービスが既に起動しているかどうかを決定し得る。いくつかのインプリメンテーションでは、コンピューティングデバイスは、システムサービス識別子、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービス識別子と相関されるシステムサービスのバージョンのオブジェクトを有する、記録が存在するかどうかを決定するために（例えば、図５−図８を参照して説明された登録テーブル５０６中の）記録を探索し得る。
【００８５】
[0101]いくつかのインプリメンテーションでは、コンピューティングデバイスの動作の間の任意の時間で、コンピューティングデバイスは、オプションブロック９１８において任意のシステムサービス上で攻撃を検出するまたは疑い得る。様々なインプリメンテーションでは、コンピューティングデバイスは、システムサービスのためのリクエスタおよび要求パターンまたは通常ではないアクセスを認識することによってシステムサービス上での攻撃を検出または疑い得る。
【００８６】
[0102]ブロック９１８においてシステムサービス上での攻撃を検出または疑うこと、または要求されたシステムサービスが既に起動していなかったという決定（つまり決定ブロック９０４＝「Ｎｏ」）に応答して、コンピューティングデバイスは、ブロック９０６においてシステムサービスの複数のバージョンを起動し得る。コンピューティングデバイスは、システムサービスのバージョンの任意の番号を起動し得る。様々なインプリメンテーションでは、起動された任意のシステムサービスのバージョンの番号は、別のシステムサービスのバージョンの番号と同じまたは異なり得る。起動されたシステムサービスのバージョンの番号は、予測されたシステムサービスあるいはシステムサービスの測定使用、システムサービスの優先度あるいは脆弱性、（利用可能なメモリ空間および電力を含む）コンピューティングデバイスの状態、システムサービス上での攻撃の検出または嫌疑を含む、多くの因子によって決まり得る、または事前プログラムされ得る。
【００８７】
[0103]ブロック９０８では、コンピューティングデバイスは、システムサービスの各バージョンに、システムサービスバージョン識別子、バインダリファレンス、オブジェクトを割り当て得る。システムサービスバージョン識別子、バインダリファレンス、またはオブジェクトは、システムサービスのバージョンを一意に識別する関数であり得る。
【００８８】
[0104]ブロック９１０では、コンピューティングデバイスは、システムサービスの各バージョンにランダム仮想メモリアドレス空間レイアウトを割り当て得る。システムサービスの各バージョンのランダム仮想メモリアドレス空間レイアウトは、システムサービスのバージョンを起動するためのデータが記憶される場合には、物理メモリロケーションにマップされ得る。データは、スタック、ヒープ、データ、実行ファイル、関数ポインタ、またはライブラリメモリマップ、等を含み得る。いくつかのインプリメンテーションでは、システムサービスの各バージョンのランダム仮想メモリアドレス空間レイアウトはまた、システムサービスを実行するためのコードの物理メモリロケーションにマップされ得る。いくつかのインプリメンテーションでは、データは、システムサービスを実行するためのコードの物理メモリロケーションへのポインタを含み得る。ブロック９１０においてシステムサービスの各バージョンにランダム仮想メモリアドレス空間レイアウトを割り当てるための例示の方法１０００が図１０を参照して説明される。
【００８９】
[0105]ブロック９１２では、コンピューティングデバイスは、システムサービス識別子、システムサービスバージョン識別子、バインダリファレンス、システムサービス各バージョンのオブジェクト、およびシステムサービスの各バージョンのランダム仮想メモリアドレスを相関または記憶し得る。いくつかのインプリメンテーションでは、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトの割り当ては、システムサービスの識別子と、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトを相関する手法においてコンピューティングデバイスによって記録され得る。例えば、方法９００の記録は、図５−図８を参照して説明されたように、登録テーブル５０６の一部であり得る。いくつかのインプリメンテーションでは、システムサービスバージョンへのランダム仮想メモリアドレスの割り当ては、ランダム仮想メモリアドレスと、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトを相関する手法においてコンピューティングデバイスによって記録され得る。例えば、相関の記録は、図５−図８を参照して説明されたように、登録テーブル５２０の一部であり得る。
【００９０】
[0106]ブロック９１２において、システムサービス、システムサービスのバージョン、システムサービスのバージョンのランダム仮想メモリアドレスの関係性のすべてを相関および記憶した後、または要求されたシステムサービスが既に起動していたとの決定（つまり決定ブロック９０４＝「Ｙｅｓ」）に応答して、コンピューティングデバイスは、ブロック９１４においてシステムサービスのバージョンをランダムに選択し得る。ランダム選択は、疑似ランダムアルゴリズムを使用してインプリメントされ得る。
【００９１】
[0107]いくつかのインプリメンテーションでは、ブロック９１４におけるランダム選択は、様々なまたは単一のアプリケーションのいずれかによって、時間期間内である数のシステムサービスの同じバージョンの選択に応答して複数回、またはシステムサービスのための要求のしきい値数、実行され得る。
【００９２】
[0108]いくつかのインプリメンテーションでは、ブロック９１４におけるランダム選択は、現在使用されているまたは最近使用されたシステムサービスのバージョンを実行しているシステムサービスのバージョンのセットからの選択を含む。最近の使用は、システムサービスのための要求のしきい値数内のシステムサービスバージョンの使用または時間期間内のシステムサービスのバージョンの使用によって、様々なまたは単一のアプリケーションのいずれかによって決定される。
【００９３】
[0109]ブロック９１６では、コンピューティングデバイスは、リクエスタに、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのランダムに選択されたバージョンのオブジェクトを提供し得る。
【００９４】
[0110]図１０は、実施形態に従って時間変動アドレス空間レイアウトにおけるシステムサービスのバージョンに、仮想アドレス空間レイアウトのランダム割当てをインプリメントするための実例の方法１０００を例示する。方法１０００は、プロセッサ（例えば、図１および図２中のプロセッサ１４）中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ＡＳＬＲ内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法１０００をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
【００９５】
[0111]ブロック１００２では、コンピューティングデバイスは、システムサービスの各バージョンに同じ処理グループ識別子（ＩＤ）を割り当て得る。
【００９６】
[0112]ブロック１００４では、コンピューティングデバイスは、物理メモリ中のロケーション（物理アドレス）でシステムサービスのバージョンを記憶し得る。いくつかのインプリメンテーションでは、あるメモリデバイス、またはメモリデバイスの区分は、システムサービスのバージョンを記憶するために指定され得る。コンピューティングデバイスは、物理メモリ中の未使用のロケーション中に、または様々なメモリ置き換えポリシーに従って物理メモリ中のロケーションにおいて記憶された現在のデータを上書きすることによって物理メモリ中の使用されたロケーション中にシステムサービスのバージョンを記憶し得る。
【００９７】
[0113]ブロック１００６では、コンピューティングデバイスは、システムサービスのバージョンのための仮想アドレス空間レイアウトをランダムに選択し得る。いくつかのインプリメンテーションでは、コンピューティングデバイスは、仮想アドレス空間レイアウトを選択するための疑似ランダム選択アルゴリズムをインプリメントし得る。いくつかのインプリメンテーションでは、他の目的のために使用される仮想アドレス（例えば、同じまたは他のシステムサービスの他のバージョンに割り当てられた仮想アドレス空間レイアウトの仮想アドレス）は、システムサービスのバージョンのための仮想アドレス空間レイアウトをランダムに選択するために使用される仮想アドレスのセットから除外され得る。
【００９８】
[0114]オプションの決定ブロック１００８では、コンピューティングデバイスは、ランダムに選択された仮想アドレス空間レイアウトが利用可能かどうかを決定し得る。いくつかのインプリメンテーションでは、コンピューティングデバイスは、ランダムに選択された仮想アドレス空間レイアウトが別の目的のために既に使用中かどうかを決定するために、他の使用された仮想アドレスとランダムに選択された仮想アドレス空間レイアウトを比較し得る。
【００９９】
[0115]ランダムに選択された仮想アドレス空間レイアウトが利用不可能（つまり、オプション決定ブロック１００８＝「Ｎｏ」）であると決定することに応答して、コンピューティングデバイスは、ブロック１００６においてシステムサービスのバージョンのための仮想アドレス空間レイアウトをランダムに選択し得る。
【０１００】
[0116]ランダムに選択された仮想アドレス空間レイアウトが利用可能（つまり、オプション決定ブロック１００８＝「Ｙｅｓ」）であると決定することに応答して、コンピューティングデバイスは、物理アドレスにシステムサービスのバージョンのためのランダムに選択された仮想アドレス空間レイアウトをマップし得、ここで、システムサービスのバージョンは、ブロック１０１０において記憶される。
【０１０１】
[0117]決定ブロック１０１２では、コンピューティングデバイスは、システムサービスのより多くのバージョンが物理メモリ中に記憶されランダム仮想アドレス空間レイアウトに割り当てられるために残っているかどうかを決定し得る。コンピューティングデバイスは、システムサービスのより多くのバージョンが残っているかどうかを決定するために同じシステムサービスのバージョンに共通の処理グループ識別子を使用し得る。同じ処理グループ識別子を持つバージョンがランダム仮想アドレス空間レイアウトの割り当ておよび記憶のためのキュー中に残っているとき、コンピューティングデバイスは、残こっているシステムサービスのバージョンがあると認識し得る。
【０１０２】
[0118]システムサービスのより多くのバージョンが物理メモリ中に記憶され、ランダム仮想アドレス空間レイアウトに割り当てられるために残っていると決定すること（つまり決定ブロック１０１２＝「Ｙｅｓ」）に応答して、コンピューティングデバイスは、説明されるように、ブロック１０１４において同じ処理識別子を持つシステムサービスの記憶されていないバージョンが選択され、ブロック１００４において物理メモリ中のロケーションにおいてシステムサービスバージョンを記憶し、ブロック１００６においてシステムサービスのバージョンのための仮想アドレス空間レイアウトを選択し得る。
【０１０３】
[0119]いくつかのインプリメンテーションでは、コンピューティングデバイスのバージョンのすべては、メモリ中に既に記憶され得る。そこで、システムサービスのより多くのバージョンが物理メモリ中に記憶され、ランダム仮想アドレス空間レイアウトに割り当てられるために残っていないと決定すること（つまり決定ブロック１０１２＝「Ｎｏ」）に応答して、コンピューティングデバイスは、図９を参照して説明したように、方法９００のブロック９１２において、システムサービス識別子、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスの各バージョンのオブジェクトと、システムサービスの各バージョンのランダム仮想メモリアドレス空間レイアウトとを相関し記憶し得る。様々な実装形態では、ブロック９１２中の動作は、決定ブロック１０１２の結果にかかわらず実行され得、方法１０００の様々なブロック１００２−１０１４の動作と同時に実行され得る。
【０１０４】
[0120]図１１は、実装形態に従う時間変動ＡＳＬＲを使用してシステムサービス実行をインプリメントするための方法１１００を例示する。方法１１００は、プロセッサ（例えば、図１および図２中のプロセッサ１４）中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ＡＳＬＲ内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法１１００をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
【０１０５】
[0121]方法１１００は、システムサービスのリクエスタがアプリケーションである図９を参照して説明された方法９００のインプリメンテーションの続きであり得る。ブロック１１０２では、コンピューティングデバイスは、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのためのオブジェクトを含む、アプリケーションからシステムサービスのバージョンについての要求を受信し得る。
【０１０６】
[0122]ブロック１１０４では、コンピューティングデバイスは、システムサービスのバージョンのランダムに選択された仮想アドレス空間レイアウトの開始仮想アドレスのような、システムサービスのバージョンの仮想アドレスを位置付け得る。様々なインプリメンテーションでは、コンピューティングデバイスは、仮想アドレスと、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのオブジェクトを相関することの記録を見出すために、システムサービスバージョン識別子、バインダリファレンス、またはシステムサービスのバージョンのオブジェクトの割り当てを使用し得る。例えば、コンピューティングデバイスは、図５−図８を参照して説明されたように、マッピングテーブル５２０の記録を探索し得る。
【０１０７】
[0123]ブロック１１０６では、コンピューティングデバイスは、物理メモリ中のロケーションの物理アドレスに、システムサービスのバージョンの仮想アドレスを変換し得、ここで、システムサービスのバージョンのデータは、記憶される。この動作では、コンピューティングデバイスは、図１０を参照して本明細書で説明されるように、ブロック１０１０におけるシステムサービスのバージョンのために生成され物理アドレスマッピングに仮想アドレスを使用し得る。
【０１０８】
[0124]ブロック１１０８では、コンピューティングデバイスは、物理アドレスから実行のために使用されるシステムサービスのバージョンのデータを検索し得る。
【０１０９】
[0125]ブロック１１１０では、コンピューティングデバイスは、システムサービスを起動するために検索されたデータを使用し得る。コンピューティングデバイスは、システムサービスを実行するための変数、条件、およびコードインジェクションまたは交換を提供するためにデータを使用し得る。
【０１１０】
[0126]ブロック１１１２では、コンピューティングデバイスは、アプリケーションにシステムサービスの実行の結果を返し得る。
【０１１１】
[0127]図１２は、実装形態に従う、動的コード生成を持つ時間変動ＡＳＬＲを使用してシステムサービス実行をインプリメントするための方法１２００を例示する。方法１２００は、プロセッサ（例えば、図１および図２中のプロセッサ１４）中で実行するソフトウェアにおける、汎用ハードウェアにおける、専用ハードウェアにおける、他の個々のコンポーネントを含む時間変動ＡＳＬＲ内でソフトウェアを実行するプロセッサのような、プロセッサおよび専用ハードウェアの組み合わせにおけるコンピューティングデバイスにおいてインプリメントされ得る。様々なバージョンの実施形態において使用可能な代替の構成を包含するために、方法１２００をインプリメントするハードウェアは、「コンピューティングデバイス」と本明細書で呼ばれ得る。
【０１１２】
[0128]様々なインプリメンテーションでは、システムサービスの以前の実行は、システムサービスの後続の実行に使用される動的に生成されたコードをもたらし得、システムサービスの実行効率を改善し得る。ブロック１２０２では、コンピューティングデバイスは、システムサービスから動的に生成されたコードのためのコードバッファ空間を割り当てるために要求を受信し得る。システムサービスの異なるバージョンは、システムサービスのバージョンの後続の実行に使用され得る異なる動的に生成されたコードを生成し得る。
【０１１３】
[0129]ブロック１２０４では、コンピューティングデバイスは、動的に生成されたコードを記憶するための空のコードバッファ空間を探索してコードバッファをトラバースし得る。様々なインプリメンテーションでは、コンピューティングデバイスは、コードバッファのランダムに選択するアドレスを含む、様々なアルゴリズム及びパターンを使用してコードバッファをトラバースし得る。コンピューティングデバイスは、アドレスが動的に生成されたコードを記憶するために利用可能であり、十分な大きさであるコードバッファ空間と関連付けられたかどうかを検査するために、コードバッファのアドレスを選択し得る。動的に生成されたコードを記憶するために十分な大きさのコードバッファ空間は、少なくとも、動的に生成されたコードのサイズおよび選択されたアドレスを含む、任意のコードバッファ空間であり得る。
【０１１４】
[0130]決定ブロック１２０６では、コンピューティングデバイスは、選択されたコードバッファアドレスに関連付けられたコードバッファ空間がシステムサービスのバージョンから動的に生成されたコードために使用可能であるかどうか決定し得る。様々なインプリメンテーションでは、識別されたコードバッファ空間が使用可能かどうか決定することは、コードバッファ空間が動的に生成されたコードを記憶するために利用可能であり十分な大きさであるかどうかを決定することを含み得る。コンピューティングデバイスは、コードバッファ空間がコードバッファ空間をリスト、別のデータとあるデータをリンクするように構成された他のデータ構造、システムサービスバージョン識別子を相関すること、バインダリファレンス、またはコードバッファメモリアドレスを持つシステムサービスのバージョンのオブジェクトと比較することによって利用可能であり十分な大きさであるかどうか決定し得る。例えば、コンピューティングデバイスは、図４Ｂを参照して説明されたように、リスト４２２の記録とコードバッファ空間を比較し得る。利用可能であり十分な大きさであるコードバッファ空間は、コードバッファ空間のアドレスが他の動的に生成されたコードと相関されるリスト中のコードバッファアドレスと衝突しないものであり得る。
【０１１５】
[0131]選択されたコードバッファアドレスに関連付けられたコードバッファ空間がシステムサービスのバージョンから動的に生成されたコードのために使用可能であると決定すること（つまり、決定ブロック１２０６＝「Ｙｅｓ」）に応答して、コンピューティングデバイスは、ブロック１２０８において、識別されたコードバッファアドレス中のコードバッファ中に、システムサービスのバージョンから動的に生成されたコードを記憶し得る。
【０１１６】
[0132]ブロック１２１０では、コンピューティングデバイスは、システムサービスのバージョンからの記憶された動的に生成されたコードのコードバッファアドレスが利用不可能であるまたは使用されたことを示すために、リストまたは別のデータと１つのデータをリンクするように構成される他のデータ構造を更新し得る。
【０１１７】
[0133]システムサービスのバージョンと相関されたコードバッファ空間がシステムサービスのバージョンから動的に生成されたコードのために使用不可能であると決定すること（つまり、決定ブロック１２０６＝「Ｎｏ」）に応答して、コンピューティングデバイスは、決定ブロック１２１２において、コードバッファがトラバースされたかどうかを決定し得る。様々な実施形態では、コードバッファをトラバースするために、コンピューティングデバイスは、動的に生成されたコードを記憶するために利用可能であり十分な大きさであるコードバッファ空間のための各コードバッファアドレスを検査し得る。様々な実施形態では、コードバッファをトラバースするために、コンピューティングデバイスは、残りのコードバッファアドレスが動的に生成されたコードを記憶するための十分な空間とコードバッファ空間を相関させることが出来ない程度のコードバッファアドレスを検査し得る。
【０１１８】
[0134]コードバッファがトラバースされないと決定すること（つまり、決定ブロック１２１２＝「Ｎｏ」）に応答して、コンピューティングデバイスは、ブロック１２０４において動的に生成されたコードを記憶するための空のコードバッファ空間を探索してコードバッファをトラバースすることを続け得る。
【０１１９】
[0135]コードバッファがトラバースされると決定すること（つまり、決定ブロック１２１２＝「Ｙｅｓ」）に応答して、コンピューティングデバイスは、ブロック１２１２においてシステムサービスのバージョンから動的に生成されたコードを廃棄または他のメモリ中に記憶し得る。
【０１２０】
[0136]（図１−図１２を参照して上で説明された実施形態を含むがこれらに限定されない）様々な実施形態は、モバイルコンピューティングデバイスを含むコンピューティングシステムの多種多様においてインプリメントされ、様々な実施形態での使用のために適切なものの実例が図１３に例示される。モバイルコンピューティングデバイス１３００は、タッチスクリーンコントローラ１３０４および内部メモリ１３０６に結合されたプロセッサ１３０２を含み得る。プロセッサ１３０２は、汎用または特殊処理タスクのために指定された１つまたは複数のマルチコア集積回路であり得る。内部メモリ１３０６は、揮発性または不揮発メモリであり得、安全なおよび／もしくは暗号化されたメモリ、または安全でないおよび／もしくは暗号化されていないメモリ、あるいはそれらのあらゆる組み合わせであり得る。利用することができるメモリタイプの例は、ＤＤＲ、ＬＰＤＤＲ、ＧＤＤＲ、ＷＩＤＥＩＯ、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、Ｐ−ＲＡＭ、Ｒ−ＲＡＭ、Ｍ−ＲＡＭ、ＳＴＴ−ＲＡＭ、および埋め込みＤＲＡＭを含むがそれらに限定されない。タッチスクリーンコントローラ１３０４およびプロセッサ１３０２はまた、抵抗センシングタッチスクリーン、容量センシングタッチスクリーン、赤外線センシングタッチスクリーン、等のような、タッチスクリーンパネル１３１２に結合され得る。加えて、コンピューティングデバイス１３００のディスプレイは、タッチスクリーン能力を有する必要はない。
【０１２１】
[0137]モバイルコンピューティングデバイス１３００は、互いに結合されたおよび／またはプロセッサ１３０２に結合された、通信を送るまたは受信するために、１つまたは複数の無線信号トランシーバ１３０８（例えば、Ｐｅａｎｕｔ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｚｉｇｂｅｅ（登録商標）、Ｗｉ−Ｆｉ，ＲＦ無線）およびアンテナ１３１０を有し得る。トランシーバ１３０８およびアンテナ１３１０は、様々な送信プロトコルスタックおよびインターフェースをインプリメントするために上で述べられた回路で使用され得る。モバイルコンピューティングデバイス１３００は、セルラネットワークを介して通信可能であり、プロセッサに結合されるセルラネットワークワイヤレスモデムチップを含み得る。
【０１２２】
[0138]モバイルデバイス１３００は、プロセッサ１３０２に結合された周辺デバイス接続インターフェース１３１８を含み得る。周辺デバイス接続インターフェース１３１８は、接続の１つのタイプを受け入れるように構成される、またはユニバーサルシリアルバス（ＵＳＢ）、ファイアウォール、サンダーボルト、またはＰＣＩｅのような、共通または専有の、物理および通信接続の様々なタイプを受け入れるように構成される。周辺デバイス接続インターフェース１３１８はまた、同様に構成された周辺デバイス接続ポート（図視されていない）に結合され得る。
【０１２３】
[0139]モバイルコンピューティングデバイス１３００はまた、無線出力を提供するためのスピーカーを含み得る。モバイルコンピューティングデバイス１３００はまた、本明細書で説明されたコンポーネントのすべてまたはいくつかを包含すための、プラスチック、金属、または材料の組み合わせ構築されたハウジング１３２０を含み得る。モバイルコンピューティングデバイス１３００は、使い捨てまたは再充電可能なバッテリーのような、ぷりせっさに結合される電力ソース１３２２を含み得る。再充電可能なバッテリーは、外部のソースからモバイルコンピューティングデバイス１３００に充電電流を受信するために周辺デバイス接続ポートに結合され得る。モバイルデバイス１３００はまた、ユーザ入力を受信するための物理的なボタン１３２４を含むみ得る。モバイルデバイス１３００はまた、モバイルデバイス１３００をオンおよびオフにするための電力ボタン１３２６を含み得る。
【０１２４】
[0140]（図１−図１２を参照して上で説明された実施形態を含むがこれらに限定されない）様々な実施形態は、図１４に例示されるものの実例の、ラップトップコンピュータ１４００を含む多種多様なコンピューティングシステムにおいてインプリメントされ、実例が図１４に例示される。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとしてサービスするタッチパッドタッチサーフェス１４１７を含み、したがって、タッチスクリーンディスプレイを搭載し、上で説明されたコンピューティングデバイス上でインプリメントされるそれらと同様に、ドラッグ、スクロール、およびフリックジェスチャを受信し得る。ラップトップコンピュータ１４００は典型的に、揮発性メモリ１４１２に結合されたプロセッサ１４１１、およびフラッシュメモリのディスクドライブ１４１３のような、大容量の不揮発性メモリを含む。追加として、コンピュータ１４００は、ワイヤレスデータリンクに結合される電磁放射を送受信するための１つまたは複数のアンテナ１４０８および／またはプロセッサに結合される携帯電話トランシーバ１４１６を有し得る。サーバ１４００はまた、プロセッサ１４１１に結合されたフロッピー（登録商標）ディスクドライブ１４１４、コンパクトディスク（ＣＤ）ドライプ１４１５を含み得る。ノートブック構成では、すべてがプロセッサ１４１１に結合される、コンピュータハウジングは、タッチパッド１４１７、キーボード１４１８、およびディスプレイ１４１９を含む。コンピューティングデバイスの他の構成は、様々な実施形態と連動しても使用され得る、周知であるような、（例えばＵＳＢ入力を介して）プロセッサに結合されるコンピュータマウスまたはトラックボールを含み得る。
【０１２５】
[0141]（図１−図１２を参照して上で説明された実施形態を含むがこれらに限定されない）様々な実施形態はまた、様々な商業的に利用可能なサーバのうちの任意のもののような、固定コンピューティングシステムにおいてインプリメントされ得る。実例的なサーバ１５００は、図１５で例示される。このようなサーバ１５００は典型的に、揮発性メモリ１５０２およびディスクドライブ１５０４のような大容量の不揮発性メモリに結合された１つまたは複数のマルチコアアセンブリ１５０１を含む。図１５において例示されるように、マルチコアアセンブリ１５０１は、アセンブリのラック中にそれらを挿入することによってサーバ１５００に加えられ得る。サーバ１５００はまた、プロセッサ１５０１に結合されたフロッピーディスクドライブ、コンパクトディスク（ＣＤ）、またはデジタル多用途ディスク（ＤＶＤ）ディスクドライブ１５０６を含み得る。サーバ１５００はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話ネットワーク、および／またはセルラデータネットワーク（例えば、ＣＤＭＡ、ＴＤＭＡ、ＧＳＭ（登録商標）、ＰＣＳ、３Ｇ、４Ｇ、ＬＴＥ（登録商標）、もしくはあらゆる他のタイプのセルラネットワーク）のような、ネットワーク１５０５とのネットワークインターフェース接続を確立するためのプロセッサ１５０１に結合されたネットワークアクセスポイント１５０３を含み得る。
【０１２６】
[0142]様々な実施形態の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「プログラムコード」は、Ｃ、Ｃ＋＋、Ｃ＃、Ｓｍａｌｌｔａｌｋ、Ｊａｖａ（登録商標）、ＪａｖａＳｃｔｉｐｔ、Ｖｉｓｕａｌ  Ｂａｓｉｃ  Ｓｔｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ（例えば、Ｔｒａｎｓａｃｔ−ＳＱＬ）または様々な他のプログラマブル言語のような、高レベルプログラミング言語で書かれ得る。このアプリケーションにおいて使用されるコンピュータ可読記憶媒体上に記憶されるプログラムコード又はプログラムは、フォーマットがプロセッサによって理解不可能である、（オブジェクトコードのような）機械言語コードを参照し得る。
【０１２７】
[0143]前述の方法の説明および処理フロー図は、単に例示的な例として提供されているだけであり、様々な実施形態の動作が、提示された順序で行われなければならないことを要求または意味するようには意図されていない。当業者によって理解されるように、前述の実施形態における動作の順序は、任意の順序で実行され得る。「その後に（thereafter）」、「その後（then）」、「次に（next）」などの用語は、動作の順序を限定することを意図したものではなく、これらの用語は、単に、方法の説明を通じて読者を導くために使用される。さらに、例えば、冠詞「a」、「an」、または「the」を使用した、請求項の要素への単数形でのいずれの言及も、その要素を単数であると限定するように解釈されるべきではない。
【０１２８】
[0144]様々な実施形態に関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとしてインプリメントされ得る。ハードウェアおよびソフトウェアのこの互換性を明確に例示するために、様々な例示的なコンポーネント、ブロック、モジュール、回路、および動作が、概してそれらの機能の観点から上述されてきた。このような機能性がハードウェアとして実施されるかソフトウェアとして実施されるかは、特定のアプリケーション及びシステム全体に課せられる設計制約に依存する。当業者は、各特定のアプリケーションに関して、多様な方法で、説明された機能をインプリメントし得るが、このようなインプリメンテーションの決定は、特許請求の範囲から逸脱を引き起こしていると解釈されるべきでない。
【０１２９】
[0145]本明細書に開示されている実施形態に関係して説明された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するように使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または他のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタ論理、ディスクリートハードウェアコンポーネント、あるいは本明細書で説明された機能を実行するように設計されたこれらの任意の組み合わせで実装または実行されうる。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携した１つまたは複数のマイクロプロセッサ、またはいずれの他のこのような構成としても実装され得る。代替として、いくつかの動作または方法は、所与の機能に特有の回路によって実行され得る。
【０１３０】
[0146]１つ又は複数の実施形態では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア又はこれらの任意の組み合わせで実現され得る。ソフトウェアでインプリメントされる場合、これら機能は、非一時的なコンピュータ可読媒体または非一時的なプロセッサ可読媒体上で、１つまたは複数の命令またはコードとして記憶されうる。本明細書に開示されたアルゴリズムまたは方法の動作は、非一時的なコンピュータ読み取り可能なまたはプロセッサ読み取り可能な記憶媒体上に存在し得るプロセッサ実行可能なソフトウェアモジュールにおいて具現化され得る。非一時的なコンピュータ読み取り可能なまたはプロセッサ読み取り可能な記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得るいかなる記憶媒体でもあり得る。限定ではなく例として、そのような非一時的なコンピュータ読み取り可能なまたはプロセッサ読み取り可能な記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ（登録商標）、ＦＬＡＳＨメモリ、ＣＤ−ＲＯＭまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイス、または命令またはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、かつコンピュータによってアクセスされ得るいかなる他の媒体も含み得る。本明細書で使用されるとき、ディスク（disk）およびディスク（disc）は、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、デジタル多用途ディスク（ＤＶＤ）、フロッピー（登録商標）ディスク、およびＢｌｕ−ｒａｙ（登録商標）ディスクを含み、ここで、ディスク（disk）は通常、磁気的にデータを再生するが、ディスク（disc）は、レーザーを用いて光学的にデータを再生する。上記の組合せもまた、非一時的なコンピュータ読み取り可能なおよびプロセッサ読み取り可能な媒体の範囲内に含まれる。さらに、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれうる、非一時的なプロセッサ可読媒体および／またはコンピュータ可読媒体上のコードおよび／または命令の１つ、または任意の組み合わせ、またはそのセットとして存在しうる。
【０１３１】
[0147]開示された実施形態についての前の説明は、当業者が本発明を製造又は使用することを可能にするために提供される。これらの実施形態への様々な修正は、当業者には容易に明らかとなり、ここで定義した一般原理は、特許請求の範囲から逸脱することなく他の実施形態およびインプリメンテーションに適用され得る。したがって、本開示は、本明細書に記載された実施形態およびインプリメンテーションに限定されるようには意図されず、以下の特許請求の範囲およびここで開示された原理および新規な特徴に合致する最も広い範囲を与えられることとなる。
【図１】
2019513270.tif 000003
【図２】
2019513270.tif 000004
【図３】
2019513270.tif 000005
【図４Ａ】
2019513270.tif 000006
【図４Ｂ】
2019513270.tif 000007
【図５】
2019513270.tif 000008
【図６】
2019513270.tif 000009
【図７】
2019513270.tif 000010
【図８】
2019513270.tif 000011
【図９】
2019513270.tif 000012
【図１０】
2019513270.tif 000013
【図１１】
2019513270.tif 000014
【図１２】
2019513270.tif 000015
【図１３】
2019513270.tif 000016
【図１４】
2019513270.tif 000017
【図１５】
2019513270.tif 000018
【国際調査報告】
2019513270.tif 000019
2019513270.tif 000020