Linux下进程虚拟地址空间分布情况

本文介绍了Linux下进程虚拟地址空间的分布,包括用户空间和内核空间的划分,阐述了为何要区分两者,并详细讲解了页表和写时拷贝的概念。通过对进程虚拟地址空间的理解,帮助读者掌握操作系统如何管理内存。

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

目录

进程虚拟地址空间简单理解

Linux下的进程虚拟地址空间

总体理解

为什么要区分用户空间和内核空间

内核空间

用户空间

进程虚拟地址空间的其他知识

 页表

写时拷贝


进程虚拟地址空间简单理解

我们有时候可能会听到说操作系统为每个进程都分配4G的空间,那不知道你有没有产生这个疑问,我的运行内存(不是磁盘)可能就8G,运行一个进程,好家伙,4个G没了,运行两个进程就分配完了,好家伙,那咱办?

对于这个问题,你可以这样理解:不知道你有没有到银行存过钱,你的钱存到银行之后,你觉得银行是把你的钱用于干别的事情呢,还是就放在那里不动,等着你来取?答案肯定是用于干别的了,对吧,但是,银行会告诉你,你存储了100万,所以你在银行就有100万,如果你要取,反正我钱多,我随便哪里给你找100万,如果你不取,那我也不给你真的准备100万等着你取,而是不管你,你要取我在给你找就行了,所以,有时候你的存款,更像是一句承诺

这和操作系统给进程的承诺是一样的,一个进程被创建出来,操作系统告诉它,你有4G的空间,就像你在银行有100万存款,进程如果要一些空间进行存放数据,操作系统就现场给它找一些空间来,就和你要取1万块钱,银行也是现场给你找的一样

Linux下的进程虚拟地址空间

总体理解

 

 我们可以先简单的这样理解,即进程虚拟地址空间分为两部分,从低地址到高地址,总共有4G,其中,前三个G是用户空间,最后1G是内核空间

为什么要区分用户空间和内核空间

在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。
所以,CPU 将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通应用程序只能使用那些不会造成灾难的指令

所以,简单说来,就是操作系统不放心你的有些操作,直接设置权限不让你用了,

内核空间

内核空间主要负责资源管理以及处理紧急情况(中断与异常)这些事情

紧急情况很好理解,就是程序出现错误了,那进程就会进入核心态,然后自动访问内核空间中关于这种中断或异常的处理方法(核心态就是指程序能自动访问内核空间了,也不需要人来管)

资源管理就是内核空间里面有好多关于资源管理的函数之类的,我要想调用这些函数,就得进入内核空间,所以也需要进行核心态访问内核空间

用户空间

进程虚拟地址空间的其他知识

 页表

当你要申请一块空间时,操作系统会有一张表,这张表把分给进程的4G的空间全部包含进去,比如把4G分成4块,每块1G,我们可以简单的理解每块都有一个编号,如果这一块被用到了,那就在内存中开辟同样大小的字节,然后一一对应

写时拷贝

 为什么创建子进程以后,你打印某个变量的地址,竟然发现和父进程是一样的,就是因为子进程连页表也一起拷贝过去了,但是如果你修改变量,父子进程的变量地址虽然一样,但是值就不一样了,因为子进程在写的时候拷贝了一份新的,和父进程不用同一份了,这叫做写时拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值