操作系统——分页和分段

连续分配方式会产生很多“碎片”,而紧凑方式会将碎片合成可以使用的较大空间,但是代价比较大,所以产生了散列式存储,主要有一下三种方式

目录

分页

分段

段页式

分页和分段的区别


分页

分页式存储管理,将用户程序的地址空间分成若干个固定大小的区域,称为页或者页面,这样可以将用户程序的页放入任一物理块中,而不用担心碎片的产生。

分段

分段式存储是为了满足用户要求而形成的一种存储管理方式,它是把用户程序分成若干个大小不同的段,这些段可以不相邻,所以也实现了离散分配。

段页式

综合分页和分段两种方式,目前应用最广的一种存储方式。

### 分页分段的概念及实现方式 #### 一、分段机制 分段是一种将逻辑地址空间划分为若干个段的技术。每个段代表一个独立的逻辑单元,例如代码段、数据段或堆栈段。这种划分使得程序员可以更直观地组织程序结构。 - **重定位** 在分段机制中,操作系统会为每个段分配一个基址寄存器(Base Register),用于记录该段在物理内存中的起始位置。当访问某个段内的地址时,硬件会自动加上对应的基址偏移量完成实际地址计算[^1]。 - **内存分段及其寻址** 每个段具有自己的长度限制,由限长寄存器(Limit Register)定义。如果尝试访问超出范围的位置,则会产生越界错误中断。这种方式提供了基本形式的数据隔离保护功能[^3]。 #### 二、分页机制 相比之下,分页则是把整个虚存分成固定大小的小块称为页面(Page),同样也按相同尺寸切分实存成为帧(Frame)。两者之间建立映射关系从而形成最终可操作的真实物理地址序列。 - **内存碎片问题解决方法之一——分页技术的应用价值体现** - 减少了外部碎片现象的发生几率; - 提高了磁盘交换文件读写效率; 具体而言,在现代处理器体系结构里比如X86_64架构下已经不再单纯依赖传统的GDT/LDT表格来进行权限控制而是更多倾向于采用基于页表的方案来达成同样的目的即只允许特定进程能够触及属于它的那些区域之外其他任何地方都无法非法侵入[^2]。 另外值得注意的是虽然理论上讲每一页都可以随机分布于RAM的不同角落但是为了便于管理加速查找过程通常还会引入多层次索引结构也就是所谓的多级页表设计思路其中最常见例子便是两层或者三层乃至四级甚至更高维度版本等等不胜枚举。 最后关于线程间资源共享方面我们知道即使是同一个应用程序内部不同执行路径也可能各自拥有单独副本诸如局部变量之类的东西不过像公共对象池之类的则会被所有成员共同享有其中包括但不限于动态申请出来的heap area以及static declared ones such as global variables etc.[^4] ```c++ // 示例:简单的C++代码演示如何声明全局变量局部变量 #include <iostream> using namespace std; int globalVar = 0; // 全局变量 void func() { int localVar = 10; // 局部变量 cout << "Global Variable Value: " << globalVar << endl; } int main(){ func(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值