分析解读内核的内存管理模块

1、入口INIT

struct mm_struct init_mm = {
	.mm_rb		= RB_ROOT,
	.pgd		= swapper_pg_dir,
	.mm_users	= ATOMIC_INIT(2),
	.mm_count	= ATOMIC_INIT(1),
	.write_protect_seq = SEQCNT_ZERO(init_mm.write_protect_seq),
	MMAP_LOCK_INITIALIZER(init_mm)
	.page_table_lock =  __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),
	.arg_lock	=  __SPIN_LOCK_UNLOCKED(init_mm.arg_lock),
	.mmlist		= LIST_HEAD_INIT(init_mm.mmlist),
	.user_ns	= &init_user_ns,
	.cpu_bitmap	= CPU_BITS_NONE,
	INIT_MM_CONTEXT(init_mm)
};

这段代码定义了一个名为 init_mm 的 mm_struct 结构体变量,并初始化了该变量的各个成员变量。下面是各个成员变量的含义:

.mm_rb: 红黑树的根节点,用于存储 vm_area_struct 结构体,表示当前进程的虚拟地址空间。
.pgd: 指向当前进程的页表目录指针。
.mm_users: 表示使用该 mm_struct 的用户数量,该成员变量使用原子变量进行初始化。
.mm_count: 表示该 mm_struct 的引用计数,该成员变量使用原子变量进行初始化。
.write_protect_seq: 用于记录页表项的写保护计数,该成员变量使用 SEQCNT_ZERO 宏进行初始化。
.page_table_lock: 用于保护页表的自旋锁。
.arg_lock: 用于保护进程的参数列表的自旋锁。
.mmlist: 用于将该 mm_struct 结构体添加到进程链表中。
.user_ns: 指向该 mm_struct 所属的用户命名空间。
.cpu_bitmap: 表示该 mm_struct 用于哪些 CPU,使用 CPU_BITS_NONE 宏进行初始化。
INIT_MM_CONTEXT(init_mm): 初始化该 mm_struct 的上下文信息,包括进程的状态、信号处理等信息。
总之,这个结构体定义了一个进程的内存管理信息,包括虚拟地址空间、页表、锁等。

2、虚拟地址的作用

虚拟地址是指操作系统中每个进程所使用的地址空间,它是一种抽象的地址,不是实际的物理地址,而是在程序中使用的地址。操作系统通过将虚拟地址映射到物理地址来实现进程的内存管理。
虚拟地址的作用主要有以下几个方面:
1、提供了一种方便的方式来访问内存。程序员可以使用虚拟地址来引用内存,而不用考虑实际的物理地址。
2、提高了内存的使用效率。虚拟地址空间允许多个进程同时运行,每个进程都有自己的独立虚拟地址空间。这样,操作系统可以将进程所使用的虚拟地址映射到实际的物理地址,从而实现内存共享和动态分配,提高了内存使用效率。

3、提高了系统的安全性。虚拟地址空间使得操作系统可以将进程的内存隔离开来,从而保护进程不受其他进程或系统的干扰。如果一个进程试图访问另一个进程的虚拟地址空间,操作系统会立即中断该进程的运行,从而保证系统的安全性。

因此,虚拟地址在操作系统中扮演了重要的角色,它不仅提高了内存的使用效率,还保证了系统的安全性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值