• 分段管理存储


    什么是分段?

    在这里插入图片描述

    • 进程的地址空间:按照程序的自身的逻辑关系划分成若干个段,每个段都有一个段名,每段从0开始编址
    • 内存分配规则:以段位单位进行分配,每个段需要在内存中占据连续空间,但各段之间可以不相领

    分段之后的逻辑地址

    在这里插入图片描述

    • 分段系统的逻辑地址由段号和段内地址组成
      • 段号的大小决定了每个进程最多可以分为多少段
      • 段内地址的位数决定了每个段的最大长度是多少

    段表

    在这里插入图片描述

    • 程序分为多个段,各段离散的装入内存,为了保证程序能够正常的运行就必须从物理内存中找到各个逻辑段的存放位置。所以创建一个段表
    • 段表的内容
      • 段号 :是可以隐藏的,因为段表项是连续存储的
      • 段的长度:因为不像页,段的长度是不固定的
      • 基址:这个段在物理内存中的起始位置

    地址变换

    在这里插入图片描述

    • 根据逻辑地址得到段号和段内地址
      • 根据段号和段表长度来判断是否越界,如果越界就发出一个中断
      • 根据段表始址和短号去段表中查询
    • 查询段表,根据段号找到对应的物理地址
      • 我们这里需要检查段内地址是否超过了段长,因为我们的段的长度不是统一的,不像页大小是统一的
    • 找到对应的物理地址,根据段内地址找到对应的单元

    分段、分页管理的对比

    在这里插入图片描述

    • 页是信息的物理单位,我们分页的目的是为了实现离散分配,提高内存的利用率,分页仅仅是为了系统管理的需要,完全是系统行为,对我们的用户是不可见的(用户想要连续的存储,但是系统采用了分页来实现离散存储,但是用户看起来还是连续存储的)
    • 段是信息的逻辑单位,分段的主要目的是更好的满足用户需求,一个段通常包含了一组属于一个逻辑模块的信息,分段对用户可见的,用户编程的时候需要显式的给出段名

    分段实现信息共享共享

    在这里插入图片描述

    • 不可被修改的代码称为纯代码或者可重入代码,这种代码是可以共享的,比如我们消费者和生产者进程中的进入区的代码就是可以允许所有生产者,消费者进程共享访问
    • 我们只需要让各个进程的段表项指向同一个段即可实现共享

    为什么分页不方便实现信息共享和保护

    在这里插入图片描述

  • 相关阅读:
    wllllllll
    IIC协议详解
    DP4301芯片简介
    ESP32设备驱动-TFT_eSPI显示中文
    elasticsearch 安装
    XPD977协议系列-支持 XPD-LINK™互联 USB 三端口控制器
    IPv6进阶:IPv6 过渡技术之IPv6 over IPv4 手动隧道
    老司机带你快速实现Python下载与安装
    Python对excel文件批量加密(GUI选择)
    解决Oracle SQL语句性能问题——SQL语句改写(join、集合)
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/127667651