SylixOS 用戶進程加載淺析

目  錄

1.     Exec的由來...1

2.     SylixOS下的exec函數族...1

3.     總結...1

4.     參考資料...1




1.     Exec的由來

在系統設計的初期,好多人都採用過“if-else if”的方式來實現一些內部命令,但是用這種“if-else if”的結構的前提是系統的創建者需要能夠提前預知用戶所要鍵入的命令,換句話說,其實是創建者限制了用戶鍵入命令的種類。如果都按照這樣的方式添加新命令,豈不是當系統每次支持一個新命令的時候都要重新編譯一次shell。

同時更爲嚴重的問題是,如果是外部命令,都是存儲在文件系統上的外部程序,程序名的命名是自由的,如果仍然採用“if-else if”的結構,用戶根本無法正常執行一個外部命令,於是爲了解決這個問題,exec應運而生,exec會把一個可執行文件的絕對路徑作爲參數,把當前正在運行的用戶進程的進程體用該可執行文件的進程體替換,從而完成新程序的執行,由於其實現原理是新進程替換老進程,所以新執行的進程的pid仍是老進程的pid。

2.     SylixOS下的exec函數族

SylixOS向用戶提供的exec函數族中共有7種:

#include <process.h>

int execl(const char *path, const char *argv0, ...);

int execle(const char *path, const char *argv0, ...);

int execlp(const char *file, const char *argv0, ...);

int execv(const char *path, char * const *argv);

int execve(const char *path, char * const *argv, char * const *envp);

int execvp(const char *file, char * const *argv);

int execvpe(const char *file, char * const *argv, char * const *envp);

這七個函數實現的功能是類似的,都是將當前進程映像替換成新的程序文件。其差別在於程序對象的表示方式以及是否傳入環境變量,其中參數path表示是可執行文件的絕對路徑,參數file表示可執行程序的程序名,而具體的路徑將從shell的全局變量$PATH中指定的路徑中搜索。

其中只有execve和execvpe屬於真正意義上的系統調用,其它都是在此基礎上經過包裝的庫函數。

3.     總結

SylixOS爲用戶提供了一套POSIX兼容API, 其中包括了exec函數族,用戶可以方便的編寫 SylixOS 程序或移植程序到SylixOS。

4.     參考資料

《SylixOS應用程序開發手冊》

《操作系統發展史》


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章