#春節複習系列#操做系統相關知識

大學中計算機最難的兩門課應該能夠算 操做系統和組成原理了(我應該屬於文科類的計算機專業,因此沒有學習過彙編,編譯原理等神級別的課程),下面咱們帶着問題,來複習下大學的操做系統吧,這些知識都是大學咱們在期末考試前都會背的,而後考完之後就所有返給老師的那種知識。

一. 進程的有哪幾種狀態,狀態轉換圖,及致使轉換的事件

網上借來的圖片

_ 圖片是從網上拷貝過來的,能夠很好的描述進程狀態轉移_程序員

注意:建立和退出不是進程的狀態。阻塞和就緒的區別:阻塞是等待除CPU之外的資源,而就緒等待的是CPU資源。web

  1. 就緒——運行:對就緒狀態的進程,當進程調度程序按一種選定的策略從中選中一個就緒進程,爲之分配了處理機後,該進程便由就緒狀態變爲運行狀態;
  2. 運行——阻塞:正在運行的進程因發生某等待事件而沒法執行,則進程由運行狀態變爲阻塞狀態,如進程提出輸入/輸出請求而變成等待外部設備傳輸信息的狀態,進程申請資源(主存空間或外部設備)得不到知足時變成等待資源狀態,進程運行中出現了故障(程序出錯或主存儲器讀寫錯等)變成等待干預狀態等等;
  3. 阻塞——就緒:處於阻塞狀態的進程,在其等待的事件已經發生,如輸入/輸出完成,資源獲得知足或錯誤處理完畢時,處於等待狀態的進程並不立刻轉入運行狀態,而是先轉入就緒狀態,而後再由系統進程調度程序在適當的時候將該進程轉爲執行狀態;
  4. 運行——就緒:正在運行的進程,因時間片用完而被暫停執行,或在採用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行而被迫讓出處理機時,該進程便由執行狀態轉變爲就緒狀態。

二.進程與線程的區別

進程能夠認爲是程序執行時的一個實例。進程是系統進行資源分配的獨立實體,且每一個進程擁有獨立的地址空間。一個進程沒法直接訪問另外一個進程的變量和數據結構,若是但願讓一個進程訪問另外一個進程的資源,須要使用進程間通訊,好比:管道,文件, 套接字等。算法

一個進程能夠擁有多個線程,每一個線程使用其所屬進程的棧空間。線程與進程的一個主要區別是,同一進程內的多個線程會共享部分狀態, 多個線程能夠讀寫同一塊內存(一個進程沒法直接訪問另外一進程的內存)。同時, 每一個線程還擁有本身的寄存器和棧,其它線程能夠讀寫這些棧內存。安全

線程是進程的一個特定執行路徑。當一個線程修改了進程中的資源,它的兄弟線程能夠當即看到這種變化。服務器

  1. 進程是系統進行資源分配的基本單位,有獨立的內存地址空間; 線程是CPU調度的基本單位,沒有單獨地址空間,有獨立的棧,局部變量,寄存器, 程序計數器等。
  2. 建立進程的開銷大,包括建立虛擬地址空間等須要大量系統資源; 建立線程開銷小,基本上只有一個內核對象和一個堆棧。
  3. 一個進程沒法直接訪問另外一個進程的資源;同一進程內的多個線程共享進程的資源。
  4. 進程切換開銷大,線程切換開銷小;進程間通訊開銷大,線程間通訊開銷小。
  5. 線程屬於進程,不能獨立執行。每一個進程至少要有一個線程,成爲主線程

三. 進程同步的幾種方式

一、信號量數據結構

用於進程間傳遞信號的一個整數值。在信號量上只有三種操做能夠進行:初始化,遞減和增長,這三種操做都是原子操做。遞減操做能夠用於阻塞一個進程,增長操做能夠用於解除阻塞一個進程。多線程

二、管程併發

管程是由一個或多個過程、一個初始化序列和局部數據組成的軟件模塊,其主要特色以下:異步

  • 局部數據變量只能被管程的過程訪問,任何外部過程都不能訪問。
  • 一個進程經過調用管程的一個過程進入管程。
  • 在任什麼時候候,只能有一個進程在管程中執行,調用管程的任何其餘進程都被阻塞,以等待管程可用。

管程經過使用條件變量提供對同步的支持,這些條件變量包含在管程中,而且只有在管程中才能被訪問。有兩個函數能夠操做條件變量:async

  • cwait(c):調用進程的執行在條件c上阻塞,管程如今可被另外一個進程使用。
  • csignal(c):恢復執行在cwait以後由於某些條件而阻塞的進程。若是有多個這樣的進程,選擇其中一個;若是沒有這樣的進程,什麼以不作。

三、消息傳遞

消息傳遞的實際功能以一對原語的形式提供:

  • send(destination,message)
  • receive(source,message)

這是進程間進程消息傳遞所須要的最小操做集。一個進程以消息的形式給另外一個指定的目標進程發送消息;進程經過執行receive原語接收消息,receive原語中指明發送消息的源進程和消息。

四. 線程同步幾種方式

主要有四種方式:

臨界區(Critical Section)、互斥量(Mutex)、信號量(Semaphore)、事件(Event)

他們主要有如下特色和區別:

  • 臨界區:經過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。在任意時刻只容許一個線程對共享資源進行訪問,若是有多個線程試圖訪問公共資源,那麼在有一個線程進入後,其餘試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放後,其餘線程才能夠搶佔。
  • 互斥量:採用互斥對象機制。 只有擁有互斥對象的線程纔有訪問公共資源的權限,由於互斥對象只有一個,因此能保證公共資源不會同時被多個線程訪問。互斥不只能實現同一應用程序的公共資源安全共享,還能實現不一樣應用程序的公共資源安全共享
  • 信號量:它容許多個線程在同一時刻訪問同一資源,可是須要限制在同一時刻訪問此資源的最大線程數目
  • 事 件: 經過通知操做的方式來保持線程的同步,還能夠方便實現對多個線程的優先級比較的操做

五.用戶態和內核態的區別

處於用戶態執行時,進程所能訪問的內存空間和對象受到限制,其所處於佔有的處理機是可被搶佔的 ; 而處於核心態執行中的進程,則能訪問全部的內存空間和對象,且所佔有的處理機是不容許被搶佔的。

如下三種狀況會致使由用戶態向系統態轉換

  • 系統調用

這是用戶態進程主動要求切換到內核態的一種方式,用戶態進程經過系統調用申請使用操做系統提供的服務程序完成工做,好比前例中fork()實際上就是執行了一個建立新進程的系統調用。而系統調用的機制其核心仍是使用了操做系統爲用戶特別開放的一箇中斷來實現,例如Linux的int 80h中斷。

  • 異常

當CPU在執行運行在用戶態下的程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換處處理此異常的內核相關程序中,也就轉到了內核態,好比缺頁異常。

  • 外圍設備的中斷

當外圍設備完成用戶請求的操做後,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序,若是先前執行的指令是用戶態下的程序,那麼這個轉換的過程天然也就發生了由用戶態到內核態的切換。好比硬盤讀寫操做完成,系統會切換到硬盤讀寫的中斷處理程序中執行後續操做等。

內核態與用戶態是操做系統的兩種運行級別,當程序運行在3級特權級上時,就能夠稱之爲運行在用戶態,由於這是最低特權級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態;反之,當程序運行在0級特權級上時,就能夠稱之爲運行在內核態。運行在用戶態下的程序不能直接訪問操做系統內核數據結構和程序。當咱們在系統中執行一個程序時,大部分時間是運行在用戶態下的,在其須要操做系統幫助完成某些它沒有權力和能力完成的工做時就會切換到內核態。

六.用戶棧和內核棧

操做系統中,每一個進程會有兩個棧,一個用戶棧,存在於用戶空間,一個內核棧,存在於內核空間。當進程在用戶空間運行時,cpu堆棧指針寄存器裏面的內容是用戶堆棧地址,使用用戶棧;當進程在內核空間時,cpu堆棧指針寄存器裏面的內容是內核棧空間地址,使用內核棧。

內核棧是內存中屬於操做系統空間的一塊區域,其主要用途爲:

  1. 保存中斷現場,對於嵌套中斷,被中斷程序的現場信息依次壓入系統棧,中斷返回時逆序彈出;
  2. 保存操做系統子程序間相互調用的參數、返回值、返回點以及子程序(函數)的局部變量。

用戶棧是用戶進程空間中的一塊區域,用於保存用戶進程的子程序間相互調用的參數、返回值、返回點以及子程序(函數)的局部變量。

七.內存池、進程池、線程池

「池化技術 」就是:提早保存大量的資源,以備不時之需以及重複使用,做用是來提高程序的性能。池化技術應用普遍,如內存池,線程池,鏈接池等等。內存池相關的內容,建議看看Apache、Nginx等開源web服務器的內存池實現。

線程池:線程池的原理很簡單,相似於操做系統中的緩衝區的概念,它的流程以下:先啓動若干數量的線程,並讓這些線程都處於睡眠狀態,當須要一個開闢一個線程去作具體的工做時,就會喚醒線程池中的某一個睡眠線程,讓它去作具體工做,當工做完成後,線程又處於睡眠狀態,而不是將線程銷燬。

進程池與線程池同理。

內存池:內存池是指程序預先從操做系統申請一塊足夠大內存,此後,當程序中須要申請內存的時候,不是直接向操做系統申請,而是直接從內存池中獲取;同理,當程序釋放內存的時候,並不真正將內存返回給操做系統,而是返回內存池。當程序退出(或者特定時間)時,內存池纔將以前申請的真正內存釋放。

八.鎖相關概念

能夠把死鎖定義爲一組相互競爭系統資源或進行通訊的進程間的「永久」阻塞。當一組進程中的每一個進程都在等待某個事件(典型的狀況是等待所請求的資源釋放),而只有在這組進程中的其餘被阻塞的進程才能夠觸發該事件,這時就稱這組進程發生死鎖。由於沒有事件可以被觸發,因此死鎖是永久性的。

產生死鎖的緣由主要是:

  • 系統資源不足。
  • 進程運行推動的順序不合適。
  • 資源分配不當等

致使死鎖的4個必要條件: 一、互斥。一次只有一個進程可使用一個資源。其餘進程不能訪問已分配給其餘進程的資源。 二、佔有且等待。當一個進程等待其餘進程時,繼續佔有已經分配的資源。 三、不可搶佔。不能強行搶佔進程已佔有的資源。 四、循環等待。存在一個封閉的進程鏈,使得每一個進程至少佔有此鏈中下一個進程所須要的一個資源。

  1. 死鎖預防策略

1)間接的死鎖預防方法(防止前面三個列出的三個必要條件中的任何一個的發生) 2)直接的死鎖的預防方法(防止循環等待的發生)。

輸入圖片說明 2. 死鎖避免策略

銀行家算法:首先須要定義狀態和安全狀態的概念。系統的狀態是當前給進程分配的資源狀況。所以,狀態包含兩個向量Resource(系統中每種資源的總量)和Available(未分配給進程的每種資源的總量)及兩個矩陣Claim(表示進程對資源的需求)和Allocation(表示當前分配給進程的資源)。安全狀態是指至少有一個資源分配序列不會致使死鎖。當進程請求一組資源時,假設贊成該請求,從而改變了系統的狀態,而後肯定其結果是否還處於安全狀態。若是是,贊成這個請求;若是不是,阻塞該進程知道贊成該請求後系統狀態仍然是安全的。

九.進程調度算法

一、先來先服務和短做業(進程)優先調度算法

1)先來先服務調度算法。先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於做業調度, 也可用於進程調度。FCFS算法比較有利於長做業(進程),而不利於短做業(進程)。由此可知,本算法適合於CPU繁忙型做業, 而不利於I/O繁忙型的做業(進程)。

2)短做業(進程)優先調度算法。短做業(進程)優先調度算法(SJ/PF)是指對短做業或短進程優先調度的算法,該算法既可用於做業調度, 也可用於進程調度。但其對長做業不利;不能保證緊迫性做業(進程)被及時處理;做業的長短只是被估算出來的。


二、高優先權優先調度算法

1)優先權調度算法的類型。爲了照顧緊迫性做業,使之進入系統後便得到優先處理,引入了最高優先權優先(FPF)調度算法。 此算法常被用在批處理系統中,做爲做業調度算法,也做爲多種操做系統中的進程調度,還能夠用於實時系統中。當其用於做業調度, 將後備隊列中若干個優先權最高的做業裝入內存。當其用於進程調度時,把處理機分配給就緒隊列中優先權最高的進程,此時, 又能夠進一步把該算法分紅如下兩種: [1]非搶佔式優先權算法 [2]搶佔式優先權調度算法(高性能計算機操做系統)

2)優先權類型 。對於最高優先權優先調度算法,其核心在於:它是使用靜態優先權仍是動態優先權, 以及如何肯定進程的優先權。

3)高響應比優先調度算法 爲了彌補短做業優先算法的不足,咱們引入動態優先權,使做業的優先等級隨着等待時間的增長而以速率a提升。 該優先權變化規律可描述爲:優先權=(等待時間+要求服務時間)/要求服務時間;即 =(響應時間)/要求服務時間


三、基於時間片的輪轉調度算法

1)時間片輪轉法。時間片輪轉法通常用於進程調度,每次調度,把CPU分配隊首進程,並令其執行一個時間片。 當執行的時間片用完時,由一個記時器發出一個時鐘中斷請求,該進程被中止,並被送往就緒隊列末尾;依次循環。

2)多級反饋隊列調度算法 ,沒必要事先知道各類進程所須要執行的時間,它是目前被公認的一種較好的進程調度算法。 其實施過程以下: [1]設置多個就緒隊列,併爲各個隊列賦予不一樣的優先級。在優先權越高的隊列中, 爲每一個進程所規定的執行時間片就越小。 [2]當一個新進程進入內存後,首先放入第一隊列的末尾,按FCFS原則排隊等候調度。 若是他能在一個時間片中完成,即可撤離;若是未完成,就轉入第二隊列的末尾,在一樣等待調度…… 如此下去,當一個長做業(進程)從第一隊列依次將到第n隊列(最後隊列)後,便按第n隊列時間片輪轉運行。 [3]僅當第一隊列空閒時,調度程序才調度第二隊列中的進程運行;僅當第1到第(i-1)隊列空時, 纔會調度第i隊列中的進程運行,並執行相應的時間片輪轉。 [4]若是處理機正在處理第i隊列中某進程,又有新進程進入優先權較高的隊列, 則此新隊列搶佔正在運行的處理機,並把正在運行的進程放在第i隊列的隊尾。

####十.Windows內存管理的方式

一、Windows中的內存分爲兩類:

  • 物理內存即實際內存,實存儲器。
  • 虛擬內存: 用硬盤空間作內存來彌補計算機RAM空間的缺少。

二、虛擬內存可行性的理論基礎:

  • 進程中的全部內存訪問地址都是邏輯地址,這些邏輯地址在運行時動態的被轉換爲物理地址,這意味着一個進程能夠被換入或喚出內存,使得進程能夠執行過程當中的不一樣時刻佔據內存中的不一樣區域。
  • 一個進程能夠劃分紅許多塊,在執行過程當中,這些塊不須要連續的未與內存中。

三、使用虛擬內存的好處:

  • 在內存中保留多個進程。因爲對任何特定的進程都僅僅裝入它的某些塊,所以就有足夠的空間來放置更多的進程。
  • 進程能夠比內存的所有空間還大。程序佔用的內存空間的大小是程序設計中最大的限制之一。經過基於分頁或分段的虛擬內存,這些分塊能夠按某種覆蓋策略分別加載。

使用虛擬內存的好處: 一、在內存中保留多個進程。因爲對任何特定的進程都僅僅裝入它的某些塊,所以就有足夠的空間來放置更多的進程。 二、進程能夠比內存的所有空間還大。程序佔用的內存空間的大小是程序設計中最大的限制之一。經過基於分頁或分段的虛擬內存,這些分塊能夠按某種覆蓋策略分別加載。

####十一.經常使用內存管理技術

一、固定分區 說明:在系統生成階段,內存被劃分紅許多靜態分區。進程能夠被裝入到大於或等於自身大小的分區。 優點:實現簡單,只須要極少的操做系統開銷。 缺點:因爲有內部碎片,對內存的使用不充分;活動進程的最大數目是固定的。

二、動態分區 說明:分區是動態建立的,於是使得每一個進程能夠被裝入與自身大小正好相等的分區中。 優點:沒有內部碎片;能夠更充分的使用內存。 缺點:因爲須要壓縮外部碎片,處理器利用率低。

三、虛擬內存分頁 說明:內存被劃分爲許多大小相等的頁框;每一個進程被劃分紅許多大小與頁框相等的頁;不須要裝入一個進程的全部頁,每次只需將進程運行須要的頁裝入到內存中不必定連續的頁框中。非駐留頁在之後須要時自動調入內存。 優點:沒有外部碎片;支持更高道數的多道程序設計;巨大的虛擬地址空間。 缺點:複雜的內存管理開銷。

四、虛擬內存分段 說明:每一個進程被劃分爲許多段;不須要裝入一個進程的全部頁,每次只需將進程運行須要的段裝入到內存中不必定連續的某些動態分區中;非駐留段在之後須要時自動調入內存。 優點:沒有內部碎片;支持更高道數的多道程序設計;巨大的虛擬地址空間;支持保護與共享 缺點:複雜的內存管理開銷

五、段頁式 分段和分頁都有它們的長處。分頁對程序員是透明的,它消除了外部碎片,於是能夠更有效地使用內存,而且移入或移出內存的塊是固定的,大小相等的。分段對程序員是可見的,它具備處理不斷增加的數據結構的能力以及支持共享和保護的能力。 在段頁式的系統中,用戶的地址空間被程序員劃分紅許多段。每一個段一次劃分紅許多固定大小的頁,頁的長度等於內存中頁框的大小。從程序員的角度看,邏輯地址仍然由段號和段偏移量組成,從系統的角度看,段偏移量可視爲指定段中的一個頁號和頁偏移。

十二.基本分頁儲存管理

  1. 一次性。要求將做業所有裝入內存後方能運行。許多做業在每次運行時,並不是其所有程序和數據都要用到。若是一次性地裝入其所有程序,形成內存空間的浪費。
  2. 駐留性。做業裝入內存後,便一直駐留在內存中,直至做業運行結束。儘管運行中的進程會因I/O而長期等待,或有的程序模塊在運行過一次後就再也不須要(運行)了,但它們都仍將繼續佔用寶貴的內存資源。

十三.請求分頁儲存管理

它是實現虛擬存儲器的一種經常使用方式,它是在基本分頁儲存管理的基礎上實現的。其基本思想是:在進程開始運行以前,僅裝入當前要執行的部分頁面便可運行;在執行過程當中,可以使用請求調入中斷動態裝入要訪問但又不在內存的頁面;當內存空間已滿,而又須要裝入新的頁面時,者根據置換功能適當調出某個頁面,以便騰出空間而裝入新的頁面。爲實現請求分頁,須要必定的硬件支持,包括:頁表機制、缺頁中斷機構、地址變換機構。

十四.分段與分頁方式的比較

分段和分頁其實都是一種對地址的劃分或者映射的方式。 它們主要的區別以下:

1.頁是信息的物理單位,分頁是爲實現離散分配方式,以消減內存的外零頭,提升內存的利用率;或者說,分頁僅僅是因爲系統管理的須要,而不是用戶的須要(也是對用戶透明的)。段是信息的邏輯單位,它含有一組其意義相對完整的信息(好比數據段、代碼段和堆棧段等)。分段的目的是爲了能更好的知足用戶的須要(用戶也是可使用的)

2.頁的大小固定且由系統肯定,把邏輯地址劃分爲頁號和頁內地址兩部分,是由機器硬件實現的,於是一個系統只能有一種大小的頁面。段的長度卻不固定,決定於用戶所編寫的程序,一般由編輯程序在對源程序進行編輯時,根據信息的性質來劃分

3.分頁的做業地址空間是維一的,即單一的線性空間,程序員只須利用一個記憶符(線性地址的16進製表示),便可表示一地址。分段的做業地址空間是二維的,程序員在標識一個地址時,既需給出段名(好比數據段、代碼段和堆棧段等),又需給出段內地址

4.頁和段都有存儲保護機制。但存取權限不一樣:段有讀、寫和執行三種權限;而頁只有讀和寫兩種權限

十五.幾種頁面置換算法

1.最佳置換算法(OPT)(理想置換算法) 這是一種理想狀況下的頁面置換算法,但其實是不可能實現的。該算法的基本思想是:發生缺頁時,有些頁面在內存中,其中有一頁將很快被訪問(也包含緊接着的下一條指令的那頁),而其餘頁面則可能要到十、100或者1000條指令後纔會被訪問,每一個頁面均可以用在該頁面首次被訪問前所要執行的指令數進行標記。最佳頁面置換算法只是簡單地規定:標記最大的頁應該被置換。這個算法惟一的一個問題就是它沒法實現。當缺頁發生時,操做系統沒法知道各個頁面下一次是在何時被訪問。雖然這個算法不可能實現,可是最佳頁面置換算法能夠用於對可實現算法的性能進行衡量比較。

2.先進先出置換算法(FIFO) 最簡單的頁面置換算法是先入先出(FIFO)法。這種算法的實質是,老是選擇在主存中停留時間最長(即最老)的一頁置換,即先進入內存的頁,先退出內存。理由是:最先調入內存的頁,其再也不被使用的可能性比剛調入內存的可能性大。創建一個FIFO隊列,收容全部在內存中的頁。被置換頁面老是在隊列頭上進行。當一個頁面被放入內存時,就把它插在隊尾上。 這種算法只是在按線性順序訪問地址空間時纔是理想的,不然效率不高。由於那些常被訪問的頁,每每在主存中也停留得最久,結果它們因變「老」而不得不被置換出去。 FIFO的另外一個缺點是,它有一種異常現象,即在增長存儲塊的狀況下,反而使缺頁中斷率增長了。固然,致使這種異常現象的頁面走向其實是不多見的。

3.最近最久未使用(LRU)算法 FIFO算法和OPT算法之間的主要差異是,FIFO算法利用頁面進入內存後的時間長短做爲置換依據,而OPT算法的依據是未來使用頁面的時間。若是以最近的過去做爲不久未來的近似,那麼就能夠把過去最長一段時間裏未曾被使用的頁面置換掉。它的實質是,當須要置換一頁時,選擇在最近一段時間裏最久沒有使用過的頁面予以置換。這種算法就稱爲最久未使用算法(Least Recently Used,LRU)。 LRU算法是與每一個頁面最後使用的時間有關的。當必須置換一個頁面時,LRU算法選擇過去一段時間裏最久未被使用的頁面。

十六.操做系統的四個特性

1.併發(concurrence) 並行性與併發性這兩個概念是既類似又區別的兩個概念。並行性是指兩個或者多個事件在同一時刻發生,這是一個具備微觀意義的概念,即在物理上這些事件是同時發生的;而併發性是指兩個或者多個事件在同一時間的間隔內發生,它是一個較爲宏觀的概念。在多道程序環境下,併發性是指在一段時間內有多道程序在同時運行,但在單處理機的系統中,每一時刻僅能執行一道程序,故微觀上這些程序是在交替執行的。 應當指出,一般的程序是靜態實體,它們是不能併發執行的。爲了使程序能併發執行,系統必須分別爲每一個程序創建進程。進程,又稱任務,簡單來講,是指在系統中能獨立運行並做爲資源分配的基本單位,它是一個活動的實體。多個進程之間能夠併發執行和交換信息。一個進程在運行時須要運行時須要必定的資源,如 cpu,存儲空間,及i/o設備等。在操做系統中引入進程的目的是使程序能併發執行。

2.共享 (sharing) 所謂共享是指,系統中的資源可供內存中多個併發執行的進程共同使用。因爲資源的屬性不一樣,故多個進程對資源的共享方式也不一樣,能夠分爲:互斥共享方式 和 同時訪問方式

3.虛擬 (virtual) 是指經過技術吧一個物理實體變成若干個邏輯上的對應物。在操做系統中虛擬的實現主要是經過分時的使用方法。顯然,若是n是某一個物理設備所對應的虛擬邏輯設備數,則虛擬設備的速度必然是物理設備速度的1/n。

4.異步 (asynchronism) 在多道程序設計環境下,容許多個進程併發執行,因爲資源等因素的限制,一般,進程的執行並不是「一鼓作氣」,而是以「走走停停」的方式運行。內存中每一個進程在什麼時候執行,什麼時候暫停,以怎樣的方式向前推動,每道程序總共須要多少時間才能完成,都是不可預知的。或者說,進程是以一步的方式運行的。儘管如此,但只要運行環境相同,做業通過屢次運行,都會得到徹底相同的結果。

相關文章
相關標籤/搜索