1. 前言
由于此Linux系列文章偏向于做
顺序学习手册,所以有些内容在
一篇文章中可能不连贯,敬请谅解!
请先阅读下面的文章的最后一段
了解打印出来的地址并不是物理地址
这一事实逻辑:
什么是地址空间?
地址空间是如何设计的?
为什么要有地址空间?
2. 什么是程序地址空间?
在理解地址空间前,我们知道一个事实:
平时看见的地址并不是真实的地址
又叫虚拟地址,真实的地址空间
被称为物理地址(物理内存)
- 富豪对应操作系统
- 10亿美金对应物理地址
- 私生子对应每一个进程
- 富豪画的饼对应地址空间
所以可以得出结论,地址空间可以
理解为操作系统给进程画的饼
它并不是真实的物理地址!
3. 程序地址空间是如何设计的?
既然富豪给每一个私生子都画了饼
所以对应每一个进程都又一个自己的
程序地址空间,这是第一个结论
然而,OS要管理这些空间,一定
要先组织,再管理!所以地址空间
是一个struct结构,**这是第二个结论**
程序地址空间无非就是各个
区域的结合,然而各个区域的划分
无非就是两个整数begin和end
一个在区域的开头,一个在区域的结尾
这是第三个结论!
struct addr_room
{
int code_start;//代码区起始
int code_end;//代码区结束
int init_start;//初始化区起始
int init_end;//初始化区结束
int heap_start;//堆区起始
int heap_end;//堆区结束
......
其他属性
};
所谓的区域范围变化
实际上就是对start和end做加减!
4. 虚拟地址和物理地址的关联
当我们理解了什么是虚拟地址后,
现在再谈虚拟地址和物理地址的关系:
本质是一种映射关系!
5. 页表的结构以及作用
修改常量字符串时编译器会报错,
是在哪个阶段报的错呢?
const char* p = "abcd";
*p = "123";
其实页表不仅仅只有映射关系
表这一个结构,
所以页表可以起到安全评估
保护物理内存的作用!
这是页表的第一个作用
将无序变有序
6. 为什么要存在地址空间?
通过以下三个方面来说明
地址空间的作用:
有效的保护了物理内存
使OS的耦合度更低
保证进程的独立性
7. 总结以及拓展
关于Linux进程基础的内容就讲到
这里,下一章是全新的章节–进程控制
讲了这么久的理论了,怎么控制一个进程?
也就是创建,回收一个进程?有了前面
的基础铺垫后,后面的学习内容也就容易了