系統分析師(System Analyst)
資訊系統(Information System, IS)可以蒐集、處理、儲存及散佈資訊,協助管理者進行經營決策、問題分析、重塑工作流程、控制作業、創新產品與服務。系統分析與設計(System Analysis And Design)是一門關於開發資訊系統的學問,其中系統分析牽涉到研究現在的系統,瞭解其運作模式及如何滿足使用者的需求,而系統設計是以系統分析的結果為基礎,改善現有的系統或開發新的系統。系統分析師的工作包括系統分析與系統設計兩個部份,他們會訪談不同的使用者和管理者,瞭解企業的運作模式及需求,然後提出並評估各種解決方案,供管理者選擇。
系統開發生命週期(System Development Life Cycle, SDLC)
系統開發生命週期雖然是相當古老的資訊系統建置方式,但目前仍常應用於中、大型系統,例如交易處理系統(TPS)、管理資訊系統(MIS)、這些系統的特點在於需求結構化,而且能夠事先定義規格。SDLC將系統建置過程分成下列五個階段:
一、系統調查(System Survey):定義問題(本質、範圍與目標)、發掘機會、進行規劃及評估可行性,然後撰久專案企劃書。
二、系統分析(System Analysis):蒐集與分析現有的系統,然後訂定新系統的需求。
三、系統設計(System Design):完成新系統的邏輯設計,包括規格及運作模式,但不涉及程式設計。
四、系統開發(System Development):完成新系統的程式設計,包括專案排程、撰寫程式及測試。
五、系統上線(System Implementation):將現有的系統轉換成新的系統,包括系統轉換、檔案與資料庫轉換、設備轉換、教育訓練、安全稽核、系統評估、系統維護。
由於SDLC有固定的架構,而且在時程的安排上受到嚴格的限制,一定要一個階段接著一個階段的完成系統分析與設計的工作。因此,為了改善系統分析與設計的流程,有一些不同的方法被發展出來,其中最具代表性的包含雛型法、協合應用系統設計、CASE工具及快速應用系統開發。
雛型法(Prototyping)
雛型法乃是指分析師先與使用者溝通並決定系統所需最原始或最基本的需求,然後使用各種開發工具設計並建置一個較小規模但是可以操作的版本。當雛型建立完成後,使用者回報分析師滿意及不滿意的功能,分析師根據這些意見修正原先之雛型,然後再將較新的版本交給使用者使用。這樣的過程不斷的重複,直到使用者對所用系統滿意。
CASE(Computer-Aided Software engineering, 電腦輔助軟體工程)工具
CASE工具是一套以電腦為基礎的產品,針對軟體發展過程中的一個或多個活動來做必要的支援。CASE工具可以支援SDLC各階段的活動,也可以幫觔專案的辨識與選擇、專案的初始與規劃、分析與設計,也可用以幫助實作及維護。
協合應用系統設計(Joint Application Design, JAD)
JAD最基本的概念是將分析階的需求決定過程以及設計階段中的檢核過程加以結構化,使用者、管理人員及系統開發人員聚集在由JAD領導者所主持的密集性、結構化會議。JAD領導者任務在於確保會議過程的結構並掌握會議的議程,將有關資訊系統的人員聚集討論並確認系統需求及設計細節、時程與企業資源的應用,同時也讓所有參與人員能更快速了解系統的運作目標。
快速應用程式開發(Rapid Application Development, RAD)
RAD漸漸成為廣為接受的方法論是因為以網頁為基礎的系統(Web-based System)的快速開發。因此,結合雛型法、CASE工具以及JAD…等方法而成的RAD,可以大幅降低系統設計與實作時間。一般來說,RAD的過程與傳統的SDLC類似,但縮短或合併部分階段,並且運用各種工具,以產生更為精簡的開發技術。
2010年2月9日
2010年2月6日
物件導向技術的系統分析與設計
物件導向技術(Object-Oriented Technique)是繼結構化技術之後,系統開發上另一受到高度重視的新思維,已經成為軟體工程領域的熱門議題。物件導向的基本概念包括物件、類別、封裝、繼承、同名異式與超荷等,其中的物件、類別、繼承已經在之前的PHP程式設計概念中提到,本篇將針對封裝、同名異式與超荷做簡單的說明。另外,系統開發的相關工作,統一塑模語言,包括使用個案圖、類別圖、循序圖等九種。
封裝(Encapsulation)
物件導向技術將資料及操作此資料的方法包裝成一個物件,稱之為「封裝」。封裝所形成的物件,其結構可分為兩部分:一是定義物件外觀行為的介面(Interface)部份;另一則是存放抽象化的結果及如何達成外觀行為的實作(Implementation)部份。封裝將物件的實作細節隱藏,使其與外界環境隔離,而只允許該物件所包含之操作修改其資訊,稱為資訊隱藏(Information Hiding)。封裝使物件更具獨立性,如果物件內部的資料結構有變動時,只要其外部的操作介面沒有修改,使用這些物件的應用程式就可以不必修改,這樣的特性使得物件導向的系統較容易維護。
同名異式(Polymorphism)
Polymorphism意指「多種型式」,簡稱「多型」,即在不同的物件(或類別)中,利用相同名稱的操作,以不同的方式處理資料,傳送訊息的物件不需要知道接受訊息所屬的類別,接受訊息的物件可以屬於任一類別。例如:某公司計算員工薪水,員工可分為正式員工及臨時員工,而臨時員工又可分為按件計酬與按時計酬,這三種員工都有薪資計算,但是薪資計算的操作又有不同計算方式。
超荷(Overload)
超荷就是在同一個類別中,使用相同名稱的操作,然而每個操作的參數個數、參數資料類型不可完全相同。當使用到此操作時,可以參數個數及參數資料型態的不同來判斷要使用哪一個操作。超荷有時又稱靜態多型。
統一塑模語言(Unified Modeling Language, UML)
統一塑模語言是Rational公司整合Booch、Rumbaugh與Jacobson三種方法而提出的物件導向塑模工具,是一種視覺化(Visualizing)、文件化(Documenting)及規格化(Specifying)的軟體塑模語言,經過不斷地演變與擴充,於2003年6月正式通過UML 2.0標準。在UML 2.0中規範了十三種模式圖,而其中使用個案圖、類別圖、物件圖、循序圖、合作圖、狀態圖、活動圖、元件圖、部署圖等九種較常用於商用資訊系統之分析與設計上。
使用個案圖(Use Case Diagram)
UML的使用個案圖是引用Jacobson方法中的使用個案模式,從使用者的觀點描述系統的行為者與系統間的互動行為與關係。從內部觀點來看,使用個案可描述系統做什麼(What)。從外部觀點來看,它可描述行為者與系統如何互動(How)。
類別圖(Class Diagram)
UML之類別圖是引用Booch與Rumbaugh方法中的類別圖,主要用以表示系統存在之物件型態(類別)及各物件型態間的靜態資料結構與邏輯關係,也表達類別之屬性、操作與類別間連結之限制等。
物件圖(Object Diagram)
UML的物件圖是用來描述一系統於某一時間的靜態資料結構,該圖由一群相關的物件及其連結所組成。物件圖是系統在某個時間點的一個例子,而非系統的定義,可用來表達一個系統複雜的資料結構,或藉由時間序列的系統影像(Snapshots)來表達系統的行為。
循序圖(Sequence Diagram)
UML的循序圖是結合Booch的互動圖與Rumbaugh的訊息追蹤圖而成,主要用以描述系統運作時物件間的互動行為,著重以時間的先後順序為主軸,以表達物件間的訊息傳遞與處理程序。一個循序圖會有一個與之對應的合作圖,但表達的重點與方式不同。
合作圖(Collaboration Diagram)
UML的合作圖是從Booch的物件互動圖與Rumbaugh的物件導向資料流程圖改進而成,主要用以描述系統運作時物件間的互動行為,該圖著重表達相關物件間的連結結構,並能同時展現物件間的訊息傳遞活動。
狀態圖(State Diagram)
UML的狀態圖是結合Booch的狀態轉移圖與Rumbaugh的動態模式而成,用以表示物件在其生命週期中的狀態變化。狀態圖是以微觀物件為主,細分物件所發生的各項事件,並表達物件生命週期之狀態轉變及活動結果。
活動圖(Activity Diagram)
UML的活動圖可用於表達執行某一作業行為中的活動、轉換與條件等。一個活動圖描述一群循序與同步的活動,一個活動可表示一個工作流程步驟或一個運算的執行動作。
元件圖(Component Diagram)
UML的元件圖起源於Booch的模組圖,用以說明系統設計過程各類別與物件的配置,以及敘述軟體元件間的組織架構和關係。元件是開發和執行過程中實際物件的類別,將可分解的實際基本單位模組化,這些基本單位包括模組(Module),並擁有特性和明確定義的介面。
部署圖(Deployment Diagram)
UML的部署圖起源於Booch的處理圖,用來說明系統各軟、硬體元件的配置、關聯,以及同一處理器內執行處理的時程安排等。
物件導向系統開發過程是一種反覆的程序,主要包括需求分析、系統分析與設計、細部設計、程式編寫、測試與部署等階段。物件導向塑模提供了使用個案觀點、設計觀點、流程觀點、實施觀點與部署觀點等,可供不同參與者,在不同時間,從不同的角度來看系統。由於物件導向技術的引進,提升了程式的重用性與可維護性,使軟體的開發與維護更有效率。
封裝(Encapsulation)
物件導向技術將資料及操作此資料的方法包裝成一個物件,稱之為「封裝」。封裝所形成的物件,其結構可分為兩部分:一是定義物件外觀行為的介面(Interface)部份;另一則是存放抽象化的結果及如何達成外觀行為的實作(Implementation)部份。封裝將物件的實作細節隱藏,使其與外界環境隔離,而只允許該物件所包含之操作修改其資訊,稱為資訊隱藏(Information Hiding)。封裝使物件更具獨立性,如果物件內部的資料結構有變動時,只要其外部的操作介面沒有修改,使用這些物件的應用程式就可以不必修改,這樣的特性使得物件導向的系統較容易維護。
同名異式(Polymorphism)
Polymorphism意指「多種型式」,簡稱「多型」,即在不同的物件(或類別)中,利用相同名稱的操作,以不同的方式處理資料,傳送訊息的物件不需要知道接受訊息所屬的類別,接受訊息的物件可以屬於任一類別。例如:某公司計算員工薪水,員工可分為正式員工及臨時員工,而臨時員工又可分為按件計酬與按時計酬,這三種員工都有薪資計算,但是薪資計算的操作又有不同計算方式。
超荷(Overload)
超荷就是在同一個類別中,使用相同名稱的操作,然而每個操作的參數個數、參數資料類型不可完全相同。當使用到此操作時,可以參數個數及參數資料型態的不同來判斷要使用哪一個操作。超荷有時又稱靜態多型。
統一塑模語言(Unified Modeling Language, UML)
統一塑模語言是Rational公司整合Booch、Rumbaugh與Jacobson三種方法而提出的物件導向塑模工具,是一種視覺化(Visualizing)、文件化(Documenting)及規格化(Specifying)的軟體塑模語言,經過不斷地演變與擴充,於2003年6月正式通過UML 2.0標準。在UML 2.0中規範了十三種模式圖,而其中使用個案圖、類別圖、物件圖、循序圖、合作圖、狀態圖、活動圖、元件圖、部署圖等九種較常用於商用資訊系統之分析與設計上。
使用個案圖(Use Case Diagram)
UML的使用個案圖是引用Jacobson方法中的使用個案模式,從使用者的觀點描述系統的行為者與系統間的互動行為與關係。從內部觀點來看,使用個案可描述系統做什麼(What)。從外部觀點來看,它可描述行為者與系統如何互動(How)。
類別圖(Class Diagram)
UML之類別圖是引用Booch與Rumbaugh方法中的類別圖,主要用以表示系統存在之物件型態(類別)及各物件型態間的靜態資料結構與邏輯關係,也表達類別之屬性、操作與類別間連結之限制等。
物件圖(Object Diagram)
UML的物件圖是用來描述一系統於某一時間的靜態資料結構,該圖由一群相關的物件及其連結所組成。物件圖是系統在某個時間點的一個例子,而非系統的定義,可用來表達一個系統複雜的資料結構,或藉由時間序列的系統影像(Snapshots)來表達系統的行為。
循序圖(Sequence Diagram)
UML的循序圖是結合Booch的互動圖與Rumbaugh的訊息追蹤圖而成,主要用以描述系統運作時物件間的互動行為,著重以時間的先後順序為主軸,以表達物件間的訊息傳遞與處理程序。一個循序圖會有一個與之對應的合作圖,但表達的重點與方式不同。
合作圖(Collaboration Diagram)
UML的合作圖是從Booch的物件互動圖與Rumbaugh的物件導向資料流程圖改進而成,主要用以描述系統運作時物件間的互動行為,該圖著重表達相關物件間的連結結構,並能同時展現物件間的訊息傳遞活動。
狀態圖(State Diagram)
UML的狀態圖是結合Booch的狀態轉移圖與Rumbaugh的動態模式而成,用以表示物件在其生命週期中的狀態變化。狀態圖是以微觀物件為主,細分物件所發生的各項事件,並表達物件生命週期之狀態轉變及活動結果。
活動圖(Activity Diagram)
UML的活動圖可用於表達執行某一作業行為中的活動、轉換與條件等。一個活動圖描述一群循序與同步的活動,一個活動可表示一個工作流程步驟或一個運算的執行動作。
元件圖(Component Diagram)
UML的元件圖起源於Booch的模組圖,用以說明系統設計過程各類別與物件的配置,以及敘述軟體元件間的組織架構和關係。元件是開發和執行過程中實際物件的類別,將可分解的實際基本單位模組化,這些基本單位包括模組(Module),並擁有特性和明確定義的介面。
部署圖(Deployment Diagram)
UML的部署圖起源於Booch的處理圖,用來說明系統各軟、硬體元件的配置、關聯,以及同一處理器內執行處理的時程安排等。
物件導向系統開發過程是一種反覆的程序,主要包括需求分析、系統分析與設計、細部設計、程式編寫、測試與部署等階段。物件導向塑模提供了使用個案觀點、設計觀點、流程觀點、實施觀點與部署觀點等,可供不同參與者,在不同時間,從不同的角度來看系統。由於物件導向技術的引進,提升了程式的重用性與可維護性,使軟體的開發與維護更有效率。
2010年1月29日
PHP的XML文件操作
XML簡介
XML, eXtensible Markup Language(可延伸標記語言),是一種可以創建自訂標記符號(Tags)的標記語言,是用於表示結構化資訊的一種標準文本格式,它由W3C(全球資訊網標準維護組織)創建,用來克服HTML的侷限。和HTML一樣,XML基於標準通用標記語言(Standard Generalized Markup Language, SGML),SGML是一種在Web發明之前就早已存在的用標記來描述檔案資料的通用語言,它十分龐大且難於學習和使用。為了解決SGML過於複雜的特點,提出了HTML語言,在Web領域成為標準語言。但近年來,隨著Web應用的不斷深入,HTML在需求廣泛的應用中顯得捉襟見肘,於是Web標準化組織W3C建議使用一種精簡的SGML版本ーXML。XML檔案只儲存了資料,是很有規律的結構化檔案,所有的資訊按照某種關係排列,不會看起來雜亂無章,層次結構非常明確,但沒有定義如何顯示這些資料,以什麼樣的字體、顏色來顯示。這樣的檔案結構,層次非常清晰,我們可以稱之為「檔案樹」。
XML的特點
XML繼承了SGML的許多特性,首先是可擴展性,這正是XML功能強大的原因,在HTML中有許多固定的標記,我們必須記住然後使用它們,而不能使用HTML規範裡沒有的標記,它是一個定型的標記語言。XML允許使用者創建和使用它們自己的標記而不是HTML的有限詞彙表,這一點至關重要,企業可以用XML為電子商務和供應鏈集成等應用定義自己的標記語言,甚至特定行業一起來定義該領域的特殊標記語言,作為該領域資訊共用與資料交換的基礎。
其次是靈活性。HTML很難進一步發展,就是因為它是格式、超文字和圖形化使用者介面語義的混合,要同時發展這些混合在一起的功能是很困難的。而XML更像是一個小型的資料庫,提供了一種結構化的資料表示方式,使得使用者介面分離於結構化資料。所以,Web用戶所追求的許多先進功能在XML環境下更容易實現。
第三是自我描述性。XML檔案通常包含一個檔案型別宣告,因而XML檔案是自我描述的。不僅人能讀懂XML檔案,電腦也能處理。XML表示資料的方式真正做到了獨立於應用系統,並且資料能夠重用,XML檔案被看作是檔案的資料庫化和資料的檔案化,因此XML成為新一代不同系統中資料傳遞的標準格式。
除了上述特性之外,XML還具有簡明性。它只有SGML約20%的複雜性,但卻具有SGML功能的約80%,XML比完整的SGML簡單得多,易學、易用並且易實現。另外,XML也吸收了多年來在Web上使用HTML的經驗,XML支持世界上幾乎所有的主要語言,並且不同語言的文字可以在同一檔案中混合使用,應用XML的軟體能處理這些語言的任何組合。
簡單的XML操作
在PHP5引入了一種用於讀寫XML的新應用程式設計發展介面(API):SimpleXML。SimpleXML提供了一種簡單、直覺化的方法來處理XML。它只有一個單一類型的類別,3個函數和6個方法。SimpleXMLElement類是這個擴展中所有操作的核心類。可以用new關鍵字直接創件這種類的物件或是使用simplexml_load_file()或simplexml_load_string()函數傳回這種類的物件。
在SimpleXML中,可以直接通過元素的名稱來存取特定的元素。當一個檔案被載入SimpleXML時,檔案被看成是一個SimpleXML物件,檔案中的所有元素都被看成是該物件的屬性。SimpleXMLElement物件的屬性是動態的,因為這些屬性是由物件決定的,而不是由類別本身決定的。
利用SimpleXML修改元素內容非常方便,我們可以改變或移除樹中的某個元素,但是不能直接在樹中添加一個元素。要添加一個元素,需要使用DOMXML擴展模組的互通性。我們利用SimpleXML的屬性指派值方法來直接編輯一個元素的內容,要注意的是如果檔案中有多個元素名一樣的元素,如果沒有使用索引來指定要編輯哪個元素時,PHP將發出個警告。強烈建議使用索引來編輯元素,除非你對檔案的結果非常確定。另外,可以用PHP內建函數unset()來將一個元素行樹中移除。unset()的參數必須是一個SimpleXMLElement,用屬性方法來存取要移除的元素。
DOMXML擴展模組有save()方法,可以將XML資料儲存成為文件,我們可以將SimpleXML物件導入DOMXML物件中,然後使用save()儲存。
XML是用來存放資料的,它不是HTML的替代品。XML和HTML是兩種不同用途的語言。HTML是與顯示資訊相關的,XML則是與描述資訊相關的。
XML, eXtensible Markup Language(可延伸標記語言),是一種可以創建自訂標記符號(Tags)的標記語言,是用於表示結構化資訊的一種標準文本格式,它由W3C(全球資訊網標準維護組織)創建,用來克服HTML的侷限。和HTML一樣,XML基於標準通用標記語言(Standard Generalized Markup Language, SGML),SGML是一種在Web發明之前就早已存在的用標記來描述檔案資料的通用語言,它十分龐大且難於學習和使用。為了解決SGML過於複雜的特點,提出了HTML語言,在Web領域成為標準語言。但近年來,隨著Web應用的不斷深入,HTML在需求廣泛的應用中顯得捉襟見肘,於是Web標準化組織W3C建議使用一種精簡的SGML版本ーXML。XML檔案只儲存了資料,是很有規律的結構化檔案,所有的資訊按照某種關係排列,不會看起來雜亂無章,層次結構非常明確,但沒有定義如何顯示這些資料,以什麼樣的字體、顏色來顯示。這樣的檔案結構,層次非常清晰,我們可以稱之為「檔案樹」。
XML的特點
XML繼承了SGML的許多特性,首先是可擴展性,這正是XML功能強大的原因,在HTML中有許多固定的標記,我們必須記住然後使用它們,而不能使用HTML規範裡沒有的標記,它是一個定型的標記語言。XML允許使用者創建和使用它們自己的標記而不是HTML的有限詞彙表,這一點至關重要,企業可以用XML為電子商務和供應鏈集成等應用定義自己的標記語言,甚至特定行業一起來定義該領域的特殊標記語言,作為該領域資訊共用與資料交換的基礎。
其次是靈活性。HTML很難進一步發展,就是因為它是格式、超文字和圖形化使用者介面語義的混合,要同時發展這些混合在一起的功能是很困難的。而XML更像是一個小型的資料庫,提供了一種結構化的資料表示方式,使得使用者介面分離於結構化資料。所以,Web用戶所追求的許多先進功能在XML環境下更容易實現。
第三是自我描述性。XML檔案通常包含一個檔案型別宣告,因而XML檔案是自我描述的。不僅人能讀懂XML檔案,電腦也能處理。XML表示資料的方式真正做到了獨立於應用系統,並且資料能夠重用,XML檔案被看作是檔案的資料庫化和資料的檔案化,因此XML成為新一代不同系統中資料傳遞的標準格式。
除了上述特性之外,XML還具有簡明性。它只有SGML約20%的複雜性,但卻具有SGML功能的約80%,XML比完整的SGML簡單得多,易學、易用並且易實現。另外,XML也吸收了多年來在Web上使用HTML的經驗,XML支持世界上幾乎所有的主要語言,並且不同語言的文字可以在同一檔案中混合使用,應用XML的軟體能處理這些語言的任何組合。
簡單的XML操作
在PHP5引入了一種用於讀寫XML的新應用程式設計發展介面(API):SimpleXML。SimpleXML提供了一種簡單、直覺化的方法來處理XML。它只有一個單一類型的類別,3個函數和6個方法。SimpleXMLElement類是這個擴展中所有操作的核心類。可以用new關鍵字直接創件這種類的物件或是使用simplexml_load_file()或simplexml_load_string()函數傳回這種類的物件。
在SimpleXML中,可以直接通過元素的名稱來存取特定的元素。當一個檔案被載入SimpleXML時,檔案被看成是一個SimpleXML物件,檔案中的所有元素都被看成是該物件的屬性。SimpleXMLElement物件的屬性是動態的,因為這些屬性是由物件決定的,而不是由類別本身決定的。
利用SimpleXML修改元素內容非常方便,我們可以改變或移除樹中的某個元素,但是不能直接在樹中添加一個元素。要添加一個元素,需要使用DOMXML擴展模組的互通性。我們利用SimpleXML的屬性指派值方法來直接編輯一個元素的內容,要注意的是如果檔案中有多個元素名一樣的元素,如果沒有使用索引來指定要編輯哪個元素時,PHP將發出個警告。強烈建議使用索引來編輯元素,除非你對檔案的結果非常確定。另外,可以用PHP內建函數unset()來將一個元素行樹中移除。unset()的參數必須是一個SimpleXMLElement,用屬性方法來存取要移除的元素。
DOMXML擴展模組有save()方法,可以將XML資料儲存成為文件,我們可以將SimpleXML物件導入DOMXML物件中,然後使用save()儲存。
XML是用來存放資料的,它不是HTML的替代品。XML和HTML是兩種不同用途的語言。HTML是與顯示資訊相關的,XML則是與描述資訊相關的。
2010年1月27日
OSI參考模型、TCP/IP參考模型
OSI參考模型
在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式、修改或分享。為此,ISO(國際標準組織)發展出一套OSI參考模型(Open System Interconnection reference model, 開放系統互連參考模型)。發訊端送出的資料會沿著OSI參考模型的七個層次(layer)一路向下,然後經由資料網路(data network)抵達目的設備,再沿著參考模型的七個層次一路向上抵達收訊端,所謂的發訊端、收訊端可以是電腦、印表機、光碟機、磁碟…等。

OSI參考模型的定義相當寬鬆,它將網路的功能及運作粗略分成下列七個層次,多數的通訊協定都可以放入其中一個層次:
應用層(application layer)
位於OSI參考模型的第七層也是最上層,屬於使用者端應用程式與網路服務之間的介面,負責提供網路服務給應用程式、訊息交換、檔案傳輸、網頁瀏覽…,諸如FTP、DNS、SMTP、Telnet、POP、HTTP等通訊協定均屬於應用層。
表達層(presentation layer)
位於OSI參考模型的第六層,負責內碼轉換、加密/解密、壓縮/解壓縮等工作。
會議層(session layer)
位於OSI參考模型的第五層,負責建立、維護與切斷連線(傳輸模式有單工、半雙工、全雙工等三種)、對話控制、資料交換管理等工作,目的是控制資料收發時機,例如何時傳送資料?何時接收資料?
傳輸層(transport layer)
位於OSI參考模型的第四層,負責區段排序、錯誤控制、流量控制等工作,確保資料安全抵達收訊端的傳輸層,諸如UDP通訊協定與Internet所使用的TCP通訊協定均屬於傳輸層。
網路層(network layer)
位於OSI參考模型的第三層,負責邏輯定址(logical addressing)、路由(routing)等工作,其中邏輯定址是賦予收訊端與發訊端唯一可識別的位址;路由是考慮路徑的實際情況,然後幫封包選擇最佳路徑,如X.25通訊協定、IPX通訊協定與Internet所使用的IP通訊協定均屬於網路層。
資料連結層(data link layer)
位於OSI參考模型的第二層,負責訊框處理、實體定址(physical addressing)、錯誤控制、流量控制、媒介存取控制等工作,其中訊框處理是把從網路層接收的封包(packet)封裝成訊框(frame);實體定址是根據實體位址找出目的設備究竟位於哪個網路的哪部電腦;媒介存取控制則決定了如何避免發生碰撞及如何解決碰撞,常見的方式有CSMA/CD、Control Token…。
實體層(physical layer)
位於OSI參考模型的第一層也是最底層,目的是讓資料透過實體的傳輸媒介傳送,負責定義網路所使用的訊號編碼、基頻傳輸或寬頻傳輸、拓樸、傳輸媒介、傳送速度、傳送距離、接頭、電壓、電流…等規格。
TCP/IP參考模型
Internet採用TCP/IP通訊協定,相較於OSI參考模型將網路的功能分成七個層次,TCP/IP參考模型則是分成下列四個層次,雖然簡化為四個層次,但它並不是去除OSI參考模型的某些層次,而是將功能類似的層次合併,包括將應用層、表達層及會議層合併為應用層,保留傳輸層和網路層,將實體層及資料連結層合併為連結層。
應用層(application layer)
這個層次負責提供網路服務給應用程式,比較知名的通訊協定有FTP(file transfer protocol, 檔案傳輸協定)、SMTP(simple mail transfer protocol, 簡易郵件傳送協定)、POP(Post office protocol, 郵件接收協定)、DNS(domain name system, 網域名稱系統)、Telnet(遠端登入)、SNMP(simple network management protocol, 簡易網路管理協定)、HTTP(hypertext transfer protocol, 超文字傳輸協定)、NNTP(network news transfer protocol)…等。
傳輸層(transport layer)
這個層次又叫做主機對主機層(host-to-host layer),負責區段排序、錯誤控制、流量控制等工作,比較知名的通訊協定有TCP(transmission control protocol)、UDP(user datagram protocol)。
網路層(network layer)
這個層次又叫做網際網路層(Internet layer),負責定址與路由等工作,而且資料是以資料元(datagram)為單位,比較知名的通訊協定有IP(Internet protocol)。
連結層(link layer)
這個層次又叫做網路介面層(network interface layer),負責與硬體溝通,雖然沒有定義任何通訊協定,但基本上,它支援所有標準的通訊協定。
雖然TCP/IP參考模型的定義沒有OSI參考模型嚴謹,但簡化為四個層次卻使得它的處理效率較佳,而且它的結構簡潔易懂,反而比OSI參考模型還受歡迎。
在過去的電腦網路上,由於資料通訊系統涉及複雜的軟硬體,可是又沒有統一的標準,導致通訊軟體不僅龐大複雜,而且不易測式、修改或分享。為此,ISO(國際標準組織)發展出一套OSI參考模型(Open System Interconnection reference model, 開放系統互連參考模型)。發訊端送出的資料會沿著OSI參考模型的七個層次(layer)一路向下,然後經由資料網路(data network)抵達目的設備,再沿著參考模型的七個層次一路向上抵達收訊端,所謂的發訊端、收訊端可以是電腦、印表機、光碟機、磁碟…等。

OSI參考模型的定義相當寬鬆,它將網路的功能及運作粗略分成下列七個層次,多數的通訊協定都可以放入其中一個層次:
應用層(application layer)
位於OSI參考模型的第七層也是最上層,屬於使用者端應用程式與網路服務之間的介面,負責提供網路服務給應用程式、訊息交換、檔案傳輸、網頁瀏覽…,諸如FTP、DNS、SMTP、Telnet、POP、HTTP等通訊協定均屬於應用層。
表達層(presentation layer)
位於OSI參考模型的第六層,負責內碼轉換、加密/解密、壓縮/解壓縮等工作。
會議層(session layer)
位於OSI參考模型的第五層,負責建立、維護與切斷連線(傳輸模式有單工、半雙工、全雙工等三種)、對話控制、資料交換管理等工作,目的是控制資料收發時機,例如何時傳送資料?何時接收資料?
傳輸層(transport layer)
位於OSI參考模型的第四層,負責區段排序、錯誤控制、流量控制等工作,確保資料安全抵達收訊端的傳輸層,諸如UDP通訊協定與Internet所使用的TCP通訊協定均屬於傳輸層。
網路層(network layer)
位於OSI參考模型的第三層,負責邏輯定址(logical addressing)、路由(routing)等工作,其中邏輯定址是賦予收訊端與發訊端唯一可識別的位址;路由是考慮路徑的實際情況,然後幫封包選擇最佳路徑,如X.25通訊協定、IPX通訊協定與Internet所使用的IP通訊協定均屬於網路層。
資料連結層(data link layer)
位於OSI參考模型的第二層,負責訊框處理、實體定址(physical addressing)、錯誤控制、流量控制、媒介存取控制等工作,其中訊框處理是把從網路層接收的封包(packet)封裝成訊框(frame);實體定址是根據實體位址找出目的設備究竟位於哪個網路的哪部電腦;媒介存取控制則決定了如何避免發生碰撞及如何解決碰撞,常見的方式有CSMA/CD、Control Token…。
實體層(physical layer)
位於OSI參考模型的第一層也是最底層,目的是讓資料透過實體的傳輸媒介傳送,負責定義網路所使用的訊號編碼、基頻傳輸或寬頻傳輸、拓樸、傳輸媒介、傳送速度、傳送距離、接頭、電壓、電流…等規格。
TCP/IP參考模型
Internet採用TCP/IP通訊協定,相較於OSI參考模型將網路的功能分成七個層次,TCP/IP參考模型則是分成下列四個層次,雖然簡化為四個層次,但它並不是去除OSI參考模型的某些層次,而是將功能類似的層次合併,包括將應用層、表達層及會議層合併為應用層,保留傳輸層和網路層,將實體層及資料連結層合併為連結層。
應用層(application layer)
這個層次負責提供網路服務給應用程式,比較知名的通訊協定有FTP(file transfer protocol, 檔案傳輸協定)、SMTP(simple mail transfer protocol, 簡易郵件傳送協定)、POP(Post office protocol, 郵件接收協定)、DNS(domain name system, 網域名稱系統)、Telnet(遠端登入)、SNMP(simple network management protocol, 簡易網路管理協定)、HTTP(hypertext transfer protocol, 超文字傳輸協定)、NNTP(network news transfer protocol)…等。
傳輸層(transport layer)
這個層次又叫做主機對主機層(host-to-host layer),負責區段排序、錯誤控制、流量控制等工作,比較知名的通訊協定有TCP(transmission control protocol)、UDP(user datagram protocol)。
網路層(network layer)
這個層次又叫做網際網路層(Internet layer),負責定址與路由等工作,而且資料是以資料元(datagram)為單位,比較知名的通訊協定有IP(Internet protocol)。
連結層(link layer)
這個層次又叫做網路介面層(network interface layer),負責與硬體溝通,雖然沒有定義任何通訊協定,但基本上,它支援所有標準的通訊協定。
雖然TCP/IP參考模型的定義沒有OSI參考模型嚴謹,但簡化為四個層次卻使得它的處理效率較佳,而且它的結構簡潔易懂,反而比OSI參考模型還受歡迎。
電腦網路--概論
從電腦問世迄今,人們已經習慣使用電腦從事文書處理、資料庫管理、影像繪圖、玩遊戲…等,但隨著資料交換的風氣日盛,電腦網路亦逐漸融入人們的日常生活中。原則上,只要是將超過一部的電腦連接在一起,就能形成網路。我們通常會根據電腦所涵蓋的地理範圍,將網路區分為區域網路、廣域網路、都會網路、網際網路等。
區域網路(LAN, local area network)
當電腦的數目不只一部,而且所在的位置可能是同一棟建築物的不同辦公室、同一個公司或學校的不同建築物,那麼這些電腦連接在一起所形成的網路,就叫做區域網路。常見的區域網路標準有IEEE 802.3 Ethernet(乙太網路)、Fast Ethernet(高速乙太網路)、Gigabit Ethernet(超高速乙太網路)…等。
廣域網路(WAN, wide area network)
當電腦的數目不只一部,而且所在的位置可能在不同城鎮、不同國家甚至不同洲,將這些電腦連接在一起所形成的網路,就叫做廣域網路。常見的廣域網路標準有ISDN(integrated service digital network)、B-ISND(broadband ISDN)、Frame Relay、ATM(asynchronous transfer mode)…等。
都會網路(MAN, metropolitan area network)
涵蓋的範圍介於LAN與WAN之間,使用與LAN類似的技術連接於不同辦公室或城鎮的電腦,它可能是連接數個LAN所形成的較大網路或單一網路。目前由於LAN的傳輸速率與傳輸距離不斷提升,使得MAN與LAN之間的分野日趨模糊。
網際網路(Internet)
是全世界最大的電腦網路,它不是單獨一個網路,而是由成千上萬個大小網路所構成。Internet除了連接數以千萬計的電腦之外,更重要的是它所提供的各項資源,例如全球資訊網(Web)、電子郵件(E-mail)、檔案傳輸(FTP)、電子布告欄(BBS)、部落格(Blog)…等。
網路通常會包含兩部以上的電腦,而電腦之間是如何連接成網路,則有數種方式,我們將這些方式統稱為拓樸(topology),常見的有下列幾種:
匯流排拓樸(bus topology):
所有電腦是連接到同一條網路線,而資料就是在這條網路線上傳送。所有的電腦都會接收網路上的任何資料,然後根據自己的位址擷取要傳送給自己的資料;如果有電腦要傳送資料,必須先判斷是否有其它資料正在網路線上傳送,沒有的話,才能傳送資料。

星狀拓樸(star topology):
所有的電腦是連接到集線器(hub),當電腦要傳送資料時 只要將資料傳送到集線器並指定要傳送給另一部電腦。星狀拓樸的優點是改善了匯流排拓樸的缺點,缺點則是集線器故障會導致網路癱瘓,而且多了集線器的成本。

環狀拓樸(ring topology):
所有的電腦是以環狀方式連接在一起,第一部電腦連接到第二部電腦,第二部電腦連接到第三部電腦,…最後一部電腦再連接到第一部電腦。比起匯流排拓樸和星狀拓樸,環狀拓樸的效能較佳,尤其是在高流量時,因為環狀網路上會一直傳送著一個記號(token),只有取得Token的電腦才能開始傳送資料,待資料傳送完畢並確認目的電腦已經接收到資料後,再釋放記號讓其它電腦使用。

網狀拓樸(mesh):
所有電腦之間互相有網路線連接,不會因為任何一部電腦故障或網路線上任何一段網路故障而導致網路癱瘓,容錯能力為其它網路拓樸之冠。但是架設成本遠比其它網路拓樸高,所以鮮少有網路是真正的網狀拓樸。
區域網路(LAN, local area network)
當電腦的數目不只一部,而且所在的位置可能是同一棟建築物的不同辦公室、同一個公司或學校的不同建築物,那麼這些電腦連接在一起所形成的網路,就叫做區域網路。常見的區域網路標準有IEEE 802.3 Ethernet(乙太網路)、Fast Ethernet(高速乙太網路)、Gigabit Ethernet(超高速乙太網路)…等。
廣域網路(WAN, wide area network)
當電腦的數目不只一部,而且所在的位置可能在不同城鎮、不同國家甚至不同洲,將這些電腦連接在一起所形成的網路,就叫做廣域網路。常見的廣域網路標準有ISDN(integrated service digital network)、B-ISND(broadband ISDN)、Frame Relay、ATM(asynchronous transfer mode)…等。
都會網路(MAN, metropolitan area network)
涵蓋的範圍介於LAN與WAN之間,使用與LAN類似的技術連接於不同辦公室或城鎮的電腦,它可能是連接數個LAN所形成的較大網路或單一網路。目前由於LAN的傳輸速率與傳輸距離不斷提升,使得MAN與LAN之間的分野日趨模糊。
網際網路(Internet)
是全世界最大的電腦網路,它不是單獨一個網路,而是由成千上萬個大小網路所構成。Internet除了連接數以千萬計的電腦之外,更重要的是它所提供的各項資源,例如全球資訊網(Web)、電子郵件(E-mail)、檔案傳輸(FTP)、電子布告欄(BBS)、部落格(Blog)…等。
網路通常會包含兩部以上的電腦,而電腦之間是如何連接成網路,則有數種方式,我們將這些方式統稱為拓樸(topology),常見的有下列幾種:
匯流排拓樸(bus topology):
所有電腦是連接到同一條網路線,而資料就是在這條網路線上傳送。所有的電腦都會接收網路上的任何資料,然後根據自己的位址擷取要傳送給自己的資料;如果有電腦要傳送資料,必須先判斷是否有其它資料正在網路線上傳送,沒有的話,才能傳送資料。

星狀拓樸(star topology):
所有的電腦是連接到集線器(hub),當電腦要傳送資料時 只要將資料傳送到集線器並指定要傳送給另一部電腦。星狀拓樸的優點是改善了匯流排拓樸的缺點,缺點則是集線器故障會導致網路癱瘓,而且多了集線器的成本。

環狀拓樸(ring topology):
所有的電腦是以環狀方式連接在一起,第一部電腦連接到第二部電腦,第二部電腦連接到第三部電腦,…最後一部電腦再連接到第一部電腦。比起匯流排拓樸和星狀拓樸,環狀拓樸的效能較佳,尤其是在高流量時,因為環狀網路上會一直傳送著一個記號(token),只有取得Token的電腦才能開始傳送資料,待資料傳送完畢並確認目的電腦已經接收到資料後,再釋放記號讓其它電腦使用。

網狀拓樸(mesh):
所有電腦之間互相有網路線連接,不會因為任何一部電腦故障或網路線上任何一段網路故障而導致網路癱瘓,容錯能力為其它網路拓樸之冠。但是架設成本遠比其它網路拓樸高,所以鮮少有網路是真正的網狀拓樸。
2010年1月25日
作業系統--記憶體管理
在現代的電腦系統中,程式與其資料都必須存放在記憶體中,才能直接被CPU所使用,而在多元程式處理系統中,由於記憶體內會同時存放著多份程式與資料,因此作業系統不僅要追蹤並記錄每個程式存放在記憶體內的哪個位址,還要把程式裡面參考到的位址轉換成記憶體的位址。在這邊的解決法方是採用邏輯位址(lobical address)與實體位址(physical address)兩套位址,前者是在程式裡面所指定的相對位置,又稱為「相對位址」(relative address);後者是在記憶體內的實際位置,當程式被載入記憶體時,程式裡面的邏輯位址就會經過位址聯結(address binding)的過程,對應到記憶體內的實體位址。從1960年代以來,多元程式處理技術歷經多次沿革,其主要的記憶體管理方法,包括以下幾項:
分割法(partitioning)
最初的設計是屬於固定分割法(fixed partitioning),其原理是將記憶體劃分成多個大小固定的分割區,雖然各個分割區的大小不一定相同,但在開機後就已經決定,而且作業系統會使用表格記錄分割區的起始位址及長度。一個分割區可以載入一個程式來執行,而CPU就在這些程式之間切換執行。由於分割區的大小固定,而程式的大小卻不一定剛好等於所分配到的分割區,導致可能有剩下一部份空間沒有用到,這個剩下的空間稱為內部碎片(internal fragmentation)。
為了改善內部碎片的問題,於是發展出動態分割法(Dynamic partitoning),其原理是根據程式的大小劃分一塊大小剛好的分割區來存放程式,而且作業系統同樣會使用表格記錄分割區的起始位址及長度。在動態分割法的機制下,可能會發生可用空間的總大小足以容納新程式,但卻因為空間不連續而無法利用的情況,此時這些可用空間稱為外部碎片(external fragmentation)。
分頁法(paging)
由於分割法無法避免碎片的產生,只能透過分割策略改善程度的輕重,為此,發展出另一系列的技術,允許同一個程式載入不連續的記憶體空間,只要可用空間的總大小足以容納該程式即可。分頁法的原理是將記憶體劃分成相同大小的區塊,稱為頁框(frame),然後將程式亦劃分成相同大小的區塊,稱為分頁(page),頁框的大小和分頁的大小通常是一樣的。當程式準備執行時,它的分頁會被載入記憶體的頁框,每個分頁對應一個頁框,但不一定是要連續的頁框,分散或順序顛倒亦無妨。為了記錄程式的每個分頁是載入到記憶體的哪些頁框,所以需要一個分頁表(page table)。
分段法(segmenting)
概念和分頁法類似,只是分割單位不同,分頁法是將程式劃分成大小相同的分頁,分段法是將程式的邏輯記憶體劃分成數個分段(segment),並記錄每個分段的編號及長度,其邏輯位址是表示成<分段編號,位移>格式。同樣的,為了記憶程式的每個分段是載入到記憶體的哪些位址,所以需要一個分段表(segment table)。
虛擬記憶體(virtual memory)
在現代電腦系統中,程式必須整個載入記憶體才能執行,倘若記憶體的可用空間不足,程式就無法執行,此時可以改用虛擬記憶體技術。這項技術的原理是假設有一塊非常大的虛擬記憶體,大小是實體記憶體的數倍,實際上則是規劃一部份的輔助儲存裝置(通常是硬碟)做為虛擬記憶體,當程式準備執行時,即使程式無法整個載入記憶體也沒關系,只要記錄下哪些部份是真的有載入記憶體,其餘的部份還留在規劃成虛擬記憶體的磁碟,然後在程式的執行過程中,若碰到需要執行不在記憶體的部份,再到磁碟讀取,把目前記憶體內比較不會用到的部份挪出到磁碟上,再把要用到的部份換進來,此動作稱為交換(swap),而劃分為虛擬記憶體的磁碟檔案則稱為交換檔(swap file)。
需求分頁法(demand paging)
為了進一步提升記憶體的使用效率,有人結合分頁法和虛擬記憶體技術,發展出需求分頁法,其原理和分頁法類似,也是將記憶體分成多個頁框,將程式劃分成多個分頁,執行時將分頁載入頁框,不同的是程式不必整個載入記憶體就能執行,只要記錄有哪些分頁是真的載入記憶體,而其餘哪些分頁還留在磁碟就可。若程式在執行中,發現所需要的分頁不在記憶體,就必須到磁碟讀取。
需求分段法(demand segmentation)
是結合分段法和虛擬記憶體技術,其原理和需求分頁法類似,也就是程式不必整個載入記憶體就能執行,只要記錄有哪些分段是真的載入記憶體,而其餘哪些分段還留在磁碟即可。若程式在執行中,發現所需要的分段不在記憶體中,則必須到磁碟讀取。
分割法(partitioning)
最初的設計是屬於固定分割法(fixed partitioning),其原理是將記憶體劃分成多個大小固定的分割區,雖然各個分割區的大小不一定相同,但在開機後就已經決定,而且作業系統會使用表格記錄分割區的起始位址及長度。一個分割區可以載入一個程式來執行,而CPU就在這些程式之間切換執行。由於分割區的大小固定,而程式的大小卻不一定剛好等於所分配到的分割區,導致可能有剩下一部份空間沒有用到,這個剩下的空間稱為內部碎片(internal fragmentation)。
為了改善內部碎片的問題,於是發展出動態分割法(Dynamic partitoning),其原理是根據程式的大小劃分一塊大小剛好的分割區來存放程式,而且作業系統同樣會使用表格記錄分割區的起始位址及長度。在動態分割法的機制下,可能會發生可用空間的總大小足以容納新程式,但卻因為空間不連續而無法利用的情況,此時這些可用空間稱為外部碎片(external fragmentation)。
分頁法(paging)
由於分割法無法避免碎片的產生,只能透過分割策略改善程度的輕重,為此,發展出另一系列的技術,允許同一個程式載入不連續的記憶體空間,只要可用空間的總大小足以容納該程式即可。分頁法的原理是將記憶體劃分成相同大小的區塊,稱為頁框(frame),然後將程式亦劃分成相同大小的區塊,稱為分頁(page),頁框的大小和分頁的大小通常是一樣的。當程式準備執行時,它的分頁會被載入記憶體的頁框,每個分頁對應一個頁框,但不一定是要連續的頁框,分散或順序顛倒亦無妨。為了記錄程式的每個分頁是載入到記憶體的哪些頁框,所以需要一個分頁表(page table)。
分段法(segmenting)
概念和分頁法類似,只是分割單位不同,分頁法是將程式劃分成大小相同的分頁,分段法是將程式的邏輯記憶體劃分成數個分段(segment),並記錄每個分段的編號及長度,其邏輯位址是表示成<分段編號,位移>格式。同樣的,為了記憶程式的每個分段是載入到記憶體的哪些位址,所以需要一個分段表(segment table)。
虛擬記憶體(virtual memory)
在現代電腦系統中,程式必須整個載入記憶體才能執行,倘若記憶體的可用空間不足,程式就無法執行,此時可以改用虛擬記憶體技術。這項技術的原理是假設有一塊非常大的虛擬記憶體,大小是實體記憶體的數倍,實際上則是規劃一部份的輔助儲存裝置(通常是硬碟)做為虛擬記憶體,當程式準備執行時,即使程式無法整個載入記憶體也沒關系,只要記錄下哪些部份是真的有載入記憶體,其餘的部份還留在規劃成虛擬記憶體的磁碟,然後在程式的執行過程中,若碰到需要執行不在記憶體的部份,再到磁碟讀取,把目前記憶體內比較不會用到的部份挪出到磁碟上,再把要用到的部份換進來,此動作稱為交換(swap),而劃分為虛擬記憶體的磁碟檔案則稱為交換檔(swap file)。
需求分頁法(demand paging)
為了進一步提升記憶體的使用效率,有人結合分頁法和虛擬記憶體技術,發展出需求分頁法,其原理和分頁法類似,也是將記憶體分成多個頁框,將程式劃分成多個分頁,執行時將分頁載入頁框,不同的是程式不必整個載入記憶體就能執行,只要記錄有哪些分頁是真的載入記憶體,而其餘哪些分頁還留在磁碟就可。若程式在執行中,發現所需要的分頁不在記憶體,就必須到磁碟讀取。
需求分段法(demand segmentation)
是結合分段法和虛擬記憶體技術,其原理和需求分頁法類似,也就是程式不必整個載入記憶體就能執行,只要記錄有哪些分段是真的載入記憶體,而其餘哪些分段還留在磁碟即可。若程式在執行中,發現所需要的分段不在記憶體中,則必須到磁碟讀取。
2010年1月24日
作業系統--行程管理
作業系統中需要管理的其中一項重要資源就是CPU時間,現代的作業系統為了提高效率,都會同時執行多個程式,以同時服務更多位使用者,也就必須更精確地控制分配CPU時間給每個程式執行。為了區分程式是否有取得CPU時間,又另外定義了所謂的行程(process),這指的是正在執行中的程式。程式是一組靜態的指令,而行程則是程式在執行時的動態實體。在電腦系統中,每個行程都會歷經從建立、準備好可以執行、正在執行、等待某項資源、直到最後結束之間的幾個狀態,如圖所示。

1.建立(new):行程一開始產生時是處於建立狀態,此時它尚未得到作業系統的允許進入記憶體。
2.就緒(ready):作業系統將行程載入記憶體後,它就進入就緒狀態。在就緒狀態下的行程都是可以立即執行的,只有在等待CPU而已。
3.執行中(running):行程目前正在使用CPU時間執行中,作業系統會決定在就緒狀態下的哪個行程可以下一個使用CPU,等到CPU一被釋放,該行程就可以開始使用CPU。
4.等待中(waiting):行程因為某種原因進入等待中狀態,通常是需要某個除了CPU以外的資源,在取得所需的資源之前,它都無法繼續執行,會一直停留在等待中狀態,直到獲得解決後,再進入就緒狀態,等待下一次使用CPU。
5.結束(terminated):行程已經執行完畢,作業系統也就無須維護其相關資訊。
由於程式的功能日益強大,使用者可能希望在程式執行當中同時進行多個工作,因此許多現代的作業系統會把行程更進一步劃分成多個執行緒(thread),每個執行緒有各自的控制流程,但共同相同的程式碼區塊、資料區塊和作業系統資源。由此發展出一種新的多工方式,稱為多執行緒(multithreading),它允許電腦在單一程式中執行多個工作。為了要使用多執行緒,程式設計人員必須將程式劃分成多個分離的執行緒。
CPU排程演算法(CPU sheduling)的目的是找出下一個可以取得CPU使用權的行程,也就是決定就緒狀態下的哪個行程可以進入執行中狀態,為了解決這個問題所發展出來的CPU排程演算法相當多,常用的有下列幾種:
先來先做(FCFS, First-Come First-Served)
原理是依照行程到達的先後順序來執行,先來的先做,直到做完再輪到下一個,就像排隊買票一樣。FCFS演算法雖然容易實作,但是它忽略了某些重要的因素,導致並不實際。萬一CPU分配給一個需要很長的執行時間的行程,但是它的後面卻排了一堆急著要執行的短行程,結果這些行程都必須等待很長的時間才能輪到。
最短工作先做(SJF, Shortest Job First)
原理是先檢查一遍在就緒狀態下的所有行程,將它們所需的執行時間從小到大排序,然後從時間最短的行程開始執行。一般來說,SJF演算法的平均等待時間可以證明出是最佳的,問題在於它是仰賴對於未來的猜測計算,作業系統必須事先「知道」每個行程的執行時間才能安排順序,但這是不可能的。因此,作業系統會根據一些經驗值和機率因子來推測,若推測與事實相差太遠,則SJF演算法的執行效能就會不如預期。
優先權(Priority)
原理是依照事先決定的優先權定義(例如期限、所需要的記憶體大小…等),計算出每個行程的優先順序,然後依照優先須序給予CPU使用權。
循環分配(RR, Round Robin)
原理是專為分時系統所設計,作業系統事先定義一個固定的時間配額,並將CPU時間劃分成一個個時間配額,再對每個行程執行完畢,下一次就再分配一個時間配額給它,而行程在時間配額用完後,就立刻交出CPU的使用權,讓下一個行程使用,重複這個過程直到行程結束為止。

1.建立(new):行程一開始產生時是處於建立狀態,此時它尚未得到作業系統的允許進入記憶體。
2.就緒(ready):作業系統將行程載入記憶體後,它就進入就緒狀態。在就緒狀態下的行程都是可以立即執行的,只有在等待CPU而已。
3.執行中(running):行程目前正在使用CPU時間執行中,作業系統會決定在就緒狀態下的哪個行程可以下一個使用CPU,等到CPU一被釋放,該行程就可以開始使用CPU。
4.等待中(waiting):行程因為某種原因進入等待中狀態,通常是需要某個除了CPU以外的資源,在取得所需的資源之前,它都無法繼續執行,會一直停留在等待中狀態,直到獲得解決後,再進入就緒狀態,等待下一次使用CPU。
5.結束(terminated):行程已經執行完畢,作業系統也就無須維護其相關資訊。
由於程式的功能日益強大,使用者可能希望在程式執行當中同時進行多個工作,因此許多現代的作業系統會把行程更進一步劃分成多個執行緒(thread),每個執行緒有各自的控制流程,但共同相同的程式碼區塊、資料區塊和作業系統資源。由此發展出一種新的多工方式,稱為多執行緒(multithreading),它允許電腦在單一程式中執行多個工作。為了要使用多執行緒,程式設計人員必須將程式劃分成多個分離的執行緒。
CPU排程演算法(CPU sheduling)的目的是找出下一個可以取得CPU使用權的行程,也就是決定就緒狀態下的哪個行程可以進入執行中狀態,為了解決這個問題所發展出來的CPU排程演算法相當多,常用的有下列幾種:
先來先做(FCFS, First-Come First-Served)
原理是依照行程到達的先後順序來執行,先來的先做,直到做完再輪到下一個,就像排隊買票一樣。FCFS演算法雖然容易實作,但是它忽略了某些重要的因素,導致並不實際。萬一CPU分配給一個需要很長的執行時間的行程,但是它的後面卻排了一堆急著要執行的短行程,結果這些行程都必須等待很長的時間才能輪到。
最短工作先做(SJF, Shortest Job First)
原理是先檢查一遍在就緒狀態下的所有行程,將它們所需的執行時間從小到大排序,然後從時間最短的行程開始執行。一般來說,SJF演算法的平均等待時間可以證明出是最佳的,問題在於它是仰賴對於未來的猜測計算,作業系統必須事先「知道」每個行程的執行時間才能安排順序,但這是不可能的。因此,作業系統會根據一些經驗值和機率因子來推測,若推測與事實相差太遠,則SJF演算法的執行效能就會不如預期。
優先權(Priority)
原理是依照事先決定的優先權定義(例如期限、所需要的記憶體大小…等),計算出每個行程的優先順序,然後依照優先須序給予CPU使用權。
循環分配(RR, Round Robin)
原理是專為分時系統所設計,作業系統事先定義一個固定的時間配額,並將CPU時間劃分成一個個時間配額,再對每個行程執行完畢,下一次就再分配一個時間配額給它,而行程在時間配額用完後,就立刻交出CPU的使用權,讓下一個行程使用,重複這個過程直到行程結束為止。
訂閱:
文章 (Atom)
