深入理解计算机系统

深入理解计算机系统

缓存

数据对象来自其他存储结构。

命中与不命中

就是缓存的数据中没有所需要的

虚拟地址

虚拟地址空间大小为2的N次方,N为位数。
其由cpu发出,经mmu(memory management unit)翻译,然后到主存中取数据。

一个对象有一个物理地址和一个虚拟地址。
分割为虚拟页。

页表在物理地址中,页表中有页表条目pte,其含有效位。

cpu引用换存在主存中的虚拟页时,会查看页表中的有效位,进而判断是否缺页。

文件只读的作用

保护文件不被修改。

堆栈

堆栈空间会有预留部分。

ebp寄存器和esp寄存器划分区域。

返回值一般在eax和edx中。编写程序尽量不返回大于4字节的数据。

栈上的数据在函数返回时会被释放掉。

堆的空闲链表分配法。

虚拟存储器理解

为了使分布在磁盘上不同地址的数据,使用同一块地址空间,即主存。

使用虚拟存储器,进程不会与物理内存接触。

每一页的首地址为页表条目?

页表,PTE,物理存储器位于主存中。
虚拟页在磁盘中。

好处:

  • 共享问题,多个进程可映射同一个地址。
  • PTE可标记SUP,READ,WRITE位。违反此类常见报错“segment fault”

PTE中含有物理页的起始位置,物理页中缓存有虚拟页。因此,虚拟页的位置就是物理页的起始位置+虚拟页面的偏移位置PPO。

物理页一般大于虚拟页,毕竟要缓存虚拟页。

虚拟页偏移量VPO等于物理页偏移量PPO。

物理内存(这里指磁盘上的内存)+交换内存(这里指主存)=虚拟内存
但是虚拟存储器在磁盘上,物理存储器在主存上。

  • 虚拟内存就是磁盘上的存储空间被当作内存使用,磁盘不属于内存,所以是虚拟内存。
  • 实际内存—-物理内存,虚拟内存—-磁盘上的空间。
  • 置换(swap),把内存上的内容和磁盘上的虚拟内存中的内容进行部分交换。
  • 动态链接库—-实现文件共享。
  • 32位系统对应4G进程,64位系统对应8G进程。

虚拟内存的实现

由物理内存和磁盘上的交换空间组成虚拟内存。

只要Linux系统在运行,交换就一直在进行。

虚拟内存再理解

虚拟页缓存在物理页中,若不命中,则发生页牺牲,替换进需要的虚拟页,命中发生时,cpu发出虚拟地址,经mmu地址翻译后为物理地址,这个物理地址是物理页的地址。

每一个进程都会被分配大小一定的虚拟内存,但实际消耗的大小不同。

虚拟页一般很大,4KB~2MB。

页表存储地址翻译的信息,页表是页表条目的数组,虚拟空间中的每个页都有一个页表条目。
从这里可以看出,cpu要找一个虚拟页,就得查看页表中的页表条目。PTE表明了是哪个虚拟页,缓存在哪个物理页及物理页的位置。
PTE中的地址字段有三种情况:

  1. 物理页的起始地址(有效位被设置)
  2. 空白(有效位没被设置,虚拟页未分配)
  3. 虚拟页的起始位置(有效位没被设置)

总的说,程序都会从磁盘输送到主存中。
每个进程有单独的页表。

虚拟地址的组成

虚拟地址偏移量vpo和虚拟页表号vpn。页面大小决定偏移量大小。
物理地址同样包含ppo和ppn。

使用虚拟地址的好处

简化内存管理,提供自然的保护内存的方法。

多级页表

用于压缩页表,一级页表是最内层的页表

进程

磁盘上的程序,当被系统执行时,被加载进内存,然后放入寄存器,最后让cpu执行,就变成了进程
progress。也就是运行中的程序。

  • 进程运行时,会得到4G的虚拟内存,最高的一个G为内核内存,剩下三个G为用户内存。

映射

把一个地址连接到另一个地址。如,内存单元A的地址为X,把它映射到地址Y,这样访问Y时,就可以访问到A了。


深入理解计算机系统
http://example.com/2022/08/25/深入理解计算机系统/
作者
Jie
发布于
2022年8月25日
许可协议