linuxメモリ管理ノート--1
2547 ワード
1)プロセス毎にtask_があります.struct構造体
2)task_structはmm_を含みますstruct構造体、これがプロセスのメモリ管理者(カーネル中のデータ構造)です.
3)mm_structには二つのチェーンが含まれています.rb_vマ リスト.vmaは、実際には、プロセスのvmaチェーンを指していますが、組織の方式は違っています.
4)vmaとは何ですか?https://blog.csdn.net/ywf861029/article/details/6114794
各プロセスには4 Gの仮想アドレス空間があります.この4 G空間をどのように管理しますか?メモリ領域を通じて説明します.
1)新規のアドレス空間が既存のvmaで説明されているメモリ属性線と同じであれば、現在のvmaにマージされ、vmaの長さ+1
2)新規出願のアドレス空間が、既存のvmaと何の関連もない場合、新たにvmaを作成する.
vmaのいくつかの質問:
1)vmaは本当のメモリアドレスですか?もちろん、vmaは現在のプロセス4 G空間の使用状況を説明するためだけに使用されます.
2)Vmaが本当のアドレスでない場合、ユーザーはどのように真実のメモリにアクセスしますか?
大体の流れはこうです.
1)プロセスがある仮想アドレスにアクセスしようとすると、アドレス空間がvma記述のアドレス範囲内に含まれていることを確認し、仮想アドレス空間に対応するvma_を返す.struct;
2)cpuのmmuユニットは、まずcr 3レジスタから現在のプロセスのページ表を取り出し、ページ表から仮想アドレスに対応する真実のページを見つけます.
プロセスのページ表は最初は空いていますが、ページがプロセスのページ表にないとどうなりますか?vm_アーアアウstruct構造の中のvm_ops->nopageが指し示す関数は、落丁異常なアドレスを生成します.
この住所はプロセスのページ表にマークされますか?できるでしょう?そして、プロセスのページ表は古いデータを定期的に削除するべきですか?
2)task_structはmm_を含みますstruct構造体、これがプロセスのメモリ管理者(カーネル中のデータ構造)です.
3)mm_structには二つのチェーンが含まれています.rb_vマ リスト.vmaは、実際には、プロセスのvmaチェーンを指していますが、組織の方式は違っています.
4)vmaとは何ですか?https://blog.csdn.net/ywf861029/article/details/6114794
各プロセスには4 Gの仮想アドレス空間があります.この4 G空間をどのように管理しますか?メモリ領域を通じて説明します.
struct vm_area_struct {
struct mm_struct *vm_mm; /* associated mm_struct */
unsigned long vm_start; /* VMA start, inclusive */
unsigned long vm_end; /* VMA end , exclusive */
struct vm_area_struct *vm_next; /* list of VMA's */
pgprot_t vm_page_prot; /* access permissions */
unsigned long vm_flags; /* flags */
struct rb_node vm_rb; /* VMA's node in the tree */
union { /* links to address_space->i_mmap or i_mmap_nonlinear */
struct {
struct list_head list;
void *parent;
struct vm_area_struct *head;
} vm_set;
struct prio_tree_node prio_tree_node;
} shared;
struct list_head anon_vma_node; /* anon_vma entry */
struct anon_vma *anon_vma; /* anonymous VMA object */
struct vm_operations_struct *vm_ops; /* associated ops */
unsigned long vm_pgoff; /* offset within file */
struct file *vm_file; /* mapped file, if any */
void *vm_private_data; /* private data */
};
ユーザプロセスがアドレス空間の一部を申請すると、2つのシナリオが存在するかもしれません.1)新規のアドレス空間が既存のvmaで説明されているメモリ属性線と同じであれば、現在のvmaにマージされ、vmaの長さ+1
2)新規出願のアドレス空間が、既存のvmaと何の関連もない場合、新たにvmaを作成する.
vmaのいくつかの質問:
1)vmaは本当のメモリアドレスですか?もちろん、vmaは現在のプロセス4 G空間の使用状況を説明するためだけに使用されます.
2)Vmaが本当のアドレスでない場合、ユーザーはどのように真実のメモリにアクセスしますか?
大体の流れはこうです.
1)プロセスがある仮想アドレスにアクセスしようとすると、アドレス空間がvma記述のアドレス範囲内に含まれていることを確認し、仮想アドレス空間に対応するvma_を返す.struct;
2)cpuのmmuユニットは、まずcr 3レジスタから現在のプロセスのページ表を取り出し、ページ表から仮想アドレスに対応する真実のページを見つけます.
プロセスのページ表は最初は空いていますが、ページがプロセスのページ表にないとどうなりますか?vm_アーアアウstruct構造の中のvm_ops->nopageが指し示す関数は、落丁異常なアドレスを生成します.
この住所はプロセスのページ表にマークされますか?できるでしょう?そして、プロセスのページ表は古いデータを定期的に削除するべきですか?