如何區分用戶態和內核態呢?
從邏輯地址上來看的話,以32位地址舉例,用戶態位於3GB空間當中,而內核空間在3GB-4GB(並且是共享的).
進程的數據結構示例圖,可以看到包含進程描述信息,內存管理,終端控制信息,文件描述符,文件系統以及信號相關的內容,
系統調用的執行過程:
1.用戶程序中有一個系統調用
2.保護現場,然後陷入內核當中,接下來在內核中尋找查詢系統調用表,找到對應的服務程序。
3.接下來服務程序執行完畢後恢復現場。
與正常的系統調用不一樣?
fork()之後會有兩個返回,對於父進程的返回過程與正常的系統調用類似,而對於fork()之後的子進程呢?
fork出來的子進程在哪裏執行呢?fork()出來的子進程是從哪一行代碼開始執行的?
可以看到幾乎fork()就是一堆複製拷貝的操作而已,還有修改下一些基本的結構。(leetcode那些鏈表的複製就是實際應用了)