zoukankan      html  css  js  c++  java
  • 操作系统--存储管理2

    ------非连续存储分配-------
    概念:将进程存储在非连续的内存空间-->进而需要将进程划分成小的部分
    根据划分粒度的大小可以分为:段式/页式内存分配方式
    1.页式存储管理--前提(进程并不要求逻辑地址必须连续)
    注意:其实进程被分为许多片段,零散的分布在内存中不存在确定的顺序
    * 页式存储管理具体操作
    # 将物理空间等分为固定长度的数据块--称为页帧(frames)-f
    # 将逻辑空间等分为长度固定的数据块--称为页面(pages)--p
    注意:页面和页帧的大小保持一致;通常页面大小是2的幂
    大小在512B--8192B之间
    # 页表:是一个数组:下标是:页号;元素是:页帧。
    # 将逻辑地址翻译成物理地址的过程
    1.将逻辑地址空间2^m 页面长度2^n,总页面个数2^(m-n);后n位对应的
    2^ n为该页面偏移量d
    2.页号:逻辑地址的前(m-n)位,通过页号查找页表,找到该页面
    对应的页帧f。
    3.物理地址= 页帧值*页面大小+页面偏移量 realadd = f*2^(2^n) + d;
    2.页式内存管理中OS所起的作用、负责的是什么
    * OS负责监控所有的空闲页帧
    若进程需要n个逻辑页面,OS分配n个空闲页帧给进程,使得进程
     可以将数据和代码装进内存
    * OS分配页表所需要的物理空间,布置好页表定义映射函数;
    注意:页式分配存在内部碎片
    3.如何实现页表?
    * 页表必须常驻内存(寄存器大小有限)数组实现
    * 页表的基地址寄存器--必须指向页表的首地址
    * 页表的长度寄存器表示页面占的内存空间大小
    4.如何提高页式存储分配的速度?
    * 按照页表在内存中,地址转化需要访问两次内存;解决两次内存访问
    TLBs:translation look-aside buffers
    借助TLBs快表实现对页表部分内容的缓存;减少一次访问内存(空间局部)
    TLB本质是一个硬件设备---是关联存储器(该结构支持并行搜索-速度超快)
    TLB支持对地址(p,d)翻译
    命中:p在TLB里面,直接获取页帧
    不命中:p不再TLB里面,在内存中的页表找到页帧号,并将该页桢copy进tlb
    5.页式分配--内存保护
    在页面的每个页表项中,为每个页设置一个包含位代表--有效、保护
    有效:表示该页面在进程的逻辑地址范围,因此是合法页面可以访问
    无效:表示该页面在进程的逻辑地址范围外,不可以进行访问
    保护位:操作的类型限制;只读等。
    6.共享页面
    共享代码:只读的代码(可重入)只需要存储一份,供若干个进程共享
    对于所有进程来说共享的代码必须位于逻辑地址相同的位置
    进程自有代码数据:进程各自拥有一份,为自有的代码数据分配的页面
    可以分布在逻辑地址空间的任意位置
    7.对于页表过大的处理
    # 采用多级页表
    # 采用反向页表


  • 相关阅读:
    人生苦短之我用Python篇(遍历、函数、类)
    Python基础篇
    OSPF 配置
    RIPng 知识要点
    RIP 知识要点
    Cisco DHCP 配置要点
    python读取mat文件
    theano提示:g++ not detected的解决办法
    Can Microsoft’s exFAT file system bridge the gap between OSes?
    matlab 大块注释和取消注释的快捷键
  • 原文地址:https://www.cnblogs.com/sun1993/p/7743407.html
Copyright © 2011-2022 走看看