内存管理
最初程序在纸带上,边读纸带边运行程序。这样极不灵活,无法执行调度策略。
从而引入内存,出现将程序读到内存中的情况。
存储架构:缓存-主存-磁盘-磁带
内存管理提供一个抽象:
- 让每个进程都独占一块大虚拟内存空间,相互之间不能干扰对方的空间。
- 让进程访问内存时,只需关注要访问独占的虚拟空间中的哪个地址,不用关心具体保存在共享的物理内存的哪个位置。因为物理内存大家在共用,你能用的地址总是在变化。
虚拟内存
将所有要运行的程序都加载进物理内存,从成本上说不现实。
虚拟内存将物理内存扩展到磁盘上,使得每个程序都有4GB的虚拟空间,由内存管理单元将各个进程的虚拟内存地址转换为物理内存或磁盘上的位置。
作为魔术师,给用户提供更大、更快的存储空间。
操作系统在内存中的位置
操作系统和用户程序通常分布在不同的内存地址范围。
通常操作系统在低地址处,用户程序在高地址处。
内存可以由RAM和ROM组成。还有一部分地址映射给IO设备的寄存器。
通常将从0开始的一段低地址映射到ROM,然后是IO映射空间,之后的高地址映射到RAM。
多道编程内存管理
采用动态地址翻译:地址在要使用时才进行翻译。(静态地址翻译指:程序在加载进内存前将地址都翻译好)
地址翻译:虚拟地址->物理地址。
物理地址=加载基址+RVA(相对虚拟地址)
空闲空间管理:位图、链表。
———————————————————————————————————————————
欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。