软考(十)内存管理(一)

内存管理(一)

基本概念

内存管理的功能:
  1. 内存分配:负责管理系统中的内存空间,并根据进程的需求进行内存分配。内存管理器会记录内存空闲块的信息,以及已分配内存块的使用情况

  2. 地址映射:将逻辑地址(进程中使用的地址)映射到物理地址(实际的内存地址)。地址映射的目的是保护进程的地址空间,防止不同进程之间的地址冲突

    将逻辑地址转换为物理地址的过程。地址转换通常涉及页表、段表等数据结构的维护和管理,以及地址映射的实现

  3. 内存保护:通过设置内存访问权限(如读、写、执行),保护进程的地址空间不受非法访问或恶意程序的侵害。内存保护可以防止进程之间的相互干扰和非法访问

  4. 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存

程序的装入和链接

创建进程首先要将程序和数据装入内存。将用户资源程序变为可在内存中执行的程序。分为以下几个步骤

  1. 编译:由编译程序将用户源代码编译成若干目标模块
  2. 链接:由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成一个完整的装入模块
  3. 装入:由装入程序将装入模块装入内存运行
    在这里插入图片描述
链接的三种方式
  1. 静态链接:程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序,之后不再拆开
  2. 装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入 边链接的方式
  3. 运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时才进行的。其优点是便于修改和更新,便于实现对目标模块的共享
内存的装入模块装入内存的三种方式
  1. 绝对装入:在编译时,若知道程序将驻留在内存的某个位置,则编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。只适合单道程序的装入
  2. 可重定位装入:多道程序环境下,多个目标模块的起始地址通常都从0开始,程序中的其他地址都是相对于起始地址的,此时采用可重定位装入方式。根据内存的当前情况,将装入模块装入内存的适合位置。装入时对目标程序中指令和数据的修改过程称为重定位。地址变换通常时在装入时一次完成的,称为静态重定位
  3. 动态运行时装入:程序在内存中若发生移动,则需要动态的装入。即并不是立即的装入内存,而是把这种相对地址转换绝对地址的转换推迟到程序真正要执行时才进行

逻辑和物理地址空间

**逻辑地址:**编译后,每个目标模块都从0号单元开始编址,称为目标模块的相对地址

**物理地址:**内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据,最后都是通过物理地址从主存中存储。 装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程为地址重定位

覆盖和交换技术

覆盖(Overlay)和交换(Swapping)是内存管理中常用的两种技术,用于解决内存资源不足的问题,特别是在早期计算机系统中常见

覆盖技术:

  1. 覆盖技术通过在内存中交替加载和卸载不同的程序段或数据,以实现在有限的内存空间中运行更大规模的程序
  2. 当一个程序的内存需求超过了系统可用内存时,覆盖技术可以将程序划分为多个逻辑段,并在程序执行过程中动态地加载和卸载这些段,使得每次只有当前需要的段被加载到内存中
  3. 覆盖技术通常需要程序员手动管理内存段的加载和卸载,因此编程复杂度较高,容易出错

交换技术:

  1. 交换技术通过将内存中暂时不需要的进程或数据移出到磁盘存储空间,从而释放内存资源,以便为其他进程或数据提供空间
  2. 当内存资源不足时,操作系统会根据一定的策略选择合适的进程或数据进行交换,并将其写入到磁盘上的交换文件中,然后再将需要的进程或数据从交换文件中重新调入内存
  3. 交换技术可以实现自动化的内存管理,减轻了程序员的工作负担,但可能会引入额外的开销,如磁盘I/O开销和性能损失

连续分配和非连续分配管理方式

定义:

为一个用户程序分配一个连续的内存空间。比如一个用户程序需要2GB的内存,那么就在内存空间中为其分配一块连续的2GB空间

连续分配方式
  1. 单一连续分配

    在单一连续分配方式中,整个内存空间被分配给一个进程使用,而操作系统和其他进程则共享剩余的内存空间

    这种方式适用于一些嵌入式系统或单用户环境,但不能支持多任务或多进程的并发执行

  2. 固定分区分配

    在固定分区分配方式中,内存被划分为固定大小的分区,每个分区可以被分配给一个进程使用

    分区的大小通常是提前确定的,不同的分区可以有不同的大小,但一旦分配给一个进程,就不能再被其他进程使用

    这种方式可以有效地避免外部碎片问题,但内部碎片(当程序小于固定分区大小时,也占用一个完整的内存分区空间,这样分区内部就存在空间浪费,称为内部碎片)可能会存在

  3. 动态分区分配

    在可变分区分配方式中,内存被划分为若干个可变大小的分区,每个分区可以根据进程的需求进行动态分配和释放

    分区的大小不是固定的,而是根据进程的内存需求动态调整。当一个进程需要内存时,操作系统会为其分配一个大小合适的分区,当进程不再需要内存时,分区则会被释放回空闲列表

    这种方式可以灵活地满足不同进程的内存需求,但可能会引入外部碎片问题

非连续分配方式

非连续分配允许一个程序分散地装入不相邻的内存分区。非连续分配管理方式根据分区大小是否固定,分为分页存储管理方式和分段存储方式。分页存储又分为基本分页存储管理方式和请求分页管理方式

分页存储基本概念
  1. 页和页框

    内存被划分为大小相等的物理页框(Page Frame),而进程的地址空间也被划分为大小相等的逻辑页(Page)

    页框是物理内存的基本单位,通常是连续的内存块,而页是进程的基本单位,通常包含代码、数据或堆栈等内容

  2. 地址结构

    在这里插入图片描述

    地址结构包含两个部分:

    前一部分为页号P;后一部分为页内偏移量W。地址长度为32位,其中0~11位为页内地址,即每页大小为4KB;12-31位为页号,地址空间最多220

  3. 页表

    为了便于在内存中找到进程的每个页面对应的物理块,系统为每个进程建立一张页表,它记录页面在内存中对应的物理块号,页表一般存放在内存中

    页表项:页表项是是页表中的一个条目,用于记录逻辑页号与物理页框号之间的映射关系

    页表项和地址:都是由两部分构成,第一部分都是页号,但页表项的第二部分是物理内存中的块号,地址第二部分是页内偏移。页表项和地址的第二部分共同组成物理地址

基本地址变换机构

基本地址变换结构是一种用于将逻辑地址转换为物理地址的简单内存管理方案

在这里插入图片描述

逻辑地址A到物理地址E的变换过程如下:

页面大小L,逻辑地址A,物理地址E,页表在内存的起始地址F和页表长度M

  1. 计算页号P( P = A / L ) 和页内偏移量W( W = A % L)
  2. 比较页号P和页表长度M,若P ≥ M,则产生越界中断,否则继续执行
  3. 页表中页号P对应的页表项地址 = 页表起始地址F + 页号P*页表项长度,取出该页表项内容b,即为物理块号。
  4. 计算E = b*L + W, 用得到的物理地址E去访问内存
二级页表

二级页表是一种改进的页表组织结构,用于管理大型逻辑地址空间和物理内存的映射关系。它的设计思想是将整个页表分为多个较小的部分,以减小每次页表查找的开销

一级页表:一级页表是一个较大的页表,存储了逻辑地址空间中每个页的页号和对应的二级页表的物理地址。每个页表项包含一个有效位和指向二级页表的指针

二级页表:二级页表是一组较小的页表,每个二级页表存储了一部分逻辑地址空间的页号与物理页框号的映射关系。每个二级页表都有一个唯一的页表起始地址,可以存储较少的页表项

流程

  1. 当进程产生一个逻辑地址时,系统首先将逻辑地址中的高位作为一级页表的索引,找到对应的一级页表项
  2. 一级页表项中存储了指向二级页表的指针。系统根据该指针找到对应的二级页表的起始地址
  3. 然后再根据逻辑地址中的低位作为二级页表的索引,找到对应的页表项,从而获取到物理页框号
  4. 最后将物理页框号与逻辑地址中的偏移量相加,得到物理地址

基本分段存储管理方式

分段存储管理方式是一种内存管理技术,它将进程的逻辑地址空间划分为多个不同长度的段,每个段代表了进程中的一个逻辑单元(如代码段、数据段、堆、栈等)。每个段可以根据需要动态增长或缩减,使得逻辑地址空间的管理更加灵活

组成结构:

  1. 段描述符表(Segment Descriptor Table):存储了每个段的描述符,描述了段的起始地址、长度、保护信息等。每个段描述符包含了段的基址(起始地址)和界限(长度)以及其他控制信息
  2. 段寄存器:用于存储当前进程正在访问的段描述符表的基址,以便于进行段描述符的查找

流程

  1. 当一个进程产生一个逻辑地址时,系统将逻辑地址分成段号和段内偏移量。
  2. 然后根据段号在段描述符表中查找对应的段描述符。
    息等。每个段描述符包含了段的基址(起始地址)和界限(长度)以及其他控制信息
  3. 段寄存器:用于存储当前进程正在访问的段描述符表的基址,以便于进行段描述符的查找

流程

  1. 当一个进程产生一个逻辑地址时,系统将逻辑地址分成段号和段内偏移量。
  2. 然后根据段号在段描述符表中查找对应的段描述符。
  3. 根据段描述符中的起始地址和长度,将逻辑地址转换为物理地址。
  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值