[操作系统] 地址空间和交换技术

地址空间和交换技术



1. 地址空间的概念

在最初系统中没有对内存的抽象,直接使用物理地址进行存储,这种方法会带来严重的问题。

  1. 如果用户程序可以寻址内存的每个字节,它们就可以容易地破坏操作系统。从而使操作系统停止运行
  2. 想要同时运行多个程序很困难,因为使用物理地址很容易将数据覆盖。

要保证多个应用程序同时存在于内存并且不互相影响,要解决两个问题:保护重定位

一个很好的解决方法是创造一个内存抽象:地址空间。地址空间为程序创造了一种抽象的内存,地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间(在特殊情况下想要共享除外)。例如,电话号码00000000000 ~ 99999999999就是一个地址空间。

2. 基址寄存器和界限寄存器

使用地址空间的困难点在于给每个程序一个自己的地址空间,假如A程序想要使用的地址为28,B程序想要使用的地址也为28。两个程序同时运行,我们不能让这两个程序相互影响,就要让他们想要使用的**逻辑地址**28对应不同的物理地址。

解决这个问题的一种方法是动态重定位。为每个CPU配置两个特殊的寄存器,基址寄存器界限寄存器。当程序运行时,程序的起始物理地址装载到基址寄存器,长度装载到界限寄存器。这样程序在执行命令时,如果使用逻辑地址就会被解释为基址寄存器存储的物理地址。例如,此时程序想要访问逻辑地址28,使用命令 “JMP 28”,此时基址寄存器中的值为16412,硬件自动把这条指令解释为”JMP 16412”。

使用这种方法的缺点是,每次访问内存都需要进行加法和比较

3. 内存超载

当所有要执行的进程所需要的内存大于计算机的物理内存时,就不能把所有进程一直保存在内存中。这种情况叫做内存超载。要想解决这种问题,有两种方法。

  1. 交换技术
    即把一个进程完整调度内存,使该进程运行一段时间,然后把它存回磁盘。空闲进程主要存储在磁盘上,就不会占用内存。

  2. 虚拟内存
    可以使程序在只有一部分被调入内存的情况下运行。

4. 交换技术

内存交换技术

如图所示,阴影区域表示未使用的内存。开始时内存中只有进程A。之后创建进程B和C或者从磁盘将它们还如内存。d图显示A被交换到磁盘,D被调入到内存,然后B被调出,A再次被调入。

1. 预留空间

通过图片可见,使用这种方法,内存中有很多小的空闲区(阴影),这些小的空闲区大部分无法放置合适的进程,就会造成浪费。通过把所有进程向下移动,将这些空闲区合在一起,可以节省空间,这种方法叫做内存紧缩。但是这个操作会耗费大量CPU时间。

使用这种方法我们需要注意一个问题,即如果进程大小不是一成不变的而是动态的该怎么解决。若该进程与空闲区相邻,可以使用空闲区来将该进程所占内存扩大。但如果该进程与其他进程相邻,则无法扩大,此时只能交换出一个或多个进程。

为了解决这个问题,在为进程分配内存空间时,可以为它们分配一些额外的内存。而写回磁盘时,只写回实际使用的内存。

动态内存分配

a图为给进程分配多余空间的普通方法。如果进程有两个可增长段,如数据段和堆栈段,则可以使用b中的方法。

2. 空闲内存管理

在动态分配内存时,操作系统必须对内存进行追踪和管理。

  1. 使用位图的存储管理
    内存被划分为几个字到几千字节的分配单元,每个分配单元对应于为位图中的一位,0表示空闲,1表示占用(或者相反)。分配单元越小,位图越大。32n位的内存需要n位位图。再决定把一个占k个分配单元的进程调入内存中时,存储管理器需要搜索位图,在位图中找出有个k个连续为0的串。缺点是比较耗时。

    空闲内存管理

  2. 链表存储管理
    链表中的结点或者是一个进程,或者是两个进程间的空闲区。每一个结点包含:空闲区,进程的指示标志、起始地址、长度。当进程终止时,更新非常直接,如果邻居没有空闲去,只把自己变为空闲区就可以。如果邻居有空闲区则把该进程原有的地址与空闲区合并。所以双链表更好,因为便于找到前后邻居并合并。

    链表存储管理

5. 链表存储管理中用来创建进程的算法

假设存储管理器知道要为进程分配多大内存。

  1. 首次适配
    存储器沿着段链进行搜索,找到第一个足够大的空闲区,将空闲区的一部分给进程使用,另一部分变为新的空闲区(除非大小正好一样)。这种方法速度很快。

  2. 下次适配
    工作方式与首次适配相似,但是不同于首次适配每次从头开始寻找,下次适配会记录下上次分配的位置,然后从上次分配过的地方开始。

  3. 最佳适配
    搜索整个链表,找到能容纳进程的最小空闲区。浪费时间,并且会产生许多无用的小空闲区。

  4. 最差适配
    与最佳适配相反,该方法总是总是分配最大空闲区给进程。

    如果想要增加以上4个算法速度,可以为进程和空闲区维护各自的链表。但会增加内存释放速度,因为要将结点从进程链表删除,并加入到空闲区链表。
    
    可以将空闲区链表进行增序排序,以减少最佳适配的速度。当单独维护空闲区时,可以直接用空闲区存储信息,每个空闲区的第一个字可以为大小,第二个字可以指向下一个空闲区。
    
  5. 快速适配:为常用大小的空闲区维护单独列表。例如有一个n项的表。表的第一项指向大小4KB空闲区,第二项为8KB,第三项为12KB。以此类推,21KB的空闲区可以放在代表20KB链表中,也可以单独放置在特别链表中。

参考书目:现代操作系统第三版

BAT脚本解决IDM报警提示问题-清理IDM的特殊标记 脚本能解决IDM这个下载工具探测到用户使用过非法序列号而报警弹窗问题。 脚本会清理IDM写入系统里的特殊标记,避免IDM下次启动再弹窗警告。 注意要配合防火墙屏蔽IDM访问特殊服务器。 这样才能达到不会再被IDM写入标记的目的。 比如 IDM跳出窗口 提示, ------------------------------------------------------ 一个假冒的序列号被用来注册 Internet Download Manager。 IDM 正在退出... ------------------------------------------------------ ------------------------------------------------------ Internet Download Manager has been registered with a fake Serial Number or the Serial Number has been blocked.Be aware that the cracked product may work incorrectly and download files with errors.Thus we advise you to purchase the full-featured product. ------------------------------------------------------ 类似上面的IDM警告提示都可以用清理脚本来解决问题。 不要期待官方IDM的安装或者卸载程序 会擦除那些IDM故意写入的标记。 那是不可能的。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 脚本针对 IDM 的版本 V6.31 build2 即 6.31.2.2 脚本能解决问题 V6.31 build3 即 6.31.3.2 脚本能解决问题。 未来版本 这个不敢保证一定能解决,要看IDM作者的方案是否变化。 操作系统 Windows7 X64 最好是同样的系统,其他系统无法保证结果。 如果是Windows8.1 或者 Windows10 的64位系统,也可能可以使用脚本, 但我没针对其他系统测试,也是无法保证结果。 下载之前注意系统差别,考虑好再决定是否要下载。 IDM = Internet Download Manager 官方网站 http://www.internetdownloadmanager.com IDM下载最新版 http://www.internetdownloadmanager.com/download.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 鱼 IDM连接的验证序列号服务器 169.55.0.224 185.80.221.18 IDM版本 6.31.2.2 6.31.3.2 上面这两个版本都会经常试图连接上面的两个服务器。 渔 网络上到处都是相似的信息, 比如关于 IDM跳出假序列号提示信息的解决方法,如果搜索网络, 就会发现我们可能会被这些类似的信息淹没。信息很多,然而却没一个管用的。 大家都是照搬别人的东西,也不仔细测试,然后就随意发帖了。 实际上IDM在变化,脱离IDM版本说解决方案 就相当于扯淡。 那到底是如何发现IDM试图连接的具体地址,以及如何找到IDM写入的特殊标记呢。 1 虚拟机。提供干净环境,可以快速恢复测试环境,高效率多次重复测试。 2 NetLimiter。它本质上是个流量监控工具。但不妨碍使用它的网络监控能力。 无论是运行在虚拟机里的IDM还是直接运行的IDM,都逃不过NetLimiter的监测, IDM尝试连接的地址都能被NetLimiter拦截下来,我们想怎么测试都可以。 3 Process Monitor。这是微软的工具。设置一下用来监控IDM网络访问情况。 它访问网络的时间,什么网址,都可以过滤出来。 4 Total Uninstall。卸载软件,但如今要想干净卸载都必须有些监控能力。 这里我就把它的文件和注册表监控能力用上了。 5 防火墙,实际上这个主题和防火墙关系不大。但后期屏蔽IDM倒是一定用得到。 这不一定非得是指系统自带的防火墙,可以是第三方防火墙软件。 用它屏蔽软件对网络的访问,那普通应用软件是毫无办法突破的。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值