16. Segmentation

article/2025/10/9 13:55:12

Segmentation

1. Segmentation: Generalized Base/Bounds

在这里插入图片描述
我们可以看一下(Figure 16.1),尽管每个CPU都有一对硬件寄存器(base register和bounds register),但是还是不可避免的会产生内存浪费(阴影部分表示未被使用)。为了解决这个问题,就引入了segmentation:既然每一个MMU(内存管理单元)有一对base register和bounds register,为什么不设置成每个地址空间逻辑分段都有一对base register和bounds register呢?
看一下下图(Figure 16.2):
在这里插入图片描述
64KB的内存地址中有3个segments(Stack、Code、Heap and 16KB reserved fir the OS)。Figure 16.3展示了Figure 16.2每个分段:
在这里插入图片描述

2. Which Segment Are We Referring To?

引入了segmentation后,硬件使用分段寄存器将虚拟地址转换成实际物理地址。但是硬件怎么知道一个分段的偏移量?或者哪个分段是地址需要的?
一个直接的方法就是把虚拟地址的高几位地址作为分段基准。如下所示:
在这里插入图片描述
上图是对应于上述3个分段,所以选取了14位虚拟地址的首2位作为分段基准。例如,如果该两位是00,那么就表示Code分段,01表示Heap分段
举个例子:虚拟地址为4200
在这里插入图片描述
我们可以看到高2位01表示选取heap分段,后12位为000 0110 1000(0x068或104),所以该虚拟地址的实际地址 = 104 + base register。

3. What About The Stack?

我们上面谈到了Code分段和Heap分段,那么Stack分段呢?我们再来看一下Figure 16.1。

在这里插入图片描述
Stack从高地址向低地址增长,和Code、Heap分段正好相反。为了解决这一问题,我们从高2位地址入手,学过数的二进制表示都知道,最高位0代表正,1代表负。那么我们可以引入这个原理。故有了下图所示:
在这里插入图片描述

4. Support for Sharing

引入了segmentation后,系统设计者们意识到可以进一步实现效率提高,就是在地址空间之间共享内存分段。现今的操作系统,Code sharing是很普遍且仍然在使用。
共享内存分段就不可避免的产生一个问题,如何保证每个程序都是安全的,即一个程序不能访问其他程序内的内容,其他程序也不能访问它内部的内容。故而引入了protection bits
在这里插入图片描述

5. Fine-grained vs Coarse-grained Segmentation

我们上述所有例子都只有一小部分分段,每个分段都有非常大的地址空间,所以我们称其为coarse-grained。但是,在早期的系统中,把地址空间分成了数量众多的小分段,这种叫fine-grained
分段一多,采用更多的位表示的话就很浪费,所以对于分段很多的,就引入了segment table

6. OS Support

在这里插入图片描述
Not Compacted的分段随机分配内存地址导致当一个需要大内存空间的进程到来时没有足够连续的分段给其使用而使OS拒绝这个进程的请求;而Compacted的分段把内存中的进程地址重新排列,使其未使用的内存空间连续且更大,能更好的满足其他进程的到来。

7. Homework (Simulation)

This program allows you to see how address translations are performed in a system with segmentation. See the README for details.

7.1 Question & Answer

在这里插入图片描述

1. First let’s use a tiny address space to translate some addresses. Here’s a simple set of parameters with a few different random seeds; can you translate the addresses?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. Now, let’s see if we understand this tiny address space we’ve constructed (using the parameters from the question above). What is the highest legal virtual address in segment 0? What about the lowest legal virtual address in segment 1? What are the lowest and highest illegal addresses in this entire address space? Finally, how would you run segmentation.py with the -A flag to test if you are right?

在这里插入图片描述
我们拿上面 -s 2 的例子。address space size = 128,故有虚拟地址总共7位。由于最高位是segment bit,为1则是segment 1;为0则是segment 0。则虚拟地址offset bit 有6位。
对于segment 0来说,segment bit = 0, 考虑到limit = 20,则offset bit最大可以为010011。如下图:在这里插入图片描述

the highest legal virtual address in segment 0 = 0x00000013 (decimal : 19)

进行验证:
在这里插入图片描述

同理可得,对于segment 1,segment bit = 1, limit = 20,offset bit最大可以为101100(20的二进制表示为010100,对其取反加1)。
在这里插入图片描述

the lowest legal virtual address in segment 1 = 0x0000006c(decimal : 108)

进行验证:

在这里插入图片描述

对于实际物理地址而言:

the lowest illegal addresses in this entire address space = 20

the highest illegal addresses in this entire address space = 491

3. Let’s say we have a tiny 16-byte address space in a 128-byte physical memory. What base and bounds would you set up so as to get the simulator to generate the following translation results for the specified address stream: valid, valid, violation, …, violation, valid, valid? Assume the following parameters:

在这里插入图片描述
在这里插入图片描述

4. Assume we want to generate a problem where roughly 90% of the randomly-generated virtual addresses are valid (not segmentation violations). How should you configure the simulator to do so? Which parameters are important to getting this outcome?

128 / 259<= address space size / phys mem size < 0.5
能保证随机情况下全部是有效地址…
不用说,肯定是address space size和phys mem size重要的参量。

5. Can you run the simulator such that no virtual addresses are valid? How?

只需要把address space size 设置成2。21 = 2,故虚拟地址中的只有1位而这1位刚好表示segment bit,不存在offset bit,故没有虚拟地址是有效的。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/L3gkfxi9.shtml

相关文章

segmentation_models.pytorch实战:使用segmentation_models.pytorch图像分割框架实现对人物的抠图

文章目录 摘要二分类语义分割的常用做法数据集segmentation_models.pytorch简介与使用一、安装二、创建模型 训练测试总结 摘要 在前面的文章中&#xff0c;我提到过segmentation_models.pytorch语义分割框架&#xff0c;今天这篇文章向大家展示如何使用segmentation_models.p…

mac Segmentation Fault

今天跑SEDR的代码遇到一个很奇怪的错误&#xff0c;我已经定位到了错误的地方在于 这个很奇怪的一个错误&#xff0c;test_z的维度是(3460*28),很明显不是内存的问题&#xff0c;就很奇怪 后面看到这个 https://stackoverflow.com/questions/64841082/segmentation-fault-11-p…

QT SIGSEGV Segmentation fault

QT程序在运行时&#xff0c;出现崩溃。百思不得其姐&#xff0c;所以认真思考&#xff08;上网百度&#xff09;了一番&#xff0c;原来遇到此错误的不止我一人&#xff0c;故记录下来&#xff0c;以防下次再犯类似错误。 错误提示&#xff1a; Ssignal Received - Qt Creato…

Image Segmentation

先介绍几个概念,也是图像处理当中的最常见任务. 1. 语义分割(semantic segmentation) 2. 目标检测(object detection) 3. 目标识别(object recognition) 4. 实例分割(instance segmentation) 一、语义分割 首先需要了解一下什么是语义分割(semantic segmentation). 语义…

unable to execute command: Segmentation

编译时出错&#xff1a; clang: error:unable to execute command: Segmentation fault: 11 clang: error:linker command failed due to signal (use -v to see invocation) Architectures的debug改为NO就可以 以上方法不行&#xff1a; enable bitcode改成No。原因是第三方库…

Segmentation Fault错误原因总结

一、 什么是“Segmentation fault in Linux” 所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间&#xff0c;通常这个值是由gdtr来保存的&#xff0c;他是一个48位的寄存器&#xff0c;其中的32位是保存由它指向的gdt表&#xff0c;后13位保存相应于gdt的下标&am…

Segmentation Fault原因总结

转载链接&#xff1a;https://www.cnblogs.com/silence-hust/p/4487026.html 最近在项目上遇到了Segmentation Fault的错误&#xff0c;一直调试不出来是哪里出了问题&#xff0c;对于刚接触嵌入式的&#xff0c;也不知道该如何去调试一个项目&#xff0c;定位内存问题&#x…

segmentation fault 段错误解决方法

一、出现Segmentation Fault 1. 文件打开失败却使用了fclose()&#xff1b;fclose找不到指针fp。 解决方法&#xff1a; 当打开文件成功&#xff0c;即成功获得文件句柄后&#xff0c;再进行关闭句柄操作。 2. 文件正在写操作&#xff0c;异常断电、程序异常中断&#xff0c;导…

Segmentation-传统分割算法

“图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。”---百度百科 本文将继续介绍常见的图像处理算法之图像分割算法,图像分割是从图像中找出目标所在的区域&#xff0c;把图像分成若干个特定的、…

图像分割(Segmentation)

文章目录 图像分割FCNU-NetSegNetDeepLab图像分割常用数据集 图像分割 图像分割是预测图像中每一个像素所属的类别或者物体。基于深度学习的图像分割算法主要分为两类&#xff1a; 语义分割&#xff08;Semantic Segmentation&#xff09; 为图像中的每个像素分配一个类别。 …

网站中木马病毒了怎么办

不少站长们辛辛苦苦的创建了一个网站&#xff0c;却由于安全维护措施做的不到位&#xff0c;最终导致网站中木马病毒&#xff0c;网站被跳转或无法打开等棘手情况&#xff0c;或点击进去是杂七杂八的灰色网站。若处理不及时&#xff0c;容易受到搜索引擎的惩罚&#xff0c;如官…

查找网站代码漏洞对网站木马后门查杀的清除

收到阿里云的短信提醒说是网站存在后门&#xff0c;webshell恶意通信行为&#xff0c;紧急的安全情况&#xff0c;我第一时间登录阿里云查看详情&#xff0c;点开云盾动态感知&#xff0c;查看了网站木马的详细路径以及webshell的特征&#xff0c;网站从来没有出现过这种情况&a…

查杀webshell木马

1.上传webshell 往DVWA上传一个webshell 一句话木马 2.D盾功能介绍 功能特性简介 一句话免疫,主动后门拦截,SESSION保护,防WEB嗅探,防CC,防篡改,注入防御,防XSS,防提权,上传防御,未知0day防御,异 形脚本防御等等。 防止黑客入侵和提权,让服务器更安全。 『目录限制』 有效防止…

病毒木马查杀实战第018篇:病毒特征码查杀之基本原理

前言 在本系列的导论中&#xff0c;我曾经在“病毒查杀方法”中简单讲解过特征码查杀这种方式。而我也在对于实际病毒的专杀工具编写中&#xff0c;使用过CRC32算法来对目标程序进行指纹匹配&#xff0c;从而进行病毒判定。一般来说&#xff0c;类似于MD5以及CRC32这样的算法&a…

WebShell(脚本木马)查杀思路

0x1、介绍 在web服务器上留下一个WEBSHELL后门是黑客最常见的留后门方法&#xff0c;传统意义上的系统后面&#xff0c;在各种云查杀的追缴下&#xff0c;基本上已经毫无出路(某些特殊工具除外)&#xff0c;所以WEBSHELL最为一个最经济、方便、稳定的后门&#xff0c;已经是黑…

木马程序(病毒)

木马的由来 "特洛伊木马"&#xff08;trojan horse&#xff09;简称"木马"&#xff0c;据说这个名称来源于希腊神话《木马屠城记》。古希腊有大军围攻特洛伊城&#xff0c;久久无法攻下。于是有人献计制造一只高二丈的大木马&#xff0c;假装作战马神&…

如何做好计算机病毒的查杀,电脑中的木马病毒如何彻底查杀?

在用电脑的过程中&#xff0c;经常会遇到一些木马病毒&#xff0c;中病毒后&#xff0c;很多人都会表示用电脑杀毒软件杀毒就可以了&#xff0c;还有一些人在使用杀毒软件后发现&#xff0c;病毒在重启电脑之后又再次出现了&#xff0c;那么怎么样才能彻底查杀电脑中的木马病毒…

一次PHP网站木马查杀记录

公司网站是PHP开发的&#xff0c;之前因为工作重点原因没注意&#xff0c;最近因域名备案变更问题重新关注了一下&#xff0c;发现竟然被注入木马&#xff0c;会跳转到赌博之类的违法站点&#xff0c;作为技术人员当然不能放过。 因为网站还可以访问&#xff0c;虽然每天来访I…

Linux下手动查杀木马

一、 模拟木马程序病原体并让木马程序自动运行 黑客让脚本自动执行的三种方法&#xff1a; 计划任务&#xff0c;crontab&#xff1b;开机启动&#xff1b;系统命令被替换&#xff0c;使用命令后被触发。 1、 生成木马程序病原体 [rootxuegod120 ~]# vim /usr/bin/fregonnzkq #…