タグ付けされた質問 「memory-management」

2
カーネルモードからユーザーモード(またはその逆)への変更
Galvinによるオペレーティングシステムの本を読んでいます。Galvinは、カーネルモードとユーザーモードとは何か、両方のモードに与えられる命令特権、およびモードビットについても説明しています。しかし、モードがどのように変化するか知りたいです。基本的に私は次の質問を解決したいと思います: CPUには、特権モードと非特権モードの2つのモードがあります。モードを事前から非事前に変更するため a)ハードウェア割り込みが必要 b)ソフトウェア割り込みが必要です。 c)特権命令が必要です。 d)非特権命令が必要です。 私が理解していることから、 ユーザーモードからカーネルモードへ-ハードウェア割り込みが必要です(ディスクI / Oのように)。ユーザープログラムが許容範囲を超えるメモリにアクセスするのに疲れた場合、トラップが発生します。トラップは基本的にOSによって処理されるソフトウェア割り込みです。これで、ユーザーモードでは特権命令を実行できなくなりました。したがって、I / O要求などの非特権命令は、ユーザーをカーネルモードに変更できます。だから私は、変えるために 非特権(ユーザー)から特権(カーネル)へ-H / W割り込み、S / W割り込み、非特権命令が実行します。 カーネルがユーザーモードになりました。OSはカーネルをユーザーモードに変更できます。そのため、カーネルからユーザーモードに変更する特権命令を実行します。H / wまたはS / w割り込みを生成する必要はありません。だから私は結論を変える previledgedからnon-previledgedへ-特権付きの命令で実行されます 私は正しいですか? また、カーネルモードで実行すると、すべての割り込みが無効になりますよね?したがって、答えは(a)または(b)にはできません。また、OSは基本的にはソフトウェアであるため、ハードウェア割り込みを発生させることはできません。 また、OS自体が割り込みを処理するため、カーネルからユーザーモードに変更するために割り込みを生成(およびサービス)する必要がある理由は私にはわかりません。 私がどこか間違っている場合はお知らせください。これに関するどんな助けでもありがたいです。

4
大きなデータにアルゴリズムを適用する
大きなデータ(つまり、メインメモリに完全にロードできないデータ)に一般的なアルゴリズム(並べ替え、検索など)を効率的に適用する方法と、それらのアルゴリズムのコストを考慮してアルゴリズムを効率的に適用する方法を教える本またはチュートリアルはありますか?外部メモリからのブロック転送?たとえば、ほとんどすべてのアルゴリズムの教科書では、BおよびB +ツリーを使用してデータをディスクに格納できるとされています。ただし、実際にこれを行う方法、特にデータがディスク上に存在する場合のポインタの処理については説明されていません。同様に、多くの本は検索技術を教えていますが、二次記憶に存在するデータを考慮していません。 クヌースの本をチェックしました。これらのアイデアについて説明していますが、実際にそれらを高級言語に適用する方法はまだわかりませんでした。これらの詳細について説明している参考資料はありますか?

1
OSカーネルでのページ管理
私は私の古いOS理論の本をいくつか見ましたが、これらのOSの本すべての明白な欠落の1つは、実際に無料の物理ページ(つまり、実際に無料リストを実装するためのアルゴリズム)を追跡する方法であることに気付きました。ユーザーランドのメモリアロケーターがどのように機能するかはよくわかっていますが、物理ページの割り当てとの大きな違いは、物理ページの断片化は問題にならないということです。隣接しているかどうか。断片化の回避はユーザーランドアロケーターの主要な懸念事項の1つであるため、物理ページの割り当ては基本的に別の問題のようです。TLBへの圧力を減らすためにスーパーページをサポートしたい場合、これは完全に正確ではないと思います。 私の質問:この問題のために最新の高性能カーネルで使用されている手法は何ですか?また、この問題はNUMAシステムでは著しく複雑になりますか?

1
オブジェクト指向言語用のタグなしのガベージコレクション
私は自分の言語に適したガベージコレクション手法を探していて、このペーパーを見つけました。ベンジャミンゴールドバーグは、厳密に型指定された言語のガベージコレクション手法について説明しているため、実行時の型情報の必要性がありません。 簡単に言えば、これは、コンパイルされたコードに直接、関数呼び出しの直後にガベージコレクション関数へのポインターを置くことによって行われます。次に、これを拡張して、MLのようなパラメトリック多態性をサポートします。 今私の質問:このテクニックをオブジェクト指向言語でどのように実装できるかについての作業はありましたか?仮想テーブルのポインタを使用した間接呼び出しを通じて多くの機能が実装されていますか?

3
コンパイラーは、配列への交互アクセスを検出してメモリーにインターリーブできますか?
配列が別の方法でアクセスされるループを最適化するコンパイラを設計することは可能ですか?たとえば、次のようになります。 // int[] a,b int sum = 0; for(int i = 0; i < n; i++) { sum += a[i] + b[i]; } 通常のシーケンシャルアレイ装置と、a[i]及びb[i]互いに離れメモリであってもよいです。したがって、優れたコンパイラ最適化はそれを検出しa[i]、b[i]常に「同時に」アクセスされることを検出し、インターリーブされた配列を格納します。a[0] b[0] a[1] b[1] ...つまり、1つのメモリアクセスでa[i]との両方を取得できますb[i]。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.