程序装入方式

  1. 绝对装入:程序逻辑地址和物理地址是完全对应的。不现实
  2. 可重定位装入:装入的时候重新 计算内存地址。程序中的实际地址加上程序载入的起始地址;但是解决不了进程挂起 后重新唤醒的问题。唤醒的后的进程载入内存地址,位置一定会发生改变的。
  3. 动态运行时载入:专门有一个重定位寄存器,记录进程中程序和数据的内存起始地址;这样程序中的逻辑地址到 运行的时候加上重定位寄存器的数值,就是实际内存的逻辑地址;

程序连接方式

  1. 静态连接:将编译后的多个模块,一次性连接在一起,形成一个完整的文件。此时,连接后的程序在这个完成的文件里面就有了新的地址。完成的文件就不再拆开了。

  2. 装入时动态链接:编译后的一组模块,采用边载入边链接的方式。就是载入目标模块发生外部模块调用,就会将外部模块装入内存。

    2.1 在发生某一个模块修改或者更新的时候, 更新个别的模块就可以了。

    2.2 便于实现对目标模块的共享:如果是静态连接的方式,每一个完整的模块都将包含目标模块的拷贝。无法实现共享;动态连接就可以共享;

  3. 运行时动态链接:代码运行的时候需要某些模块不在内存中,就动态的加入内存,然后将其链接到调用这模块上。

    3.1 凡是在运行过程中没有被用到的模块,就都不会被调入内存和被链接到调用者程序。这样加快了程序的载入过程,而且节省了空间。

    3.2 一个程序可能很大,但是当前执行起来并不需要所有的模块都加载进来。全部加载进来一个是慢,一个是浪费内容空间。

内存分配方式

  1. 单一连续分配:适合单道程序;内存分用户区和系统区;这样独占了用户去内存区域了;简单,没有碎片;
  2. 固定分区:分区大小固定,可以分配多个分区,每一个进程独占一个分区;

    2.1 分区大小相等:程序大,装不下;程序小,浪费;

    2.2 大小不等:根据程序的大小,分配不同大小的内存空间

内存分配

对分区按照其大小进行排队,建立一张分区表;包括分区号,分区大小,起始地址,是否分配等信息;

当有程序载入时,有内存分配程序依据用户程序的大小在表中检索,从中找到能满足程序大小的,并且是没有分配的分区,分配给该程序,然后将内存表中的该分区标记为已分配。

动态分区分配

动态分区分配又称为可变分区分配,是指根据进程的实际需要,动态的为之分配内存空间。分区分配中所用的数据结构、分区分配算法、分区的分配和回收这三方面的问题。

动态分区的数据结构

1.空闲分区表

2.空闲分区链:除了存基本信息,链表中的节点可以存更多的信息

分配内存

从链表中查找合适位置,修改是否分配状态(大小正好合适),或者修改链表(有剩余,需要分裂),然后将该分区的首地址返回。

回收内存

内存使用完成后,还要回收。这时会出现以下可能。该节点前后分区是否空闲,如果遇到空闲,则需要合并。

基于顺序搜索的动态分区分配算法

四种算法如下:

1.首次是适应算法:每次从前往后找,只要找到一个合适的就停止

2.循环首次适应算法:每次不是从头开始,而是从上次位置找到的位置开始向后找,如果找到尾部还没有找到,就从头开始找到上次位置。

3.最佳适应算法:要求空闲表要从小到大,第一个找到的就是既能满足大小的,碎片又小。这样系统就留下了很多不可用的小的碎片;

4.最坏适应算法:每次都要找一个最大的分区来使用,从大的中间分割出一部分。要求从大到小,找第一个即可。

基于索引搜索动态分区分配算法

1.快速适应算法:更具每一个分区大小,将分区分成多区表;大小相同的分区链接在一起,组成一个分区表。

a.若,需要找到一个程序应该给它分配哪一个分区,应该先据大小,锁定是在哪个分区表中查找。这样更高效。缺点是归换内存时麻烦。

b.一个程序占用大小和分区大小不相同,就会出现内存浪费的情况;

2.hash算法:将大小相同的闲分区,放在同一个链表中;再将这些列表用has表包一层。当程序需要指定大小的分区时,直接通过has能定位到是在哪个链表中,找到该链表的第一个空闲分区句可以了

动态可重定位分区分配

1.紧凑型:连续分配方式,要求程序必须载入到一个连续的内存空间。当计算机运行一段时间有,必然会被分割成很多个小空间。当,多个空间不能连续的时候,对于一个大的程序就无法被满足,实际上不连续的加起来空间是以满足该程序的。碎片话的内存就需要重新整理,将碎片内存在一起,被使用不连续的也移动到一起。频繁发生移动,严重影响性能。不考虑。

2.动态重新位:进程中程序执行的时候,才会将具体的指令逻辑地址转换成物理地址,为了保证这一转换效率高,基本不消耗性能。这里需要用到重定位寄存器。它记录了进程使用的基地址。因为程序中逻辑地址是冲0始的,所以执行的时候加上基地址就真实的逻辑地址。 当系统对内存进程碎片化整理时,只需要修改进程中的重定位地址寄存器上的值就可以。不影响程序运行。

Swapping技术

交换技术主要解决内存不够用的问题。当一个就绪态进程被选中到cpu执行时,发现系统内存不够用的时候,需要将有些进程挂起,也称为中级调度。临时到外存上。等到下次执行的时候,再从外存调回内存使用。

交换类型:

1.整体交换:是指将一个进程,整个的放到外存。优点,简单。

2.分段交换:是指可以将一个进程中的某一段占用的内存数据,换到外寸上去。因为一个程序对于那些执行完了的,或者还没有内使用的内存段,可以交换到外寸上。

实现swapping技术,必须实现的功能

1.交换空间管理:那些被交换到外存的进程要怎么样存储在哪些地方。

2.进程换出:

a.找到要换存的进程:首先选择处于阻塞或者睡眠的进程,其次是按照优先级;如果优先级都是一样的,那就按照在内存中驻留的时间

b.换出过程:只能换出那些不共享的程序或者数据。以为采用分模块运行时动态连接的方式,所以一个模块可能被多个进程使用呢。现在外存申请存储空间,申请成功才会启动磁盘,将数据写入,然后对PCB数据结构进行修改。

3.进程换入:从就绪列表中找到进程载入列表。如果缺页减率减少,系统吞吐量下降时,暂停运行对换程序。

分页存储管理方式

1.分页存储:页号|位偏移量,页表中和物理内存的块号做映射,还有一个标记当前页号对应的空间是否已被分配出去。

a.每个进程在最后一页都可能产生 ,页内碎片

2.分段存储

a.信息共享。每一个模块的程序可以被多个进程引用,减少存储

b.信息保护。一个段就可以控制了

c.动态增长。只修改一个模块对应的一个段的大小即可

d.动态链接。程序用到的时候才加载进来。

3.段页存储:外层段表,内存页表

地址转换

  • 对于一个给定的虚拟地址,首先将其分为两部分:页号和页内偏移。假设虚拟地址为 32 位,页面大小为 4KB,那么高 20 位表示页号,低 12 位表示页内偏移。
  • 以虚拟地址0x12345678为例,根据页面大小,将其划分为页号0x1234和页内偏移0x5678。
  • 然后,通过页号查找页表,找到对应的物理页面号。如果页表项中存在有效的物理页面号映射,就获取该物理页面号。
  • 最后,将获取的物理页面号与页内偏移组合起来,就得到了对应的物理内存地址。例如,如果找到的物理页面号为0xABCD,那么物理内存地址就是0xABCD5678。

不论是哪种表,都要两次访问内存,低效。所以,有了快表(特殊的高速缓冲区),还有对应物理硬件支持,使用高速缓存寄存器。

但是,这种缓冲大小有限,所以如何高效的利用,才是关键。

有效访问时间是衡量的重要指标。在没有引用高速缓冲器的时候,需要两次访存的时间为2t。在使用以后,随着命中率的提高,有效访问时间有明显提升。

如何提高命中率,是一个有趣的领域。

硬件中,局部性原理,指令和数据在主存中都是连续存放的。所以,程序一段时间内基本上都是连续使用同样的数据。

由于高速缓冲大小有限,所以,页表和段表一般需要用多级才能实现。

OS之《内存管理》的更多相关文章

  1. 《Tsinghua os mooc》第17~20讲 同步互斥、信号量、管程、死锁

    第十七讲 同步互斥 进程并发执行 好处1:共享资源.比如:多个用户使用同一台计算机. 好处2:加速.I/O操作和CPU计算可以重叠(并行). 好处3:模块化. 将大程序分解成小程序.以编译为例,gcc ...

  2. OS之进程管理 --- 死锁

    什么是死锁 在正常操作模式下,进程按如下顺序来使用资源: 申请:进程请求资源 使用:进程对资源进行操作 释放:进程释放资源 当一组进程中的每一个进程度在等待一个事件,而这事件只能有一组进程的另一个进程 ...

  3. [OS] 死锁相关知识点以及银行家算法详解

    因此我们先来介绍一下死锁: 死锁特征 当出现死锁时,进程永远不能完成,并且系统资源被阻碍使用,阻止了其他作业开始执行.在讨论处理死锁问题的各种方法之前,先深入讨论一下死锁的特征. ·必要条件 (1)互 ...

  4. OS | 死锁

    死锁的四个条件 互斥 占用等待 非剥夺 循环等待 死锁的解决方案 死锁预防 间接预防:防止前三个条件中的任何一个的发生 直接预防:防止循环等待的发生 死锁避免 进程启动拒绝:不启动任何一个可能发生死锁 ...

  5. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  6. java 利用ManagementFactory获取jvm,os的一些信息--转

    原文地址:http://blog.csdn.net/dream_broken/article/details/49759043 想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如 ...

  7. Oracle死锁

    当两个或多个用户相互等待锁定的数据时就会发生死锁,这时这些用户被卡在不能继续处理业务,oracle可以自动检测死锁并解决他们,通过回滚一个死锁中的语句,释放锁定的数据,回滚的话会遇到ora-00060 ...

  8. 正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样...

    出错提示: 正尝试在 OS 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起. 原因分析: .NET2.0中增加了42种非常强大的调试助手 ...

  9. 查找原始MySQL死锁ID

    转载地址:http://yueliangdao0608.blog.51cto.com/397025/1180917 如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以 ...

  10. mysql 5.6 read-committed隔离级别下并发插入唯一索引导致死锁一例

    今天,某个环境又发生了死锁,如下: *** (1) TRANSACTION:TRANSACTION 735307073, ACTIVE 0 sec insertingmysql tables in u ...

随机推荐

  1. Python 项目配置管理框架技术选型

    一.背景介绍 在实际生产项目中,不同环境(如开发.测试.生产环境)常有不同配置需求,如数据库链接等.我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现 "一份代码, ...

  2. 在Windows平台使用源码编译和安装PyTorch3D指定版本

    最近在部署 SyncTalk 虚拟数字人项目时,需要安装很多依赖项,在执行到pip install --no-index --no-cache-dir pytorch3d -f https://dl. ...

  3. 宝塔部署java后端项目

    1. 安装插件 宝塔面板找到软件商店然后搜索 Java java项目管理安装 安装后点击设置准备安装 tomcat 2. 添加项目

  4. 分布式缓存 - 缓存服务器 - redis

    如果一般的缓存可以解决问题,就不必使用分布式缓存 : 一般使用分布式缓存 都是使用 redis : 使用教程: 1. 安装包 Microsoft.Extensions.Caching.StackExc ...

  5. vue的计算属性computed和监视属性waatch的区别

    共同的:都是用于监听数据变化的属性: 计算属性:必须有返回值return ,依赖其它属性值,其它属性值发生变化的时候就会重新计算 : 监视属性:每当数据变化的时候就会触发执行,watch有两个新值和旧 ...

  6. 基于 JuiceFS 的 KubeSphere DevOps 项目数据迁移方案

    方案背景和目的 KubeSphere 自发布以来已有 2 年之久,从 2.1.0 版本至目前最新版本 3.3.开发人员的编译构建都基于环境平台的 DevOps 功能(底层是 jenkins)实现,如果 ...

  7. 基于 Python + Vue3!一个轻量级的域名和 SSL 证书监测平台!

    大家好,我是 Java陈序员. 在企业开发中,由于业务众多,涉及到很多业务域名证书,证书过期由于遗忘常常未能及时续期,导致线上访问异常,给企业带来损失! 今天,给大家介绍一个轻量级的域名和 SSL 证 ...

  8. cxv文件合并

    1.新建bat脚本 @echo off setlocal enabledelayedexpansion copy *.csv new.csv echo @@@@@@@@@@@@@合并成功!@@@@@@ ...

  9. 常见CDN绕过姿势

    CDN绕过: 1.子域名 子域名查询: 在一些网站中有可能只加速了主站,而一些其它子域名和主站在同一个C段或者同服务器 利用子域名查询工具: http://tool.chinaz.com/subdom ...

  10. Visual Studio登录页面打不开无法登录的解决

    我也是折腾了好久-- 1. 打开Visual Studio-->工具-->选项-->账户,找到了登录配置 2. 将嵌入式Web浏览器改为"Windows身份认证中转站&qu ...