2011-01-05 69 views
2

除shell和系統調用之外,還有其他方式可以使用內核來執行程序嗎?內核編程

+2

這是非常模糊的......「使用內核」意味着*從內核模式*?或通過*從用戶模式調用內核例程*?是關於Windows,Linux還是Mac?更加詳細一些。 – Mehrdad 2011-01-05 07:08:31

回答

3

它總是以前只有一種方式來執行Unix及其派生程序上的程序,並且這是通過exec()系統調用。第一個(內核)進程是由引導加載程序創建的;所有後續流程均由fork()exec()創建。當然,fork()只創建了原始程序的副本;它是exec()系統調用 - 以C源代碼中的多種形式之一,但最終相當於execve() - 這是做了用新圖像替換當前進程的驢工作。

這些天,有像posix_spawn()這樣的機制可能會或可能不會使用單獨的系統調用來實現大致相同的機制。

0

是的,你可以用你的程序編譯你的內核,但它不會是最聰明的事情。

1

很多內核支持在運行時添加kernel modulesdrivers。如果你想從內核空間執行一些代碼(可能是因爲你需要更高的權限),你可以編寫你自己的內核模塊/驅動程序並加載它來執行你的代碼。但是,僅插入驅動程序並不能確保您的代碼將被執行。根據您的驅動程序實現,您必須具有一些在內核空間中執行代碼的觸發機制。

0

每個程序都由內核在內部執行。如果您正在尋找正在運行的內核模塊,則必須使用系統調用來訪問該模塊,並在內核模式下爲您執行一些工作。內核是事件驅動的,只有系統調用觸發其模塊的執行(除了一些系統事件,如網絡數據包收到)