Chapter 13 Abstraction: Address Spaces
第 13 章 抽象:地址空间
一些烦人的用户提出要“易于使用”“高性能”“可靠性”等,这导致了所有这些头痛问题,下次见到这些用户的时候,要好好感谢他们...
1. 早期系统
早期的机器没有提供多少抽象给用户...
1.1. 在内存中
实际上 0 - 64kb 是操作系统的代码
物理地址从 64kb 开始,并使用剩余的内存
1.2. 几乎没有任何抽象
操作系统开发人员的生活确实很容易,不是吗?
2. 多道程序和时分共享
机器十分昂贵促成了人们共享机器...即在同一台机器执行多个程序,这时候形成了多个进程。
OS管理这一切
2.1. multiprogramming 系统时代
CPU utilization and efficiency are important
interactivity also
时分共享的方法...
2.2. 进程共享内存
前面说到的 64kb - max kb
会被分配一些给指定的 Process...
操作系统会按照队列来执行这些 processes...
由于有多个程序同时在一个队列中,所以 protection 也显得尤为重要
3. 地址空间
然而我们必须将这些凡人的用户的需求放在心上...
所以要提供一个
3.1. easy to use 的 物理内存抽象
also call address space...是运行的程序看到的系统中的内存。
一个进程的地址空间包含运行的程序的所有内存状态
code 程序代码 指令
stack 栈 保存函数调用信息
heap 堆 管理动态内存分配
假设只有这三个部分,地址空间的分配可以假设如下
0kb - 1kb
code
是静态的,放在顶部,运行时不再需要新的空间
1kb - 2kb
heap↓
会增长会收缩,malloc的时候...
2kb - 15kb
未分配
15kb - 16kb
栈↑
会增长会收缩
3.2. 如何虚拟化内存
virtualizing memory
区分虚拟地址和物理地址
虚拟地址的0kb一般再物理地址的320kb...
通过虚拟地址,可以实现隔离操作...这是内存虚拟化的关键
4. 目标
VM 的一个主要目标是 transparency 透明..意味着这个系统就好像不存在一样,操作系统提供的假象不应该被应用程序看破...
第二个目标是efficiency,尽可能高效的时间和空间上的效率
第三个目标是protection,保护进程不会受到其他进程的影响,避免其他出错或恶意进程
4.1. 虚拟内存物理化
每个程序都以为自己从物理内存的0kb开始操作,其实是在虚拟内存的0kb,而不关系物理内存的位置...
几个目标:
4.2. 你所看到的所有地址都不是真的!
还记得打印出指针的C程序吗!(一些大数字,通常是十六进制)
这也是虚拟地址!
实际上,作为一个用户级别的程序员
你可以看到的任何地址都是虚拟地址......
只有操作系统知道这些指令和数据所在的物理内存的位置
噢对了,还有硬件...
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("location of code: %p\n", (void *)main);
printf("location of heap: %p\n", (void *)malloc(1));
int x = 3;
printf("location of stack: %p\n", (void *)&x);
return x;
}
root@LAPTOP-GT06V0GS:~/cs/osTEP/chapter13# gcc address.c -o address
root@LAPTOP-GT06V0GS:~/cs/osTEP/chapter13# ./address
location of code: 0x55bf298c3189
location of heap: 0x55bf299846b0
location of stack: 0x7fffe9472ad4
这里看到代码在地址空间的开头,然后是堆,栈在巨大的虚拟空间的另一头...
4.3. The addresses you see in your program output are not0x00
0x00
because modern operating systems use a technique called Address Space Layout Randomization (ASLR) to enhance security. ASLR randomizes the memory addresses used by a process, making it more difficult for attackers to predict the location of specific code or data in memory.
random 机制,防止外部猜测地址,进行攻击...
Last updated