OS学习笔记1——分段与分页
原文连接:
本文作者:Happysnaker 本文链接:https://www.cnblogs.com/happysnaker/p/15264905.html
存储器管理-动态分区分配算法_晓宜的博客-CSDN博客_动态分区存储管理算法
连续 | 不连续 |
基本分段 | |
基本分页 | |
段页式 |
碎片
内部碎片:已被分配 但内存太小不能再被使用
外部碎片:未被分配 但内存太小不能再被使用
外部碎片可以再被分配,可以通过紧缩将多个外部碎片合并成一个大的空闲空间再被使用,但成本较大。
虚拟内存
虚拟地址→物理地址的转化需要:基址寄存器 + 界限寄存器
基址:物理地址的起点
界限:是否访问非法地址
实际地址 = 虚拟地址 + 基址
分段内存
将整体空间分为不同段,每段有上述思想中的:基址寄存器 + 界限寄存器
逻辑地址:段号(段名)+ 段内地址(偏移)
寻址过程:
- 检查 段号 是否有效
- 通过 段号 查找 段表寄存器 (段表开始的地址 + 段表长度)
- 检查 段号+段表开始地址 >= 段表长度 → 越界中断
- 检查 段内地址 是否有效
- 通过 段号,查找 段表 (段号 + 段长 + 基址)
- 检查 段内地址 >= 段长 → 越界中断
- 计算 物理地址 :段表中 基址 + 段内地址 = 物理地址
特点:
段内地址的位数决定段总大小,段总大小固定
起始地址固定
符合用户逻辑,利于保护和共享
分段使用的大小不确定,外部碎片多
分页管理
将空间分割成较小的,固定长度的分片,来避免外部碎片
32位程序,虚拟地址空间 2^32
页面大小 4kb
页表项大小 2^32/4kb = 2^20,需要20位地址表示,剩余12位为偏移
物理地址 = 页基址 + 页内偏移
为避免页表过大,可以使用多级页表:
- 上一级页表对应下一级页表的起始地址 + 设置一个标识位表示下一级页表是否存在
- 当下级页表不存在(未被使用)时,下级页表将不用被加载进来,极大地减小了页表大小
- 当页表中的每一级页表都设置为恰好装进一个页,将不会产生任何外部或内部碎片
- 非线性页表,查找更复杂
- 需要从内存加载多次,产生开销
地址转换:
计算机硬件,自动把地址空间的地址分为页号和页内相对地址,通过页号在页表找到内存中的对应块号,计算 物理地址 = 块号 x 每一页的字节数 + 页内偏移地址。一般情况下,块的大小和页的大小是一样的。
分段的逻辑地址需要查两次表,要先根据段号确定是哪一段,但分页的页号与页内地址是定好的,直接根据偏移量计算物理地址即可。
所以分段逻辑地址是二维的,分页是一维的,物理地址是一维的。
段页式
为减少表开销,可以使用 分段+每段使用页管理,由于段仅保存已使用过的资源,因此可以保证每一个页都被使用。
并非是先从内存分段再分页。内存实际上还是采用分页,同一段内的“页”有可能分布在内存的任何地方,只是逻辑上同属于一“段”。
因此,同分页管理相同,不会有外部碎片,但页内会有内部碎片。
每个段描述符指向每段的页表:
段描述符结构如下:
虚拟地址:段号 + 段内地址(页号 + 偏移量)
寻址过程:
- 依据 段号 找出段描述符。
- 检查该 段的页表 是否在内存中。
在,则找出位置;
不在,则产生段错误;
访问违反保护需求,则发出越界错误。
检查所请求的 段内页表的页表项 是否在内存中。
在,从页表中取出基址;
不在,缺页中断。
计算 物理地址 = 页面基址 + 偏移量
分区管理
使用 分区表(分区号 + 起始地址 + 长度 + 分配占用标志位)
① 固定大小分区:程序装入内存时从分区表中寻找合适、未被占用的的分区使用
② 不同大小分区:从空闲区表中寻找第一个>=所需要内存的分区,将所需要内存大小分配给程序使用,剩余大小仍然登记在空闲区表中(动态分配)
固定大小分区会有内部碎片产生,不同大小分区减少了内部碎片的产生。但不同的动态分区算法会有不同的外部碎片产生。
首次适应算法:空闲区地址从低到高(从小到大)排列,顺序查找。优先使用低地址空间,低地址部分可能出现很多外部碎片。
临近适应算法:空闲区地址从低到高(从小到大)排列,每次分配时从上次结束的位置开始查找。大小地址区被使用的概率相同,但有可能使得最终无大分区可用。
最佳适应算法:空闲区容量从小到大排列,顺序查找。优先使用更小的空间,会产生大量外部碎片。
最坏适应算法:空闲区容量从大到小排列,顺序查找。优先使用最大的连续空闲区,避免剩余空闲区太小,但可以导致之后的大进程没有分区可用。
最佳、最坏算法开销较大,因为在分区结束后可能需要对空闲区重新排序。
OS学习笔记1——分段与分页相关推荐
- 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码
本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的用户程序汇编代码. ;代码清单16-2;文 ...
- 【OS学习笔记】三十二 保护模式九:分页机制对应的汇编代码之---内核代码
本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的内核汇编代码. ;代码清单16-1;文件名 ...
- 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述
上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...
- 【OS学习笔记】三十八 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----微型内核汇代码
本文是以下几篇文章对应的微型内核代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式十 ...
- 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码
本文是以下几篇文章对应的主引导扇区代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式 ...
- 【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门
上一篇文章学习了中断与异常的概念:[OS学习笔记]三十四 保护模式十:中断和异常区别 本片文章接着学习以下内容: 中断描述符表 中断门 陷阱门 1 中断描述符表 我们前面讲了无数次,在实模式下,是由位 ...
- 【OS学习笔记】三十四 保护模式十:中断和异常区别
上几篇文章学习了分页机制的一些原理: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 今天继续学习保护模式下的关于中断与异 ...
- 【OS学习笔记】四十 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务二代码
本文是以下几篇文章对应的微型动态加载的用户程序/任务二代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十 ...
- 【OS学习笔记】三十九 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务一代码
本文是以下几篇文章对应的动态加载的用户程序/任务一代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 ...
最新文章
- poj2728(最优比率生成树)
- 每天一个linux命令(29):chgrp命令
- python 装饰器 参数-Python装饰器(4)带参数的装饰器
- 为什么不采用“两次握手”建立连接呢?
- 【分享】Maven插件的源码下载(SVN)
- java网络编程(五)
- mynt product model: D1000-IR-120标定相机和IMU外参
- 自旋锁/互斥锁/读写锁/递归锁的区别与联系
- python random从集合中随机选择元素
- mysql sharding 方案_mysql sharding 方案 分库分表(sharding)系列(4)
- 解决 sublime text 3 there are no packages available for installation 错误
- Microsoft.Office.Interop.Excel 报错
- mac 安装homebrew 并替换清华镜像
- 定制10kV变压器感应雷直击雷击变压器加避雷器atp-emtp模型
- R语言t检验中手动计算t值和p值
- 大数据实战——微博舆情大数据分析
- 凯恩帝k1000ti参数设置_K1000TII标准程序调试参数说明
- python的sqlite3说明_python之sqlite3使用详解
- 抢走Salesforce大客户,国产CRM靠的不是运气
- 计算机主板手工,教你DIY一台笔记本(伪),简单粗暴成本低