操作系统 --- 线程与进程的比较
如果說(shuō),在操作系統(tǒng)中引入進(jìn)程的目的是為了使多個(gè)程序能并發(fā)執(zhí)行,以提高資源利用率和系統(tǒng)吞吐量,那么在操作系統(tǒng)中再引入線程,則是為了減少程序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷,使OS(操作系統(tǒng))具有更好的并發(fā)性…
我們?cè)倩仡櫼幌?strong>進(jìn)程的兩個(gè)基本屬性:
1.進(jìn)程是一個(gè)可擁?yè)碛匈Y源的獨(dú)立單位,一個(gè)進(jìn)程要能獨(dú)立運(yùn)行,它必須擁有一定的資源(用于存放程序、數(shù)據(jù)的磁盤和內(nèi)存地址空間,以及它在運(yùn)行時(shí)所需要的I/O設(shè)備、已打開(kāi)的文件、信號(hào)量等);
2.進(jìn)程同時(shí)是一個(gè)可獨(dú)立調(diào)度和分配的基本單位,一個(gè)進(jìn)程要能獨(dú)立運(yùn)行,它還必須是一個(gè)可獨(dú)立調(diào)用和分派的基本單位。每個(gè)進(jìn)程在系統(tǒng)中由唯一的PCB(Process Control Blck,進(jìn)程控制塊),系統(tǒng)可根據(jù)其PCB感知進(jìn)程的存在,也可以根據(jù)其PCB中的信息,對(duì)進(jìn)程進(jìn)行調(diào)度,還可以將斷點(diǎn)信息保存在其PCB中.反之,再利用進(jìn)程PCB中的信息來(lái)恢復(fù)進(jìn)程運(yùn)行的現(xiàn)場(chǎng)。
程序并發(fā)執(zhí)行所需付出的時(shí)空開(kāi)銷
為使程序能并發(fā)執(zhí)行,系統(tǒng)必須進(jìn)行以下的一系列操作:
1.創(chuàng)建進(jìn)程,系統(tǒng)在創(chuàng)建一個(gè)進(jìn)程時(shí),必須為它分配其所必需的、除處理機(jī)以外的所有資源,如內(nèi)存空間、I/O設(shè)備,以及建立相應(yīng)的PCB;
2.撤消進(jìn)程,系統(tǒng)在撤銷進(jìn)程時(shí),又必須先對(duì)其所占有的資源執(zhí)行回收操作,然后在撤銷PCB;
3.進(jìn)程切換,對(duì)進(jìn)程進(jìn)行上下文切換時(shí),需要保留當(dāng)前進(jìn)程的CPU環(huán)境,設(shè)置新選中進(jìn)程的CPU環(huán)境,因而須花費(fèi)不少的處理機(jī)時(shí)間.
由上可知:由于進(jìn)程是一個(gè)資源的擁有者,因而在創(chuàng)建、撤消和切換中,系統(tǒng)必須為之付出較大的時(shí)空開(kāi)銷.這就限制了系統(tǒng)中所設(shè)置進(jìn)程的數(shù)目,而且進(jìn)程切換也不宜過(guò)于頻繁,從而限制了并發(fā)程度的進(jìn)一步提高.
線程------作為調(diào)度和分派的基本單位
線程的概念:設(shè)法將進(jìn)程的兩個(gè)基本屬性(獨(dú)立資源和PCB)分開(kāi),由OS分開(kāi)處理:不把作為調(diào)度和分派的基本單位也同時(shí)作為擁有資源的單位;對(duì)于擁有資源的基本單位,不頻繁的切換.
線程與進(jìn)程的比較
1.調(diào)度的基本單位:
在傳統(tǒng)的OS中,進(jìn)程是作為獨(dú)立調(diào)度和分派的基本單位,因而進(jìn)程是能獨(dú)立運(yùn)行的基本單位.在每次被調(diào)度時(shí),都需要進(jìn)行上下文切換,開(kāi)銷很大。而在引入線程的OS中,已把線程作為調(diào)度和分派的基本單位,因而線程是獨(dú)立運(yùn)行的基本單位.當(dāng)線程切換時(shí),僅需保存和設(shè)置少量寄存器內(nèi)容,切換代價(jià)遠(yuǎn)低于進(jìn)程.在同一進(jìn)程中,線程的切換不會(huì)引起進(jìn)程的切換,但從一個(gè)進(jìn)程的線程切換到另一個(gè)進(jìn)程中的線程時(shí),必然會(huì)引起進(jìn)程的切換.
2.并發(fā)行
在引入線程的OS中,不僅進(jìn)程之間可以并發(fā)執(zhí)行,而且在一個(gè)進(jìn)程中的多個(gè)線程之間亦可并發(fā)執(zhí)行,甚至還允許在一個(gè)進(jìn)程中的所有線程都能并發(fā)執(zhí)行.同樣,不同的線程也能并發(fā)執(zhí)行.這使得OS具有更好的并發(fā)性,從而能更加有效地提高系統(tǒng)資源地利用率和系統(tǒng)地吞吐量.
例如:一個(gè)網(wǎng)絡(luò)服務(wù)器經(jīng)常會(huì)接到許多客戶地請(qǐng)求,如果仍采用傳統(tǒng)的單線程的進(jìn)程來(lái)執(zhí)行該任務(wù),則每次只能為一個(gè)客戶服務(wù).但如果在一個(gè)進(jìn)程中可以設(shè)置多個(gè)線程,將其中的一個(gè)專用于監(jiān)聽(tīng)客戶的請(qǐng)求,則每當(dāng)有一個(gè)客戶請(qǐng)求時(shí),便立即創(chuàng)建一個(gè)線程來(lái)處理該客戶的請(qǐng)求.
3.擁有資源
進(jìn)程可以擁有資源,并作為系統(tǒng)中擁有資源的一個(gè)基本單位.然而,線程本身并不擁有系統(tǒng)資源,而僅有一點(diǎn)必不可少的、能夠保證獨(dú)立運(yùn)行的資源.
例如:在每個(gè)線程中都應(yīng)具有一個(gè)用于控制線程運(yùn)行的線程控制塊(TCB,Thread Control Block)、用于指是被執(zhí)行指令序列的程序計(jì)數(shù)器、保留局部變量、少數(shù)狀態(tài)參數(shù)和返回地址等的一組寄存器和堆棧.
4.獨(dú)立性
在同一進(jìn)程中的不同線程之間的獨(dú)立性要比不同進(jìn)程之間的獨(dú)立性要低得多.這是因?yàn)?為防止進(jìn)程之間彼此干擾和破壞,每個(gè)進(jìn)程都擁有一個(gè)獨(dú)立的地址空間和其他資源,除了共享全局變量外,不允許其他進(jìn)程的訪問(wèn).但同一進(jìn)程中的不同線程往往是為了提高并發(fā)性以及進(jìn)行相互之間的合作而創(chuàng)建的,它們共享進(jìn)程的內(nèi)存地址空間和資源,如每個(gè)線程都可以訪問(wèn)它們所屬進(jìn)程地址空間中的所有地址
例如:一個(gè)線程的堆棧可以其他線程讀、寫,甚至完全清除.有一個(gè)線程打開(kāi)的文件可以供其他線程讀、寫.
5.系統(tǒng)開(kāi)銷
在創(chuàng)建或撤消進(jìn)程時(shí),系統(tǒng)都要為之分配和回收進(jìn)程控制塊、分配或回收其他資源,如內(nèi)存空間和I/O設(shè)備等.OS為此付出的開(kāi)銷,明顯大于線程創(chuàng)建或撤消時(shí)所付出的開(kāi)銷
例如:在Solaris 2 OS中,線程的創(chuàng)建要比進(jìn)程的創(chuàng)建快30倍,而線程上下文切換要比進(jìn)程上下文切換快5倍.
6.支持多處理機(jī)系統(tǒng)
在多處理機(jī)系統(tǒng)中,對(duì)于傳統(tǒng)的進(jìn)程,即單線程的進(jìn)程,不管有多少處理機(jī),該進(jìn)程只能運(yùn)行在一個(gè)處理機(jī)上.但對(duì)于多線程進(jìn)程,就可以將一個(gè)進(jìn)程的多個(gè)線程分配到多個(gè)處理機(jī)上,使它們并發(fā)執(zhí)行,這無(wú)疑將加速進(jìn)程的完成
參考《計(jì)算機(jī)操作系統(tǒng)》(第4版) P82~P84
總結(jié)
以上是生活随笔為你收集整理的操作系统 --- 线程与进程的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电子招投标系统解决方案
- 下一篇: c语言实现NRZ编码,CSC1001-课