今日、私はファイルシステムに関するいくつかのドキュメントを読んでいます。http://tekrants.me/2014/07/14/linux-file-system-write/)。この記事では、「カーネルページ」という用語を数回言及しました。私は今カーネルとユーザーのメモリ使用量について非常に混乱しています。
私が知る限り、カーネルとユーザー、ユーザーのアドレス空間は異なります。仮想対物理マッピングは互いに独立しています。カーネルアドレス空間にマップされたメモリをユーザーアドレス空間にマッピングできませんか?
そして、上記の記事では、基本的にページキャッシュの使用に関するものです。それでは、オペレーティングシステムがディスク上の一部のデータまたはコードをページキャッシュにロードするように要求された場合、データとコードを保持するページはどこから取得する必要がありますか?ユーザーはこのページにアクセスできますか?
答え1
カーネルはメモリを管理するため、カーネルコードはカーネルスペースとユーザースペースの両方にアクセスできます。 「カーネルスペース」について話すときは、通常カーネル専用ページを参照します。
「ユーザー空間」は単一のオブジェクトではありません。各プロセスには独自のアドレス空間があり、これは他のプロセスと部分的に重複する可能性があります。
キャッシュはカーネルによって管理され、ユーザー空間コードではアクセスできません。もちろん、カーネルは必要に応じてカーネル空間からユーザ空間にページを転送することができる。