聊一聊内存管理(1)

 

“最近的电脑打开程序非常慢,而且运行的时候很卡,有没有什么解决办法呢?”

“去京东买个4G 的内存条加到电脑里面吧!”

在我们的生活中,经常会遇到这样的对话。当我们的电脑运行程序变得很慢很卡的时候,就会听到身边的朋友建议我们去增加电脑的内存。这是为什么呢?内存在计算机体系结构中起了什么样的作用?当我们有了4G 的内存,操作系统又是如何管理这些内存的呢?

本系列博客将和大家一起深入的探讨这些问题,主要介绍操作系统原理中的内存管理部分,从而让您更好的理解计算机。力求用最简单易懂的语言介绍相关原理及算法,即使您没有任何的专业基础,也能和我们一起来感受操作系统的魅力。

问题定义

介绍任何技术及理论之前,我们首先都需要搞明白需要解决的问题是什么,也就是问题的定义,这是极其关键的一步。很多学生在学习的时候,往往不知道我为什么要学习这个知识点,这个知识点和前后章节以及其他课程的关系是什么,这个知识点解决了什么问题,只是简单的去学某个知识点,而忽视了问题的定义以及前后关联。

每一个程序的运行都需要占用内存,每一个程序运行结束了以后,都会释放其占有的内存。这是大家首先需要了解的一个前提。

首先我们来给大家介绍下什么叫内存管理。所谓内存管理简单来说就是你要运行一个程序,就需要给这个程序分配相应的内存,那么该如何分配这些内存呢?

 

可能有些同学说,这不是很简单的事情吗?比如我有4G 的内存条,来了一个程序,我就给它多少的内存,这个程序运行结束了,我就回收这些内存,如下所示:

图1- 1  A1 A2 A3程序内存分布

 

t1时刻执行A1程序,需要512MB 内存,t2时刻执行 A2程序需要256MB内存,t3时刻执行 A3程序需要1GB 内存。按照上述图示,为每个程序分配相应的内存。

图1- 2 A1程序运行结束后内存分布

过了一段时间后,A1程序运行结束,释放之前占用的内存。

不是很简单吗?这有什么好讨论的呢?

 

事实真的如此简单吗?接下来便提出几个问题,看你该如何解决?

1)    如下图这是某时刻内存的分布情况,内存有 A1 A2 A3 A4共四个程序在运行。此时来了一个程序 A5,它需要的内存为512MB,而此时系统可用内存仅有256MB,那么 A5是否能够被执行呢?

图1- 3 某时刻内存分布情况

 

2)    如下图是某时刻的内存分布,系统可用内存有下面绿色部分总共256 + 256= 512MB 的可用内存,但是这两块内存不是连在一起的。此时来了一个程序 A5,需要512MB 的内存,请问 A5程序能够被执行吗?

图1- 4 某时刻内存分布情况

3)    内存大小总共为4GB,假设某程序需要占用6GB 的内存,请问是否可以运行该程序。

 

从上述提出的这些问题,大家可以看到,内存管理其实没有大家想象的那么简单,它需要解决的问题是非常多的。

后面的博客将带领大家一起来探索操作系统是如何解决内存管理的这些问题的,大师提出的解决方案和我们自己的有什么不同的地方。本节希望大家掌握什么是内存管理,在整体上有个认识。

 

温馨提示:

由于手机屏幕大小的限制,请大家在阅读图片时,点击图片放大查看。

本文图例中所有的绿色部分表示系统可用内存,其他颜色表示某程序占用的内存。

 

转载于:https://my.oschina.net/gschen/blog/1513718

2.设计个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。 1) 最佳置换算法(Optimal) 2) 先进先出法(Fisrt In First Out) 3) 最近最久未使用(Least Recently Used) 4) 最不经常使用法(Least Frequently Used) 5) 最近未使用法(No Used Recently) 其中,命中率=1-页面失效次数/页地址流长度。 试对上述算法的性能加以较各:页面个数和命中率间的关系;同样情况下的命中率比较。 实验准备 本实验中主要的流程:首先用srand( )和rand( )函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。 实验可先从个具体的例子出发。 (1)通过随机数产生个指令序列,共2048条指令。指令的地址按下述原则生成: A:50%的指令是顺序执行的 B:25%的指令是均匀分布在前地址部分 C:25%的指令是均匀分布在后地址部分 具体的实施方法是: A:在[0,1023]的指令地址之间随机选取起点m B:顺序执行条指令,即执行地址为m+1的指令 C:在前地址[0,m+1]中随机选取条指令并执行,该指令的地址为m’ D:顺序执行条指令,其地址为m’+1 E:在后地址[m’+2,2047]中随机选取条指令并执行 F:重复步骤A-E,直到2048次指令 (2)将指令序列变换为页地址流 设:页面大小为4K; 用户内存容量4页到32页; 用户虚存容量为32K。 在用户虚存中,按每K存放64条指令排列虚存地址,即2048条指令在虚存中的存放方式为: 第 0 条-第 63 条指令为第0页(对应虚存地址为[0,63]) 第64条-第127条指令为第1页(对应虚存地址为[64,127]) ……………………………… 第1984条-第2047条指令为第31页(对应虚存地址为[1984,2047]) 按以上方式,用户指令可组成32页。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值