Linux-0.11内核源码分析系列:内存管理up_wp_page()与do_wp_page()函数分析

/*
 * up_wp_page()函数用于解除物理页的共享状态,同时给发生写时复制的进程提供一页新的
 * 物理页,新物理页是之前共享页的数据相同的拷贝。
 * table_entry是共享物理页的地址的指针,即页表实际地址+表内偏移地址
 */
void un_wp_page(unsigned long * table_entry)
{
	unsigned long old_page,new_page;

	old_page = 0xfffff000 & *table_entry; //取得共享物理页实际地址
	if (old_page >= LOW_MEM && mem_map[MAP_NR(old_page)]==1) {
		*table_entry |= 2;    //如果该页位于主内存区,且不是共享页,设为可写
		invalidate();         //刷新页变换高速缓存
		return;               //直接退出
	}
	if (!(new_page=get_free_page()))  //如果是共享页,申请一页新物理页    
		oom();                    //如果0 = get_free_page(),内存溢出,die
	if (old_page >= LOW_MEM)          //如果共享页在主内存区
		mem_map[MAP_NR(old_page)]--;    //共享次数-1
	*table_entry = new_page | 7;            //将新页挂载到写时复制进程的页表中
	invalidate();                           //刷新页变换高速缓存
	copy_page(old_page,new_page);           //页拷贝:old_page内容到new_page
}	
  1 /******************
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值