微视linux 进程和线程地址空间的深入理解

本文深入探讨Linux内核中进程的虚拟地址空间划分,解释了0x00000000到0xbfffffff的线性地址可用于用户态和内核态,而0xc0000000到0xffffffff的线性地址仅限内核态访问的原因。通过分析进程创建、内核线程特性和页表映射机制,阐述了Linux内存管理的关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深入理解linux内核p86谈到:
从0x0000 0000到0xbfff ffff的线性地址,无论进程运行在用户态还是内核态都可以寻址;
从0xc000 0000到0xffff ffff的线性地址,只有内核态的进程才能寻址。

如何理解这段话呢?
进程的虚拟地址空间是0~4G-1。通过两段页表映射。进程创建后在用户空间运行,通过系统调用进入内核态,内核态存在访问用户态空间的场景,例如读取或者写用户缓冲(copy_to_user或者copy_from_user),所以第一个规则成立。

另外有一点就是内核线程,内核线程的页表只有第二段,所以内核线程没有必要,也永远也无法访问用户空间。

对于内核线程来说 task->mm为空

linux的swapper_pg_dir
https://blog.youkuaiyun.com/dahailantian1/article/details/78584821

Linux内存管理(4):内存映射机制
https://blog.youkuaiyun.com/zhoudaxia/article/details/7909106

浅尝辄止70-内核那些“非显式定义”宏
https://www.jianshu.com/p/9746745a97d2

Linux线程之线程 线程组 进程 轻量级进程(LWP)
http://www.it165.net/os/html/201305/5123.html

Linux进程管理(2):进程创建的copy_process和进程销毁
https://blog.youkuaiyun.com/zhoudaxia/article/details/7367044

linux进程的创建、退出、调度 
http://blog.sina.com.cn/s/blog_68cc26c50100ua9b.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值