操作系统 存储管理 (第五章)

# 操作系统

内存管理

在这里插入图片描述

是怎么装入到内存中去的?

程序的链接和装入

当一个程序要运行时候要经过 编译 链接 装入

具体 预处理–>编译–> 汇编–> 链接

例如#include <stdio.h> hello.c中的 hello.i

编译是要将高级语言转为 汇编语言 hello.s (.asm文件)

汇编语言转为机器语言就是二进制 hello.o (.obj 文件)(目标模块)

链接是和已经预编译好的printf.o 文件合并到我们的hello.o中 形成一个可以执行的文件hello(二进制 装入模块)(.exe文件)


在汇编语言中.asm文件转为.obj 文件 再转为运行文件.exe

编译好的每一个 目标模块 都是以0为基地址顺序编译 (相对地址 也叫逻辑地址)
绝对地址(物理地址):内存中各物理存储单元的地址是从统一的基地址顺序编址,这种地址称为绝对地址

装入

而要相对地址转换成绝对地址 (地址重定位)可以分静态重定位 和动态重定位

1.静态重定位
就比目标程序(装入模块)的相对地址为 0-1250 ,而内存的能够给的实际地址(物理地址)是从1000开始 ,所以目标程序在内存的地址1000-2250.
静态重定位的缺点
不能再在内存中移动。
要求程序的存储空间是连续的。
思考:如果程序不是连续的? 怎么办 程序中用的地址可能是其他位置呢, 比如 指针 , int a = 3, int b = 4 + a, 程序a要用的地址在程序b中,进程调用资源, 数据资源的修改地址
2.动态重定位
程序在执行过程中进行地址重定位 。程序执行时才加入到内存中分配地址(物理地址)
需要硬件------重定位寄存器的支持
### 动态重定位具体实现
动态重定位的优点 1.目标模块装入内存时不需要修改 ,
2.一个程序是由若干个相对独立的目标模块组成 ,
3.各目标模块 有自己的“重定位寄存器”


补充 支持程序浮动的地址转换机制是?

链接

静态链接, 装入时动态链接 , 运行时动态链接
是编译后得到的目标模块 (.obj 文件)以及所需要的库函数(预编译好的printf.o 文件)装成一个完整的装入模块(.exe文件) (如果是一个完整的装入模块 称为 可执行文件)。

1.静态链接
在程序运行前,先将各目标模块及它们所需的库函数,链接成一个完整的装入模块,以后不再拆开
静态库的内容发生改变时,其依赖的静态库需要重新编译
2.装入时动态链接
可以边装入边链接
优点 1便于软件版本的更新 2 便于实现目标模块的共享
3.运行时动态链接


内存的分配和管理

分配

单一连续分区 ,固定分区,可变分区 ,动态重定位分区

动态重定位分区 采用紧凑的方法, 将内存中的原来的所有进程进行移动,使它们互相邻连接;
???????


补充 MS-DOS的内存空间采用的存储管理方式?
固定分区方式管理主存储器的最大缺点是?

管理

页式存储管理 段式存储管理
1.页式存储管理
通常页的大小为 512B--4MB
把内存空间分成大小相同的若干个存储块(页框),并且进行编号 0块1块 3块 。。。。n块
将进程的逻辑地址空间分成若干个与内存块大小相等的页(页面)
页式管理系统为进程建立一张页表,通过页表可以查看进程的每个页面所对应的页框,
如果如果一个程序加载到内存(进程)中 如程序A有3页面 在内存使用到页框3块
进程的最后一页经常装不满一块,称为“页内碎片”
页号 = 逻辑地址/页面长度 (取整数部分)
工具https://tool.520101.com/calculator/yushu/ (取余)
知道该页号对应页面在内存中的起始地址(页面始址)
(页内位移)页内偏移量 = 逻辑地址%页面长度 (取余数部分)
物理地址 =  页面始址 + 页内偏移量
举个例子 已经知道一个进程(不知道怎么说)的逻辑地址为 1500 ,页的大小为1024 (页面长度),已知页表 如 页号 0 1 2 分别对应 块号 4 6 7 . 求进程的物理地址?
套用公式 1500/1024 = 1 ,1500%1024 = 476, 知道页号为1 可知道块号6 . 因为页面长度为1024 所有 61024 = 页面始址 , 而物理地址 是 61024 + 476 = 6620 这要十进制转为二进制
页式存储管理的地址变换机构
地址变换机构
是实现逻辑地址到物理地址的动态重定位
2.段式存储管理
方便编程,段的共享,段的保护,动态链接,动态增长

参考的博客


以上内容部分内容转自
https://www.yiibai.com/os/os-memory-management-introduction.html
https://blog.csdn.net/C1033177205/article/details/124559014
http://t.zoukankan.com/sunbines-p-9237604.html
https://www.cnblogs.com/lvjt0208/p/14622536.html
https://blog.csdn.net/qq_41740004/article/details/113624029
https://blog.csdn.net/Tir_zhang/article/details/125164722

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值