虚拟内存
2023-04-26 15:52:57   9  举报             
     
         
 AI智能生成
  虚拟内存
    作者其他创作
 大纲/内容
  场景    
     直接管理物理地址可能发生冲突不安全
  
     对程序直接分配物理空间可能导致空间不够  
     物理地址可能不连续无顺序,不一定能够很明确的找到物理地址的位置  
     虚拟内存    
     内存管理技术,为指令程序数据等分配虚拟地址  
     机制    
     分段机制    
     将内存一整段一整段的分配给程序  
     不会产生内部内存碎片    
     连续分配,程序内部没有空隙  
     可能产生外部内存碎片    
     程序内存与内存之间可能不连续,存在外部空隙  
     内存交换效率低  
     分页机制    
     将虚拟内存和物理内存进行分页(Linux为4kb),使用页与页对应管理  
     不会产生外部碎片    
     将内存分页分配,不会有外部内存碎片  
     可能产生内部碎片    
     如果某个数据剩余大小不到一页,会产生内部碎片  
     寻址    
     把虚拟内存地址,切分成页号和偏移量  
     根据页号,从页表里面,查询对应的物理页号  
     直接拿物理页号,加上前面的偏移量,就得到了物理内存地址  
     多级页表    
     场景:32位虚拟地址空间为4G,64位为128T,单个页表很明显存不下  
     根据局部性原理,一个页被置换进内存,接下来被置换进内存的很可能是其周围分页  
     一级页表可以动态创建,如果二级页表没被使用,可以不用创建,从而节省空间  
     64位下是四级页表  
     优势    
     可以在使用的时候再去申请内存分配  
     虚拟内存可以重复分配,根据进程的不同分配内存不同  
     工作过程(VIPT结构)    
     创建    
     进程被初次创建  
     系统分配虚拟内存,此时先不进行物理内存分配  
     进程使用指令或变量  
     虚拟地址被丢给MMU问TLB(寄存器中)    
     TLB命中直接取出对应页表项,然后找到物理地址取出内容给CPU  
     TLB未命中则MMU根据复杂计算算出物理地址页表项去TLE中查找    
     命中返回给TLB  
     未命中则发生缺页中断,系统进入内核态去外存调取内存空间    
     内存空间足够分配调入内存,将地址返回更新TLE和TLB,并返回实际物理地址  
     内存不足触发换页机制,将最久未使用页淘汰,然后调入内存  
     物理地址扔给cache高速缓存    
     L1缓存命中,检查数据可用性,获取数据  
     L1未命中,查找L2cache  
     L2未命中,查找L3  
     L3未命中,访问主存,同时将数据存入cache  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 