linux进程源码分析,Linux内核源代码分析——口述程序猿如何意淫进程(一)
Jack:hi,淫龍,有空嗎?我們來討論一下Linux的進程吧。
我:沒空。不要煩我,最近正在郁悶。
Jack:郁悶啥呀?
我:最近大學城通了輕軌,房價漲得厲害,罵了隔壁。
Jack:不要郁悶了,來研究Linux內核吧。
我:你想知道什么呢?
Jack:我想知道在Linux里,進程到底是什么。
我:簡單的說,進程是程序員意淫出來的bitch。
Jack:不是太明白是什么意思。在大學的操作系統課程里,進程的解釋是“計算機中正在運行的程序實例”。
我:這種解釋既膚淺又了然無趣。我也可以給進程下定義——Unix里的進程是可調度的任務的單位之一。你能明白這是什么意思嗎?
Jack:所有的文字我都認識。不過,我仍然不是太明白進程是什么東西。
我:第一臺計算機是沒有操作系統的,直到上世紀60年代中期,IBM搞出了OS/360這樣的操作系統。然后才有了進程的概念。
Jack:說重點吧。
我:恩。很多人都說之所以會有進程是計算機設計人員覺得計算機資源(CPU)利用率不高,不過,我覺得應該是“投資方”為了節約成本才搞出來的。
Jack:草,你說重點。
我:重點就是,有了進程之后,所有的“任務”(Task),可以一股腦丟進去,然后CPU根據某種策略執行他們。
Jack:我問的是進程,你講任務(Task)搞JJ啊。
我:Jack不要急嘛。這里有一個誤解,任務(Task)與進程(Process)的關系。對于CPU而言,進程是不存在。CPU只關心當前的CS、DS、IP等寄存器指向哪里。如果你感興趣,可以參考下《Intel Architecture Software Developer’s Manual》。重復一下,進程是程序猿意淫出來的產物。
Jack:那你接下來是要口述程序猿如何意淫進程了?
我:理解進程必須分為兩個部分。一部分是關于CPU的,另外一部分是C代碼實現。Jack,如果你是一個操作系統設計工程師,在CPU層面你會考慮些什么東西呢?
Jack:操作系統首先要有進程,所以在CPU上要有“任務”(Task)的概念。任務是進程的原始雛形,如果沒有任務,進程就無從談起了。
我:大概是這個意思。不過,進程并不是操作系統的必要成分。想想早期的DOS系統吧。在386CPU里,有TR這個寄存器,這個寄存器描述了當前正在執行的任務的各種屬性。最重要的是當前任務(Task)的代碼的segment描述符(代碼段、數據段、堆棧段)。當A任務(Task)執行JMP指令跳轉到B任務的時候,B任務就running了。
Jack:明白了。在沒有操作系統的時候,CPU可以采用這種方式實現多任務(而不是一個巨大無比的單任務)。
我:是的。這是最簡單的多任務,但是還不能進行復雜的調度、搶占、讓出等智能性操作。這個時候的系統還是一個小孩子,還不具備高度的“智力”。
Jack:那怎么樣才能具備“高度的智力”呢?
我:午飯時間到了,我先去吃地溝油。咱回頭再聊。
總結
以上是生活随笔為你收集整理的linux进程源码分析,Linux内核源代码分析——口述程序猿如何意淫进程(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux版本查看命令多少位,查看lin
- 下一篇: linux 字符串转数字排序,linux