内存

作者: 不告诉你_af15 | 来源:发表于2019-08-08 21:34 被阅读0次

操作系统对内存管理哪些内容:

1. 操作系统负责内存空间的分配和回收

2. 操作系统需要提供某种技术从逻辑上内内存空间进行扩充

3. 操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换

内存空间的扩充

1 覆盖技术

思想:将程序分为多个段。常用的常驻内存,不常用的段在内存需要时调入内存

内存中分为一个“固定区”和若干个“覆盖区”

需要常驻内存的放在“固定区”中,调入后就不再调出。不常用的放在“覆盖区”,需要用到时调入内存,用不到时调出内存

必须由程序员声明覆盖结构,操作系统完成自动覆盖。缺点:对用户不透明,增加了用户编程负担。

2 交换技术

内存空间紧张时,系统将内存中某些进程暂时换出外存,把外村中某些已经具备运行条件的进程换入内存

 3 虚拟存储技术

内存空间分配与回收

1. 单一连续分配:内存中分为系统区和用户区。内存中只能有一道程序,用户程序独占整个用户区空间

优点:实现简单,无外部碎片

缺点:只能用于单用户、单任务的操作系统中;有内部碎片;处理器利用率低

2. 固定分区分配:将用户空间划分为若干个固定大小的分区,在每个分区中只装入一道作业。

优点:实现简单,无外部碎片

缺点:当用户程序太大时候,可能分区不能满足要求,此时不得不采用覆盖技术,会降低性能。会产生内部碎片,内存利用率低

3. 动态分区分配:可变分区分配,在进程装入内存时,根据进程的大小动态建立分区

优点:无内部碎片

缺点:有外部碎片,整理外部碎片较复杂

动态分区分配算法

连续分配管理方式

1. 首次适应算法:每次从低地址开始查找,找到第一个满足大小的空闲空间

2. 最佳适应算法:优先使用更小的空闲区

3. 最坏适应算法:最大适应算法

4. 临近适应算法:每次分配内存时从上次查找结束的未知开始查找空闲分区链

页表

1. 一个进程对应一张页表

2. 进程的每一页对应一个页表项

3. 每个页表项由“页号”和“块号”组成

4. 页表记录进程页面和实际存放的内存块之间的对应关系

基地址变换机构

基地址变换机构可以借助进程的页表将逻辑地址转换为物理地址

通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M。进程未执行时,页表的始址 和页表长度 放在进程控制块中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

时间局部性:执行一条指令之后,该条指令可能被再次执行

空间局部性:执行一条指令之后,该指令的下一条指令可能被再次执行

快表:又称联想寄存器,是一种访问速度比内存快很多的告诉缓冲存储器,用来存放当前访问的若干页表项,以加快地址变换的过程。

单级页表存在的问题

1. 页表必须连续存放,因此当页表很大时,需要占用很多歌连续的页框,这就违背了我们进行分页的初衷

2. 根据局部性原理,某段时间,我们可能只需要访问某几个页框,所以没有必要让整个页表都常驻内存。

虚拟内存的实现

请求分页存储管理

在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。

如果有空闲块,则分配一个空闲块,并将所缺页面装入该块,并修改页表中相应的页表项。

如果没有空闲块,利用页面置换算法选择一个页面置换

请求分段存储管理

请求段页式存储管理

页面置换算法

1.最佳置换算法(OPT)(基本不可能实现)

没戏选择淘汰的页面将是以后永不使用,或者在很长时间内不再被访问的页面,这样就保证缺页率

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

每次选择淘汰的页面是最早进入内存的页面

3. 最近最久未使用置换算法(LRU)

每次淘汰的页面是最近最久未使用的页面

4. 时钟置换算法(CLOCK)

相关文章

  • Linux 内存管理 应用篇

    1、物理内存和虚拟内存 物理内存:物理内存就是系统硬件提供的内存大小,是真正的内存 虚拟内存:为了满足物理内存的不...

  • linux io与zero copy

    1. 物理内存与虚拟内存 1.1 物理内存 物理内存指通过物理内存条而获得的内存空间。 1.2 虚拟内存 虚拟内存...

  • 性能优化<第五篇>:内存优化

    1、为什么要内存优化? 2、了解内存中的内容 3、内存上限 4、GC内存回收机制 5、内存泄漏、内存抖动、内存溢出...

  • JVM第二天-volatile final synchroniz

    1.JAVA内存模型 简单的讲,Java 内存模型将内存分为共享内存和本地内存。共享内存又称为堆内存,指的就是线程...

  • 伙伴算法和slab算法

    0. 内存管理问题 内存碎片太小和管理内存碎片的效率问题 内存碎片:回收内存时,将内存块放入free链表中。因内存...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • java内存模型

    1.内存模型(JMM) 1.1什么是Java内存模型? Java内存模型将内存分为主内存和工作内存两大部分;主内存...

  • 变量提升

    堆内存 & 栈内存 JS中的内存一共两种:堆内存和栈内存 堆内存 作用:用来存储引用数据类型值的内存空间叫做堆内存...

  • 物理内存和虚拟内存

    物理内存 物理内存是真实的内存大小,即内存条内存大小 虚拟内存 虚拟内存是为了满足系统对超出物理内存容量的需求时在...

  • 5、哪些情况下会导致oom问题?

    1、根据java的内存模型会出现内存溢出的内存有堆内存、方法区内存、虚拟机栈内存、native方法区内存;2、一般...

网友评论

      本文标题:内存

      本文链接:https://www.haomeiwen.com/subject/tqkfjctx.html