第三章 内存管理 九、基本分段存储管理方式

news2025/1/15 20:46:59

目录

一、概括

二、什么是分段

三、段表

四、地址转换

五、分段和分页的对比

六、总结


一、概括

基本分段存储管理方式是一种操作系统的内存管理方式,采用这种方式,将进程所需的内存分成若干个段,每个段都可以单独进行管理和保护。

具体来说,基本分段存储管理方式将程序所需的内存划分为多个段,例如代码段、数据段、栈段等,并为每个段分配一段连续的内存空间。当程序需要访问某个段时,操作系统将该段所在的物理内存地址映射到程序的逻辑地址空间中,使得程序可以直接访问该段。同时,操作系统还可以通过硬件保护机制,防止程序越界访问其他分段。

基本分段存储管理方式相对于其他内存管理方式,具有以下优点:

  1. 管理和保护性能好:将内存划分成若干个段可以方便地对每个段进行管理和保护,提高了系统的性能和稳定性。

  2. 进程间隔离性好:不同进程所占用的内存段是互相独立的,可以有效地隔离不同进程之间的内存空间,提高系统的安全性。

  3. 空间利用率高:由于每个段可以单独分配内存大小,因此可以更加灵活地利用内存空间,提高内存的利用率。

但是,基本分段存储管理方式也存在一些缺点,例如:

  1. 内存碎片化:由于每个段的大小是固定的,所以在内存分配和回收过程中容易产生内存碎片,降低了内存利用效率。

  2. 网络开销大:由于每个段都需要映射到物理内存地址中,因此会产生一定的网络开销,降低了操作系统的运行效率。

因此,在实际应用中,基本分段存储管理方式往往需要和其他内存管理方式结合使用,以达到更好的内存管理效果。

二、什么是分段

1、根据每个程序的自身逻辑来进行划分

2、段内连续,段间不连续

3、由段号(段名)以及段内地址(段内偏移量)所组成

注意:

  • 段号的位数决定了每个进程最多可以分几个段
  • 段内地址位数决定了每个段的最大长度是多少

4、例子

在上述例子中,段号占了16位,因此该系统中每个进程最多有2^{16}=64K个段。

段内地址占了16位,因此每个段的最大长度为2^{16}=64KB

三、段表

1、为了找到各个逻辑段在物理内存中的位置,设置段表了来映射逻辑地址。

2、每个段对应一个段表项,其中记录了该段在内存中的起始位置(又称“基址”)和段的长度。

3、每个段表项是相同的。因此段号可以计算,是隐藏的,不占存储空间。

四、地址转换

1、我们有如下例题

2、首先我们观察汇编语言所表达的含义,意思是将D段的A单元的值取出放到寄存器1中

3、将其转换为二进制,2的二进制是红色部分,1024的二进制是黑色部分

4、我们得到的地址是逻辑地址,现在我们要将其转换为物理地址;在执行进程时,我们要调用PCB中的段表寄存器来寻找段表

5、首先,我们通过之前获得的段号2,与寄存器中的段表长度3相比,看它是否越界

6、若未越界,则通过 [ 段表始址+(段号*段表长度) ] 来确定段表所对应的段表项,此时还要再次检查段内地址是否越界;

在此题中 段内地址为1024=1K,而段长为6K,所以未越界,则继续执行。

7、计算物理地址 = 基址 + 段内地址

物理地址:40K+1K=41K

8、流程

五、分段和分页的对比

1、

2、分段跟容易实现信息的共享与保护(两个段表可以同时指向一个地址)

注意:不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的。可修改的代码是不能共享的(比如,有一个代码段中有很多变量,各进程并发地同时访问可能造成数据不一致)

六、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1108224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一下怎么开发一个陪诊小程序

开发一个陪诊小程序需要综合考虑许多方面,包括但不限于市场需求、用户体验、技术实现和运营策略。以下是一篇以开发陪诊小程序为主题的文章。 一、背景介绍 随着社会的发展和人口老龄化的加剧,越来越多的老年人、病患和孕妇需要就医,而由于各…

攻防世界web篇-unserialize3

得出php代码残篇 将代码补全后再在线php运行工具中进行运行 在浏览器输入后得到下面的界面 这里需要将O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;} 改为 O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}

【Leetcode】212.单词搜索II(Hard)

一、题目 1、题目描述 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中…

【java】Java项目从开发到部署生产完整流程梳理

文章目录 前言一、开发环境二、项目搭建2.1 Maven创建项目2.1.1 创建maven项目2.1.2 引入依赖2.1.3 maven常用命令 三、SpringBoot基础配置四、项目打包4.1 打包jar4.2 打包war4.2.1 修改项目打包为war包4.2.2 排除内嵌的tomcat,引入外部tomcat4.2.3 添加servlet-ap…

Unity可视化Shader工具ASE介绍——8、UI类型的特效Shader编写

阿赵的Unity可视化Shader工具ASE介绍目录 Unity的UGUI图片特效角色闪卡效果 大家好,我是阿赵。   继续介绍Unity可视化Shader编辑插件ASE的使用。这次讲一下UI类特效Shader的写法。 一、例子说明 这次编写一个Shader,给一张UGUI里面的图片增加一个闪卡…

攻防世界web篇-Training-WWW-Robots

直接点击给出的地址,然后会转到另一个网页界面,在这个界面,已经给出了提示,robots.txt 在浏览器中,直接在地址的后面加上robots.txt,会进到下面这个界面 因为对php语言一窍不通,所以这里纯粹就…

Swagger有哪些非常重要的注释?

Swagger是一种用于描述和定义RESTful API的强大工具,它提供了一种规范来编写API文档,生成客户端SDK以及进行自动化测试。其中的注释(Annotations)在Swagger规范中扮演着关键的角色,用于为API端点、操作、模型等添加元数…

在UniApp中使用uni.makePhoneCall方法调起电话拨打功能

目录 1.在manifest.json文件中添加权限 2. 组件中如何定义 3.如何授权 4.相关知识点总结 1.在manifest.json文件中添加权限 {"permissions": {"makePhoneCall": {"desc": "用于拨打电话"}} }2. 组件中如何定义 <template>…

Spring Security的认证和授权(1)

1、Spring Security 简介 Java企业级开发生态丰富&#xff0c;无论你想做哪方面的功能&#xff0c;都有众多的框架和工具可供选择, 以至于SUN公司在早些年不得不制定了很多规范&#xff0c;这些规范在今天依然影响着我们的开发&#xff0c; 安全领域也是如此&#xff0c;然而&…

TOGAF架构开发方法—初步阶段

本章描述了满足新企业体系结构业务指令所需的准备和启动活动,包括组织特定体系结构框架的定义和原则的定义。 一、目标 初步阶段的目标是: 确定组织所需的体系结构功能: 审查进行企业架构的组织背景确定受体系结构功能影响的企业组织的元素并确定其范围确定与架构功能相交的…

php 遍历PHP数组的7种方式

在PHP中&#xff0c;遍历数组有多种方式可以选择。以下是最常用的几种方式&#xff1a; 使用foreach循环 $array array("apple", "banana", "orange"); foreach($array as $value){echo $value . "<br>"; } 输出结果&#xff…

工程监测仪器振弦传感器信号转换器在桥梁安全监测中的重要性

工程监测仪器振弦传感器信号转换器在桥梁安全监测中的重要性 桥梁是人类社会建设过程中最重要的交通基础设施之一&#xff0c;对于保障人民出行、促进经济发展具有极其重要的作用。由于桥梁结构在长期使用过程中受到环境因素和负荷的影响&#xff0c;会逐渐发生变形和损伤&…

QT学习笔记-QT程序执行Linux Shell命令实现动态添加路由

QT学习笔记-QT程序执行Linux Shell命令实现动态添加路由 背景关键代码程序界面 背景 在使用QT进行Linux下应用程序开发时&#xff0c;在特定业务需求下&#xff0c;需要在程序中执行Linux的Shell命令。QT中执行Linux命令可以通过QProcess类和system来实现&#xff0c;如果需要…

使用 Service 把前端连接到后端

使用 Service 把前端连接到后端 如何创建前端&#xff08;Frontend&#xff09;微服务和后端&#xff08;Backend&#xff09;微服务。后端微服务是一个 hello 欢迎程序。 前端通过 nginx 和一个 Kubernetes 服务暴露后端所提供的服务。 使用部署对象&#xff08;Deployment ob…

Android Gradle权威指南读书笔记

第一章 Gradle入门 生成Gradle Wrapper 命令&#xff1a;gradle wrapper --gradle-version 版本号自定义Gradle Wrapper task wrapper(type : Wrapper) { gradleVersion 2.4 archiveBase GRADLE USER HOME archivePath wrapper/dists distributionBase GRADLE USER HOME …

基于PHP的宠物爱好者交流平台管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

windows下8.0版本mysql创建用户并授权

简单记录下&#xff0c;可能有些杂乱 root用户登录mysql 创建用户 create user 要创建的用户名允许连接的ip identified by 用户名对应的密码; flush privileges; //刷新权限举个例子&#xff1a; create user test1localhost identified by test1; flush privileges; …

docker 基本用法-操作镜像

1.下载镜像 docker search centos #默认从 Docker Hub 中搜索镜像 访问 dockerhub&#xff1a;https://registry.hub.docker.com docker pull centos 拉取镜像 如果不能拉取 方法 1.需要配置配置镜像加速器 tee /etc/docker/daemon.json << EOF {"registry-mirro…

卡尔曼滤波器公式

1、卡尔曼滤波公式如下 &#xff08;1&#xff09;预测方程&#xff1a; 预测状态向量转换矩阵*上一时刻更新的状态向量 控制矩阵*当前的系统输入 /----------------------P推导 begin-----------------------------/ 预测系统状态的协方差矩阵 E[(状态向量-预测状态向量&am…

红帽认证笔记2

文章目录 1.配置系统以使用默认存储库1.调试selinux2.创建用户账户3.配置cron4. 创建写作目录5. 配置NTP6.配置autofs配置文件权限容器解法1.修改journal配置文件2.重启服务3.拷贝文件到指定目录4.修改拥有人所属组5.修改umask6.切换elovodo用户7.登录容器仓库8.拉取镜像9.运行…