发布时间:2021-09-23 15:26:36来源:转载
很多人对Linux内存管理存在疑问,小编发现这个内存管理的知识点还真的需要专门的去理解一下,今天我们一起来学习学习。
1.不涉及linux内核的汇编知识,仅C语言层面解析
1.回答:汇编主要处理的是寄存器地址(包括内容)的计算,进行一部分的地址转换工作(当然,它是重要的);C语言处理了极大部分的系统内存管理工作。
2.虚拟地址、线性地址、物理地址三者映射关系
虚拟地址:程序员(在缩小范围估计是:应用程序员)直接看到的
线性地址:操作系统控制
物理地址:CPU内存地址(或者外部内存)
总结一点:虚拟地址通过段管理机制首先变换成一种中间地址形式--cpu32位的线性地址,然后使用分页管理机制将此地址映射到物理地址。
例子解析:
一个变量定义在一个进程里面,在程序中使用&操作符获取的地址(估计是偏移地址),将怎么映射呢?(或者它是什么地址,在进程中的位置如何)
1. 回答:因为,程序使用的都是虚拟地址,所以程序员拿到的变量地址是虚拟地址(它是经过编译器处理过的,并由系统指映射线性地址,分配物理内存的)。
2. 同时,一个变量的地址(虚拟地址)是不会改变的(只要程序代码不改变,或者不在编译),但是,改变运行(不同的时间,相隔一段时间在运行的话),物理地址是会改变的。正是因为操作系统的内存管理作用(线性地址映射到物理地址,是一个动态的过程)。
malloc函数从调用、分配到返回的过程是?
1. 回答:函数调用系统函数,系统函数进入了内核态,引起中断(或其他,异常处理等工作),操作系统得知需要额外的增长空间以提供使用,所以使用分页机制来映射到可以使用的物理地址(没有有用数据,或不被映射),从而使得虚拟地址有了真实的物理地址映射管理,可以正常使用了。
2. malloc实际上,并不是用户调用malloc后马上对物理地址与虚拟地址之间进行映射,只有在用户对申请的内存空间进行读写异常操作才会发生映射。总结一句:在实际需要时才加载执行文件中页面的方式。
linux云计算好学吗?
浙江linux云计算培训哪家机构值得推荐?
青岛达内Linux云计算培训班如何?
昆明哪有正规的Linux云计算培训机构
广州海珠附近有达内Linux云计算培训课程吗
学习Linux就业前景怎么样?