基礎知識補充:操作系統、進程、線程

一:操作系統簡述

        操作系統(Operating System,縮寫:OS)是管理計算機硬件與軟件資源的計算機程序,同時也是計算機系統的內核與基石。操作系統需要處理如管理與配置內存、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網絡與管理文件系統等基本事務。

        操作系統位於底層硬件與用戶之間,是兩者溝通的橋樑。用戶可以通過操作系統的用戶界面,輸入命令。操作系統則對命令進行解釋,驅動硬件設備,實現用戶要求。以現代標準而言,一個標準PC的操作系統應該提供以下的功能:

       1,進程管理(Processing management):
       不管是常駐程序或者應用程序,他們都以進程爲標準運行單位。當年運用馮·諾伊曼結構建造電腦時,每個中央處理器最多隻能同時運行一個進程。早期的操作系統(例如DOS)也不允許任何程序打破這個限制,且DOS同時只有運行一個進程。現代的操作系統,即使只擁有一個CPU,也可以利用多進程(multitask)功能同時執行多個進程。進程管理指的是操作系統調整多個進程的功能。
       由於大部分的電腦只包含一顆中央處理器,在宏內核(Core)的情況下多進程只是簡單迅速地切換各進程,讓每個進程都能夠運行,在多內核或多處理器的情況下,所有進程通過許多協同技術在各處理器或內核上轉換。越多進程同時運行,每個進程能分配到的時間比率就越小。很多操作系統在遇到此問題時會出現諸如音效斷續或鼠標跳格的情況(稱做顛簸(Thrashing)),一種操作系統只能不停運行自己的管理程序並耗盡系統資源的狀態,其他用戶或硬件的程序皆無法運行。進程管理通常實踐了分時的概念,大部分的操作系統可以利用指定不同的特權檔次(priority),爲每個進程改變所佔的分時比例。特權越高的進程,運行優先級越高,單位時間內佔的比例也越高。交互式操作系統也提供某種程度的回饋機制,讓直接與用戶交互的進程擁有較高的特權值。
       除了進程管理之外,操作系統尚有擔負起進程間通信(IPC)、進程異常終止處理以及死鎖(Dead Lock)偵測及處理等較爲艱深的問題。

       在進程之下尚有線程的問題,但是大部分的操作系統並不會處理線程所遭遇的問題,通常操作系統僅止於提供一組API讓用戶自行操作或通過虛擬機的管理機制控制線程之間的交互。

       2,內存管理(Memory management):
       根據帕金森定律:“你給程序再多內存,程序也會想盡辦法耗光”。大部分的現代電腦存儲器架構都是層次結構式的,最快且數量最少的寄存器爲首,然後是緩存、存儲器以及最慢的磁盤存儲設備。而操作系統的存儲器管理提供查找可用的記憶空間、配置與釋放記憶空間以及交換存儲器和低速存儲設備的內含物……等功能。
       存儲器管理的另一個重點活動就是藉由CPU的幫助來管理虛擬位置。如果同時有許多進程存儲於記憶設備上,操作系統必須防止它們互相干擾對方的存儲器內容。分區存儲器空間可以達成目標。每個進程只會看到整個存儲器空間被配置給它。CPU事先存了幾個表以比對虛擬位置與實際存儲器位置,這種方法稱爲標籤頁配置。

       藉由對每個進程產生分開獨立的位置空間,操作系統也可以輕易地一次釋放某進程所佔據的所有存儲器。如果這個進程不釋放存儲器,操作系統可以結束進程並將存儲器自動釋放。

       3,用戶界面(User interface):

       今日大部分的操作系統都包含圖形用戶界面(GUI)

       4, 文件系統(File system):
       所謂的文件系統,通常指稱管理磁盤數據的系統,可將數據以目錄或文件的型式存儲
      操作系統擁有許多種內置文件系統。例如Linux擁有非常廣泛的內置文件系統,如ext2、ext3、ext4、ReiserFS、Reiser4、GFS、GFS2、OCFS、OCFS2、NILFS與Google文件系統。Linux也支持非原生文件系統,例如XFS、JFS、FAT家族與NTFS。另一方面,Windows能支持的文件系統衹有FAT12、FAT16、FAT32、EXFAT與NTFS。NTFS系統是Windows上最可靠與最有效率的文件系統。其他的FAT家族都比NTFS老舊,且對於文件長度與分區磁盤能力都有很大限制,因此造成很多問題。而UNIX的文件系統多半是UFS
       文件系統都有兩種建置方法。系統可以以日誌式或非日誌式建置。日誌式文件系統可以以較安全的手法運行系統恢復。微軟的NTFS與Linux的ext3、ext4、reiserFS與JFS都是日誌式文件系統。

       每個文件系統都實現相似的目錄/子目錄架構,但在相似之下也有許多不同點。微軟使用“\”符號以創建目錄/子目錄關係,且文件名稱忽略其大小寫差異;UNIX系統則是以“/”創建目錄架構,且文件名稱大小寫有差異。

       5,驅動程序(Device drivers):

       所謂的驅動程序(Device driver)是指某類設計來與硬件交互的電腦軟件。通常是一設計完善的設備交互接口,利用與此硬件連接的電腦匯排流或通信子系統,提供對此設備下令與接收信息的功能;以及最終目的,將消息提供給操作系統或應用程序。驅動程序是針對特定硬件與特定操作系統設計的軟件,通常以操作系統內核模塊、應用軟件包或普通計算機程序的形式在操作系統內核底下運行,以達到通透順暢地與硬件交互的效果,且提供硬件在處理異步的時間依賴性接口時所需的中斷處理函數。

       6,網絡通信(Networking):

       許多現代的操作系統都具備操作主流網絡通信協議TCP/IP的能力。也就是說這樣的操作系統可以進入網絡世界,並且與其他系統分享諸如文件、打印機與掃描儀等資源。

       7,安全機制(Security):略

    操作系統結構圖:








       操作系統的分類沒有一個單一的標準,可以根據工作方式分爲批處理操作系統、分時操作系統、實時操作系統、網絡操作系統和分佈式操作系統等;根據架構可以分爲單內核操作系統等;根據運行的環境,可以分爲桌面操作系統,嵌入式操作系統等;根據指令的長度分爲8bit, 16bit, 32bit, 64bit的操作系統。

       批處理任務(英語:batch processing),又稱批次處理任務,是指在計算機上無須人工干預而執行系列程序的作業。
       批處理任務無須人工交互,所有的輸入數據預先設置於程序或命令行參數中。這是不同於需要用戶輸入數據的交互程序的概念。

       分時操作系統: 在計算機科學中,分時(time-sharing)是對計算機資源的一種共享方式,利用多道程序與多任務處理使多個用戶可以同時使用一臺計算機
       分時的概念出現於1960年代,在1970年代作爲一種傑出的模型引發了計算機歷史上的一次重大技術革新。通過在多個用戶之間共享計算機資源,此技術極大地降低了計算資源的成本,讓個人和組織可以在不實際擁有計算機的情況下使用計算機
       在早期的計算機系統中,計算機處理多個用戶發送出的指令的時候,處理的方案即爲分時,即計算機把它的運行時間分爲多個時間段,並且將這些時間段平均分配給用戶們指定的任務。輪流地爲每一個任務運行一定的時間,如此循環,直至完成所有任務。這種使用分時的方案爲用戶服務的計算機系統即爲分時系統

       實時操作系統(Real-time operating system, RTOS),又稱即時操作系統,它會按照排序運行、管理系統資源,併爲開發應用程序提供一致的基礎。
       實時操作系統與一般的操作系統相比,最大的特色就是其“實時性”,也就是說,如果有一個任務需要執行,實時操作系統會馬上(在較短時間內)執行該任務,不會有較長的延時。這種特性保證了各個任務的及時執行。

       分佈式操作系統(Distributed operating system),是一個軟件,它是許多獨立的,網絡連接的,通訊的,並且物理上分離的計算節點的集合。每個節點包含全局總操作系統的一個特定的軟件子集。每個軟件子集是兩個不同的服務置備的複合物。第一個服務是一個普遍存在的最小的內核,或微內核,直接控制該節點的硬件。第二個服務是協調節點的獨立的和協同的活動系統管理組件的更高級別的集合。這些組件抽象微內核功能,和支持用戶應用程序。
       分佈式操作系統是分佈式軟件系統的重要組成部分,負責管理分佈式處理系統資源、控制分佈式程序運行等。

       分佈式軟件系統是支持分佈式處理的軟件系統,包括分佈式操作系統、分佈式程序設計語言及其編譯(解釋)系統、分佈式文件系統和分佈式數據庫系統等。


    多道程序的概念:
       計算機的早期,多任務被稱作多道程序(multiprogramming)。多道程序是令CPU一次讀取多個程序放入內存,先運行第一個程序直到它出現了IO操作。因爲IO操作慢,CPU需要等待。爲了提高CPU利用率,此時運行第二個程序。即,第n+1個程序得以執行的條件是第n個程序進行IO操作或已經運行完畢。這種方式每個程序的時間分配是不均等的,很可能第一個程序運行了幾個小時而不出現IO操作,故第二個程序沒有運行。

二:進程

       用戶下達運行程序的命令後,就會產生進程
       進程(process),是計算機中已運行程序的實體。進程爲曾經是分時系統的基本運作單位。在面向進程設計的系統(如早期的UNIX,Linux 2.4及更早的版本)中,進程是程序的基本執行實體在面向線程設計的系統(如當代多數操作系統、Linux 2.6及更新的版本)中,進程本身不是基本運行單位,而是線程的容器程序本身只是指令、數據及其組織形式的描述,進程纔是程序(那些指令和數據)的真正運行實例。若干進程有可能與同一個程序相關係,且每個進程皆可以同步(循序)或異步(平行)的方式獨立運行。現代計算機系統可在同一段時間內以進程的形式將多個程序加載到存儲器中,並藉由時間共享(或稱時分複用),以在一個處理器上表現出同時(平行性)運行的感覺。同樣的,使用多線程技術(多線程即每一個線程都代表一個進程內的一個獨立執行上下文)的操作系統或計算機架構,同樣程序的平行線程,可在多CPU主機或網絡上真正同時運行(在不同的CPU上)。
       進程需要一些資源才能完成工作,如CPU使用時間、存儲器、文件以及I/O設備,且爲依序逐一進行,也就是每個CPU核心任何時間內僅能運行一項進程。

       操作系統使用進程ID來唯一標識每個進程。在一個進程內部,使用進程句柄來標識關注的每個進程


       進程控制塊PCB(Process Control Block):

       進程控制塊,是操作系統核心中一種數據結構,主要表示進程狀態。

       進程狀態:可以是new、ready、running、waiting或 blocked等。
       程序計數器:接着要運行的指令地址。
       CPU寄存器:如累加器、變址寄存器、堆棧指針以及一般用途寄存器、狀況代碼等,主要用途在於中斷時暫時存儲數據,以便稍後繼續利用;其數量及類別因電腦架構有所差異。
       CPU排班法:優先級、排班隊列等指針以及其他參數。
       存儲器管理:如標籤頁表等。
       會計信息:如CPU與實際時間之使用數量、時限、賬號、工作或進程號碼。

       輸入輸出狀態:配置進程使用I/O設備,如磁帶機。


三:線程

       線程(thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程"並行"執行不同的任務。
       線程是獨立調度和分派的基本單位。線程可以是由操作系統內核調度的內核線程,如Win32線程;由用戶進程自行調度的用戶線程,如Linux平臺的POSIX Thread;或者由內核與用戶進程,如Windows 7的線程,進行混合調度。
       同一進程中的多條線程將共享該進程中的全部系統資源,如虛擬地址空間,文件描述符和信號處理等等。但同一進程中的多個線程有各自的調用棧(call stack),自己的寄存器環境(register context),自己的線程本地存儲(thread-local storage)。
       一個進程可以有很多線程,每條線程"並行"執行不同的任務;一個進程至少有一條線程,叫主線程(main-thread)
       在多核或多CPU,或支持Hyper-threading的CPU上使用多線程程序設計的好處是顯而易見,即提高了程序的執行吞吐率。在單CPU單核的計算機上,使用多線程技術,也可以把進程中負責IO處理、人機交互而常被阻塞的部分與密集計算的部分分開來執行,編寫專門的workhorse線程執行密集計算,從而提高了程序的執行效率。


四:併發、並行概念

       串行:是指cpu處理任務的一種方式,任務是一個個排着隊執行的,只有當一個任務完全執行完才能執行下一個任務。

       併發:
       單個cpu能在多個任務之間快速切換,一次只執行一個任務,利用多道程序和時分複用技術,從而充分利用cpu,給用戶的體驗就是多個任務是同時執行的(這裏的同時並非真正意義的同一時間)。此時就說這些進程(任務)是併發執行的。

       並行:
       多個cpu能真正實現同時執行多個任務,這些任務是並行執行的。


發佈了53 篇原創文章 · 獲贊 34 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章