計算機概論 ch7

Download Report

Transcript 計算機概論 ch7

第六章
軟體介紹
電腦光有硬體是無法運作的,真的要讓電腦解
決我們的問題,還需要軟體的配合。在本章中,
我們將建立對軟體的正確觀念,以及介紹各式
各樣的軟體。
1
第六章 軟體介紹
• 我們需要透過軟體指揮電腦硬體來完成我們指定的工作,而
什麼是『軟體』呢?
– 『軟體』其實是一種抽象化的名詞,它必須以某種排列方式附著於某
個硬體之上,例如:附著於記憶體、硬碟、光碟片中
– 『軟體』的功能則是告知電腦該去做什麼或提供電腦所需要的資料來
源。在本章中,首先我們將從軟體的目的、軟體的組成,開始介紹到
底『軟體』是什麼東西,進而介紹軟體的種類以及幾種常見的系統軟
體。
2
大綱
• 6.1 什麼是軟體
– 6.1.1
– 6.1.2
– 6.1.3
軟體的目的
軟體的種類
軟體與韌體
• 6.2 軟體的分類
– 6.2.1
– 6.2.2
– 6.2.3
依執行與設計分類
依使用對象分類
依網路分類
• 6.3 系統軟體
• 6.4 軟體與檔案
– 6.4.1
– 6.4.2
檔案系統
軟體的組織成分
• 6.5 系統程式
– 6.5.1
– 6.5.2
傳統的系統程式
現代的系統程式
3
6.1 什麼是軟體
• 相對於摸的到看的到的硬體而言,軟體(Software)只是一種抽
象化的名詞,它必須以某種排列方式附著於某個硬體之上,
其實我們只能感覺到軟體的存在,或者透過硬體看到軟體的
成效,為了說明什麼是『軟體』,我們將從軟體的目的及軟
體的內容來分別討論。
4
6.1.1
軟體的目的
• 科技起始於人性,發明電腦的主要目的是為了幫助人類解決問題。然而單
靠電腦硬體是無法運作的,就如同是人光有身體的各個組織成分,但大腦
無法運作,就只是個軀殼,我們必須透過大腦的指示,才能夠指揮身體的
各種器官來完成某些工作,例如:拿東西、拉抽屜、走路、跑步、吃飯等
等。電腦的運作也是如此,要讓電腦硬體產生運作,就必須搭配『軟體』。
• 簡單的說,『軟體』的最主要目的在於讓人們操控電腦硬體來完成工作,
軟體的種類有很多,而各種軟體雖然都是為了解決『讓人們操控電腦硬體
來完成工作』而發展的,但卻各有不同的設計目的。
– 指揮電腦硬體
• 最底層軟體的根本功能必須能夠指揮電腦硬體,這類軟體必須負責協調與控制各個
硬體元件的執行動作,並且協調不同軟體共用電腦硬體資源時的溝通與控制。提供
此功能的軟體,我們稱之為『系統軟體』(6.3節將對系統軟體有更深入的說明)。
– 做為使用者介面
• 使用者必須能夠透過軟體命令電腦硬體執行指定的工作,而電腦硬體執行完畢後,
也必須透過軟體才能將執行結果以各類方式反應給使用者。例如顯示於螢幕上,從
印表機列印出來,儲存於檔案內。
5
6.1.1
軟體的目的
– 做為其他軟體間的溝通橋樑
• 某些固定執行的工作也可以發展為軟
體,此類軟體並不負責與使用者接觸
的介面,也不負責最底層的硬體操作,
我們可以將這類軟體看做是中介性質
的軟體,由於未提供使用者介面,因
此只能自動執行或做為其他軟體之呼
叫對象之用,此類軟體大多作為伺服
器之用,或做為程式的函數庫之用。
使用者、軟體、硬體關係圖
軟體的目的
6
6.1.2
軟體的種類
• 軟體其實指的就是程式,但廣義的軟體則可以區分為資料與
程式兩大類。
– 程式是一連串的指令,正如同電子辭典中的搜尋單字功能,就必須透
過一個搜尋程式來達成
– 而電子辭典中的所有單字則為資料
– 換句話說,即使程式相同,但若提供的資料不同,則所提提供的服務
也就不同。
• 目前大多數的軟體都包含了程式(Program)與資料(data)兩部
分
– 正如同購買電子辭典時,也同時購買了搜尋程式與基礎的單字詞庫
– 資料通常可以分別購買,例如我們可以擴充電子辭典的詞庫。音樂CD
正是標準的資料軟體,它必須透過撥放程式才能完成播放音樂的目的。
7
6.1.3
軟體與韌體
• 有時候,不僅資料可以擴充,程式也可以擴充,尤其這正是
電腦定義的最重要元素之一,因此我們藉由安裝不同的程式,
使讓電腦具有更多的功能。
– 有些微控制器(Micro-controller)系統則不一定具有擴充功能,例如早期
的電子辭典、手機等等,明顯地,它仍然有一些程式在內部運作,但
我們卻無法安裝新的程式,這是因為這些程式與資料都被燒錄在唯讀
性記憶體(ROM)中,因此無法修改記憶體中的內容,這類的程式則稱
之為韌體程式,例如電腦中的BIOS就是一種韌體(Firmware)。
• 電腦具有擴充軟體的特性,我們可以藉由外部儲存媒體或網
路,將軟體安裝於電腦系統中,並於執行時載入主記憶體執
行
– 而目前較新穎的電子磁碟或手機,則提供了插卡功能(例如插入Flash
卡),以擴充其功能。
8
6.2 軟體的分類
• 軟體(專指程式而言)可以依照不同的角度來加以分類。在
不同的分類中,每個軟體所扮演的角色也有所不同,在本節
中,我們將分別加以介紹。
9
6.2.1
•
•
依執行與設計分類
依照執行與設計,我們可以將軟體區分為系統軟體(System Software)與應用
軟體(Application Software)兩大類。
系統軟體
– 系統軟體又分為兩大類:『作業系統』與『系統程式』
• 作業系統提供了其他程式執行的環境,因此較接近硬體底層的低階程式,都必須
包含在作業系統的範圍內,以便來管理與控制電腦硬體及周邊設備。
• 系統程式則是程式開發的工具,例如編輯程式碼的編輯器、翻譯程式碼的組譯器、
編譯器與直譯器、連結目的碼的連結器、載入程式碼的載入器等等。為了提昇開
發程式的效率,因此有許多廠商也將這些系統程式整合在一起,變成一套開發程
式專用的軟體,也就是所謂的整合式開發環境(IDE),例如Visual C++、Visual
Basic、Borland C++ Builder、Delphi等等都是整合式開發環境的一種,分別提
供了使用不同程式語言來開發程式的環境。
– 所有的程式都必須透過程式開發工具來開發,然後在作業系統提供的環境中執行。我
們將在下一節中分別加以介紹,並於下一章詳細介紹作業系統的原理與種類。
系統軟體與應用軟體關係圖
10
6.2.1
依執行與設計分類
• 應用軟體
– 應用軟體是架構在系
統軟體之上,依據某
種特殊需求而開發出
來的軟體,例如:
Office、帳務系統、電
腦遊戲等等。我們可
以依照本身的需求,
使用特定的應用軟體
來完成工作,在第九
章中,我們將介紹幾
種比較常見的應用軟
體。
11
6.2.2
•
•
依使用對象分類
軟體在開發時,依照使用對象可以分類為『通用型』與『專屬型』兩大類:
通用型軟體
– 此類軟體的使用者為一般電腦使用者,功能比較屬於多數人常見的需求,而不是針對某
人、某個組織量身訂作,例如辦公室所使用的文書處理軟體、收發電子郵件軟體、網路
瀏覽器、影像處理軟體等等都是通用型軟體。
– 對於系統軟體而言,所有的系統軟體都屬於通用型軟體,因為系統程式的功能為開發程
式,其對象為所有的程式設計師。而作業系統的主要功能(專指作業系統核心)在於執
行程式,其對象為所有的電腦使用者。因此,一般將軟體區分為通用型與專屬型,大多
指的是應用軟體的分類。
12
6.2.2
依使用對象分類
– 通用型應用軟體又稱為水平應用軟體(Horizontal Software),這類軟體
通常可以隨時購買,即刻使用,而不需要經過訂製(訂製包含了需求
分析與設計等特殊需求)。此類軟體是由軟體開發公司根據一般人的
普遍需求所發展,以提高使用者的工作效率,讓使用者使用電腦時更
加便利。一般開發此類程式的大多為國際知名廠商,雖然開發水平應
用軟體的成本較高(需要較多人員參與設計),但因使用者眾,因此
售價較低,銷售量較大,國內廠商除少數知名廠商(如趨勢、友立)
之外,大多將業務重點放在開發專屬型應用軟體。
• 專屬型軟體
– 此類軟體是針對特殊需求而專門訂製的軟體,各家公司通常對於這些
需求有些不同,所以無法或很難設計出一套一體適用的軟體。此類軟
體通常是為了解決公司內部的作業流程,公司與公司的業務交易,公
司與客戶的業務交易等等的需求,換句話說,這類軟體通常是業務資
訊化的推手。
13
6.2.2
依使用對象分類
– 此類軟體也稱為垂直應用軟體(Vertical Software),因為它常常必須整
合企業內部許多業務的處理流程,例如會計系統、生產排程系統、企
業資源整合系統、進銷存系統等等都屬於此類系統。此類系統由於其
特殊性,因此需要針對需求進行特別的規劃及完整的開發過程,因此
價格非常昂貴,但也較無盜版等問題。
– 垂直應用軟體容易受到各地的文字、法規、文化、習慣等自然市場的
區隔屏障,反而不容易受到技術變動的影響。發展此類系統通常需要
強有力的領域知識(domain knowledge)做為後盾,因此不易被取代。
而為了更有效率的開發此類系統,通常會先發展此類系統的一般性雛
形,當客戶願意購買時,再針對客戶的特殊需求,進行客製化
(Customize)的修正及補強動作。
14
6.2.3
依網路分類
• 由於網路的發達,一種新的分類也隨之產生,我們可以將軟體區為為『網
路型軟體』、『單機型軟體』、『混合型軟體』。
• 網路型軟體
– 此類軟體顧名思義必須要在網路連線的狀態中,才具有意義,例如眾多的線
上遊戲(On-Line Game) 即是一例。若使用者未能接通網路,則將軟體放置於
個人電腦中將形同垃圾。另一類常見的為電子郵件軟體,若電腦無法連接網
路,則充其量電子郵件軟體只能做為記事等用途;更有甚者(如網頁型電子
郵件Web Mail),使用者根本無法在網路未接通時使用該軟體。
– 由於目前大多數的網路結構都屬於主從式架構(Client/Server Architecture),
因此網路型軟體又可分為伺服器軟體與客戶端軟體兩大類。常見的網頁伺服
器如IIS、Apache等即為伺服器軟體,而瀏覽器則為客戶端軟體。對於一般使
用者而言,大多操作客戶端軟體對伺服器提出服務需求;而伺服器軟體會將
需求加以執行,並將結果回傳給客戶端軟體。
15
6.2.3
依網路分類
• 單機型軟體
– 單機型軟體不需要考慮網路是否處於連接狀態,網路的連接與否,並
不會增加單機型軟體所提供的服務。單機型軟體的使用資源僅限於安
裝該軟體的電腦,例如:磁碟重組工具、個人版遊戲軟體踩地雷等都
屬於單機型軟體。
• 混合型軟體
– 混合型軟體大概是目前數量最多的軟體,此類軟體在網路未接通時,
可以扮演單機型軟體的功能,而在網路連線的狀態下,也具有網路型
軟體的功能。例如瀏覽器就屬於此種類型,瀏覽器不但可以讀取本地
端電腦的HTML網頁,也可以讀取遠端伺服器的HTML網頁。此外,目
前大多數的伺服器等級的作業系統都屬於混合性軟體,也就是具有單
機操作與網路操作的功能。
16
6.3 系統軟體
• 系統軟體分為兩大類,一類為作業系統,另一類為系統程式。更詳細地說,
系統軟體應該指的是『作業系統的核心』與『系統程式及整合開發環境』。
其『作業系統核心』的功能為直接管理與控制電腦硬體及周邊設備,以提
供其他程式執行的環境。而『系統程式及整合開發環境』的用途則為提供
程式設計師開發程式的環境。
• 作業系統(Operating System;簡稱OS),是介於電腦硬體與應用軟體之間
的橋樑,負責所有硬體資源的操作細節,同時負責協調各個程式的資源配
置。簡單的說,所有的程式都必須在作業系統的控管下來執行,作業系統
負責分配CPU時間、記憶體以及其他周邊設備給這些程式。
– 不過目前所流行的眾多作業系統已經不僅提供上述功能,它甚至還提供了瀏
覽器、磁碟管理工具、伺服器等等的其他程式。因此,上述的基本功能,嚴
格說起來,應該稱之為作業系統核心(OS kernel),也只有作業系統核心才屬
於系統軟體的一部份,而其他由作業系統附帶提供的軟體則應該歸類於應用
軟體的範疇。
17
6.3 系統軟體
– 目前常見的作業系統有Windows、Linux、Unix、Mac等等。我們將在
第八章中,詳細說明作業系統的原理以及負責的幾項重要資源管理。
Windows XP作業系統的使用介面
18
6.4 軟體與檔案
• 軟體其實是概括性的名詞,它是由程式及資料所組成,資料
或程式必須以『檔案形式』存放在輔助儲存體(例如硬碟)
中,並於執行時載入到主記憶體執行。
• 檔案是存放資料或程式的單位,但檔案在磁碟中並非雜亂無
章的存放,而是透過檔案系統的管理,在本節中,我們將介
紹常見的樹狀檔案系統以及各類型常見的檔案。
19
6.4.1
檔案系統
• 資料或程式都是以檔案(file)型式儲存在次要儲存裝置(例如
磁碟、光碟等)以便於在電力喪失的狀況下仍舊能夠被保存
下來。在電腦的儲存裝置中,存在極大量的檔案數目,若不
加以分類整理,將難以管理與搜尋。
• 一般來說,檔案的儲存是階層式的架構,使用者可以依照檔
案的性質及功能加以分類,形成許多的目錄(directory)或資料
夾(folder)。目錄是一種階層式結構
– 也就是說,目錄下仍舊可以包含有子目錄(subdirectory),而最上層的
目錄則稱之為根目錄(root directory)。
– 除了根目錄之外,每一個目錄都有唯一的父目錄(Parent directory),
換句話說,所有的目錄將形成階層式的樹狀目錄(tree directory),如圖
6-7、6-8所示,而任何一個檔案都將位於其中的一個目錄。
20
6.4.1
檔案系統
Linux作業系統的樹狀目錄結構
Windows作業系統的檔案總管可以觀察樹狀目錄結構
21
6.4.1
檔案系統
• 檔案系統
– 檔案與目錄的存放方式由檔案系統(File System)所控制。例如使用者
以完整路徑及檔案名稱存取檔案時(例如C:\ Documents and
Settings\Administrator\My Documents\homework1.doc),檔案系統
將會找出檔案儲存在磁碟的哪個位置,進而存取該檔案的資料。
– 不同的作業系統採用的檔案系統也不相同,例如:DOS的檔案系統為
FAT(file allocation table),Windows 2000的檔案系統為FAT、FAT32
或NTFS,Linux的檔案系統為linux ext2,Mac OS的檔案系統為
HFS(hierarchical file system)等。不同的作業系統之間可能無法立即
存取其他檔案系統的檔案,不過也可以藉由一些特殊程式達到此項功
能。
22
6.4.1
檔案系統
• 檔案名稱
– 檔案名稱分為兩大部分:主檔名與副檔名,中間以『.』做為間隔符號
(當『.』不只一個時,則以最後出現的『.』做為間隔符號)。主檔名
通常是用來代表檔案內容的名稱,而副檔名(又稱為附屬檔名或延伸
檔名)則用來代表檔案類型,例如,homework.txt的主檔名homework,
代表檔案內容可能是家庭作業,而txt則是純文字檔,可以使用記事本、
WordPad、Word、UltraEdit等軟體開啟。
– 檔名並非毫無限制,在以往的DOS作業系統中,主檔名不得超過8個
字元,副檔名不得超過3個字元,並且只能夠使用『英文字母』、
『數字』及『_』來命名。而在Windows 95以後的視窗作業系統,則
允許主檔名的長度可達255個字元,並且允許使用!@#$%^&()-'{}、空
白字元、中文字等特殊字元來命名,不過,一般仍建議盡量使用『英
文字母』、『數字』及『_』等來命名以避免檔案需要在網路傳輸時,
另一端的作業系統不支援的情況發生。
23
6.4.1
檔案系統
– 副檔名的種類隨著所安裝的軟體種類而有所增減,在Windows中,若
您已經安裝某些軟體後,在檔案總管中開啟這些特殊副檔名的檔案後,
將會自動開啟對應的軟體,而管理副檔名的對應程式則位於檔案總管
中,如下圖:
執行檔案總管的【工具/資料夾選項】指令,可以開啟管理副檔名的程式
24
25
26
27
6.4.1
檔案系統
• 檔案路徑
– 表達檔案在磁碟的邏輯位址是透過檔案路徑來完成的,而檔案路徑又分為絕
對路徑(absolute path)與相對路徑(relative path)。
• 絕對路徑是由根目錄開始計算的完整路徑,就Windows作業系統而言,絕
對路徑包含了『磁碟機』、『所有經過的目錄』、『檔案名稱』等三大部
分。其中以『\』做為目錄與目錄及目錄與檔案的區隔,如下範例。
– 【範例1】:Windows的絕對路徑
• C:\ Documents and Settings\Administrator\My Documents\homework1.txt
– 說明:
• (1)『C』是磁碟機代號,之後必須接著『:\』做為區隔。
• (2)『Documents and Settings』是C磁碟機下的一個目錄,
『Administrator』是『Documents and Settings』下的子目錄,『My
Documents』是『Administrator』下的子目錄。目錄間以『\』做為區隔。
• (3)『homework1.txt』是檔案名稱。位於『My Documents』目錄內,目
錄與檔案名稱間以『\』做為區隔。
28
6.4.1
檔案系統
– UNIX/Linux的絕對路徑和Windows差不多,但UNIX/Linux沒有磁碟機
代號,而根目錄的表示法就是『/』,並且目錄與目錄之間則以『/』做
為區隔,如下範例。
– 【範例2】:UNIX/Linux的絕對路徑。
• /home/jhchen/homework.txt
– 說明:
• (1)第一個『/』代表是根目錄。
• (2)『home』是根目錄下的一個子目錄,『jhchen』是『home』
下的子目錄。目錄間以『/』做為區隔。
• (3)『homework.txt』是檔案名稱。位於『jhchen』目錄內,目錄
與檔案名稱間以『/』做為區隔。
29
6.4.1
檔案系統
• 相對路徑是由所在目錄開始往上或往下計算所得到的路徑
– 要表達目前所在目錄可以使用『.』來代表
– 而要表達父目錄則必須使用『..』來表達,子目錄則為『\』(Windows)或
『/』(UNIX/Linux),如下範例。
– 【範例3】:Windows的相對路徑
• 假設目前位於C:\MyData\Word目錄。
則要存取C:\MyData\Excel\hw.xls
可以使用『..\Excel\hw.xls』
來代表,如圖示意
– 對UNIX/Linux而言,
『.』仍舊是用來代表
目前所在目錄,『..』
也是用來表達父目錄,
子目錄則為『/』,
此外,在UNIX/Linux中
,欲表達登入者的起始目錄
,還可以使用『~』符號。
30
6.4.2
軟體的組織成分
• 軟體以檔案形式存放於輔助記憶體中,而其中一類檔案稱之為可執行檔。
可執行檔(Executable File)是一種可以直接在作業系統環境中執行的程式
檔案。其中的內容則為許多的指令,以下我們將就『指令』、『程式』、
『軟體』、『系統』之間的關係加以說明。
• 指令
– 指令(instruction)是驅動電腦硬體最基本的命令,例如:命令ALU執行加法、
減法,讀取磁碟等等,它具有特殊的格式,對電腦硬體而言,電腦只能夠以
二進制方式來表達所有的資料(包含指令),因此,真正控制電腦的指令其
實是一些特定格式的二進制碼,稱之為機器碼(machine code),並且根據電腦
硬體結構的不同,每一種電腦的機器碼格式也大不相同。
【指令集】每一種電腦提供的指令都不相同,而一台電腦提供各式各樣的指令合起來
就稱之為該電腦所提供的指令集(instruction set),因此,每一種電腦提供的指令集也
不一定相同。根據指令特性,又可以將指令集分為RISC(Reduced Instruction Set
Computing;精簡指令集)與CISC(Complex Instruction Set Computing;複雜指令集)
兩種電腦結構。RISC的單一個指令大多只能夠完成非常簡單的一項工作;而CISC的
單一指令則可以完成較複雜的工作。
31
6.4.2
•
軟體的組織成分
程式
– 正如同上述所言,單一個指令只能夠完成單一項簡單的工作(RISC的指令所能完成的
工作更簡單),因此,如果想要完成某一項特定工作,則必須由更多的指令共同完成,
而程式(program)就是一連串指令的集合,用以完成某一項特定工作。舉例來說,如果
要完成兩個數的相加,則一個指令就可以完成,但如果要計算全班學生的平均成績,就
必須透過程式來完成,這個程式可能包含加法指令、迴圈跳躍指令、除法指令等等。
•
軟體
– 軟體(Software)和程式的分界線並不那麼明顯,但一般所稱的軟體大多是由一個以上的
程式所組成,可以針對某項工作需求提供較完整的解答,例如計算全班學生的平均成績
如果是一個程式,那麼計算、統計、繪曲線圖等等的程式則可以歸納在試算表軟體之內,
而試算表軟體又可以規範在辦公室軟體之內,正如同Microsoft出版的Office套裝軟體中,
包含Excel試算表軟體,而Excel試算表軟體可以進行各種資料的加總、統計、繪曲線圖、
柱狀圖等功能。
– 軟體是由『程式』所組成,這是毫無疑問的,但有些人也將『資料』視為軟體的一個構
成項目,舉例來說,一個媒體播放軟體可以用來播放VCD電影,然而如果沒有VCD電
影,該軟體將毫無用處,而VCD電影是一種資料,雖然它不具備驅動電腦硬體的特性,
但仍是一種抽象的排列組合,不同的0、1排列代表著不同的電影,而只有媒體播放軟體
能夠正確的辨識這些0、1排列的資料,並將之轉換為我們能夠看到的影片。因此廣義的
軟體應該包含程式檔與資料檔兩大部分。
32
6.4.2
軟體的組織成分
• 系統
– 系統(System)與軟體的分界更不明顯,更明確地說,系統可以稱之軟
體,但軟體卻不一定能夠稱之為系統。系統的功能是非常明確且龐大
的,它包含了各種不同的軟體,甚至還可能包含了某些硬體。舉例來
說,資料庫管理系統可能包含了資料庫軟體、程式介面、備份軟體、
甚至連硬碟也可以規劃其內。
系統、軟體、程式、指令階層圖
33
6.4.2
軟體的組織成分
• 一般來說,程式依據其目的,由硬體製造商或軟體公司來撰寫
– 例如製造掃描器的公司會提供掃描器的驅動程式軟體
– 會計軟體則大多由軟體公司開發。
• 開發程式的人員,我們稱之為程式設計師(programmer)
– 由於直接撰寫機器碼對於大部分的人來說是非常困難的,因此幾乎所有的程
式設計師都必須依靠系統程式的程式開發工具(development tools)來完成程式
的撰寫工作。
– 在程式開發工具的輔助下,程式設計師可以藉由指令來控制電腦硬體的運作,
以便完成使用者要求的特定工作。
• 對純粹資料所形成的軟體而言,製造者並沒有特殊的名稱可以加以稱呼
– 舉例來說,製作VCD電影及製造CD音樂的人員都可以稱之為此類軟體的製造
者。
– 一般我們只會將這類製造者歸類於電腦使用者之中,只不過這些使用者的工
作比較固定,並且透過各種特殊功能的軟體來加以完成資料(如電影、CD、
文件)的製作。
34
6.5 系統程式
• 系統程式(System program)主要是用來提供開發程式及執行
過程中所需要用到的所有工具。事實上,它的許多功能其實
已經被結合在作業系統或整合式開發環境中。
– 系統程式幾乎都是『與機器相關』(machine-dependent)的程式
– 什麼是『與機器相關』的程式呢?
• 電腦的運作主要是依靠CPU與主記憶體之間的資料轉換來完成,
所有要被執行的程式都必須被載入到主記憶體,然後才能夠被執
行,因為指令只能夠在CPU的暫存器與主記憶體之間搬移資料,
或透過ALU進行算數邏輯運算。因此要控制程式的執行,必須能
夠控制記憶體、暫存器或其他硬體,而這牽扯到硬體的設計結構,
每一種電腦或每一種CPU的控制方法都不相同,例如:PC一般使
用Intel相容的CPU晶片,而Mac則使用Motorola出產的68xxx晶片,
因此,這些控制硬體的程式就必須按照電腦結構來設計,故稱之
為『與機器相關』的程式,系統程式就是其中一例。
35
6.5.1
傳統的系統程式
• 系統程式的行為又可以分為下列五大類,此五類動作分別交由五種程式來
執行,其目的都是為了要控制各種程式的執行:
– 載入程式(Loader)
• 在前面提到,可執行檔是一種程式,其內容為可以供電腦辨識的機器碼。
而載入程式負責將可執行檔載入到記憶體的指令位址,值得一提的是,程
式以二進位碼型式存在於輔助記憶體中,這些程式是經過編譯或轉譯之後
的目的碼,而載入程式的功能就是(1)將這些目的碼搬移到記憶體的指定
位址,並且(2)將執行權轉移到這些目的碼的開頭,然後(3)開始執行該程
式。
• 現代化的載入程式一般都已經內建於作業系統中,舉例來說,當您在
Microsoft Windows檔案總管中,在某個應用程式上面按兩下之後,
Windows作業系統就會啟動內含的載入程式,將指定的應用程式載入到記
憶體,並開始執行它。
• 作業系統也是一個程式,在開機之前也是存放在硬碟中,那麼作業系統又
是如何被載入到記憶體的呢?這就必須說到另外一種特殊的載入程式-
『啟動載入程式』(Bootstrap Loader)。啟動載入程式是一個非常小程式,
一般會包含在BIOS之內,以便於在一開機之後載入管理電腦系統資源的
作業系統。
36
6.5.1
傳統的系統程式
– 連結程式(Linker)
• 有的時候,目的碼還需要結合其他目的碼才能夠完成工作,而這
些目的碼可能是已經事先撰寫完成,放置於程式庫(Library),供程
式設計師使用的程式模組。要將這些程式模組的目的碼連結起來,
就必須透過連結程式(Linker),經過連結後的程式會變得比較大,
然後再一起載入到記憶體被執行。
• 若將連結程式詳細的分類,又可以分為連結編輯器(Linking Editor)
及連結載入器(Linking Loader)兩種。顧名思義,連結編輯器只會
將目的碼完成連結的動作,然後還需要透過載入器進行重新定位
以及載入的動作後,程式才會被執行。而連結載入器不但具有連
結的功能,還具備載入器的功能,也就是當目的碼完成所需要的
連結後,將立刻被載入到記憶體中被執行。
37
6.5.1
傳統的系統程式
連結編輯器的處理流程
連結載入器的處理流程
38
6.5.1
傳統的系統程式
– 重新定址 (Relocation) 功能
• 對於現代的電腦系統而言,程式目的碼裡面所標註程式位址並不
代表程式執行時真實的記憶體位址,這是為了讓系統具備更多的
彈性可以執行各式各樣程式的緣故。對於目的碼內的位址而言,
其實規範的都是一種相對位址,在目的碼被載入到記憶體時,這
些位址應該加上目的碼在記憶體的起始位址,而這個動作稱之為
重新定址(Relocation)。
• 舉例來說,目的碼內有兩個位址分別是0010及0018,而載入程式
若將程式載入到1000的起始位址,則這兩個位址將被修正為1010
及1018,由於所有的程式位址都會被修正,因此程式仍然可以正
確地被執行。下圖是目的碼被執行之前的過程,包含了連結、載
入、重新定址等步驟。
39
6.5.1
傳統的系統程式
連結、載入、重新定址
40
6.5.1
傳統的系統程式
• 語言轉譯程式
– 在前面提及,執行程式是將可執行檔載入記憶體中執行,而可執行檔又是由
目的碼檔案經由連結而成。至於目的碼檔案又是如何產生的呢?目的碼其實
也是一種二進位檔案,除了非常早期的電腦系統外,程式設計師一般都不會
直接撰寫機器碼或目的碼,而是使用其他程式語言先撰寫好原始程式(Source
code),再透過程式發展工具-『語言轉譯程式』的轉換,將原始程式轉換成
機器碼(machine code)或目的碼(object code)。
– 『語言轉譯程式』也不只一種,我們可以依據轉譯程式的特性,將之區分為
下列三種語言轉譯程式:
– (1)組譯器(Assembler):
• 組譯器(Assembler)可以將組合語言程式(Assembly language program)轉譯為目的
碼(object code)。組合語言是最接近機器碼的低階語言,由於機器碼的01串列不容
易被人辨識與記憶,因此組合語言使用運算子與運算元來表示一連串的0、1組合,
而這些運算子則使用助憶碼以利人類的記憶與理解,這些助憶碼一般都是某些英文
的簡寫,例如:使用INC來代表Increment(累加)。
• 不同的CPU的組合語言也不相同,因此,組譯器也不相同。但由於組合語言與機器
碼一對一的特性,因此開發組譯器相對於開發另外兩類語言轉譯程式而言,是比較
簡單的。
41
6.5.1
傳統的系統程式
– (2)編譯器(Compiler):
• 編譯器採用整批作業(Batch)方式來處理程式轉譯的工作,換句話說,
當我們將程式設計完畢並交由編譯器轉譯之後,編譯器會將翻譯結果存成
一個目的檔(object file),而這個目的檔可經由連結其他目的檔及程式
庫之後形成可執行檔(execute file),並由電腦直接執行。常見的編譯語
言有C、C++、Pascal、Object Pascal、Visual Basic(須編譯)等等。
– (3)直譯器(Interpreter):
• 直譯器與編譯器處理程式的步驟不同,當我們使用直譯式語言撰寫程式完
畢並使用直譯器來翻譯程式的過程中,不需要產生目的檔,直譯器會將程
式一行一行的讀入,並且逐行翻譯,並送交由電腦執行,因此,每一次要
執行直譯式語言程式時,都必須啟動直譯器來重新翻譯程式。也正因為如
此,所以當程式中有錯誤發生時,前面沒有錯誤的程式仍會被執行,並且
停留在錯誤的那一行程式,因此適合用於程式開發過程,這一點則與編譯
式語言完全不同。因此,直譯器具有監督執行狀況的效果。早期的Basic
以及常見的JavaScript、VBScript、Python等都是屬於直譯式語言。
42
6.5.1
傳統的系統程式
組譯器、編譯器、直譯器的處理流程
43
6.5.1
傳統的系統程式
– 編輯程式(Editor)
• 程式設計師實際撰寫的程式稱之為原始程式碼,而編輯原始程式
碼的環境稱之為編輯程式(Editor;又稱編輯器),程式設計師在編
輯器中編輯原始程式碼,然後將原始程式碼儲存為原始程式檔。
• 原始程式檔是一種純文字檔,因此許多軟體都可以充當編輯器,
例如Linux/Unix的Vi、DOS的PE2/3、Windows的記事本等等。也
正因為一般的文書處理軟體或純文字編輯軟體就可以充當編輯器,
因此編輯器是否需要歸類於系統程式或系統軟體中,則各有其見
解上的不同,換句話說,我們也可以將具有編輯器功能的軟體歸
類於應用軟體。
44
6.5.2
現代的系統程式
• 在介紹現代的系統程式之前,我們先回顧傳統透過編譯器翻
譯程式的流程。首先程式設計師透過編輯器將原始程式碼編
譯完成,並將之透過編譯器翻譯為目的碼,然後由連結程式
連結為可執行檔,最後由載入程式將程式載入主記憶體中執
行,其流程簡化如下圖。
程式開發與轉譯過程
45
6.5.2
•
現代的系統程式
在這個傳統的開發程式流程中,由於
程式可能不會一次就成功開發完成,
而仍舊存在許多問題,這些問題稱之
為程式的臭蟲(bug),此時程式設計師
必須找出發生錯誤的地方,重新修改
原始程式,並重複進行編譯、連結、
執行等步驟。
– 值得注意的是,即使通過編譯器檢查
的程式也僅僅只代表著程式語法無誤,
但不代表語意符合程式設計師的需求,
因此程式設計師常常會遇到一個惱人
的狀況,當程式完成後並經由編譯確
定語法無誤,但卻在執行時發生了不
如預期狀況的現象。這種現象極可能
是因為程式邏輯有誤或者思慮不夠周
詳所致。此時,程式設計師可以藉由
除錯器來追蹤程式執行的各個步驟,
以便找出發生錯誤的程式位置。右圖
是GDB除錯器的執行狀況,這是一個
Linux環境的除錯器,通常搭配GCC
編譯器一起運作。
使用除錯器GDB來除錯
46
6.5.2
•
現代的系統程式
整合開發環境
–
–
在之前的內容中,我們曾經已經提到,傳統的系統程式已經被納入在作業系統或整合開發環境中。
其中被納入作業系統的為『載入程式』,因此當我們在檔案總管(檔案總管是Windows作業系統
所附的一套軟體)中按兩下可執行的程式檔時,該可執行檔就被載入到主記憶體中加以執行。而
什麼又是整合開發環境呢?
由於傳統的編譯程式開發流程有些繁複,程式設計師必須先用文書編輯器(例如:筆記本、Vim、
PE2)等先撰寫原始程式檔,然後再交由編譯器、連結器將原始程式檔編譯為具有除錯功能的可
執行檔,最後經過除錯無誤後,才重新編譯連結為最終的可執行檔。通常,程式設計師大多無法
一次就撰寫完全沒有錯誤的原始程式,因此這樣的開發流程顯得十分麻煩,必須常常在編輯器、
編譯器、除錯器間切換許多次,才能夠得到最後正確的原始程式與執行檔。
傳統開發編譯式程式的流程
47
6.5.2
現代的系統程式
– 為了方便程式設計師設計程式,因此發展了許多的整合開發環境
(Integrated Development Environment;簡稱IDE),IDE將編輯器、
編譯器、連結器、除錯器的功能整合為一,使得程式設計師在設計程
式時,方便許多。下圖中的DEV C++就是一個IDE,它包含了編輯器、
GCC編譯器、連結器以及除錯器的功能。
DEV C++整合開發環境
48
6.5.2
現代的系統程式
• 整合開發環境與程式語言的區別
– 程式語言與整合開發環境有著奇妙關係,有些整合開發環境與程式語
言非常容易辨識,例如Dev C++是一個整合開發環境,它可以編輯、
編譯由C++語法構成的原始程式。因此C++為一種程式語言、GCC為
C++語言的編譯器、Dev C++則為C++的整合開發環境的一種。
– 由於視窗程式的流程,整合開發環境具備的功能也越來越多,它甚至
包含了許多現成的程式碼與元件,供程式設計師使用。有時候,程式
語言與整合開發環境也同時被推出,這也使得程式語言與整合開發環
境的分際難以切割,例如Visual C++是微軟推出的一套整合開發環境,
它能編譯由C++語法所撰寫的程式;但Visual Basic也是由微軟推出的
一套整合開發環境,它能編譯由Visual Basic語法所撰寫的程式,因此
Visual Basic可以說是一種程式語言,也可以說是一套整合開發環境。
49
重點回顧
本章習題
50