对换

本文介绍了在多道程序环境中,为了提高内存利用率而采用的整体对换和部分对换技术。阐述了对换的基本概念、对换空间的管理以及进程的换出和换入过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、对换(swapping)的引入

在多道程序环境下,一方面,在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现

在内存中所有进程都被阻塞而迫使CPU停止(空闲)下来的情况。

另一方面,却又有许多作业在外存上等待(就绪),因无内存而不能进入内存运行的情况。

显然这是对系统资源的一种浪费,系统吞吐量下降。为了解决这一问题,系统中增设了对换(交换)设施。

所谓“对换”,是指把内存中暂时不能运行阻塞)的进程或者暂时不用程序和数据调出到外存上,以便腾出足够的内存空间,再把已具备运行条件

的进程或者进程所需要的程序和数据调入内存。对换提高了内存的利用率。(中级调度)

-------  如果对换是以整个进程为单位的,便称之为“整体对换”或“进程对换”。

这种对换被广泛地应用于分时系统中,其目的是用来解决内存紧张的问题,进一步提高内存利用率。

-------  如果对换是以“”或“”为单位进行的,则分别称之为“页面对换”或“分段对换”,又统称为“部分对换”。

2、对换空间的管理

在具有对换功能的OS中,通常把外存分为文件区对换区。文件区用于存放文件,对换区用于存放从内存换出的进程

---- 由于通常的文件都是较长久地驻留在外存上,故对文件区管理的主要目标,是提高文件存储空间的利用率,为此,对文件区采取离散分配方式.

---- 进程在对换区中驻留的时间是短暂的,对换操作又较频繁,故对对换空间管理的主要目标,是提高进程换入和换出速度.

      为此,采取的是连续分配方式,较少考虑外存中的碎片问题.

3、进程的换出和换入

1)进程的换出。

每当一进程由于创建子进程需要更多的内存空间,但又无足够的内存空间等情况发生时,系统应将某进程换出。

过程是:系统首先选择处于阻塞状态且优先级最低的进程作为换出进程,然后启动磁盘,将该进程的程序和数据传送到磁盘的对换区上.

若传送过程中未出现错误 ,便可回收该进程所占用的内存空间,并对该进程的进程控制块(PCB)做相应的修改.

内存阻塞--->外存阻塞(阻塞+挂起)---->外存就绪(就绪+挂起 等待的事件到来)----->运行(调度程序将CPU分配给该进程)

2)进程的换入.

系统应定时地查看所有进程的状态,从中找出"就绪"状态但已换出的进程(外存就绪),将其中换出时间最久(换出到磁盘上)的进程作为换入进程,

将之换入,直至已无可换入的进程或无可换出的进程为止.

 

### 关于对换次数的概念及其计算方法 #### 什么是对换次数? 在计算机科学领域,“对换次数”通常指的是为了完成某种特定任务而发生的交换操作的数量。这种概念常见于排序算法、页面置换算法以及其他涉及数据移动的操作中。 对于排序算法而言,对换次数是指在排序过程中需要执行的数据元素之间的互换操作数量。例如,在冒泡排序中,每次比较相邻的两个元素并发现它们顺序错误时就会发生一次对换[^1]。 而在页面置换算法中,对换次数可以理解为内存页被替换出去再重新加载回来所经历的过程总次数。这直接影响到系统的性能表现,因为频繁的页面置换会带来较高的时间开销[^2]。 #### 如何计算对换次数? ##### 排序算法中的对换次数 以经典的冒泡排序为例来说明如何统计对换次数: ```python def bubble_sort_with_swap_count(arr): n = len(arr) swap_count = 0 for i in range(n): swapped = False for j in range(0, n-i-1): if arr[j] > arr[j+1]: # Swap elements and increment the counter arr[j], arr[j+1] = arr[j+1], arr[j] swap_count += 1 swapped = True if not swapped: break return swap_count ``` 上述代码展示了通过冒泡排序实现的同时记录下总的对换次数 `swap_count` 的过程。 ##### 页面置换算法中的对换次数 考虑虚拟存储管理下的页面调度情况,假设有一个固定大小的工作集W={p₁,p₂,...,pn}表示当前运行进程所需访问的一系列页面集合,则可以通过模拟不同页面淘汰策略(如FIFO,LRU,OBT等),跟踪每一步可能产生的缺页中断以及相应的页面载入/移除动作从而得出整个周期内的实际对换次数。 需要注意的是,不同的页面置换算法会产生差异化的对换频率。比如理论上最优(OPT)算法能够最小化未来使用的可能性最高的那些页面被淘汰的机会;相比之下先进先出(FIFO)则可能会遭遇Belady异常现象即增加分配给某作业的实际物理块反而引起更多次额外不必要的更换活动。 #### 影响因素分析 除了具体的算法设计外,其他一些外部条件也会间接作用于最终测得的结果之上: - 数据初始状态:已部分有序数组相较于完全逆序排列往往能减少许多无谓调整; - 输入规模:随着待处理项增多自然也意味着潜在交互机会增大; - 编码方式选取:正如提到过的遗传算法里头针对同样一个问题采用二进制还是实数值表述形式会影响到内部结构复杂度进而改变相应运算负担程度[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值