作業系統與應用程式的關係
作業系統主要可以分為兩大部分:核心和核心之外的一些程式。核心就是直接控制最底層的硬體,而我們日常所用到的軟體,大都是通過核心之外一些程式與核心之間的介面完成的,例如windows api就是為我們提供了應用程式與核心的介面,以實現硬體上的一些操作。作業系統(operating system,簡稱os)是一管理電腦硬體與軟體資源的程式,同時也是計算機系統的核心與基石。作業系統是乙個龐大的管理控制程式,大致包括5個方面的管理功能:程序與處理機管理、作業管理、儲存管理、裝置管理、檔案管理。目前微機上常見的作業系統有dos、os/2、unix、xenix、linux、windows、netware等。
應用軟體是使用者可以使用的各種程式語言,以及用各種程式語言編制的應用程式的集合,分為應用軟體包和使用者程式.應用軟體包是利用計算機解決某類問題而設計的程式的集合,供多使用者使用。
核心系統與應用程式的關係
在linux系統中,核心為使用者程式提供了兩方面的支援。其一是系統呼叫介面,即中斷呼叫int 0x80;另一方面是通過開發環境庫函式或核心庫函式與核心進行資訊交流。不過核心庫函式僅供核心建立的任務0和任務1使用,它們最終還是去呼叫系統呼叫。因此核心對所有使用者程式或程序實際上只提供系統呼叫這一種統一的介面。lib/目錄下核心庫函式**的實現方法與基本c函式庫libc中類似函式的實現方法基本相同,為了使用核心資源,最終都是通過內嵌彙編**呼叫了核心系統呼叫功能。
系統呼叫主要提供給系統軟體程式設計或者用於庫函式的實現。而一般使用者開發的程式則是通過呼叫像libc等庫函式來訪問核心資源。這些庫中的函式或資源通常被稱為應用程式程式設計介面(api),其中定義了應用程式使用的一組標準程式設計介面。通過呼叫這些庫中的程式,應用程式**能夠完成各種常用工作,例如,開啟和關閉、對檔案或裝置的訪問、進行科學計算、出錯處理以及訪問組和使用者標識號id等系統資訊。
在unix類作業系統中,最為普遍使用的是基於posix標準的api介面。linux當然也不例外。api與系統呼叫的區別在於:為了實現某一應用程式介面標準,例如posix,其中的api可以與乙個系統呼叫對應,也可能由幾個系統呼叫的功能共同實現。當然某些api函式可能根本就不需要使用系統呼叫,即不使用核心功能。因此函式庫可以看做實現像posix標準的主體介面,應用程式不用管它與系統呼叫之間到底存在什麼關係。無論乙個作業系統提供的系統呼叫有多麼大的區別,但只要它遵循同乙個api標準,那麼應用程式就可以在這些作業系統之間具有可移植性。
系統呼叫是核心與外界介面的最高層。在核心中,每個系統呼叫都有乙個序列號(在include/unistd.h標頭檔案中定義),並且常以巨集的形式實現。應用程式不應該直接使用系統呼叫,因為這樣的話,程式的移植性就不好了。因此目前linux標準庫(linux standard base,lsb)和許多其他標準都不允許應用程式直接訪問系統呼叫巨集。
庫函式一般包括c語言沒有提供的執行高階功能的使用者級函式,如輸入/輸出和字串處理函式。某些庫函式只是系統呼叫的增強功能版。例如,標準i/o庫函式fopen和fclose提供了與系統呼叫open和close類似的功能,不過是在更高的層次上。在這種情況下,系統呼叫通常能提供比庫函式略微好一些的效能,但是庫函式卻能提供更多的功能,而且更具檢錯能力。
圖一 首先,乙個計算機系統裡面的硬體裝置通常不會只有乙個。比方我的魅族***裡除了音訊解碼器外,自然也有用來儲存歌曲的裝置。這些裝置各具不同的功能,完成這些功能的操作也就各不相同,就決定了寫出來的驅動程式也是各式各樣的,最後導致他們提供給應用程式使用的介面也是千變萬化的,如圖二那樣,用不同顏色的箭頭表示不同的介面使用。這大大增加了應用程式開發的難度,因為應用程式開發者不僅要考慮上層業務邏輯的處理,還要非常熟悉各種驅動所提供出來的不同介面。
圖二: 乙個應用使用多個硬體裝置
其次,乙個計算機系統裡面同時執行著的應用程式通常也不會只有乙個,這些應用程式會競爭使用總量特定的硬體裝置資源。比方你和朋友在用qq聊天的同時,也聽著千千靜聽放出來的**,他們都要使用螢幕裝置show出介面,也都要使用物理記憶體(2)來執行程式**。但是螢幕只有乙個,記憶體也只有那麼多,所以在整個計算機系統範圍內,必須有某種機制來管理分配這些特定硬體資源的使用。如圖三,設計的時候,這種機制要麼放在應用程式中實現,要麼放在驅動程式中實現,但無論放在哪一方,都是會給這一方的程式開發者帶來額外的負擔。
圖二 乙個應用使用多個硬體裝置
圖三: 多個應用使用多個硬體裝置
引入作業系統之後
上面之所以說額外,那是因為對於應用程式開發者來講,其重點要考慮的是業務邏輯如何實現,而不是去考慮硬體資源的管理分配,也最好用不著去區分那麼多驅動程式的不同介面。類似的,對於驅動程式開發者來說,其要考慮的重點是如何正確的驅動特定的硬體,而不是去考慮硬體資源的管理分配上。那這部分「額外」的工作由誰去做呢,這正是後來出現的作業系統(3)的職責所在。
圖五: 引入作業系統後的情況
如圖五,作業系統幫我們考慮對各種硬體資源的分配管理,並完成對各種驅動程式所提供介面的抽象,形成一套簡單一致的介面給上層的應用程式去使用。如此,應用程式開發人員只需要知道作業系統所提供的這套程式設計介面(api),就可以實現不同的業務應用。前面我們講系統程式軟體實際上就是驅動程式,但這裡我們講系統程式軟體是作業系統。概念上,我們認為作業系統依賴於驅動程式這一層,但實際上,驅動程式是嵌入到作業系統中去的,所以我們認為驅動程式是作業系統的一部分。這種鑲嵌大大增加了以往驅動程式開發者的工作難度,因為他們不僅要熟悉手頭的硬體工作原理,更重要的是要確保他們寫的驅動能正確的鑲嵌到作業系統裡面去,這就要求他們同時也必須熟練掌握作業系統提供出來的,用來完成鑲嵌工作的各種介面。
作業系統與應用程式的關係
作業系統主要可以分為兩大部分 核心和核心之外的一些程式。核心就是直接控制最底層的硬體,而我們日常所用到的軟體,大都是通過核心之外一些程式與核心之間的介面完成的,例如windows api就是為我們提供了應用程式與核心的介面,以實現硬體上的一些操作。作業系統 operating system,簡稱os...
作業系統和應用的關係
問題 監控程式的主要功能是什麼 程式的載入和執行 在作業系統上執行的程式稱為什麼?應用呼叫作業系統功能稱為什麼?系統呼叫system call windows vista是多少位的作業系統?32位 也有64位的版本 gui是什麼的縮寫?graphical user inte ce圖形使用者介面 wy...
應用程式系統按鈕操作 VC
使應用程式位於螢幕 佔據螢幕90 如下操作 int xsize getsystemmetrics cxscreen int ysize getsystemmetrics cyscreen cs.cx xsize 9 10 cs.cy ysize 9 10 cs.x xsize 20 cs.y ysi...