blog

カーネルレベルのスレッドのアドレス空間を探索する

最近、私はスレッドプロセスのこの部分を見て、私は記録するために、ここでこの問題を考えたときに学習しています。まず、2つのユーザーランドプロセスを切り替えるプロセスをおさらいしましょう。各ユーザー状態の...

Aug 7, 2020 · 1 min. read
シェア

最近、スレッドプロセスの作品を見ていて、ここに記録するために学んでいるときにこの質問を思いつきました。

プロセスを管理するオペレーティングシステムの内部にはPCBがあり、LinuxオペレーティングシステムのPCBはtask_structです。mm_structデータ型に格納されているmmフィールド内のtask_structを見て、このことは、アドレス空間のプロセスを管理することです。異なるプロセスは、異なるアドレス空間を区別するために、この情報に依存しています。このフィールドがNULLになった後、カーネル状態に切り替えます! だから、スレッドアドレス空間のカーネル状態とユーザー状態のアドレス空間は、正確に同じではないようです。別の情報を見て、各プロセスは、カーネルの部分で自分の仮想アドレス空間を初期化するために、この情報をコピーして作成されたときに、管理するためにカーネル自体が初期化時に割り当てられるカーネルのページテーブルであることが判明しました。つまり、異なるプロセスの仮想アドレス空間内のカーネル状態のマッピングルールは同じです。PCB には、現在アクティブなプロセスの mm を記録する active_mm フィールドもありますが、カーネルレベルのスレッドの場合、それは前のカーネルスレッドの mm_struct であり、異なるプロセスのカーネルアドレス空間は同じなので、私が対応するユーザ状態の仮想アドレス空間を使用すれば完了です。

Read next

leetcode|株を買い続ける?

今日はケビンのアルゴリズムの旅の17日目です。LeetCode問題122を説明し、引き続き「株の買い時・売り時」シリーズの改良版「株の買い時・売り時II」をお届けします。 この問題の条件はそれほど多くなく、凍結期間もなく、ただ「同時に複数の取引に関与できない」「複数の買いで最大の利益を上げられる」という条件だけです。 この問題を解く方法は他にもありますが...

Aug 7, 2020 · 3 min read