diff --git a/notes/pics/clock.png b/notes/pics/clock.png new file mode 100644 index 00000000..ea355824 Binary files /dev/null and b/notes/pics/clock.png differ diff --git a/notes/pics/lru-stack.png b/notes/pics/lru-stack.png new file mode 100644 index 00000000..b6c7c64c Binary files /dev/null and b/notes/pics/lru-stack.png differ diff --git a/notes/pics/page-translate.png b/notes/pics/page-translate.png new file mode 100644 index 00000000..0422bb50 Binary files /dev/null and b/notes/pics/page-translate.png differ diff --git a/notes/pics/second-chance.png b/notes/pics/second-chance.png new file mode 100644 index 00000000..f3ee602f Binary files /dev/null and b/notes/pics/second-chance.png differ diff --git a/notes/pics/segments.png b/notes/pics/segments.png new file mode 100644 index 00000000..86ceb1f3 Binary files /dev/null and b/notes/pics/segments.png differ diff --git a/notes/pics/vm-mapping.png b/notes/pics/vm-mapping.png new file mode 100644 index 00000000..eb004621 Binary files /dev/null and b/notes/pics/vm-mapping.png differ diff --git a/notes/计算机操作系统 - 内存管理.md b/notes/计算机操作系统 - 内存管理.md index 61eb5068..b00a6113 100644 --- a/notes/计算机操作系统 - 内存管理.md +++ b/notes/计算机操作系统 - 内存管理.md @@ -18,13 +18,13 @@ ## 虚拟内存 -虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 +虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。此外,每个进程都有独立的地址空间,一个进程无法直接访问另一个进程的内存,操作系统还可以按页设置读写和执行权限。 -为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。 +为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,硬件触发缺页中断,由操作系统将缺失的页装入物理内存,再重新执行失败的指令。 从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序成为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0\~64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。 -