操作系统之基本分段存储管理

news/2024/11/14 22:50:32/

目录

分段存储管理的逻辑

名词解释

逻辑地址到物理地址的转换

快表机构

分段存储管理的优点

分段与分页的对比

地址结构

段的共享与保护

分页、分段的优缺点分析


分段存储管理的逻辑

分段存储管理的核心思想是将程序按照其逻辑关系划分为若干个段,每个段都有一个段名,并且每段从0开始编址。这种划分方式使得内存分配以段为单位进行,每个段在内存中占据连续空间,但各段之间可以不相邻。这种设计允许程序的各个部分独立地进行内存分配和管理。

名词解释

  • 段号的位数:决定了每个进程最多可以分几个段。
  • 段内地址位数:决定了每个段的最大长度是多少。
  • 段表
    • 段表项(长度相同):
      • 段号(隐含):从0开始。
      • 段的内存起始地址(基址):指向该段在内存中的起始位置。
      • 段长:表示该段的长度。

逻辑地址到物理地址的转换

逻辑地址到物理地址的转换过程如下:

  1. 段表寄存器:存放段表在内存中的起始地址F和段表长度M。这些信息存放在进程控制块(PCB)中,当进程被调度时,操作系统内核会将F和M放到段表寄存器中。
  2. 步骤
    • 根据逻辑地址得到段号S和段内地址W。
    • 判断段号是否越界。如果S≥M,则产生越界中断,否则继续执行。
    • 查询段表,找到对应的段表项,段表项的存放地址为F+S*段表项长度。
    • 检查段内地址是否超过段长。如果W≥C,则产生越界中断,否则继续执行。
    • 计算得到物理地址:段基址b+段内地址W。
    • 访问目标内存单元。

快表机构

为了提高地址转换的效率,可以引入快表机构。快表是一种缓存机制,它存储最近访问的段表项,从而减少对主存段表的访问次数。

分段存储管理的优点

  • 便于实现共享:两个作业的段表中相应表项指向被共享段的同一物理副本实现。
  • 可重入代码:不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的。

分段与分页的对比

  • 分页

    • 优点:内存分配简单,易于实现。
    • 缺点:不方便按照逻辑模块实现信息的共享和保护。如果段长过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片。
  • 分段

    • 优点:很方便按照逻辑模块实现信息的共享和保护。
    • 缺点:如果段长过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片(可以使用“紧凑”技术解决,但需要较大的时间代价)。

地址结构

地址结构由段号S和段内偏移量W组成。段表每个进程都有一张映射逻辑地址空间和物理地址空间的段表,每个段表项对应进程的一段。段号(隐含)+段长+本段在主存中的始址。

段的共享与保护

  • 共享:通过两个作业的段表中相应表项中指向被共享的段的同一个物理副本实现。
  • 保护:存取控制保护+地址越界保护。例如,用户进程由主程序、两个字程序、栈和一段数据组成,于是可以把这个用户进程划分为5段,每段从0开始编址,并给每段分配一段连续的地址空间,但段与段之间可以不连续。

分页、分段的优缺点分析

  • 分页

    • 优点:内存分配简单,易于实现。
    • 缺点:不方便按照逻辑模块实现信息的共享和保护。如果段长过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片。
  • 分段

    • 优点:很方便按照逻辑模块实现信息的共享和保护。
    • 缺点:如果段长过大,为其分配很大的连续空间会很不方便。另外,段式管理会产生外部碎片(可以使用“紧凑”技术解决,但需要较大的时间代价)。

http://www.ppmy.cn/news/1547052.html

相关文章

做的图表配色太丑,怎么办?

在进行数据可视化的时候,小伙伴经常为配色烦恼,不会配色,导致做出 可视化图表不够“闪瞎”老板的双眼。 有没有配色模板能直接使用呢? 我把自己经常用的配色网站整理好啦,解决大家可视化配色难题。 一、配色模板网站 …

HTMLCSS: 实现可爱的冰墩墩

效果演示 HTML <div class"wrap"><div class"body"></div><div class"ear"></div><div class"ear rightEar"></div><div class"leftHand"></div><div class"…

【C语言刷力扣】13.罗马数字转整数

题目&#xff1a; 解题思路: 倒序遍历&#xff0c;若当前字符代表的数字比上一字符代表的数字小&#xff0c;即减去当前字符数字。 时间复杂度&#xff1a; 空间复杂度&#xff1a; int romanToInt(char* s) {int ans 0;int low 0;int num[26];num[I - A] 1;num[V - A]…

LabVIEW编程基础教学(二)--数据类型

在LabVIEW中&#xff0c;数据类型是非常重要的基本概念&#xff0c;因为它们决定了如何存储和操作数据。掌握这些基础数据类型对于编写有效的程序非常关键。以下是LabVIEW中的基础数据类型介绍&#xff1a; 1. 数值类型&#xff08;Numeric&#xff09; 整型&#xff08;Inte…

易语言加载dll模拟windows鼠标轨迹移动

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

设计模式-七个基本原则之一-接口隔离原则 + SpringBoot案例

接口隔离原则:(ISP) 面向对象七个基本原则之一 小而专用的接口&#xff1a;每个接口应专注于一组相关的功能。这样&#xff0c;类只需实现它们所需要的方法。避免“胖接口”&#xff1a;设计时应避免将过多功能集中在一个接口中。通过拆分接口&#xff0c;可以使得实现这些接口…

uniapp中webview全屏不显示导航栏解决方案

uniapp官网文档地址&#xff1a;https://uniapp.dcloud.net.cn/api/window/window.html#getappwebview <template><view class"index"><u-navbar :is-back"true" title"标题"" :title-width"650"></u-navb…

Linux 常用操作指令大揭秘(下)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 &#x1f4af;…