1. 程式人生 > >操作系統之進程

操作系統之進程

wid 方案 發出 終止進程 class 模型 字符 width 一個

1、什麽是進程?

  操作系統最核心的概念就是進程,進程就是對一個正在運行的程序的抽象。在單核CPU中同一時刻只能有一個進程在運行,這種情況下的並行是偽並行,只是CPU在多個進程之間快速的切換造成並行的假象,這種快速的切換就稱作多道程序設計。當然在多核心CPU中,能夠實現真正的硬件並行。

2、進程的模型

在進程模型中,計算機上所有可運行的軟件,通常也包括操作系統,被組織成若幹順序的進程,進程就是一個正在執行的程序的實例,包括程序計數器寄存器以及變量的當前值。一個進程是某種類型的活動,其有程序,輸入,輸出和狀態,進程之間的切換是由調度算法來實現的。要註意的是一個程序執行兩次也就產生了兩個進程。 雖然每個進程都有其程序計數器,但真正的物理程序計數器只有一個,在切換到某個進程時,操作系統會將當前進程的程序計數器裝載到實際的物理程序計數器中,而當該進程執行結束或者暫停時,此時物理程序計數器內容就被保存到該進程的程序計數器中了。 註意:CPU在進程間快速切換,每個進程的執行時間是不確定的,對進程進行編程時不能對進程的時序做確定的假設!

3、創建進程

下面四種情況下會創建進程: 1、系統初始化; 2、執行了正在運行的進程所調用的進程創建系統調用; 3、用戶請求創建進程; 4、一個批處理作業初始化; 進程可以分為:前臺進程和後臺進程,前臺進程就是用於交互的,後臺進程一般和用戶沒有特定的關系,實現某些專用功能,停留在後臺處理電子郵件,Web網頁,新聞,打印之類的活動的進程成為守護進程。  UNIX和Windwos中如何創建進程? 在UNIX中只要fork系統調用創建進程,這時系統調用會創建一個與調用進程相同的副本,父進程與子進程有相同的存儲映像,同樣的環境字符串和同樣的打開文件,然後子進程執行sort。在Windows中調用CreateProcess即創建進程,也負責將正確的程序裝入進程。 註意:在UNIX中子進程的初始地址空間是父進程的一個副本,但是是兩個不同的地址空間,所以此時新創建的進程可以使用父進程的資源。在Windwos中從一開始父進程的地址空間和子進程的地址空間就是不同的。

4、終止進程

進程終止發生的條件: 1、正常退出; 2、出錯退出; 3、嚴重錯誤; 4、被其他進程殺死; 一般進程最好是完成其工作,然後正常退出,正常退出能夠保該進程的資源正常釋放。UNIX中調用exit,在Windows中調用ExitProcess能夠實現自願退出,而殺死進程在UNIX中調kill,Windows中調用TerminateProcess來實現。

5、進程的層次結構

在UNIX中進程和其所有的子女以及後裔共同組成一個進程組。比如用戶從鍵盤發出一個信號,信號送給當前與鍵盤相關的進程組中的所有成員,成員自己決定對信號的操作。但是在Windows中沒有進程層次的概念,進程都是平等的,在創建進程的時候,父進程得到子進程的句柄,該句柄可以用來控制子進程, 但是父進程有權將這個句柄交由其他的進程。

6、進程的狀態

進程有三種狀態:運行狀態,就緒狀態,阻塞狀態。 各個狀態之前的轉化方式如下: 技術分享

7、進程的實現

為了實現進程模型,操作系統維護一張表格,或者成為一個結構數組,稱為進程表。每一個進程占用一個進程表項目,該表項包含了進程狀態的重要信息。包括程序計數器,堆棧指針,內存分配狀況,打開文件狀況,賬號和調度信息,以及從運行狀態,切換到就緒狀態或者阻塞狀態必須保存的信息,這樣在重新獲得CPU時間片能夠繼續執行,好像從未中斷過一樣。

8、多道程序設計模型

多道程序設計模型可以提高CPU的利用率。 備註:什麽是批處理作業? 批處理系統,又名批處理操作系統。批處理是指用戶將一批作業提交給操作系統後就不再幹預,由操作系統控制它們自動運行。這種采用批量處理作業技術的操作系統稱為批處理操作系統。批處理操作系統分為單道批處理系統和多道批處理系統。批處理操作系統不具有交互性,它是為了提高CPU的利用率而提出的一種操作系統。這裏就要涉及批處理調度問題,批處理作業調度問題要求對於給定的 n 個作業,制定最佳作業調度方案,使其完成時間和達到最小。

操作系統之進程