linux 如何创建内核进程,Linux内核的进程创建和执行.pdf
Linux內核的進程創建和執行
!"#$% 內核的進程創建和執行
徐 煒
摘 要 詳細闡述了!"#$% 內核34 54 2 的進程創建和執行過程,分析了相應的算法、數據
結構和關鍵的源代碼。
關鍵詞 67.+8 9%9*:9
()’+-’(.$*( 結構在頁塊底部,而核心堆棧則由頂部向下延伸,
一、概述
如圖& 所示。
&4 !"#$% 中的進程和線程
/01
從操作系統理論上說,進程是系統執行程序和分配資源的 ’()*+
單位,而線程僅是系統執行程序的單位。同一進程可以運行多
個線程,并且共享進程資源。!"#$% 內核實現了完善的進程機
制,但是并沒有真正的線程機制,即使有所謂的線程,也只是
指輕量級進程; !"<=( >9"<=( ?.7*9’’ ,簡稱!>? @ ,而它也是用
進程機制實現的。何謂輕量級進程呢?其實就是沒有自己獨立
的用戶空間的進程,這又可分為用戶態線程; 以下輕量級進程
簡稱為線程@ 和內核態線程。用戶態線程是父進程創建子進程 ,)’+-’(.$*( 2
時讓子進程共享父進程的用戶空間; 這是通過調用創建進程的
圖& 內核態堆棧分配
函數A7-67.+ 時參數中帶有B!CDE-FF 標志,讓父子進程共享
內存管理結構GG-’(.$*( 實現的@ ,從而實現了輕量級,但是共 在創建進程函數A7-67.+ ; @ 中,通過)LL7*-()’+-’(.$*( 宏分配
享也帶來了問題,典型的就是兩線程運行時的用戶堆棧也是共 進程的數據結構,它的定義在?.7*9’’7.4 = 中。
!
享的,如果線程間同步不好會影響堆棧,造成運行錯誤,解決 !"#$% ’(()*+,’-.+-,/0*, 1 2 1 1 -,/0*, ,’-.+-,/0*, 2
++3#,+$/##+4’3#- 1 567+89:;9<= >2 2
的辦法一是父進程創建子進程時指定子進程的新堆棧地址9’H
這個宏定義通過調用內存頁分配器獲得一個 /01 的頁
和父進程不同; 通常情況下父子進程的9’H 是相同的@ ;二是使
塊,()’+-’(.$*( 的地址在其起始部分。同時,根據以前對!"#$%
用 :67+ ; @ 函數創建子進程,該函數在調用 A7-67.+ 時會加上
內存管理中的頁分配器的分析可知,這個地址是相對于 /01
B!CDE-IJCK0 標志,而父進程在創建過程結束后將睡眠在信
對齊的。因此就不難理解下面的宏定義了。
號量上,等到子進程運行結束或者執行新程序時; 從而不再共
總結
以上是生活随笔為你收集整理的linux 如何创建内核进程,Linux内核的进程创建和执行.pdf的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux+date+命令+作业,Lin
- 下一篇: xp 硬盘安装linux双系统,WinX
