|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業 | CAN-bus/DeviceNe |
請教Linux下當前進程和當前程序的問題! |
| 作者:lelee007 欄目:驅動編程 |
進程和程序的關系到底是怎樣的?(我看了很多書了了,都沒找到我能理解并接受的講解) 當前程序和當前進程的關系又是怎樣的? 是不是當前進程就是在當前程序執行之前為當前程序限定執行環境(CPU寄存器,以及各種硬件環境)? 如果是這樣,是不是說程序在執行時,如果需要新任務的話,在創建了新進程并修改新進程屬性之后,當前程序就要換一個執行環境了? |
| 2樓: | >>參與討論 |
| 作者: lelee007 于 2006/11/1 0:32:00 發布:
郁悶啊,難道高手對這樣的問題很不屑嗎? 這個問題很弱嗎? 我真的沒找到能讓我理解的講解,所以才來求助. 希望能有人把這個問題講的透徹一些. |
|
| 3樓: | >>參與討論 |
| 作者: lelee007 于 2006/11/5 12:13:00 發布:
郁悶 昏迷啊,昨天在一個群里有個高手說可以這樣理解,不過我還是沒找到權威點的描述. |
|
| 4樓: | >>參與討論 |
| 作者: kyokyxxj 于 2006/11/6 11:33:00 發布:
去查看LINUX典籍 去查看LINUX典籍 |
|
| 5樓: | >>參與討論 |
| 作者: yuyixuanta 于 2006/11/7 10:44:00 發布:
兩種方法 兩種方法: 1.讀一下內核代碼 2.查閱任何一本經典的linux書籍 你很快就會明白 祝你好運 |
|
| 6樓: | >>參與討論 |
| 作者: computer00 于 2006/11/7 10:57:00 發布:
進程是動態的,程序是靜態的。 當前進程指正在執行的進程。而進程是程序的一次執行。 |
|
| 7樓: | >>參與討論 |
| 作者: lelee007 于 2006/11/9 22:08:00 發布:
謝謝樓上所有大俠 當程序被系統調用到內存以后,系統會給程序分配一定的資源(內存,設備等等)然后進行一系列的復雜操作,使程序變成進程以供系統調用.進程是為程序服務的,而程序是為了用戶服務的. 之前對這個不是很理解主要是沒找到fork和exec函數族的用法,現在基本了解,這個問題現在已經不是我繼續看書的障礙了.謝謝樓上所有大俠. |
|
| 8樓: | >>參與討論 |
| 作者: fineamy 于 2006/11/10 14:01:00 發布:
程序,進程,線程 關于進程,程序,上面有幾位已經說到了,再補充一下. 1.單進程,單線程: 設想這樣一個情景,只有一個CPU(比如大家熟悉的單片機),要運行一個程序,如果僅僅只是這個程序占有這個CPU,那么很好想象,從這個程序開使運行,到程序結束運行,我們可以認為這是一個進程.事實上,現在大多單片機編程者都是使用這種方式進行單片機編程的. 2.多進程,單線程: 還是上面的情景,但是我們可以想象得到有這樣一種情況,這個程序在運行過程中總是要依賴(等待)一定的條件才能繼續運行.比如一個鍵盤的響應程序,其中很多時間都是在等待用戶的按鍵動作.這個時間顯然CPU是在做"無用功"的(它只是在空閑的等待著對它來說千年一遇的用戶的動作),那么這個時間CPU完全可以暫時將這個等待扔在一邊,轉而可以利用這些時間去處理一些其它的事情.比如此時它還可以"抽空"來運行其它程序,比如顯示程序....這樣的處理方式顯然是與前一種不同的,它帶來了一種新的技術,即多進程設計.進程這個詞來自"PROCESS",從詞意本身就可看出其有"過程",進行等之意. 3.多進程,多線程: 類似的,現在假設我們的程序運行平臺是多處理器(SMP)的(多核,或INTEL的超線程均類似).此時,我們當然可以按照"多進程,單線程"的方式讓程序在這樣的平臺上運行,雖然有點浪費.但是,你可以想象一下,當一個程序在一個CPU上運行時,是不是其它的CPU我們也可以讓它加入進來,別忘了,我們可不止一個CPU哦,為什么讓它空閑在那呢!于是,我們想象者本來在一個進程中的任務,我們現在將其分成了多個子任務,讓每個空閑的CPU去執行若干不同的子任務,當這些子任務完成后,整個任務也就完成了.于是,這又帶來了多線程技術.線程這個詞來自"THREAD",我不知道線程這個詞翻譯的好不好,反正也不明其意."THREAD"英文有"遍布,到處發生"之意,正說明了其線程的并發性. 無論進程,還是線程,其最終目的就是最大限度的提高程序的并行性(或著系統的吞吐量).對"單進程,單線程",一段時間段內,每個時刻都只有一個程序在運行,對"多進程,單線程",盡管在每個時刻,只有一個程序在運行,但是在一段時間段內,卻有多個程序在運行,對"多進程,多線程",對每個時刻,每個時間段,都可能有多個程序在運行.它們的并行性程度大小為"單進程,單線程"<"多進程,單線程"<"多進程,多線程". 進程,線程技術如何實現,這些都離不了調度,而調度的可操作性,就需要將進程,線程抽象為可操作的數據結構,比如(進程描述符),而幸運的是這些進程,線程并非不可捉摸,在一定的時間,它都唯一的對應著一些"資源",比如(寄存器內容等等),這樣對進程的操作(掛起,睡眠等)就轉而成了對這些數據結構的操作了. 另外,linux中似乎并沒有線程,而是全做進程看待。正在學習中。。。 以上純屬個人觀點,難免有誤,僅供參考。 * - 本貼最后修改時間:2006-11-10 14:25:36 修改者:fineamy |
|
| 9樓: | >>參與討論 |
| 作者: lelee007 于 2006/11/11 0:04:00 發布:
樓上的,不知道你進程調度和切換看的怎么樣了 還希望不吝賜教 |
|
| 10樓: | >>參與討論 |
| 作者: wwwshenjie 于 2006/11/28 21:05:00 發布:
不錯不錯 不錯不錯,解釋的夠詳細 |
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2006/11/28 22:24:00 發布:
Linux中當然有線程了。 由于線程是在進程中的,而進程是擁有資源的基本單位,在同一個進程中的線程共享大部分資源, 在做線程切換時,只需要保護少量寄存器內容,因而線程切換時系統開銷比進程切換時開銷要小得多。 創建線程時也是如此,開銷比創建進程要小。 |
|
| 12樓: | >>參與討論 |
| 作者: xlt169 于 2006/12/2 13:22:00 發布:
大家一起進步啊 fineamy 夠熱心,computer00夠精辟! |
|
| 13樓: | >>參與討論 |
| 作者: lelee007 于 2006/12/20 12:43:00 發布:
受益非淺 謝謝樓上各位大哥 |
|
| 14樓: | >>參與討論 |
| 作者: 471908737 于 2007/3/31 22:01:00 發布:
程序,進程,線程 謝謝 各位 大哥 帖子收下了 |
|
|
|
Copyright © 1998-2006 www.qxvs.cn 浙ICP證030469號 |