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