内存管理笔记

一、概述:

在操作系统理论中,进程是资源分配的基本单元,每个进程的资源都是独立的,除非刻意的去共享。在多进程中每个进程的内存是如何保持独立的,互相之间不可以进行访问这是内存管理需要讨论的一个话题,另一个我们内存的资源是有限的,然而程序运行时的大小确实不可以估计的,可能远远大于内存的容量,那么如何运行比内存空间大的程序呢?第三关于空闲的内存如何管理,进程需要时如何分配,释放时如何安排这些释放的进程

总的来说就是讨论三个问题:

  • 进程之间的内存如何独立
  • 如何运行大于内存容量的进程
  • 内存空间的分配与释放

二、无存储器抽象(了解):

每个进程直接访问物理地址,每个时间片只能运行一个进程,当切换到下一个进程时将数据保存到磁盘文件中,然后把下一个程序读入内存中在运行即可,这样就不会发生冲突,还有种方式就是将内存划分成等分大小的块,每个块对应一个保护建,当访问到的块的保护键和psw字不同硬件会发现到这一个事件,但是这样也避免不了进程之间的内存存在互相越界,就是因为使用物理地址。

使用物理地址带来的严重问题:

  • 直接使用物理地址会破坏操作系统
  • 运行多进程困难

三、地址空间【重要】:

解决进程之间的内存如何独立
3.1:要保证多个进程处于内存中不受影响的需要解决两个问题:

  • 保护(访问到不该访问的发生错误)
  • 重定位(访问0实际上会通过偏移量会访问到实际的100)

3.2:地址空间的概念:
地址空间就是对内存的抽象,可以理解为网络中的频分复用,每个进程有一段独立的地址空间,其他进程无法进入,自身来说也不能访问其他进程的空间(除非有意的去共享)

3.3:基址寄存器和界限寄存器:
用于解决上面说的两个问题
基址寄存器和界限寄存器是两个特殊的CPU寄存器

  • 基址寄存器:存放程序运行的起始地址
  • 界限寄存器:程序的长度

每个程序都会有不同基址,访问一个地址时使用基址加上地址(比如一个进程的基址是100 之后需要访问30 那么真实的地址时130)会这样进行一个重定向,同时不能超过界限
虽然这样可以解决重定位的问题,但是这样每次访问内存都需要进行加法和比较运算,这样效率就会很低

四、交换技术:

解决如何运行大于内存容量的进程

4.1:两种方案
即使是现在也还没有足够的内存,去让用户随意的开启任意多/大的进程,因此出现了两种内存超载技术

  • 交换技术:将空闲的进程中的内存数据一次性换出到磁盘中
  • 虚拟内存技术:将空闲的进程中的内存数据一部分换出到磁盘中

首先先理解交换技术

在这里插入图片描述
4.2:内存紧缩技术

因为进程的大小不同因此在多次换出还换入的操作中,容易形成很多的小的空隙,因此需要有程序需要将空隙不断往下挪动,这个技术叫做内存紧缩技术按时这个操作非常浪费时间,一般不做

4.3:交换技术问题分析
当一个进程不断扩大进程使用时,如果相邻的空间是空闲的就直接拿

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值