Day-27 Memory Management

Memory Management

tags: IT铁人

虽然我们在前面的计算机结构也有讲过Memory,不过那是偏向最底层硬体的实施方式,现在要介绍的是OS如何管理Memory的空间,那我们开始吧!

复习

如同当初提到的,我们要执行任何程序时,一定都要把他load到Memory中,不然放在Disk执行太慢了。至於Virtual Meomry则是在Memory不够大时,暂时将部分Process转移到Disk中,并且纪录位置在Page Table中,以便於到时候要用的时候可以迅速找到。

Binding

至於我们今天要提到的部分则是OS如何将程序Load进入Memory中,这个过程称为binding,其中binding有三个时机点,分别如下:

时间点 说明
Compiling Time 由Compiler负责Binding产生的code叫做Absolute Code,若要重新决定程序的执行起始位置,需要recompile the code
Load Time 由Linking Loader决定Compiler产生relocatable code,由Linking Loader负责Binding。若要改变起始位置,只需Reload the code,不须recompile
Execution Time 延迟到执行时期才动态决定起始位置。Process在Execution期间可任意更动其起始位址且仍可正确执行。必须有Hardware Support,Binding delay到Execution Time才做,称为"Dynamic Binding"

用图片来说明就像是下面这样。

白话说明Binding

白话来说,就像是学生照座号排队去升旗,其中班级座号就像是Compiling Time的Binding,n号同学知道自己在班上的n号位置。

到了操场之後,因为每班须要站到自己的位置,所以这时候5号同学可能就不会在全校人员数下来的第5个位置,他会在自己班级排头算下来的第5号位置。这就是Load Time的Binding。

至於Execution Time的Binding则是今天某个同学请假,可能是出去比赛或是被惩罚了,这时候叫到他的时候就要去找找他在哪里,它的位置就会是当下的情况决定。

大guy是这个样子啦,希望这样子的解释有比较简单明了。

Contiguous Memory Allocation Methods

前面提到了决定记忆体位置的时机,现在我们要来讲讲OS怎麽分配记忆体给Process,如果随意分配的话,之後Memory的空闲空间就会变得支离破碎。

分配的方式有以下三中,其实从名字听就知道worst会是最差的,其中hole的意思代表空闲、连续且没被占据的Memory space

方法 内容
First-Fit 从Available-list的第一个hole开始寻找,直到找到第一个space大於需求的空间,即分配该Process需求的空间给他。
Best-Fit 检视Available-list的所有hole,并且找出大於需求空间中最小的hole,分配需要的给该Process。
Worst-Fit 同上,不过取最大的hole,也就是分配全场最大的hole给Process。

三个概念上都很简单,我也不知道为甚麽要出现Worst-Fit,他花费的时间跟Best-Fit一样,效果又比First差。

以前用malloc时教授都说没有要用的要记得free掉,那时候我忘记的时候还很紧张问同学我的记忆体会不会被吃光,之後才知道exit时系统会将占用的memory释放掉XDDD

Example

底下来个Allocation的小例子吧,假设我们有一串的Available-list如下

100KB 500KB 200KB 300KB 600KB Nil(结尾的意思)

这时候有几个Memory需求如下212KB, 417KB, 112KB, 426KB,三种不同的Method会发生以下事情。

First-Fit

100KB 500KB 200KB 300KB 600KB Nil
100KB 288KB 200KB 300KB 600KB Nil
100KB 288KB 200KB 300KB 183KB Nil
100KB 176KB 200KB 300KB 183KB Nil

而最後的426KB无法排进去。

Best-Fit

100KB 500KB 200KB 300KB 600KB Nil
100KB 500KB 200KB 88KB 600KB Nil
100KB 83KB 200KB 88KB 600KB Nil
100KB 83KB 88KB 88KB 600KB Nil
100KB 83KB 88KB 88KB 174KB Nil

所有需求成功处理。

Worst-Fit

100KB 500KB 200KB 300KB 600KB Nil
100KB 500KB 200KB 300KB 388KB Nil
100KB 83KB 200KB 300KB 388KB Nil
100KB 83KB 200KB 300KB 276KB Nil

最後的426KB也无法排进去。

以效果来说,Best-Fit的效果最好,而First-Fit的速度最快,只有Worst-Fit两者都比不上。

那麽这篇就到这边了,剩下的篇幅理论上都不会太长,都是原本计算机组织讲过的东西在OS上如何执行而已,88。

上一篇 下一篇
Process Synchronization Virtual Memory


<<:  Day 24 : 案例分享(7.3) 库存与制造 - 从单纯的制造开始

>>:  每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day24

[Day1] Reactive Programming 简介与前言

Reactive Programming 序 两年前在JCConf 2019,欣赏了Josh Lon...

资料视觉化 推论统计先 python ANOVA seaborn

在使用seaborn画出炫丽的图片之前,先来做些基本的统计吧。 本文目的:叙述统计、推论统计、视觉直...

数位AI化

人的科技文明发展始终来自於人性 在疫情後的时代,所有的一切都将发生改变,这已经是一个不能逆转的趋势了...

用 Python 畅玩 Line bot - 03:ngrok

若是要让 line bot 能够运行,会需要输入个 webhook 网址来接收资讯,而像是我们在刚学...

Day-9: Migration 系虾米哇贵?

Migration建立资料表系虾密? Rails使用了Migration资料库迁移机制来定义资料库结...