IT铁人
虽然我们在前面的计算机结构也有讲过Memory,不过那是偏向最底层硬体的实施方式,现在要介绍的是OS如何管理Memory的空间,那我们开始吧!
如同当初提到的,我们要执行任何程序时,一定都要把他load到Memory中,不然放在Disk执行太慢了。至於Virtual Meomry则是在Memory不够大时,暂时将部分Process转移到Disk中,并且纪录位置在Page Table中,以便於到时候要用的时候可以迅速找到。
至於我们今天要提到的部分则是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" |
用图片来说明就像是下面这样。
白话来说,就像是学生照座号排队去升旗,其中班级座号就像是Compiling Time的Binding,n号同学知道自己在班上的n号位置。
到了操场之後,因为每班须要站到自己的位置,所以这时候5号同学可能就不会在全校人员数下来的第5个位置,他会在自己班级排头算下来的第5号位置。这就是Load Time的Binding。
至於Execution Time的Binding则是今天某个同学请假,可能是出去比赛或是被惩罚了,这时候叫到他的时候就要去找找他在哪里,它的位置就会是当下的情况决定。
大guy是这个样子啦,希望这样子的解释有比较简单明了。
前面提到了决定记忆体位置的时机,现在我们要来讲讲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
底下来个Allocation的小例子吧,假设我们有一串的Available-list如下
100KB | 500KB | 200KB | 300KB | 600KB | Nil(结尾的意思) |
---|
这时候有几个Memory需求如下212KB, 417KB, 112KB, 426KB,三种不同的Method会发生以下事情。
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无法排进去。
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 |
所有需求成功处理。
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
Reactive Programming 序 两年前在JCConf 2019,欣赏了Josh Lon...
在使用seaborn画出炫丽的图片之前,先来做些基本的统计吧。 本文目的:叙述统计、推论统计、视觉直...
人的科技文明发展始终来自於人性 在疫情後的时代,所有的一切都将发生改变,这已经是一个不能逆转的趋势了...
若是要让 line bot 能够运行,会需要输入个 webhook 网址来接收资讯,而像是我们在刚学...
Migration建立资料表系虾密? Rails使用了Migration资料库迁移机制来定义资料库结...