Linux 系統中 Docker 的設計與實作

Docker 和 Linux Container (LXC), BSD 的 Jail, 都是屬於 Lightweight Container (輕量級容器).  Docker 可以讓一個應用系統及其所需要的執行環境, 如系統設定, 環境參數和程式庫等, 打包成一個可以獨立執行的 Image.  和 VM 比起來, 因為 VM 需要安裝完整的作業系統, 而Docker 等 Lightweight Container 因為直接使用作業系統上的資源, 不需要安裝作業系統, 因此需要較少的資源, 在同一台實體機上可以部署更多應用系統, 有更高密度, 啟動時間也較短, 只需要約幾個 msec, 和啟動 VM 約需幾秒鐘相較, 要比 VM具有較好的彈性

繼續閱讀 “Linux 系統中 Docker 的設計與實作”

Linux 檔案系統的資料結構

我們在開發應用系統或寫程式時, 大多會使用到檔案來存取資料, 雖然目前許多應用系統會直接連接資料庫, 但是資料庫也會使用檔案對資料做存取的動作, 因此檔案系統在大部份作業系統中都是一個重要的部分.

在 Linux 或其他 Unix-Based 的系統中, C 語言是最主要的語言. 在 C 語言中關於檔案的功能大部份都透過 Standard I/O Library 來完成 (也就是最常見的 printf 和 scanf 等 function). 在此我們要介紹的是更低階的檔案功能, 一般稱之為 File I/O, 這些功能都是直接作系統呼叫. 在 File I/O, 開啟檔案是使用 open 這個 function (在Standard I/O 是使用 fopen). 開檔成功後系統會傳回一個叫做 File Descriptor (FD) 的整數, 後續關於這個檔案的動作及功能都要使用這個 FD, 如檔案讀寫等, 都要傳入這個FD當做參數.  FD 基本上是一個Index, 而 FD 也是檔案系統的資料結構中, 唯一使用者程式能夠看到的部份. 開啟檔案相關的資料結構如下圖所示.  需要注意的是圖中稱為 Table 的資料結構其實都不一定真正使用 Table 的形式. 繼續閱讀 “Linux 檔案系統的資料結構”