計算機概論2009

Download Report

Transcript 計算機概論2009

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