医院加强网站建设,深圳西乡做网站,公司查询网站查询系统,赶集招聘网目录 计算机的基本组成CPU内存虚拟内存内存分段内存分页 CPU与内存的交互过程高速缓存cache 所有图片均来自#xff1a;小林coding 计算机的基本组成
计算机由软件和硬件组成 硬件由CPU(中央处理器#xff09;存储器(内存外存#xff09;外部设备组成。 软件由应用软件和系… 目录 计算机的基本组成CPU内存虚拟内存内存分段内存分页 CPU与内存的交互过程高速缓存cache 所有图片均来自小林coding 计算机的基本组成
计算机由软件和硬件组成 硬件由CPU(中央处理器存储器(内存外存外部设备组成。 软件由应用软件和系统软件组成操作系统编译器.
CPU
CPU也叫中央处理器 分为运算器 控制器 寄存器组三部分 其中运算器和控制器又分别有好多小的单元组成 运算器主要处理所有的算术运算和逻辑运算 算数逻辑单元ALU 累加寄存器AC 数据缓冲寄存器DR 状态条件寄存器PSW
控制器控制整个CPU的工作决定计算机运行过程的自动化 程序计数器PC 指令寄存器IR 指令编码器ID 地址寄存器AR
寄存器组 寄存器组可以分为两类一类是专用寄存器另外一类是通用寄存器。运算器和控制器里面的寄存器都是专用寄存器组而通用寄存器的用途广泛可以由程序员规定其用途
内存
内存是用来直接跟CPU进行交互的
虚拟内存
为什么要引入虚拟内存 如果所有的程序都是直接操作物理内存那么当多个程序同时运行时就可能会对同一个物理地址进行操作这样就可能会出现错误所以为了避免这种情况引入了虚拟内存的概念程序直接访问的是虚拟内存虚拟内存经过CPU中的内存管理单元(MMU) 可以转化成对应且不同的物理地址这样就规避掉了多个程序运行访问同一个物理地址的情况.
CPU将虚拟地址交给MMU经由MMU转化成物理地址. 虚拟地址和物理地址主要有两种转化关系分别是内存分段和内存分页.
内存分段 内存分段的情况下虚拟内存分成两部分分别是段选择因子和段内偏移量 段选择因子里边最重要的是段号段号是段表的索引如下图 段表由基地址段界限特权等级组成
段的基地址段内偏移量 物理地址
内存分段的缺点 1.会产生大量的外部内存碎片虽然空闲的内存很多但都是不连续的这样就会导致即使空闲内存大小 所需要占用的内存大小但是因为内存不连续就无法使用.
2.内存交换效率低当交换一大段连续的内存时将内存数据写入外存会非常占用时间.
内存分页
内存分页主要解决了内存分段情况下产生的外部内存碎片以及内存交换效率低两个问题.
内存分页情况下虚拟内存和物理内存之前是通过页表来映射的,而页表也是存放在内存管理单元MMU里的. 如果想要访问的虚拟内存在页表中查不到那么便会返回一个缺页异常进入系统内核空间分配物理内存、更新进程页表最后再返回用户空间恢复进程的运行。
如何解决产生的外部内存碎片 页和页之间是紧密排列的只会产生内部内存碎片即使程序大小不足一页也至少需要分配一页内存而不会产生外部内存碎片
如何解决内存交换速度慢 当内存不够时或者说是缺页中断时所需要的页面不在物理内存中会触发内存交换把不常用的内存页面释放掉换出写入磁盘然后把需要的内存页面从磁盘写入内存换入所以内存分页下的内存交换只需要交换一个或少数几个页就行了内存交换的效率就比较高.
这里涉及到5中内存页面置换算法分别是
1.最佳页面置换算法 2.先进先出页面置换算法 3.最近最久未使用页面置换算法 4.时钟页面置换算法 5.最不常用页面置换算法
这里就不多讲解了但是这部分也是比较重点的内容 虚拟内存是怎么通过页表跟物理内存映射的 虚拟内存分为页号和页内偏移量两部分
页号是页表的索引通过查找页表可以获得物理页号物理页号页内偏移量就可以得到物理地址了
多级页表
为什么要出现多级页表摘自小林
在 32 位的环境下虚拟地址空间共有 4GB假设一个页的大小是 4KB2^12那么就需要大约 100 万 2^20 个页每个「页表项」需要 4 个字节大小来存储那么整个 4GB 空间的映射就需要有 4MB 的内存来存储页表。
这 4MB 大小的页表看起来也不是很大。但是要知道每个进程都是有自己的虚拟地址空间的也就说都有自己的页表。
那么100 个进程的话就需要 400MB 的内存来存储页表这是非常大的内存了更别说 64 位的环境了。
所以说引入了多级页表如图 如图一级页表有1024个页表项每一个页表项对应着一个二级页表每一个二级页表又有1024个页表项一级页表和二级做乘法102410242的10次方2的10次方所以刚好可以覆盖掉4G的虚拟内存
疑问点 如果一个页表项占用4个字节那么一级页表此时占1024*44K 二级页表占用 1024 * 1024 * 44M 4K 4M 4M 所以说如果所有的页表项都被使用的话二级页表比一级页表还要耗内存 但是计算机存在局部性原理如果一级页表没有被用到的话就不会创建对应的二级页表这也是二级页表省内存的原因.
TLB 把最常访问的几个页表项存放入CPU中的Cache高速缓存里这个Cache就叫TLB 下文会详细说一下CPU中的Cache.
CPU与内存的交互过程 CPU无论是跟内存交换数据还是跟外设交换数据都是依赖总线 分别是控制总线数据总线地址总线
地址总线用于指定 CPU 将要操作的内存地址 数据总线用于读写内存的数据 控制总线用于发送和接收信号比如中断、设备复位等信号CPU 收到信号后自然进行响应这时也需要控制总线
执行程序的过程就是执行一条一条指令的过程 首先CPU会访问自己的【程序计数器PC】,程序计数器里存放的是指令的地址然后它会通过【控制器】操作【地址总线】来访问内存地址通知内存要访问的地址并等待内存把数据准备好然后接受内存的数据然后将指令数据存放入【指令寄存器(IR)里】 程序计数器PC自增自增的程度取决于CPU的位宽如果是32位CPU,代表一次能处理4个字节的数据所以PC自增4 检查【指令寄存器IR】中指令的类型如果是运算类型则交给算术逻辑单元ALU如果是存储类型则交给控制单元
高速缓存cache
Cache是位于CPU和内存之间的临时存储器它的容量比内存小但数据交换速率却快很多。
CPU Cache 用的是一种叫 SRAMStatic Random-Access Memory静态随机存储器 的芯片。
内存用的芯片和 CPU Cache 有所不同它使用的是一种叫作 DRAM Dynamic Random Access Memory动态随机存取存储器 的芯片。
在 SRAM 里面一个 bit 的数据通常需要 6 个晶体管所以 SRAM 的存储密度不高同样的物理空间下能存储的数据是有限的不过也因为 SRAM 的电路简单所以访问速度非常快。DRAM 的数据访问电路和刷新电路都比 SRAM 更复杂所以访问的速度会更慢内存速度大概在 200~300 个 时钟周期之间。 当CPU需要读取数据时它会首先从Cache中查找。如果数据已经在Cache中即高速缓存命中CPU可以直接从Cache中读取数据并处理。这大大减少了从内存中读取数据的延迟提高了CPU的执行效率。
如果数据不在Cache中即高速缓存未命中CPU会从内存中读取数据并同时把这个数据所在的数据块调入Cache中。这样如果CPU后续还要读取这个数据块中的其他数据就可以直接从Cache中获取而不需要再次访问内存。这种方式有效地减少了CPU访问内存的次数提高了程序的执行效率。
此外除了读取本次要访问的数据CPU还会预取本次数据的周边数据到Cache中。这是基于程序运行的局部性和时间局部性原理即当一条指令正在被执行时在很短的时间内这条指令周围的指令也会有很大的概率被执行。因此预取周边数据到Cache中可以使得以后对整块数据的读取都从Cache中进行不必再调用内存。
总之Cache的出现是为了解决CPU处理速率和主存访问速率差异过大的问题。通过把数据暂时存放在Cache中CPU可以更快地获取需要的数据减少了访问内存的延迟提高了程序的执行效率。