本文主要是介绍进程的那些事——了解进程(虚拟地址空间),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
前言
一、程序地址空间(虚拟地址空间)
二、虚拟地址寻找物理内存
1.页表
总结
前言
提示:这里可以添加本文要记录的大概内容:
程序和进程之间的区别:
进程:对用户而言,进程是运行中的程序,但实际是进程是对程序动态运行的描述。当程序被加载到内存中并由操作系统执行就变成了进程。进程有独立的内存空间。它的生命周期到进程结束或操作系统终止。
程序:是一系列静态的,有序执行的指令集合。用于指定计算机来完成特定的任务。通常储存在硬盘中。它的生命周期直到数据被删除或覆盖。
虚拟地址和物理地址的区别:
虚拟地址:CPU在程序运行的时候生成的地址,是操作系统为进程提供的抽象层。每个进程都有自己独立的虚拟地址空间
物理地址:内存模块的实际地址,硬件通过物理地址来之间访问内存数据。物理地址空间是全局的
提示:以下是本篇文章正文内容,下面案例可供参考
一、程序地址空间(虚拟地址空间)
1.程序本身不会有地址空间,程序在不在硬盘中运行,而是在内存中运行的,当程序被执行成为进程时占用地址空间。
2.进程中的变量地址都是虚拟地址。
3.系统为每个进程通过 mm-struct 结构体描述一个虚拟地址空间。
为什么需要给进程提供一个虚拟地址空间,并让进程内部数据都使用虚拟地址?
一个高级语言程序(指令)在链接生成可执行程序后,这个程序中的各个指令及数据在内存中的位置都已经被安排好了(这样安排对编译器比较友好,所以的数据都安排好之后,当编译器在运行程序的时候,只需要在指定位置拿数据,不用再找数据了),若运行进程时所需要的内存被占用,就会造成冲突。所以操作系统为了防止这种情况出现,不让进程之间访问物理内存,在程序运行的时候,给这个正在运行的程序虚拟出一个完整的,线性的虚拟地址空间,并且每个运行的程序都拥有自己独立的虚拟地址,即使两个相同的运行中的程序(进程)使用相同的虚拟地址也不会访问到同一个物理内存。这时这个进程就能随意的使用虚拟地址
进程中有一个全局变量,g_val,这个变量指向虚拟地址空间,这个虚拟地址空间保存指向物理内存的地址,通过页表映射来找到物理内存中指定的位置,将全局变量的数据放到物理内存中。
二、虚拟地址寻找物理内存
1.页表
虚拟地址是通过页表来找到物理内存。
页表:记录了每一个虚拟地址于物理地址之间的映射关系。
作用
使用虚拟地址空间和页表之后,程序中的数据可以实现物理内存中离散式存储,在页表可以记录内存的访问权限。并且提高了内存访问、控制的安全性。提高了内存置换功能这样就算内存不够用依然能够进行大量的数据处理--将物理内存中暂时不用的数据放到磁盘中存储起来,腾出空间给新的进程使用。
离散式存储,当一个16k的内存再中间占据了8k左右分别有4k的大小,如果是离散式存储,那么5k的内存就可以分开来存贮再左右两边,提高了内存利用率。
页表关键元素 |
1.虚拟地址与物理地址的映射关系 |
2.访问权限 |
3.缺页中断标志 |
如何通过虚拟地址找到物理地址
分段式:将地址空间分为一个一个不同属性的段(对于编译器进程程序管理最友好);
分页式:将地址空间分为大量的小的分页,提高内存的使用率。(默认小分页为4096);
段页式:将地址空间进行分段,在每个段内使用分页式进程管理--上面二者的结合;
转换过程
分段式
分段式虚拟地址组成:段号+段内偏移
操作系统针对分段式内存管理构造了一个段表:段号,物理内存段的起始地址
物理内存起始地址+偏移量=数据的存储空间=虚拟地址
分页式
分页式虚拟地址的组成:页号+页内偏移
页号解析
以32位操作系统为例:4G虚拟地址
默认页面大小:4096-4k 4k = 4*1024
页面个数:4*1024*1024*1024/4*1024 = 102*1024 = 2^20
因此对页面进行编号:0~2^20-1
因此再虚拟地址组成中,页号占了高20个bit位,低12bit位就是页内偏移
内存置换:
当进程进行数据处理的时候,物理内存不够用,这时就会将物理内存中的某些数据拷贝到磁盘交换分区中存储起来,腾出内存给需要使用的数据
总结
进程虚拟地址空间是什么:
操作系统通过mm_struct给进程描述的虚拟地址空间
虚拟地址空间有什么用:
实现数据再物理内存的离散式存储
提高内存访问、控制的安全性
通过内存置换再内存不够用的时候可以继续处理数据
如何通过虚拟地址找到物理地址:
操作系统的三种内存管理方式:分段式、分页式、段页式。
物理地址、物理内存、物理地址空间:
物理地址:二进制地址是计算机硬件内存中实际存在的地址,物理地址由内存管理单元或内存控制器转换为实际可访问的硬件地址。
物理内存:通过物理内存条获得的内存空间。是计算机的主要存储区域。
物理内存空间:是物理地址的集合,每个物理地址都对应内存中的一个存储单元。
物理地址是物理内存中每个存储单元的标识,物理内存是存储这条存储单元的介质,物理地址空间是物理地址的集合,物理内存决定物理地址空间的大小。
虚拟地址与虚拟地址空间的关系
虚拟地址空间的包含虚拟地址的实际,在这个空间中进程通过虚拟地址来访问数据和指令。
这篇关于进程的那些事——了解进程(虚拟地址空间)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!