網頁

搜尋此網誌

2016年3月27日 星期日

Upstart

Upstart 是一種 init 服務 (daemon),init 是 Linux 上第一個執行的行程 (process)。init 系統除了 Upstart 之外,還有過去的 System V init (唸作 System Five, 縮寫為 SysV),與後來發展的 systemd 。Upstart 是 Ubuntu 為了取代 SysV init 所開發出來的系統,採用事件為基礎的設計 (event-based),利用事件驅動的方式可以平行執行多個程式,提高開機的速度與效能。

Upstart 有兩個重要的概念:「事件 (Events) 」與「工作 (Jobs)」

Job

Job 是一個工作的單位 (unit of work),Upstart 有三種 Job 類型:
  • Task Job:程式執行一段時間就會結束, Process 有確定壽命和結束狀態,簡稱「Task」。
  • Service Job:長時間執行的程式,通常是背景服務,簡稱「Service」。
  • Abstract Job:不會有子行程產生,純粹僅有工作狀態。
每個 Job 會存在於不同的狀態,共有 11 種狀態 (State):
  • waiting:初始狀態
  • starting:工作即將開始
  • security:工作正在載入 AppArmor 安全政策
  • pre-start:執行 pre-start 當中
  • spawned:即將執行 script 或 exec
  • post-start:執行 post-start 當中
  • running:在 post-start 之後,表示 Job 正在執行的過渡期間狀態
  • pre-stop:執行 pre-stop 當中
  • stopping:在 pre-stop 之後的過渡期間狀態
  • killed:工作即將停止
  • post-stop:執行 post-stop 當中
Job 在 Upstart 系統上是定義在副檔名為 .conf 的組態檔 (Job Configuration File) 裡,檔名應該要能夠表示你所執行的應用服務。至於 Job 要如何撰寫,可以參考 Upstart 文件的第6章

依據組態檔放置的位置不同,Job 可以區分為:
  • System Job:組態檔位於 /etc/init/ 目錄中。
  • User Job:組態檔位於使用者加目錄下的 .init/ 目錄中,Upstart v1.7以後已經不支援。
  • Session Job:Upstart v1.7之後才有的功能,Job 是被使用者的 Session 所啟動,組態檔有多個位置,請參考 cookbook 說明

Event

Event 在 Upstart 裡是用來通知其他 Job 或 Event,Event 被發出 (emit) 後會廣播至整個 Upstart 系統,只有感興趣 (也就是有註冊對應的 Event) 的  Job 或 Event 才會收到。

注意到, Event 的名稱允許和 Job 的名稱是相同的。另外, Event 也可能和 Job State 的名稱相同,但是相同名稱的 Event 和 Job State 不是指同一個事情,雖然運作起來很相似 (變動狀態很像發出事件)。

Upstart 有三種 Event 類型:
  • Signal Event:信號事件是非阻塞 (non-blocking)、非同步 (asynchronous) 的事件,信號事件發出後會立即回傳,允許呼叫者繼續執行其他工作。
  • Method Event:方法事件是阻塞 (blocking)、同步 (synchronous) 的事件,方法事件如同程式設計的 function 功能,呼叫者發出後必須等待方法事件執行完畢,若有問題發生將回傳錯誤資訊。
  • Hook Event:掛勾事件與方法事件類似,是阻塞、同步的事件類型,只是用途不太相同,當作旗標 (flag) 的功能通知其他  Job 或 Event,確定所有接收者都執行完畢才繼續。

操作

在 Ubuntu 上和 Upstart 溝通與互動,有下列幾個程式可使用,詳細指令請參考連結的內容:

參考資料:

###

2016年3月7日 星期一

Data Storage 資料儲存

資料儲存由下至上分別是磁碟 (Disk)、磁碟區 (Volume) 與檔案系統 (File System),從作業系統的角度來看都是存放裝置 (Storage) 組成。以下分別說明相關詞彙。

Disk: 磁碟

  • 磁盤 (Platter):一個至多個磁盤組成一個磁碟。
  • 磁頭 (Head):一個磁盤有兩面,每一面有一個磁頭,也就是一個磁盤有2個磁頭。
  • 磁軌 (Track):磁盤上同心圓定義為磁軌,一面磁盤上有多個磁軌。
  • 磁柱 (Cylinder):各磁盤上相同位置的磁軌。
  • 磁區 (Sector):磁碟上可定位的最小單位,也就是資料最小的儲存單位。大小通常是 512 bytes,現在改為 4096 bytes (4KiB) 的大小 (稱為 4K 磁區)。另外,CD-ROM 的磁區通常是 2048 bytes。
  • 磁碟分割(Partition):磁碟在邏輯上可以分割成不同的區域,讓一個磁碟「看起來」好像有多個磁碟。一個磁碟至少有一至多個磁碟分割。
  • 主要開機紀錄 (Master Boot Record, MBR) :用來記錄磁碟分割的狀態,位於 Disk 上的第一個磁區,包含開機程式碼 (boot code) 與磁碟分割表 (Partition Table)。
  • GUID 磁碟分割表  (GUID Partition Table):另一種用來記錄磁碟分割狀態的格式。
  • 開機磁區 (Boot Sector):可開機 Partition 上的第一個磁區。

Volume: 磁碟區

在邏輯上 (注意是邏輯上而不是實體上),可建立檔案系統的最小單位。Partition 不等於 Volume,透過操作可以將多個 Partition 組成一個 Volume,例如 Logical Volume Management (LVM) 、Redundant Array of Independent Disks (RAID) 技術。

File System: 檔案系統

檔案系統的基本功能是決定檔案如何命名、儲存和組織。
  • 區塊 (Block),Windows 系統上稱為叢集 (Cluster),或是磁叢:磁碟上處理檔案的最小單位。一個叢集由一至多個磁區組成,在檔案系統格式化時決定。
  • FAT:檔案配置表 (File Allocation Table) 檔案系統,有多種版本,包括 FAT12、FAT16和FAT32,FAT 後面的數字表示叢集的位元數大小。
    • FAT16:每個 FAT 實體 (entry) 使用 16 位元紀錄,也就是說最大可定址到216 (=65,536) 個叢集。支援最大檔案大小為 4GB,支援最大磁碟區大小為 4GB。根目錄的檔案與資料夾總數最多為 512 個。
    • FAT32:每個 FAT 實體 (entry) 使用 32 位元紀錄,但保留最高4位元,因此最大可定址到228 (= 268,435,456) 個叢集。支援最大檔案大小為 4GB,支援最大磁碟區大小為 32GB。每個目錄的檔案與資料夾總數最多為 65534 個。
  • NTFS:新技術檔案系統 (New Technology File System)。

參考資料:

###

熱門文章