专栏首页一名合格java开发的自我修养计算机操作系统之存储管理

计算机操作系统之存储管理

以下是本人大学学计算机操作系统的笔记。有版权的,转载请注明出处。

存储管理:就是对内存的管理。

内存管理提高存储器的利用率以及从逻辑上扩充存储器。

存储管理功能:

内存的回收与分配,地址变换(程序中的逻辑地址与内存中的物理地址之间的转换),内存扩充(借助虚拟技术或覆盖技术从逻辑上扩充内存容量),内存保护(保证进入内存的各道作业都在自己的存储空间运行,互不干扰)

虚拟内存

以往的存储管理技术必须将作业全部装入内存才能执行且作业常驻内存直到运行结束,难以满足较大作业或较多作业进入内存执行。所以为了能让作业的一部分装入就可以运行的存储管理技术叫做虚拟内存管理技术。

局部性原理:大多数程序执行时,在一个较短的时间内仅能使用程序代码的一部分,相应的,程序所访问的存储空间也局限于某个区域,这就是程序执行的局部性原理。

表现为时间局部性和空间局部性。

基于局部性原理,在程序装入时可以将程序的一部分放入内存,而将其余部分放在外存,然后启动程序(部分装入)。

在程序执行期间,当所访问的信息不在内存中,再由操作系统将所需的部分调入内存(请求调入)。

另外,系统将内存中暂时不用的内容置换到外存上,腾出空间存放将要调入内存的信息(置换功能)。

这种从逻辑上扩充内存容量的存储器系统称为虚拟存储器。

分区存储管理:将内存分成若干个大小不等的区域,由多道环境下的各并发进程共享。

(给每一个内存中的进程划分一块适当大小的存储区,连续存储进程的程序和数据)

特点:管理简单,存在严重的碎片问题使内存利用率不高。进程在分区连续存放,进程大小受到分区大小的限制。

两种分法:

固定分区法:把内存固定的划分为若干个大小不等的区域。(系统对内存的管理和控制通过分区说明表进行,分区说明表说明各分区号,分区大小,起始地址和是否空闲(分区状态)。内存的分配释放,保护,地址变换都是通过分区说明表进行)

动态分区法:在作业执行前不建立分区,分区的建立是建立在作业的处理过程中进行的,大小随着作业或进程对内存的要求而改变的。相比提供内存利用率。

动态分区除了分区说明表还把内存中的可以分区单独构成可用分区表或可以分区自由链,描述内存资源。

动态分区组成,,分区说明表-,,可用分区表,每个表目记录一个空闲区:区号,分区长度,起始地址.,管理简单,缺点表大小难以确定,-占用一部分内存-可用分区自由链(利用每个空闲区头几个单元存放本空闲区大小和下一个空闲区的起始地址,系统设置一个-自由链指针指向第一个空闲区。)查找比较困难,但不占用额外内存区。....

页式管理:各进程的虚拟空间被划分为若干个长度相等的页,页长1K—4K。

进程虚拟地址变为由页号P与页内地址W组成。

同时也把内存分成与页面大小相等的区域,称为块或物理块(页面)。用户进程在内存空间除了在每个页面内地址连续之外,每个页面之间不再连续。

调度作业时必须将作业的所有页面一次调入内存,如果内存没有足够多的物理块,那么作业等待,这种方式称为简单分页。

特点:减少了碎片(任一碎片都小于一个页面)以及只在内存存放反复执行或即将执行的程序段与数据部分,把不经常执行的程序段和数据存放于外存,执行时再调入,且由连续存储提高为非连续存储。

页式虚拟地址与内存页面物理地址转:页式虚拟地址与内存物理地址建立一一对应的页表(硬件地址变换机构来执行转换)。将逻辑地址上连续的页号映射到物理内存中称为离散的多个物理块(页面),将页面和物理块一一对应,体现在页表。(页表由页号和块号组成)

对内外存的统一管理采用请求调页技术(基于局部性原理)。(什么管理?只在内存存放反复执行或即将执行的程序段与数据部分,把不经常执行的程序段和数据存放于外存,执行时再调入)

动态页式管理:1,请求页式管理2,预调入页式管理

相同点:在作业开始执行之前,都不把作业或进程的程序段和数据段一次性的全部装入内存,而只装被认为是经常执行的部分,其他部分执行过程中动态装入。

不同点:

请求页式管理:当需要的数据或指令不在内存即发生缺页中断,系统将外存中相应页面调入内存。

预调入页式管理:系统对外存中的页进行调入计算,估计出这些页中指令和数据的执行和被访问顺序,按此顺序调入和调出内存。

重点请求页式管理

系统如何发现不在内存中的虚页?

扩充页表法。

如何处理虚页这种情况设计两个问题,1,何种方式把所缺页调入内存2,内存没有空闲区,调进来的页放在什么地方()。

页面置换算法置换的单位是页面,连续存储中交换区交换的是整个进程

缺页的调入和存放,内存没有空闲页时都是一个内存页面置换算法问题。

置换算法:在内存中没有空闲页面时被调用,目的是选出一个被淘汰的页面。

轮转法:循环换出内存可用区内一个可用被换出的页,无论该页是刚被换进或已换进内存很长时间。

先进先出(FIFO)法:选择在内存驻留时间最长的一页将被淘汰。(实现方式,把已分配页面按分配时间链接起来,组成FIFO队列,置换指针指向队首,置换时把队首页换出,换人的页链接在队尾。)

FIFO的bleady现象:未给进程或作业分配足它所要求的页面数时,有时会出现分配的页面数增多,缺页次数增加的现象。

引用串

3

4

2

6

4

3

7

4

3

内存

3

4

2

6

6

3

7

4

4

3

4

2

2

6

3

7

7

3

4

4

2

6

3

3

是否缺页

T

T

T

T

T

T

T

缺页7次,命中率2/9=

最近最少使用LRU算法:选择最近最长时间没有被使用过的页面予以淘汰。

引用串

3

4

2

6

4

3

7

4

3

内存

3

4

2

6

4

3

7

4

3

3

4

2

6

4

3

7

4

3

4

2

6

4

3

7

是否缺页

T

T

T

T

T

T

缺页6次,命中率3/9=

最近没有使用NUR页面淘汰算法:从那些最近一个时期内未被访问的页中任选一页淘汰。在页表中增设一个访问位,当某页被访问时,访问位置1,否则置0。系统周期性对所有访问位清0.淘汰时从哪些访问位为0的页面选择一个进行淘汰。

引用串

3

4

2

6

4

3

7

4

3

内存

3

3

3←

6

6

6←

6

4

4

4

4

4←

4←

4

7

7←

7←

2

2

2

3

3←

3

3

是否缺页

T

T

T

T

T

T

T

缺页7次,命中率2/9=

最不经常使用LFU页面淘汰算法:淘汰到当前时间为止被访问次数最少的那一页。在页表中增设一个访问计数器。每当某页被访问,访问计数器加1,发生中断时,淘汰计数值最小的那一页,并将所有页计数器清零。

抖动现象:内存页面置换算法选择不当,导致刚被调出内存的页面又马上调入内存,调入内存不久的页面马上被调出,如此反复的现象。

抖动原因:请求分页系统中每个进程只能分配到所需全部内存空间的一部分。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (理论篇)从基础文件IO说起虚拟内存,内存文件映射,零拷贝

      为了快速构建项目,使用高性能框架是我的职责,但若不去深究底层的细节会让我失去对技术的热爱。   探究的过程是痛苦并激动的,痛苦在于完全理解甚至要十天半月甚至...

    intsmaze-刘洋
  • storm从入门到放弃(三),放弃使用 StreamId 特性

      序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整...

    intsmaze-刘洋
  • Spark的误解-不仅spark是内存计算,hadoop也是内存计算

           市面上有一些初学者的误解,他们拿spark和hadoop比较时就会说,Spark是内存计算,内存计算是spark的特性。请问在计算机领域,mysq...

    intsmaze-刘洋
  • 《深入理解 Java 虚拟机》学习 -- Java 内存模型

    在硬件中,为了解决处理器与内存的速度矛盾,在两者之间使用了高速缓存,但也引入了新的问题:缓存一致性。

    希希里之海
  • Android 开发如何做好内存优化

    Android的一个应用程序的内存泄露对别的应用程序影响不大。为了能够使得Android应用程序安全且快速的运行,Android的每个应用程序都会使用一个专有...

    非著名程序员
  • 笔记66 | eclipse/android studio/ADB查看Android应用内存使用情况

    项勇
  • 内存池介绍与经典内存池的实现

    利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。

    Dabelv
  • C语言最大难点揭秘~!

    本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始...

    闫小林
  • Memcached内存机制Memcached特点内存分配机制 - SlabAllocation内存使用机制 - LRU(Least Recently Used)优化思路

    Memcached特点 协议简单,基于文本行的协议 基于Libevent的时间处理 内置内存存储方式 分布式缓存服务器(采用一致性哈希算法实现的客户端分布式,而...

    Clive
  • 经典面试题(一)之服务器内存碎片

    年前去过上海掌门集团(做无线wifi万能钥匙的那一家)和百度面试过一次,前者问了linux下gcc的malloc函数如何分配内存的,后者在二面时通过一个链表的数...

    范蠡

扫码关注云+社区

领取腾讯云代金券