linux知识(一) 程序、进程与线程
生活随笔
收集整理的這篇文章主要介紹了
linux知识(一) 程序、进程与线程
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
linux知識(shí)(一) 程序、進(jìn)程與線程
- 程序
- 進(jìn)程
- 程序如何變成進(jìn)程?
- 線程
- 線程與進(jìn)程
- fork和創(chuàng)建新線程的區(qū)別
- 優(yōu)點(diǎn)
程序
程序:程序是已編譯好的二進(jìn)制文件,存儲(chǔ)在磁盤(pán)中,不占用系統(tǒng)資源
程序包括:
- RO段:只讀代碼段(code段.text段)和常量段(RO data段/.constdata段)
- RW段:(.data段)已初始化成非0的變量段(全局變量和靜態(tài)變量)
- ZI段:(.bss段)未初始化的為0的變量段(全局變量和靜態(tài)變量)
進(jìn)程
進(jìn)程: 進(jìn)程是資源分配的最小單位,占用系統(tǒng)資源
進(jìn)程主要包括:
- RO段:只讀代碼段(code段.text段)和常量段(RO data段/.constdata段)
- RW段:(.data段)已初始化成非0的變量段(全局變量和靜態(tài)變量)
- ZI段:(.bss段)未初始化的為0的變量段(全局變量和靜態(tài)變量)
- 棧:存儲(chǔ)局部、臨時(shí)變量,函數(shù)調(diào)用時(shí),存儲(chǔ)的函數(shù)返回指針,用于控制函數(shù)的調(diào)用和返回。程序開(kāi)始時(shí)自動(dòng)分配內(nèi)存,結(jié)束時(shí)自動(dòng)釋放內(nèi)存
- 堆:存儲(chǔ)動(dòng)態(tài)內(nèi)存空間,需要程序員手工分配,手動(dòng)釋放。
程序如何變成進(jìn)程?
當(dāng)我們啟動(dòng)程序的時(shí)候,由DMA模塊將程序從磁盤(pán)中拷貝到內(nèi)存中,同時(shí)啟動(dòng)DMA中斷,讓cpu來(lái)加載進(jìn)程
線程
線程:線程是資源調(diào)度的最小單位
線程與進(jìn)程
假設(shè)linux系統(tǒng)中有三個(gè)進(jìn)程同時(shí)運(yùn)行,cpu分配每個(gè)進(jìn)程時(shí)間片分別是3s、2s、4s.進(jìn)程A中有兩個(gè)線程,一個(gè)線程對(duì)應(yīng)一個(gè)cpu的核心,進(jìn)程A就會(huì)在分配的2s的時(shí)間片中用兩個(gè)線程來(lái)處理事情,提高處理的效率。
fork和創(chuàng)建新線程的區(qū)別
- 當(dāng)一個(gè)進(jìn)程執(zhí)行一個(gè)fork調(diào)用的時(shí)候,會(huì)創(chuàng)建出進(jìn)程的一個(gè)新拷貝,新進(jìn)程將擁有它自己的變量和自己的pid。新進(jìn)程運(yùn)行時(shí)是獨(dú)立的。
- 在進(jìn)程里面創(chuàng)建一個(gè)新線程的時(shí)候,新的執(zhí)行線程擁有自己的堆棧,當(dāng)共享了全局變量、文件描述符、信號(hào)處理器和當(dāng)前的子目錄狀態(tài)
優(yōu)點(diǎn)
- 創(chuàng)建一個(gè)新線程的代價(jià)要比創(chuàng)建一個(gè)新進(jìn) 程小得多
- 與進(jìn)程之間的切換相比,線程之間的切換 需要操作系統(tǒng)做的工作至少在理論上要少很多
- 線程占用的資源要比進(jìn)程少很多
總結(jié)
以上是生活随笔為你收集整理的linux知识(一) 程序、进程与线程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人工受孕什么时候做好
- 下一篇: linux知识(二)互斥量、信号量和生产