操作系统-内存管理

导读:本篇文章讲解 操作系统-内存管理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

操作系统-内存管理

1. 问题描述

  1. 从程序员写代码到运行中间操作系统需要做什么?
  2. 程序的在装入内存之前需要做什么?
  3. 程序如何放进内存?
  4. 内存是如何分配与回收地址的?

2. 详解

2.1从程序员写代码到运行中间操作系统需要做什么?

  1. 进程运行的原理
    在这里插入图片描述

  2. 程序链接
    程序链接方式有三种

    1.静态链接:
    在程序运行之前先将各个目标模块以及他们所需要的函数库连接成一个完整的可执行文件(装入模块)
    2.装入时动态链接:
    边装入边链接
    3.运行时动态链接
    运行时需要哪个模块那个模块才进行链接
    

    装入方式
    由于程序中生成的时逻辑地址所以我们要转为内存中的物理地址,也就是这个程序中的某个变量放在内存的那个地方。比如在程序中我们设置的逻辑地址为0x00001可能到内存地址就时0x00011了,因为内存中地址为0x00001的地址有可能被系统应用占用了。

    1. 绝对装入:程序员要知道对应的地址,提前写好
    2. 静态重定位:装入时,由装入程序转换为物理地址
    3. 动态重定位:运行时通过寄存器存起始地址,逻辑地址通过它转为物理地址
    

    链接完了就可以形成完整的逻辑地址

  3. 装入完了,但是程序执行完要释放内存,未执行的需要加入内存中,那么内存如何分配与回收呢?

2.2内存是如何分配与回收地址的?

连续分配管理方式

  • 单一连续分配
1.内存分为:系统区和用户区
2.只有一道程序可以运行
3.无外部碎片(下面有解释)
4.由内部碎片(下面有解释)
  • 固定分区分配
预先划定内存大小
划定的两种方式
1.分区大小相同
缺乏灵活性,可以用于对同样大小的程序进行控制
2.分区大小不同
增加了灵活性,比如快递柜,有大的小的
==
无外部碎片,有内部碎片,内存利用率低,当程序太大时不能满足要求,需要使用覆盖于交换技术
  • 动态分区分配
不预先划分内存分区
根据进程大小动态建立分区,容易产生外部碎片,需要通过紧凑技术进行处理外部碎片
====================

图解

在这里插入图片描述

名词解释

内部碎片:一个进程大小为2M系统给了2.5M其中0.5是进程没有用的这就是内部碎片,比如固定分区方式下,每块大小就是2M用不用的完都是这么多固定的
外部碎片:就是一个进程有2M,但是内存被其他进程占用了只剩下1M这1M其他进程不用,但是也给不了其他的进程用,这就是外部碎片
====================

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/119267.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!