《操作系统导论》学习笔记(六):逻辑地址空间管理

《操作系统导论》学习笔记(六):逻辑地址空间管理本文深入探讨了操作系统中内存管理的三种主要方式 段式 页式和段页式

大家好,欢迎来到IT知识分享网。

逻辑地址空间管理 — 段式(segmentation)

逻辑地址空间管理根据内存分区的大小、是否固定、对程序员是否透明可分为 段式存储管理(segmentation)页式存储管理(paging)。段式存储管理的内存分区较大,分区大小可动态增长,程序员负责段的分配及回收。

1. 段地址空间
2.逻辑地址结构

内存块在段式存储管理中需要确定所在的段、段内的位置,再转换为物理地址,所以段的逻辑地址由 段号(segment)段内偏移量(offset) 组成的二元组 (s, offset)。
在这里插入图片描述

2. 硬件支持

段表 存储在物理内存中,表示段地址空间与物理地址空间的映射关系,段表由操作系统控制更新。段表项对应进程的一个段,段表项目包括段号、段长、段基址。
在这里插入 图片描述

3. 物理地址生成

在这里插入图片描述

  1. CPU从程序P中获取逻辑地址,前10位为段号,后10位为段内偏移
  2. 操作系统软件根据段号查询段表并保存段长到界地址寄存器(段长度寄存器),硬件MMU比较段内偏移是否超过段长,超过则发出越界异常给操作系统,否则继续执行
  3. 操作系统根据段号保存段基址到基地址寄存器(段基址寄存器),硬件MMU将段内偏移与段基址相加得到物理地址。

例:
在一个段式存储管理系统中,其段表及逻辑地址表如下,求逻辑地址所对应的物理地址。
表 1 段 表 表1 \quad段表 1

段号 段基址 段长
0 210 500
1 2350 20
2 100 90
3 1350 590
4 1938 95

表 2 逻 辑 地 址 表2 \quad 逻辑地址 2

段号 段内偏移
0 430
1 10
2 500
3 400
4 112
5 32

答:

  • 第0段的段长为500,段内偏移为430,逻辑地址(0,430)合法,段基址为210,所以物理地址为430+210=640。
  • 第1段的段长为20,段内偏移为10,逻辑地址(1,10)合法,段基址为2350,所以物理地址2350+10=2360。
  • 第2段的段长为90,段内偏移为500,发生越界异常,逻辑地址(2,500)非法。
  • 第3段的段长为590,段内偏移为400,逻辑地址(3,400)合法,段基址为1350,所以物理地址为1350+400=1750。
  • 第4段的段长为95,段内偏移为112,发生越界异常,逻辑地址(4,112)非法。
  • 段表内没有第5段,逻辑地址(5,32)非法。

逻辑地址生成

1. 栈(stack)

栈(stack) :编译器自动分配回收。运行函数 f u n c ( ) func() func() 时,编译器自动在栈内存放整型变量 x x x;当从函数返回时,编译器自动回收整型变量 x x x

void func() { 
    int x; // declares an integer on the stack } 
2. 堆(heap)

堆(heap):程序员通过函数 malloc()/free() 分配回收。

(1) 头文件及函数原型

#include <stdlib.h> void *malloc(unsigned int size); void free(void *ptr); 

m a l l o c ( ) malloc() malloc() 分配成功则返回指向被分配内存的指针,否则返回空指针NULL;而 f r e e ( ) free() free()不返回任何值

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/139211.html

(0)
上一篇 2025-06-07 17:26
下一篇 2025-06-07 17:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信