在多道程序当中,如果要让我们的程序运行,必须先创建进程。而创建进程的第一步便是要将程序和对应的数据装入内存。把用户的源程序变成可执行的程序要经历 编译 - 链接 - 装入 三个过程。

此刻我要说的就是最后的一个步骤,如何为一个用户程序分配相应的内存空间。

第一种:单一连续分配方式

适用于单用户、单任务的操作系统。没什么好讲的。

第二种:固定分区分配

此种分配方式把内存空间分为固定大小的区域,每个分区允许一个作业被装入。分区大小可以不相同。通常会建立一张分区使用表来记录每个分区的起始地址、分区大小、状态。没有足够大的分区则拒绝分配内存。此种分配方式是最早的多道程序的存储管理方式。

缺点:限制了进程的数目,内存空间利用率比较低。

第三种:动态分区分配

此种方式涉及到相应的数据结构(分区表、分区链),分区分配算法和回收操作。

分区分配算法有:首次适应算法 ( 以链表结构为例,下同。从链首开始顺序查找,找到一个符合条件的分区即可进行相应的分配,没有符合条件的则分配失败 ) 、循环首次适应算法(从上一次符合条件的分区进行循环查找 ) 、最佳适应算法(首先需要把空闲分区链表按容量排序 [ 排序的目的是为了加速查找,否则就要遍历整个链表 ] ,然后从链首进行顺序查找 ) 、最坏适应算法( 选择最大的空闲分区,然后进行分配 ) 、快速适应算法 ( 分类搜索算法,采取分区表加上相同类别管理的链表进行记录,仅需根据进程的长度,即可分配相应的内存空间 )。

回收内存的方式:只要回收空间与空闲分区相邻接,那么仅需与空闲分区合并即可;否则,需为回收区单独建立一项新的表,然后把回收区的首地址插入到空闲链中相应的位置。

缺点:相应分配的算法比较复杂,回收空间需要合并分区,系统开销大。

第四种:伙伴系统

规定:已分配区间或空闲区间的大小均为2的k次幂。

具体:当进程需要一个长度为n的空间时,需要计算一个i值,使得2的i-1次方小于n,2的i次方大于等于n。然后根据计算结果,得到空闲分区链表中查找大小为2的i次方的空闲分区,如果不存在这样的分区,则将2的i+1次方化成两个2的i次方的空闲分区,以此类推,总有符合的空闲分区。回收与分配空间的方式恰好相反。

第五种:哈希算法

在分类搜索算法的基础上,利用哈希快速查找的优点,快速到查找相同容量类别的链表,实现最佳的分配策略。

第六种:可重定位分区分配

此种算法考虑到的情况是:有很多内存碎片。对于一个进程来说,没有任何一个碎片能够满足进程所需的容量要求,但是碎片的容量总和能够满足一个或者多个进程的容量要求。

解决方案:①把内存中的所有作业全部移动,让他们紧凑在一起,这样内存碎片便集中在一起了。(需要对移动的程序地址进行修改才行)

分区分配算法:与动态分区分配算法类似,不过多了“紧凑”的操作。

第七种:对换

将占用内存却没有干什么事情的进程给放到对换区(外存分为文件区和对换区)。

linux内存分配方式有三种,浅谈操作系统的内存分配原则相关推荐

  1. OS - 浅谈操作系统的内存管理

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 简介 内存是计算机中最重要的资源之一,通常情况下,物 ...

  2. 指令引用的0x0000000内存 不能为written_浅谈虚拟机内存区

    1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...

  3. java内存模型浅析_浅谈java内存模型

    不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的.其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改.总结jav ...

  4. java 内存分配参数_浅谈JAVA内存分配与参数传递

    java中方法的参数传递方式只有一种:值传递. java内存分配: 1.栈:存放 基本类型的数据.对象的引用(类似于c语言中的指针) 2.堆:存放用new产生的数据 3.静态域:存放在对象中用stat ...

  5. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  6. android 存储空间监控,浅谈 Android 内存监控(中)

    前言 在上篇 浅谈 Android 内存监控(上) 中,我们聊了 LeakCanary,微信的 Matirx 和美团的 Probe,它们各自有不同的应用场景,例如,在开发测试环境,我们会偏向用 Lea ...

  7. 【JVM调优】JVM内存管理调优浅谈

    什么是JVM Java Virtual Machine,Java虚拟机 Java虚拟机有自己完善的硬件架构,如处理器.堆栈等,还具有相应的指令系统. Java虚拟机本质上就是一个程序,当它在命令行上启 ...

  8. linux系统pkl,(网摘)Linux新手必看:浅谈如何学习linux

    地址:http://www.eimhe.com/bbs/viewthread.php?tid=53256&extra=page=1> Linux新手必看:浅谈如何教习linux 一.起步 ...

  9. 浅谈主流内存发展历史

    浅谈主流内存发展历史 申屠志刚2018329621200 信息学院 计算机科学与技术18(3) 摘 要:计算机必然包含运算器.控制器.存储器和输入输出设备等五个重要部分,其中作为内存储器的内存条在PC ...

最新文章

  1. 重新分区_完全不需要装软件!教你轻松调整硬盘分区
  2. JMeter3.0 post参数/BeanShell中文乱码问题
  3. Python编程的若干个经典小技巧
  4. Jenkins环境搭建(2)-搭建jmeter+ant+jenkins自动化测试环境
  5. Creating UIImage with renderingMode in Swift
  6. d3.js 实现烟花鲜果
  7. lambdas for_Wordcounter,使用Lambdas和Fork / Join计算Java中的单词数
  8. Android 替换字体的方式以及同时替换多种字体
  9. matlab与python实现神经网络_Adaline神经网络简单介绍和MATLAB简单实现
  10. Tensor:归并操作
  11. easyexcel 工具类_阿里程序员常用的 15 款开发者工具~
  12. 推荐一款录屏软件——EV录屏
  13. UniWebView3 使用中遇到的坑
  14. 基础篇:6)形位公差标注(GDT标准)-总章
  15. as_completed函数用例
  16. STL之vector的push_back过程详解
  17. 安装计算机一级出现appcrash,电脑appcrash的问题怎么修复
  18. Unity Fleck Map 参数说明
  19. Thunar文件管理器新增一个使用root权限打开当前目录或者文件夹
  20. 批处理文件 执行java_利用批处理文件运行java程序

热门文章

  1. Java程序员烂大街了?
  2. STM32F103C8T6+ATK-ESP8266连接原子云
  3. CH375与中断传输
  4. 2022-2027年中国半导体硅片行业市场全景评估及发展战略规划报告
  5. 架构君公众号推荐 第一期
  6. 【免费开放源码】审批类小程序项目实战(预约历史页面)
  7. 百度VidPress Sports团队获SoccerNet-v2足球视频理解竞赛双料冠军
  8. 计组 | 算数移位及其移位后的空位添补规则
  9. 虚拟内存与物理内存的区别,
  10. oto餐饮app实时订单物流追踪系统架构设计(一)