3.2操作系统(基本分页存储管理的基本概念)

简介: 💧什么是分页存储🍓如何实现地址的转换🍒逻辑地址结构🥦重要的数据结构——页表

🌎个人主页:个人主页


☀️系列专栏:操作系统





连续分配 :为用户进程分配的必须是一个 连续的内存空间。


非连续分配 :为用户进程分配的可以是一些 分散的内存空间。


🍓思考:连续分配方式的缺点


考虑支持多道程序的两种连续分配方式:


1.固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低。


2.动态分区分配:会产生很多外部碎片,虽然可以用“紧凑”技术来处理,但是“紧凑”的时间代价很高


🍒把“固定分区分配”改造为“非连续分配版本”


假设进程A大小为23MB,但是每个分区大小只有10MB,如果进程只能占用一个分区,那显然放不下。


解决思路:


如果允许进程占用多个分区,那么可以把进程拆分成10MB+10MB+3MB三个部分,再把这三个部分分别放到三个分区中(这些分区不要求连续) ..进程A的最后一个部分是3MB,放入分区后会产生7MB的内部碎片。


如果每个分区大小为2MB,那么进程A可以拆分成11 * 2MB+1MB共12个部分,只有最后一部分1MB占不满分区,会产生1MB的内部碎片。显然,如果把分区大小设置的更小- -些,内部碎片会更小,内存利用率会更高。


这就引出了:


基本分页存储管理的思想一一把内存分为一个个相等的小分区,再按照分区大小把进程拆分成一个个小部分


💧什么是分页存储


将内存空间分为一个个 大小相等的分区 (比如:每个分区 4KB),每个分区就是一个“ 页框 ”( 页框 = 页帧 = 内存块 = 物理块= 物理页面 )。每个页框有一个编号,即“ 页框号 ”( 页框号= 页帧号 = 内存号 = 物理块号 = 物理页号 ),页框号 从 0 开始 。

将 进程的逻辑地址空间 也分为 与页框大小相等 的一个个部分, 每个部分称为一个“ 页 ”或“ 页面 ” 。每个页面也有一个编号, 即“ 页号 ”,页号也是 从 0 开始 。


Tips :初学易混 —— 页、页面 vs 页框、页帧、物理页 页号、页面号 vs 页框号、页帧号、物理页号


操作系统 以页框为单位为各个进程分配 内存空间。进程的每个 页面分别放入一个页框中。也就是说,进程的 页面 与内存的 页框 有 一一对应 的关系。 各个页面不必连续存放,可以放到不相邻的各个页框中。


(注:进程的最后一个页面可能没有一个页框那么大。也就是说,分页存储有可能产生内部碎片,因此 页框不能太大,否则可能产生过大的内部碎片造成浪费 )




🍓如何实现地址的转换






如何确定一个逻辑地址对应的页号、页内偏移量?


在某计算机系统中,页面大小是50B。某进程逻辑地址空间大小为200B,则逻辑地址 110 对应的页号、页内偏移量是多少?





总结:页面大小 刚好是 2 的整数幂有什么好处?


①逻辑地址的拆分更加迅速——如果每个页面大小为 2KB,用二进制数表示逻辑地址,则末尾 K 位即为页内偏移量,其余部分就是页号。因此,如果让每个页面的大小为 2 的整数幂,计算机硬件就可以很方便地得出一个逻辑地址对应的页号和页内偏移量,而无需进行除法运算,从而提升了运行速度。


②物理地址的计算更加迅速——根据逻辑地址得到页号,根据页号查询页表从而找到页面存放的内存块号,将二进制表示的内存块号和页内偏移量拼接起来,就可以得到最终的物理地址。

🍒逻辑地址结构


分页存储管理的 逻辑地址结构 如下所示:



地址结构包含两个部分:前一部分为页号,后一部分为页内偏移量 W 。在上图所示的例子中,地址长度为 32 位,其中 0~11 位 为“ 页内偏移量 ”,或称“ 页内地址 ”; 12~31 位为“ 页号 ”。


如果有 K 位表示“页内偏移量”,则说明该系统中一个页面的大小是 2^K个内存单元

如果有 M 位表示“页号”,则说明在该系统中,一个进程最多允许有 2^M 个页面

🥦重要的数据结构——页表


为了能知道进程的每个页面在内存中存放的位置,操作系统要为每个进程建立一张页表。


注:页表通常存在PCB(进程控制块)中





问题一:每个页表项占多少字节?










相关文章
|
29天前
|
API 数据处理 C语言
探索操作系统:从基础概念到实际应用
本文将带你进入操作系统的世界,了解它的基本概念、发展历程和应用场景。我们将一起探讨操作系统的核心功能、体系结构以及它在计算机系统中的重要作用。同时,我们还将介绍一些常见的操作系统类型,并分析它们的特点。最后,通过一个简单的代码示例,展示操作系统在实际应用中的重要作用。让我们一起揭开操作系统的神秘面纱,探索它的奥秘吧!
|
1月前
|
安全 算法 Unix
深入浅出操作系统:从基础概念到实践应用
【10月更文挑战第22天】本文旨在以浅显易懂的语言,为读者揭开操作系统的神秘面纱。我们将从操作系统的基本概念出发,逐步深入其核心功能与设计哲学,并通过具体代码示例,展示操作系统如何在实际中发挥作用。无论你是计算机科学的学生,还是对技术有浓厚兴趣的爱好者,这篇文章都将为你提供一次轻松愉快的操作系统之旅。
50 4
|
2月前
|
Ubuntu Java Linux
Linux操作系统——概念扫盲I
Linux操作系统——概念扫盲I
53 4
|
3月前
|
存储 算法 安全
深入理解操作系统:从基础概念到代码实践
【9月更文挑战第23天】本文将带领读者深入探索操作系统的奥秘,从基础概念出发,逐步揭示操作系统的工作原理和设计哲学。我们将通过实际代码示例,展示操作系统如何与硬件交互、管理资源以及提供用户界面。无论你是计算机专业的学生还是对操作系统感兴趣的开发者,这篇文章都将为你打开一扇通往操作系统世界的大门。
76 16
|
7月前
|
存储 缓存 Linux
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
【Linux】进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解
|
5月前
|
人工智能 Unix 物联网
深入理解操作系统:从概念到实践
【7月更文挑战第31天】本文将带领读者深入探索操作系统的世界,从基本概念、发展历程、核心组件,到实际应用场景和未来趋势。我们将揭示操作系统如何作为软件与硬件之间的桥梁,以及它如何影响计算机系统的性能和用户体验。通过本文,您将获得对操作系统设计哲学的深刻理解,并掌握评估不同操作系统特性的能力。
86 7
|
5月前
|
算法 安全 Linux
深入理解操作系统:从基础概念到现代发展
【7月更文挑战第25天】在数字时代的心脏,操作系统(OS)扮演着至关重要的角色。本文将深入探讨操作系统的核心功能、设计哲学以及它们如何适应不断变化的技术需求。我们将从早期的批处理系统和多道程序设计开始,逐步走向现代的多任务、多用户操作系统,并探索它们是如何管理资源、提供安全性和促进用户交互的。文章还将触及开源与专有操作系统之间的辩论,并预测未来可能的发展方向。
|
5月前
|
存储 安全 物联网
深入理解操作系统:从基础概念到现代挑战
【7月更文挑战第14天】本文将探索操作系统的核心概念,并分析其在现代计算环境中面临的挑战。我们将从操作系统的定义和功能出发,逐步深入到进程管理、内存管理、文件系统以及并发和同步等关键领域。文章还将讨论操作系统在云计算、物联网(IoT)和安全性方面的新挑战,为读者提供对操作系统复杂性的全面理解和未来发展方向的洞见。
73 1
|
6月前
|
存储 Unix Linux
深入理解操作系统:从概念到实践
【6月更文挑战第29天】本文将带领读者深入探索操作系统的奥秘,从其基本概念到实际应用。我们将一窥操作系统如何管理计算机硬件资源,提供用户接口,以及实现文件系统和网络通信等功能。文章不仅解读了操作系统的核心原理,还通过具体案例展示了这些原理在现代计算环境中的应用。无论你是软件开发者、系统管理员还是对计算机科学感兴趣的学生,这篇文章都将为你提供宝贵的知识和洞见。
|
5月前
|
Unix API 数据格式
云计算存储问题之API在不同操作系统上的实现如何解决
云计算存储问题之API在不同操作系统上的实现如何解决