Linux 系統調用的初學者指南
在過去的幾年中,我一直在做大量容器相關的工作。先前,我看到 Julien Friedman 的一個很棒的演講,它用幾行 Go 語言寫了一個容器框架。這讓我突然了解到容器只是一個受限的 Linux 進程中的機器。
構建這個受限視圖涉及到 Golang 系統調用包中的很多調用。最初,我只是用到了表面的那些,但過了一段時間,我想剝下洋蔥的下一層,看看這些系統調用是什麼,以及它們的工作原理。我將在 OSCON 的演講中分享我所學到的東西。
顧名思義,syscalls 即系統調用,它們是你從用戶空間請求進入 Linux 內核的方式。內核為你做一些工作,例如創建一個進程,然後再回到用戶空間。
有一個常見的機制使所有的系統調用轉換到內核,這是由 libc 庫處理的。 用戶空間代碼設置一些寄存器,包括其想要的系統調用的 ID 以及需要傳遞給系統調用的所有參數。它觸發一個 「陷阱」 將控制轉換到內核。
這就是用戶空間代碼如何向內核請求的,而 Linux 也有一個偽文件系統,它允許內核將信息傳遞給用戶空間,其內容看起來像普通的目錄和文件。
/proc
目錄是一個很好的例子。看看裡面,你會發現有關機器上運行的進程的各種有趣的信息。在某些情況,像 cgroups(控制組)那樣,用戶空間可以通過寫入這些偽文件系統下的文件來配置參數。
當你在使用容器時,特別有趣的是,主機的 /proc
包含了所有有關容器化的進程的信息。這包括環境變數,它們也保存在 /proc
偽文件系統中,這意味著你的主機可以訪問所有正在運行的容器的環境。如果你通過環境變數將諸如憑證或資料庫密碼這類秘密傳遞到容器中,則可能會產生安全性後果。
許多編寫常規程序的程序員可能不覺得他們經常使用系統調用。但實際上他們會經常調用,因為每天的活動比如製作文件或者更改目錄都涉及 Linux 的系統調用。
你不必是一位系統程序員才能享受系統調用的樂趣!
如果你想要了解更多,Liz 會在 Austin,Texas 舉辦的 OSCON 2017 上演講 Linux 系統調用的初學者指南。
(題圖: opensource.com)
作者簡介:
Liz Rice - Liz Rice 是一位技術傳播者,也是 Aqua Security 的容器安全專家。此前,她共同創立了 Microscaling Systems,並開發了其實時伸縮引擎,以及流行的圖像元數據網站 MicroBadger.com。她擁有豐富的從網路協議和分散式系統,以及數字技術領域,如 VOD,音樂和 VoIP 軟體的開發、團隊和產品管理經驗。
via: https://opensource.com/article/17/5/beginners-guide-syscalls
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive