執行系統功能

執行系統功能

作業系統位於底層硬體與用戶之間,是兩者溝通的橋樑。用戶可以通過作業系統的用戶界面,輸入命令。作業系統則對命令進行解釋,驅動硬體設備,實現用戶要求。以現代標準而言,一個標準PC的作業系統應該提供以下的功能:進程管理(Processing management)、記憶體管理(Memory management)、檔案系統(File system)、網路通信(Networking)、安全機制(Security)、用戶界面(User interface)、驅動程式(Device drivers)。執行系統功能是指執行進程管理、記憶體管理等系統功能。

簡介

在計算機系統中,通常運行著兩類程式:系統程式和應用程式,為了保證系統程式不被應用程式有意或無意地破壞,為計算機設定了兩種狀態:系統態(也稱為管態或核心態)和用戶態(也稱為目態)。作業系統在系統態運行,而應用程式只能在用戶態運行。執行系統功能是指執行進程管理、記憶體管理等系統功能,或指應用程式請求作業系統執行系統特有的功能,即通過系統調用來實現。

常見系統功能

進程管理

在傳統的多道程式系統中,處理機的分配和運行都是以進程為基本單位,因而對處理機的管理可歸結為對進程的管理;在引入了執行緒的 OS 中,也包含對執行緒的管理。處理機管理的主要功能是創建和撤消進程(執行緒),對諸進程(執行緒)的運行進行協調,實現進程(執行緒)之間的信息交換,以及按照一定的算法把處理機分配給進程(執行緒) 。

進程控制

在傳統的多道程式環境下,要使作業運行,必須先為它創建一個或幾個進程,並為之分配必要的資源。當進程運行結束時,立即撤消該進程,以便能及時回收該進程所占用的各類資源。進程控制的主要功能是為作業創建進程,撤消已結束的進程,以及控制進程在運行過程中的狀態轉換。在現代 OS 中,進程控制還應具有為一個進程創建若干個執行緒的功能和撤消(終止)已完成任務的執行緒的功能。

進程同步

前已述及,進程是以異步方式運行的,並以人們不可預知的速度向前推進。為使多個進程能有條不紊地運行,系統中必須設定進程同步機制。進程同步的主要任務是為多個進程(含執行緒)的運行進行協調。有兩種協調方式:

(1) 進程互斥方式。這是指諸進程(執行緒)在對臨界資源進行訪問時,應採用互斥方式;

(2) 進程同步方式。這是指在相互合作去完成共同任務的諸進程(執行緒)間,由同步機構對它們的執行次序加以協調。

為了實現進程同步,系統中必須設定進程同步機制。最簡單的用於實現進程互斥的機制是為每一個臨界資源配置一把鎖 W, 當鎖打開時, 進程(執行緒)可以對該臨界資源進行訪問;而當鎖關上時,則禁止進程(執行緒)訪問該臨界資源。而實現進程同步的最常用的機制則是信號量機制,我們將在第二章中做詳細介紹。

進程通信

在多道程式環境下,為了加速應用程式的運行,應在系統中建立多個進程,並且再為一個進程建立若干個執行緒,由這些進程(執行緒)相互合作去完成一個共同的任務。而在這些進程(執行緒)之間,又往往需要交換信息。例如,有三個相互合作的進程,它們是輸入進程、計算進程和列印進程。輸入進程負責將所輸入的數據傳送給計算進程;計算進程利用輸入數據進行計算,並把計算結果傳送給列印進程;最後,由列印進程把計算結果列印出來。進程通信的任務就是用來實現在相互合作的進程之間的信息交換。當相互合作的進程(執行緒)處於同一計算機系統時,通常在它們之間是採用直接通信方式,即由源進程利用傳送命令直接將訊息(Message)掛到目標進程的訊息佇列上,以後由目標進程利用接收命令從其訊息佇列中取出訊息。

調度

在後備佇列上等待的每個作業都需經過調度才能執行。在傳統的作業系統中,包括作業調度和進程調度兩步。

(1) 作業調度。作業調度的基本任務是從後備佇列中按照一定的算法,選擇出若干個作業,為它們分配運行所需的資源(首先是分配記憶體)。在將它們調入記憶體後,便分別為它們建立進程,使它們都成為可能獲得處理機的就緒進程,並按照一定的算法將它們插入就緒佇列。

(2) 進程調度。 進程調度的任務是從進程的就緒佇列中, 按照一定的算法選出一個進程,把處理機分配給它,並為它設定運行現場,使進程投入執行。值得提出的是,在多執行緒 OS中,通常是把執行緒作為獨立運行和分配處理機的基本單位,為此,須把就緒執行緒排成一個佇列,每次調度時,是從就緒執行緒佇列中選出一個執行緒,把處理機分配給它。

記憶體管理

根據帕金森定律:“你給程式再多記憶體,程式也會想盡辦法耗光”,因此程式設計師通常希望系統給他無限量且無限快的記憶體。大部分的現代電腦記憶體架構都是層次結構式的,最快且數量最少的暫存器為首,然後是快取、記憶體以及最慢的磁碟存儲設備。而作業系統的記憶體管理提供查找可用的記憶空間、配置與釋放記憶空間以及交換記憶體和低速存儲設備的內含物……等功能。此類又被稱做虛擬記憶體管理的功能大幅增加每個進程可獲得的記憶空間(通常是4GB,即使實際上RAM的數量遠少於這數目)。然而這也帶來了微幅降低運行效率的缺點,嚴重時甚至也會導致進程崩潰。

記憶體管理的另一個重點活動就是藉由CPU的幫助來管理虛擬位置。如果同時有許多進程存儲於記憶設備上,作業系統必須防止它們互相干擾對方的記憶體內容(除非通過某些協定在可控制的範圍下操作,並限制可訪問的記憶體範圍)。分區記憶體空間可以達成目標。每個進程只會看到整個記憶體空間(從0到記憶體空間的最大上限)被配置給它自己(當然,有些位置被作業系統保留而禁止訪問)。CPU事先存了幾個表以比對虛擬位置與實際記憶體位置,這種方法稱為標籤頁配置。

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

磁碟與檔案系統

所謂的檔案系統,通常指稱管理磁碟數據的系統,可將數據以目錄或檔案的型式存儲。每個檔案系統都有自己的特殊格式與功能,例如日誌管理或不需磁碟重整。

作業系統擁有許多種內置檔案系統。例如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,而UNIX中的一個分支Solaris最近則開始支持一種新式的ZFS。

大部分上述的檔案系統都有兩種建置方法。系統可以以日誌式或非日誌式建置。日誌式檔案系統可以以較安全的手法運行系統恢復。如果一個沒有日誌式建置的檔案系統遇上突然的系統崩潰,導致數據創建在一半時停頓,則此系統需要特殊的檔案系統檢查工具才能撤消;日誌式則可自動恢復。微軟的NTFS與Linux的ext3、ext4、reiserFS與JFS都是日誌式檔案系統。

每個檔案系統都實現相似的目錄/子目錄架構,但在相似之下也有許多不同點。微軟使用“\”符號以創建目錄/子目錄關係,且檔案名稱稱忽略其大小寫差異;UNIX系統則是以“/”創建目錄架構,且檔案名稱稱大小寫有差異。(其實這是給system call看的,"/"或"\"並不實際存在硬碟)

網路

許多現代的作業系統都具備操作主流網路通信協定TCP/IP的能力。也就是說這樣的作業系統可以進入網路世界,並且與其他系統分享諸如檔案、印表機與掃瞄器等資源。

許多作業系統也支持多個過去網路啟蒙時代的各路網路通信協定,例如IBM創建的系統網路架構、DEC在它所生產的系統所設定的DECnet架構與微軟為Windows製作的特殊通信協定。還有許多為了特殊功能而研發的通信協定,例如可以在網路上提供檔案訪問功能的NFS系統。現今大量用於影音流(Streaming media)及遊戲訊息傳送的UDP協定等。

安全

大多數作業系統都含有某種程度的信息安全機制。信息安全機制主要基於兩大理念:

作業系統提供外界直接或間接訪問數種資源的管道,例如本地端磁碟驅動器的檔案、受保護的特權系統調用、用戶的隱私數據與系統運行的程式所提供的服務。

作業系統有能力認證資源訪問的請求。允許通過認證的請求並拒絕無法通過的非法請求,並將適當的權力授權(Authorization)給此請求。有些系統的認證機制僅簡略地把資源分為特權或非特權,且每個請求都有獨特的身份辨識號碼,例如用戶名。資源請求通常分成兩大種類:

內部來源:通常是一個正在運行的程式發出的資源請求。在某些系統上,一個程式一旦可運行就可做任何事情(例如DOS時代的病毒),但通常作業系統會給程式一個識別代號,並且在此程式發出請求時,檢查其代號與所需資源的訪問許可權關係。

外部來源:從非本地端電腦而來的資源請求,例如遠程登錄本機電腦或某些網路連線請求(FTP或HTTP)。為了識別這些外部請求,系統也許會對此請求提出認證要求。通常是請求輸入用戶名以及相對應的密碼。系統有時也會套用諸如磁卡或生物識別數據的它種認證方法。在某些例子,例如網路通信上,通常不需通過認證即可訪問資源(例如匿名訪問的FTP伺服器或P2P服務)。

除了允許/拒絕形式的安全機制,一個高安全檔次的系統也會提供記錄選項,允許記錄各種請求對資源訪問的行為(。

肇因於軍方與商業組織將敏感數據記錄在電腦上,安全機制在作業系統歷史上是一個被長久關注與討論的問題。美國國防部(DoD)便創立了《可信賴之計算機系統評鑑程式》(TCSEC),此手冊確立了評鑑安全機製成效的基本原則。這對作業系統作者來說非常重要,因為TCSEC是用於評鑑、分類與選拔出用於處理、存儲與獲取敏感或機密數據的電腦系統的標準程式。

內部通訊安全

內部信息安全可視為防止正在運行的程式任意訪問系統資源的手段。大多作業系統讓普通程式可直接操作電腦的CPU,所以產生了一些問題,例如怎樣把可如作業系統一樣處理事務、運行同樣特殊指令的程式強迫停止,畢竟在此情境下,作業系統也只是另一個平起平坐的程式。為通用作業系統所生產的CPU通常於硬體層級上實踐了一定程度的特殊指令保護概念。通常特權層級較低的程式想要運行某些特殊指令時會被阻斷,例如直接訪問像是硬碟之類的外部設備。因此,程式必須得經由詢問作業系統,讓作業系統運行特殊指令來訪問磁碟。因此作業系統就有機會檢查此程式的識別身份,並依此接受或拒絕它的請求。

在不支持特殊指令架構的硬體上,另一個也是唯一的保護方法,則是作業系統並不直接利用CPU運行用戶的程式,而是藉由模擬一個CPU或提供一P-code機系統(偽代碼運行機),像是Java一樣讓程式在虛擬機上運行。

內部安全機制在多用戶電腦上特別重要:它允許每個系統用戶擁有自己個人的檔案與目錄,且其他用戶不能任意訪問或刪除。因為任何程式都可能繞過作業系統的監控,更有可能繞過側錄程式的監控,擁有強制力的內部安全機制在側錄引導時也非常重要。

外部通訊安全

通常一個作業系統會為其他網路上的電腦或用戶提供(主持)各種服務。這些服務通常藉由連線埠或作業系統網路地址後的數字接入點提供。通常此服務包括提供檔案共享(NFS)、列印共享、電子郵件、網頁服務與檔案傳輸協定(FTP)。 外部信息安全的最前線,是諸如防火牆等的硬體設備。在作業系統內部也常設定許多種類的軟體防火牆。軟體防火牆可設定接受或拒絕在作業系統上運行的服務與外界的連線。因此任何人都可以安裝並運行某些不安全的網路服務,例如Telnet或FTP,並且設定除了某些自用通道之外阻擋其他所有連線,以達成防堵不良連線的機制。

用戶界面

今日大部分的作業系統都包含圖形用戶界面(GUI)。有幾類較舊的作業系統將圖形用戶界面與核心緊密結合,例如最早的Windows與Mac OS實現產品。此種手法可提供較快速的圖形回應能力,且實現時不需切割模組因而較為省工,但是會有強烈副作用,例如圖形系統崩潰將導致整個系統崩潰,例如藍屏當機。許多近代的作業系統已模組化,將圖形接口的副系統與核心分開(已知Linux與Mac OS X原先就是如此設計,而某些擴充版本的Windows終於也採用此手法)。

許多作業系統允許用戶安裝或創造任何他們喜歡的圖形用戶界面[5]。大部分的Unix與Unix派生系統(BSD、Linux與Minix)通常會安裝X Window系統配合GNOME或KDE桌面環境。而某些作業系統就沒有這么彈性的圖形用戶界面,例如Windows。這類的作業系統只能通過外加的程式來改變其圖形用戶界面,甚至根本只能改變諸如選單風格或顏色配置等部分[來源請求]。

圖形用戶界面與時並進,例如Windows在每次新版本上市時就會將其圖形用戶界面改頭換面,而Mac OS的GUI也在Mac OS X上市時出現重大轉變。

驅動程式

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

設計驅動程式的主要目的在於操作抽象化,任何硬體模組,既使是同一類的設備,在硬體設計面上也有巨大差異。廠商推出的較新模組通常更可靠更有效率,控制方法也會有所不同。電腦與其作業系統每每不能預期那些現有與新設備的變異之處,因此無法知道其操作方法。為解決此問題作業系統通常會主動制訂每種設備該有的操作方式,而驅動程式功能則是將那些作業系統制訂的行為描述,轉譯為可讓設備了解的自定義操作手法。

理論上適合的驅動程式一旦安裝,相對應的新設備就可以無誤地運行。此新驅動程式可以讓此設備完美地切合在作業系統中,讓用戶察覺不到這是作業系統原本沒有的功能。

系統調用

概述

所謂系統調用就是用戶在程式中調用作業系統所提供的一些子功能,系統調用可以被看做特殊的公共子程式。系統中的各種共享資源都由作業系統統一掌管,因此在用戶程式中,凡是與資源有關的操作(如存儲分配、進行I/0傳輸以及管理檔案等),都必須通過系統調用方式向作業系統提出服務請求,並由作業系統代為完成。通常,一個作業系統提供的系統調用命令有幾十乃至上百條之多。

典型實現

Linux 的系統調用通過 int 80h 實現,用系統調用號來區分入口函式。作業系統實現系統調用的基本過程是:

應用程式調用庫函式(API);

API 將系統調用號存入 EAX,然後通過中斷調用使系統進入核心態;

核心中的中斷處理函式根據系統調用號,調用對應的核心函式(系統調用);

系統調用完成相應功能,將返回值存入 EAX,返回到中斷處理函式;

中斷處理函式返回到 API 中;

API 將 EAX 返回給應用程式

應用程式調用系統調用的過程是:

把系統調用的編號存入 EAX;

把函式參數存入其它通用暫存器;

觸發 0x80 號中斷(int 0x80)。

相關詞條

熱門詞條

聯絡我們