内存覆盖及内存交换
內(nèi)存覆蓋和交換技術(shù)是在多道程序環(huán)境下用來擴(kuò)充內(nèi)存的兩種方法。
覆蓋技術(shù)主要用在早期的操作系統(tǒng)中,而交換技術(shù)在現(xiàn)代操作系統(tǒng)中具有較強(qiáng)的生命力。
一、內(nèi)存覆蓋(Overlay)
在早期的計(jì)算機(jī)系統(tǒng)中,主存容量很小。雖然主存中僅存放一道用戶程序,但是存儲空間放不下用戶進(jìn)程的現(xiàn)象也經(jīng)常發(fā)生。這一矛盾可以用覆蓋技術(shù)來解決。
1、覆蓋的基本思想是:
由于程序運(yùn)行時(shí)并非任何時(shí)候都要訪問程序及數(shù)據(jù)的各個(gè)部分(尤其是大程序),因此可以把用戶空間分為一個(gè)固定區(qū)和若干個(gè)覆蓋區(qū)。
將經(jīng)常活躍的部分放在固定區(qū),其余部分按照調(diào)用關(guān)系分段,首先將那些即將要訪問的段放入覆蓋區(qū),其他段放在外存中,在需要調(diào)用前,系統(tǒng)將其調(diào)入覆蓋區(qū),替換覆蓋區(qū)中原有的段。
---- 覆蓋技術(shù)的實(shí)現(xiàn)是把程序劃分為若干個(gè)功能上相對獨(dú)立的程序段,按照其自身的邏輯結(jié)構(gòu)使那些不會同時(shí)運(yùn)行的程序段共享同一塊內(nèi)存區(qū)域。程序段先保存在磁盤上,當(dāng)有關(guān)程序的前一部分執(zhí)行結(jié)束后,把后續(xù)程序段調(diào)入內(nèi)存,覆蓋前面的程序段。
---- 所謂覆蓋,就是把一個(gè)大的程序劃分為一系列覆蓋,每個(gè)覆蓋就是一個(gè)相對獨(dú)立的程序單位,把程序執(zhí)行時(shí)并不要求同時(shí)裝入內(nèi)存的覆蓋組成一組,稱為覆蓋段。一個(gè)覆蓋段內(nèi)的覆蓋共享同一存儲區(qū)域,該區(qū)域成為覆蓋區(qū),它與覆蓋段一一對應(yīng)。顯然,為了使一個(gè)覆蓋區(qū)能為相應(yīng)覆蓋段中的每個(gè)覆蓋在不同時(shí)刻共享,其大小應(yīng)由覆蓋段中的最大覆蓋來確定。
---- 覆蓋技術(shù)要求程序員必須把一個(gè)程序劃分為不同的程序段,并規(guī)定好它們的執(zhí)行和覆蓋順序,操作系統(tǒng)根據(jù)程序員提供的覆蓋結(jié)構(gòu)來完成程序段之間的覆蓋。
例如,一個(gè)用戶程序由6個(gè)模塊組成,下圖給出了各個(gè)模塊的調(diào)用關(guān)系,Main模塊是一個(gè)獨(dú)立的段,其調(diào)用A和B模塊,A和B是互斥被調(diào)用的兩個(gè)模塊。在A模塊執(zhí)行過程中,調(diào)用C模塊;而在B模塊執(zhí)行過程中,它可能調(diào)用D或E模塊(D和E模塊也是互斥被調(diào)用的)。為該用戶程序建立的覆蓋結(jié)構(gòu)如下:Main模塊是常駐段,其余部分組成兩個(gè)覆蓋段。
由以上推理可知,A和B模塊組成覆蓋段1,C、D和E組成覆蓋段2。為了實(shí)現(xiàn)真正覆蓋,相應(yīng)的覆蓋區(qū)應(yīng)為每個(gè)覆蓋段中最大覆蓋的大小。
2、覆蓋技術(shù)的特點(diǎn):
打破了必須將一個(gè)進(jìn)程的全部信息裝入內(nèi)存后才能運(yùn)行的限制,但當(dāng)同時(shí)運(yùn)行程序的代碼量大于主存時(shí)仍不能運(yùn)行,再而,內(nèi)存中能夠更新的地方只有覆蓋區(qū)的段,不在覆蓋區(qū)的段會常駐內(nèi)存。
二、內(nèi)存交換(Swapping)
1、交換(對換)的基本思想是:
內(nèi)存空間緊張時(shí),系統(tǒng)將內(nèi)存中某些進(jìn)程暫時(shí)換出外存,把外存中某些已具備運(yùn)行條件的進(jìn)程換入內(nèi)存(進(jìn)程在內(nèi)存與磁盤間動態(tài)調(diào)度)。
換入:把準(zhǔn)備好競爭CPU運(yùn)行的程序從輔存移到內(nèi)存。
換出:把處于等待狀態(tài)(或CPU調(diào)度原則下被剝奪運(yùn)行權(quán)力)的程序從內(nèi)存移到輔存,把內(nèi)存空間騰出來。
中級調(diào)度(策略)就是釆用交換技術(shù)。
2、什么時(shí)候會進(jìn)行內(nèi)存的交換?
內(nèi)存交換通常在許多進(jìn)程運(yùn)行且內(nèi)存吃緊時(shí)進(jìn)行,而系統(tǒng)負(fù)荷降低就暫停。
例如:在發(fā)現(xiàn)許多進(jìn)程運(yùn)行時(shí)經(jīng)常發(fā)生缺頁,就說明內(nèi)存緊張,此時(shí)可以換出一些進(jìn)程;
如果缺頁率明顯下降,就可以暫停換出。
1)對換的引入
在多道程序環(huán)境下,一方面,在內(nèi)存中的某些進(jìn)程由于某事件尚未發(fā)生而被阻塞運(yùn)行,但它卻占用了大量的內(nèi)存空間,甚至有時(shí)可能出現(xiàn)在內(nèi)存中所有進(jìn)程都被阻塞而迫使CPU停止下來等待的情況。另一方面,卻又有著許多作業(yè)在外存等待,因無內(nèi)存而不能進(jìn)入內(nèi)存運(yùn)行的情況。顯然這是對系統(tǒng)資源的一種嚴(yán)重浪費(fèi),使系統(tǒng)吞吐量下降,于是增設(shè)了對換(交換)設(shè)施。
----- 所謂“對換”,是指把內(nèi)存中暫時(shí)不能運(yùn)行的進(jìn)程或者暫時(shí)不用的程序和數(shù)據(jù)調(diào)出到外存上,以便騰出足夠的內(nèi)存空間,再把已具備運(yùn)行條件的進(jìn)程調(diào)入內(nèi)存。
----- 如果對換是以整個(gè)進(jìn)程為單位的,便稱之為“整體對換”或“進(jìn)程對換”。解決內(nèi)存緊張的問題。
----- 如果對換是以“頁“或”段“為單位進(jìn)行的,則分別稱之為”頁面對換“或”分段對換“。為了實(shí)現(xiàn)進(jìn)程對換,系統(tǒng)必須能實(shí)現(xiàn)3個(gè)方面的功能:對換空間的管理、進(jìn)程的換出、進(jìn)程的換入。
2)對換空間的管理
在具有對換功能的OS中,通常把外存分為文件區(qū)和對換區(qū)。前者用于存放文件,后者用于存放從內(nèi)存換出的進(jìn)程。對換區(qū)采用的是連續(xù)分配的方式(考慮到對換的速度)。
3)進(jìn)程的換出與換入
換出:每當(dāng)一進(jìn)程由于創(chuàng)建子進(jìn)程而需要更多的內(nèi)存空間,但又無足夠的內(nèi)存空間等情況發(fā)生時(shí),系統(tǒng)應(yīng)將某進(jìn)程換出。系統(tǒng)首先選擇處于阻塞狀態(tài)且優(yōu)先級最低的進(jìn)程作為換出進(jìn)程,然后啟動磁盤,將該進(jìn)程的程序和數(shù)據(jù)傳送到磁盤的對換區(qū)。若傳送過程未出現(xiàn)錯(cuò)誤,便可回收該進(jìn)程所占用的內(nèi)存空間,并對該進(jìn)程的進(jìn)程控制塊做相應(yīng)的修改。
換入:把外存交換區(qū)中的數(shù)據(jù)和程序換到內(nèi)存中。系統(tǒng)應(yīng)定時(shí)的查看所有進(jìn)程的狀態(tài),從中找出”就緒“狀態(tài)但已換出的進(jìn)程。將其中換出時(shí)間最久(換出到磁盤上)的進(jìn)程作為換入進(jìn)程,將之換入。直至已無可換入的進(jìn)程或無可換出的進(jìn)程為止。交換的特點(diǎn)是打破了一個(gè)程序一旦進(jìn)入主存便一直運(yùn)行到結(jié)束的限制,但運(yùn)行的進(jìn)程大小仍受實(shí)際主存的限制。
---- 與覆蓋技術(shù)相比,交換不要求程序員給出程序段之間的覆蓋結(jié)構(gòu),而且交換主要是在進(jìn)程或作業(yè)之間進(jìn)行;而覆蓋則主要在同一個(gè)作業(yè)或進(jìn)程中進(jìn)行。另外,覆蓋只能覆蓋與覆蓋程序段無關(guān)的程序段。
總結(jié)
- 上一篇: 报错:“-bash: git: 未找到命
- 下一篇: 如何让进程后台运行?(TX)