操作系统内存管理--简单、页式、段式、段页式

一、内存管理的目的和功能

内存一直是计算机系统中宝贵而又紧俏的资源,内存能否被有效、合理地使用,将直接影响到操作系统的性能。此外,虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理内存如何增长,都赶不上程序增长的速度,所以操作系统如何有效的管理内存便显得尤为重要。


(1)内存管理的目的

内存管理的目的主要有两个:一是方便用户使用;二是提高存储器的利用率。


(2)内存管控的功能

内存管理主要有四个方面的功能:

1)内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。

2)地址转换:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址

3)存储保护和存储共享:保证各道作业在各自的存储空间内运行,互不干扰;同时充分利用内存空间,共享内存中存放的信息。

4)内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。


二、内存管理中的基本概念

(1)逻辑地址、相对地址、虚地址

源程序经过编译处理后,源程序中的各种符号元素转换成机器指令和数据组成的目标程序,并用实际地址码替换符号地址。这种经编译后的目标代码所限定的地址域叫做该程序的地址空间。地址空间中的各个地址叫做相对地址,逻辑地址或虚地址。地址空间总是从0号单元开始编址,其他所以地址都是以0单元为起始地址顺序编码的。


(2)线性地址

线性地址是逻辑地址到物理地址变换之间的中间层。在段页式存储管理中,程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。


(3)物理地址、绝对地址、实地址

物理地址空间是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取。物理地址又叫绝对地址、实地址。


(4)地址重定位

当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。即把程序相对地址空间的逻辑地址转换成存储空间的绝对地址的工作叫做地址重定位,又叫地址映射或地址变换。


地址重定位又分为两种:静态重定位和动态重定位。

1)静态重定位

在装入作业时,由装入程序把用户程序中的指令地址和数据地址全部转换成存储空间的绝对地址。这种地址转换工作是在程序执行前集中一次完成的,程序执行时就无需要再进行地址转换工作。

主要优点是无需增加硬件地址变换机构,主要缺点是要求给每个程序分配一片连续的存储空间。

2)动态重定位

动态重定位是靠硬件的地址转换机构来实现的,通常使用一个重定位寄存器。在存储管理为程序分配一个主存区域后,装入程序直接把程序和数据装入到分配的存储区中,然后把这个存储区的起始地址送入重定位寄存器中。在程序执行时,对于每一个存储器的访问,都要讲相对地址转化成主存的绝对地址。

主要优点是使用更加灵活有效,不用给程序分配一大片连续的空间,能够给用户提供一个比主存大的多的地址空间。


三、常见的内存管理技术

(1)简单存储管理

1)单一连续分配

单一连续分配是指主存中只有一个用户作业,把程序装入主存之后,占据全部存储空间和资源。

内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式的优点是简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。


2)分区分配

分区分配又分为:固定式分区可变式分区

-----------------------------

固定分区分配是将内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。

固定分区方式存在两个问题:一是程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间;二是主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费,这种现象称为内部碎片。

-----------------------------

可变式分区在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。

动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片,且随着进程的换入/换出,很可能会出现更多更小的内存块,内存的利用率随之下降。这些小的内存块称为外部碎片,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相对。

动态分区的分配策略,考虑以下几种算法: 

》首次适应(First Fit)算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。 

》最佳适应(Best Fit)算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。 

》最坏适应(Worst Fit)算法:又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。 

》邻近适应(Next Fit)算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。

-----------------------------

解决碎片的方法是采取紧凑技术,即对碎片进行拼接,但是需要消耗系统资源。


3)覆盖与交换

1.虚拟存储器

当一个作业程序的地址空间比主存可用空间大时,操作系统可将这个程序的地址空间的一部分放入主存内,其余部分放在辅存上。当访问的信息不在主存时,再由操作系统负责调入所需要的部分。这样计算机系统好像为用户提供了一个比实际主存大得多的存储空间,这样的技术叫做虚拟存储器。

实现的基础:一是需要有相当数量的外存,二是需要有一定容量的主存,三是地址变换机构。


2.覆盖

覆盖是指同一主存区可以被不同的程序段重复使用。作业在一次运行时,把那些不会同时执行的程序段共用一个主存区。相互覆盖的程序段叫做覆盖,可共享的主存区叫做覆盖区。覆盖技术的基础是提供正确的覆盖结构。

3.交换

交换就是系统根据需要把主存中暂时不允许的某个或某些作业部分或全部移到辅存,而把辅存中的某个或某些作业移到相应的主存区,并使其投入运行。


(2)页式存储管理

1)基本概念

页式存储管理将程序逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(page frame)。为方便地址转换,页面大小应是2的整数幂。每一个作业有一个页表,用来记录各个页在内存中所对应的块(页框)。

2)地址结构

地址结构包含两部分:前一部分为页号P,后一部分为页内偏移量W。其中页号与页内偏移量所占多少位,与页面的大小和主存的最大容量有关。


每页大小为4KB,主存大学为4GB。则地址长度为32 位,其中0~11位为页内地址,即:12~31位为页号,地址空间最多允许有2^20页。



3)地址变换机制



上面介绍的地址变换过程可知,若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存:一次是访问页表,确定所存取的数据或指令的物理地址,第二次才根据该地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半。

为此,在地址变换机构中增设了一个具有并行查找能力的高速缓冲存储器——快表,又称联想寄存器(TLB),用来存放当前访问的若干页表项,以加速地址变换的过程。



(3)请求式分页存储管理

1)基本概念

请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。在请求分页系统中,只要求将当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过调页功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。

2)扩充的页表


3)地址变换机制



4)页面置换算法

1.最佳算法(OPT算法)

用来评价其他算法,使用缺页中断率:

f = F / A(其中F为作业失败访问的次数,A为作业总的访问次数)


2.先进先出算法(FIFO算法)

淘汰在内存驻留时间最长的页面。


3.最近最久未使用淘汰算法(LRU算法)

淘汰最久没有被使用的页面。


4.最不经常使用淘汰算法(LFU算法)

淘汰一段时间内,访问次数最少的页面。


(LRU和LFU的区别:http://blog.csdn.net/guoweimelon/article/details/50855351)


(4)段式存储管理

1)基本概念

段式存储管理要求每个作业的地址空间按照程序自身的逻辑划分为若干段,每个段都有一个唯一的内部段号。


2)地址结构

逻辑地址由段号S与段内偏移量W两部分组成。


段号为16位,段内偏移量为16位,则一个作业最多可有2^16=65536个段,最大段长为64KB。



3)地址变换机制


(5)段页式存储管理

1)基本概念

在段页式存储中,每个分段又被分成若干个固定大小的页。

2)地址结构

逻辑地址由段号S、段内页号P与段内偏移量W两部分组成。

3)地址变换机制


参考资料:

http://c.biancheng.net/cpp/html/2611.html

http://blog.csdn.net/hguisu/article/details/5713164

http://www.cnblogs.com/CareySon/archive/2012/04/25/2470063.html

http://blog.csdn.net/yang_yulei/article/details/24142743

http://blog.csdn.net/leves1989/article/details/3305402

http://blog.csdn.net/yusiguyuan/article/details/9664887


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

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

相关文章

网易裁员背后,芸芸众生,相煎何急

十一月初拖家带口去了上海,到了著名的城隍庙参观,无意中看到了一个仅出现在历史书上的古老物件“西洋镜”,仿佛跨越百年,来到那个如裹脚布般冗长而乏味的古老年代,看到了一群有一群卑微的小民在生活的裹挟之下&#xf…

.NET Core on K8S 学习与实践系列文章索引 (更新至20191126)

更新记录:-- 2019-11-26 增加Docker容器日志系列文章近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个flag:完成这个《.NET Core on K8S学习实践》系列文章!这个系列会持续…

ASP.NET Core gRPC 使用 Consul 服务注册发现

一. 前言gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍Consul。二. Consul 介绍Consul是一种服务网络解决方案&a…

Excel催化剂插件功能修复与更新汇总篇之十

在半年时间里,自己使用过程中,发现的一些小bug,更新了一下,也追加了一些自定义函数,不成系统,就单独放在修复与更新系列中。一、第24波-批量发送邮件并指点不同附件不同变量Excel催化剂功能第24波-批量发送…

OSI/RM 开放系统互联参考模型

开放式系统互联通信参考模型(即:Open System Interconnection Reference Model,简称为OSI模型,由国际标准化组织(ISO)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。 OSI的七层体…

Http benchmarking 工具 wrk 基本使用

Http benchmarking 工具 wrk 基本使用Introwrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载。它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合在一起。官方描述:wrk is a modern HTTP benchmark…

TCP/IP 体系结构

TCP/IP体系结构又称为TCP/IP协议簇,是Transmission Control Protocol/Internet Protocol的简写,译为传输控制协议/因特网互联协议。 TCP/IP提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以…

黑客之道-解码Facebook的DevOps之路

内容来源:DevOps案例深度研究第3期 – Facebook DevOps实践研究战队(本文只展示部分PPT及研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:张楠(Topic Leader)、高…

IP地址与MAC地址的区别

IP地址是指互联网协议地址(Internet Protocol Address),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 MAC地址又称…

ping命令整个过程详解

转自:http://wanicy.blog.51cto.com/509018/335207/ 如果你想了解ping命令的原理,看了这篇文章,你会从对网络一窍不通,到豁然开朗。 先看拓朴图: 在这里讲ping的两情况:一种是同一网段内,一种…

ping某个域名的详细过程

在前一篇文章中,我们已经对ping命令的整个过程做了一个详解。但是,前一篇文章中所涉及到的两种ping命令使用情况,都是ping的IP,在这篇文章中,我们将要详细讲解ping某个域名的整个过程。 一、ICMP协议 在了解ping命令之…

Magicodes.IE之导入学生数据教程

基础教程之导入学生数据说明本教程主要说明如果使用Magicodes.IE.Excel完成学生数据的Excel导入。要点本教程使用Magicodes.IE.Excel来完成Excel数据导入需要通过创建Dto来完成导入Magicodes.IE.Excel可以根据Dto以及特性设置来自动生成导入的Excel模板,数据验证&am…

IP地址分类详解

一、IP地址简介 IP,即网际协议(Internet Protocol),或称互联网协议,是用于报文交换网络的一种面向数据的协议。 IP是在TCP/IP协议中网络层的主要协议,任务是仅仅根据源主机和目的主机的地址传送数据。为此目…

[ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统”

ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。…

[原]调试PInvoke导致的内存破坏

缘起 最近项目中遇到一个诡异的问题,程序在升级到.net4.6.1后,执行某个功能时会崩溃,提示访问只读内存区。大概规律如下:debug版不崩溃,release版稳定崩溃。只有x64位的程序崩溃,32位及anycpu编译出来的程序运行不会崩…

被忽略的TraceId,可以用起来了

前言.NetCore日志,相信大家多少都接触过,博客园有关 ① AspNetCore依赖注入第三方日志组件 ②第三方日志组件Nlog,Serilog 应用方法的博文层出不穷。结合程序的部署结构,本文分单体和微服务聊一聊AspNetCore中追踪日志流的方法。TraceIdAsp…

TCP协议详解

一、TCP协议简介 TCP协议,即传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。在因特网协议族中,TCP层是位于IP层之上,应用层之下的中间层。尽管IP层只…

UDP协议详解

一、UDP协议简介 UDP协议,即用户数据报协议(User Datagram Protocol),是一个简单的面向数据报的传输层协议。UDP协议只在IP数据报服务商增加了很少一点的功能,就是复用和分用,以及差错检测的功能。 二、UDP…

冰雪奇缘,白色世界:四个IT人的四姑娘山双桥沟游记

去年9月初去了川西的稻城亚丁,体会了金色世界秋日童话,还写了一篇游记《从你的全世界路过-一群程序员的稻城亚丁游记》,也是得到了很多朋友和童鞋的点赞。今年11月初趁着周末的两天时间和朋友去了川西的四姑娘山,体会了白色世界冰…

TCP三次握手建立连接

一、三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程。最开始的时候两端的TCP进程都处于ClOSED(关闭)状态。 这时候,A主动打开连接…