問題タブ [tlb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - データをコピーせずに大きな mmap() ファイルにページを挿入する
mmap() で開いた大きな (マルチ GB) ファイルの先頭近くに空白ページを挿入する方法があるかどうか疑問に思っています。最後に 1 つか 2 つのページを追加し、memcpy() を使用してすべてを前に進めることは明らかに可能ですが、これはすべてのページを汚し、最終的にディスクにフラッシュするときに非常に長い時間を必要とします。
ソリューションには、カスタマイズされたファイルシステムとページテーブルの手動操作との間の複雑な調整が必要になると思います.inodeにブロックを追加し、これを反映するためにVMM内のキャッシュされたページを何らかの方法で更新し、ページテーブルを何らかの方法でスウィズルしますマッチ。これは自明ではないように聞こえるので、もっと良い方法があるのではないかと思います。
これは、Linux でのメモリとファイル操作に関するやや深い質問を意図したものですが、他のシステムでこれがどのように行われるかを聞いてうれしいです。コピーをより効率的にする回避策には特に興味はありませんが、再マッピングが必要でディスク IO を回避する手法は良い出発点になるでしょう。
com - インポートされたタイプ ライブラリを OCX または TLB ファイルから取得する方法は?
ActiveX の COM 依存関係を見つける方法はないと確信していましたが、驚いたことに、OLEVIEW には次のようなコメントが表示されます。
// TLib : // TLib : OLE オートメーション : {00020430-0000-0000-C000-000000000046} importlib("stdole2.tlb"); // TLib : Visual Basic ランタイム オブジェクトとプロシージャ: {EA544A21-C82D-11D1-A3E4-00A0C90AEA82} importlib("3");
TypeLibInfoFromFile を使用して同じ情報を抽出しようとしましたが、MSDN で見つけたものに基づいて、この情報を提供する Api はありません。この情報を OCX または Tlb ファイルから抽出する方法を知っていますか? すべての ocx が vb6 でコンパイルされていることを知っているので、インポートされた (明示的にコードに含まれていない) インターフェイスについてこの情報を信頼できますか?
architecture - ユーザープロセスでTLBスラッシングを引き起こす方法は?
私の現在の仕事は、Intel Core シリーズの CPU で規定数の TLB ミスを発生させる必要がありますが、うまくいきません。多くの方法を試しましたが、どれも TLB ヒット率が非常に高かったです。x86 TLB がどのように機能するか、またはユーザー プロセス内で多数の TLB ミスを生成する方法に関する有用な情報を知っている人はいますか?
c - 次の C のコードで segfault エラーが発生するのはなぜですか?
オペレーティング システムのクラスで、翻訳ルックアサイド バッファーをシミュレートする予定のプロジェクトがあります。
TLBミスの後に呼び出されるメソッドを書いています。空であるか、しばらくヒットしていない TLB 内の次のエントリを見つけ、そのエントリを削除し、最後に呼び出されたページ テーブルのエントリに置き換えます。メソッドが呼び出されると、ページ テーブル エントリのデータが与えられます。
次の行からセグメンテーション違反が発生しています。
VBIT_MASK は、挿入するビットをマスクするために以前に定義された変数です。ビットマスクの使い方を誤解しているのか、コードにもっと深刻な問題があるのか どうかはわかりません。誰かにすべてを詳しく説明してもらうのは大変だと思いますが、これを修正するためにどの方向に考えるべきかについて誰か提案があれば、感謝します!
memory-management - TLB ヒットがメモリ内のページ フォールトにつながる可能性はありますか?
Web で公開されている John Kubiatowicz (Prof. Kuby) による OS に関する UC Berkley Video レクチャーで、彼は、TLB ヒットは対応するページがメイン メモリにあることを意味しないと述べました。ページ フォールトは引き続き発生する可能性があります。
技術的には、TLB はページ テーブル エントリのキャッシュであり、すべてのページ テーブル エントリは対応するページをメイン メモリで使用できるわけではないためです。同じことが TLB にも当てはまります。TLB ヒットは、ページ フォールトにつながる可能性があります。
しかし、テキストブックに記載されているアルゴリズムによると、そのようなケースを見つけることができません。TLB ミス カーネルでは、ページ テーブルを参照し、適切なアドレス変換のために TLB キャッシュを更新します。次の TLB ヒットでページ フォールトが発生することはありません。カーネルがページをスワップアウトすると、そのページ テーブル エントリの適切なビットが更新され、対応する TLB が無効になります。そのため、ページがメイン メモリにロードされるまで、次回は TLB がヒットすることはありません。
誰かが kuby 教授の主張の正しさを支持し、TLB ヒット (TLB で見つかった対応する仮想アドレスの変換された物理アドレス) の代わりに、ページ フォールトが発生する可能性があるケースを指摘できますか?
c - TLB(Load Word)例外は、誤ったコンパイラオプションの使用によって引き起こされる可能性がありますか?
VxWorksでTLB(LoadWordまたはInstructionFetch)例外が発生します。さらに分析すると、参照されているメモリアドレスが有効なメモリ位置を指していないことがわかりました。
私の知る限り、この問題はメモリの破損(メモリの上書きの可能性)が原因で発生している可能性があります。ただし、浄化中のWindowsでのコードの分析と同じコードの実行では、メモリエラーは表示されません。
だから、コンパイラオプションがこれを引き起こしている可能性があるかどうか疑問に思っていますか?出来ますか?
また、そのような問題をデバッグする方法についてのポインタはありますか?
memory-management - x86 CPU の TLB バッファの内容をダンプする
TLB (変換ルックアサイド バッファー、これは CPU の特別なキャッシュ) から (仮想ページから物理ページへの) 変換のリストを取得することは可能ですか? 最新の x86 または x86_64 を意味します。JTAGを使用してすべてのTLBエントリをシフトアウトするのではなく、プログラム的な方法でそれを行いたいです。
tlb - Intel プロセッサは TLB の無効化を遅らせることができますか?
これは、インテルのソフトウェア開発者マニュアル (注文番号: 325384-039US 2011 年 5 月) を参照して、セクション 4.10.4.4「無効化の遅延」で、TLB エントリの無効化の潜在的な遅延について説明しています。変更されました。
ソフトウェア開発者は、ページング構造エントリの変更とセクション4.10.4.2で推奨されている無効化命令の実行の間に、プロセッサが使用する可能性があることを理解する必要があります。ページング構造エントリの古い値または新しい値のいずれかに基づく変換. 次の項目は、遅延無効化の潜在的な結果のいくつかを説明しています: ページング構造エントリが変更され、R/W フラグが 0 から変更された場合1 にすると、このエントリによって変換が制御されるリニア アドレスへの書き込みアクセスで、ページ フォールト例外が発生する場合と発生しない場合があります。 "
線形アドレスのページ構造エントリが変更され (r/w フラグが 0 から 1 に反転)、その後、対応する TBL 無効化命令がすぐに呼び出される単純なケースを考えてみましょう。私の質問は、TLB の無効化の遅延の結果として、TLB の無効化を呼び出した後でも、問題の線形アドレスへの書き込みアクセスが失敗しない可能性があるということです (ページ フォールト)。
または、「遅延無効化」は、ページ構造が変更された線形アドレスの「無効化」命令が発行されていない場合にのみ、予測できない結果を引き起こす可能性がありますか?
caching - ページが既に tlb にある場合でも、ページを強制的にフォールトさせるにはどうすればよいですか?
一定期間にわたってページ フォールトを追跡することにより、おもちゃのワーキング セット推定器を作成しようとしています。ページに障害が発生するたびに、それが触れられたことを記録したいと思います。既に存在するページへのアクセスを追跡しようとすると、スキームが壊れます。ページがフォールトをトリガーせずに読み書きされた場合、アクセスを追跡する方法がありません。
そこで、ページアクセスで「軽量」フォルトを発生させられるようにしたい。ある方法について聞いたことがありますが、なぜそれが機能するのか理解できなかったので、頭に残りませんでした。もしかして汚い?
c - TLB ミスの処理
プログラムがアクセスしているページを確認したい。1 つの方法は、handler を使用mprotect
しSIGSEGV
て、アクセスされているページを書き留めることです。ただし、これには、関心のあるすべてのメモリ ページに保護ビットを設定するオーバーヘッドが伴います。
心に浮かぶ 2 番目の方法は、最初にトランスレーション ルックアサイド バッファー (TLB) を無効にしてから、ミスを書き留めることです。失敗するたびに、アドレス指定されたメモリページを書き留めます。したがって、それを書き留めます。問題は、Linux プログラムのユーザー空間で TLB ミスを処理する方法です。
また、TLB ミスやmprotectよりも速く、汚れたメモリ ページを書き留める方法を知っている場合は、お知らせください。また、x86 のみのソリューションが必要です。