国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

操作系統(tǒng)中的進程和線程

Backache / 2328人閱讀

摘要:輕量級進程和內(nèi)核線程是的關(guān)系。線程一個線程的本質(zhì)是一組寄存器的狀態(tài),是操作系統(tǒng)對寄存器狀態(tài)的抽象。

操作系統(tǒng)中的進程和線程 1.進程和線程的學(xué)習(xí)中容易混亂的地方

之所以覺得進程和線程難以理解,大概有這么幾個原因:

進程,線程的概念是不斷發(fā)展的,不同時期的書籍會有不同的闡述,如一開始內(nèi)核不支持線程到后來內(nèi)核開始支持線程

經(jīng)典的書籍如《現(xiàn)代操作系統(tǒng)》多是從原理的角度去說,高屋建瓴,但是難以有切身感受

操作系統(tǒng)對進程和線程的實現(xiàn)也是不同的,架構(gòu)者對進程和線程的理念有所不同,Linux和Windows內(nèi)核對線程的實現(xiàn)不同。

2.進程模型的演變

最初,進程的內(nèi)涵分為兩個方面:

調(diào)度,執(zhí)行的基本單位

最初操作系統(tǒng)不支持線程的概念,內(nèi)核中維護著進程的各種信息,如運行狀態(tài),優(yōu)先級,寄存器等,也就是說OS可以根據(jù)這些信息調(diào)度和執(zhí)行進程。

資源所有權(quán)

包括程序,數(shù)據(jù),文件,socket 等資源。

將兩個獨立的功能分離,出現(xiàn)了線程的概念:

作為執(zhí)行與調(diào)度的基本單位——thread

資源所有權(quán): process

這也就是經(jīng)常說的:"process是資源容器,thread是執(zhí)行單位"。這樣帶來的巨大好處是:

線程的創(chuàng)建成本遠遠低于進程,因為線程中包含的數(shù)據(jù)量少于進程,線程只需要執(zhí)行相關(guān)的數(shù)據(jù)即可,如,pc,寄存器,棧,執(zhí)行狀態(tài)

進程中的線程共享地址空間,進程間的通信的代價遠大于線程間的通信。

3.三種線程模型
<1>用戶級線程

彼時操作系統(tǒng)沒有提供對線程的支持,只是在應(yīng)用層面實現(xiàn)了線程,操作系統(tǒng)并不知道,,內(nèi)核維護著進程表,仍然以進程為單位進行系統(tǒng)調(diào)用。進程自身維護著線程表,維護線程的狀態(tài)。

優(yōu)勢

不用切換到內(nèi)核態(tài),性能極佳,

進程自己可以有定制的調(diào)度算法

在不支持多線程的操作系統(tǒng)實現(xiàn)多線程程序,如DOS

劣勢

對線程的操作,如創(chuàng)建,調(diào)度,都是應(yīng)用程序?qū)崿F(xiàn),導(dǎo)致編程困難

因為操作系統(tǒng)只知進程不知線程,也就只能調(diào)度進程而無法調(diào)度線程,所有只要一個線程所在的進程發(fā)生了阻塞,那操作系統(tǒng)即阻塞該進程,那么該進程的其他線程也就無法被調(diào)度,相當(dāng)于阻塞了。目前使用用戶線程的程序越來越少了。

<2>內(nèi)核級線程

后來,操作系統(tǒng)內(nèi)核開始支持線程,就出現(xiàn)了內(nèi)核級線程模型。這種線程模型中,內(nèi)核維護著進程表和線程表,也就是說,內(nèi)核可以對線程直接進行調(diào)度,

優(yōu)勢

內(nèi)核的調(diào)度粒度小至線程,就不會出現(xiàn)用戶級進程那種阻塞了進程,進程中所有線程都被迫“阻塞”的情況,內(nèi)核線程被阻塞,不會導(dǎo)致進程被阻塞,進程中的其他線程依然可以繼續(xù)執(zhí)行

劣勢

開銷挺大,從用戶態(tài)到內(nèi)核態(tài)的切換有一定的開銷

支持的線程總量較小,因為內(nèi)核線程占據(jù)內(nèi)核的空間,而內(nèi)核所持有的空間是有限的

一般而言,程序不會直接使用內(nèi)核線程,而是使用內(nèi)核線程的高級接口——輕量級進程。輕量級進程和內(nèi)核線程是1:1的關(guān)系。

<3>混合線程

有些操作系統(tǒng)支持,如Solaris平臺。比較主流的windows和linux不支持。

4.概括進程和線程的本質(zhì)

進程:當(dāng)用戶啟動一個應(yīng)用,系統(tǒng)將程序的源碼和數(shù)據(jù)從磁盤加載到內(nèi)存中,并且開始執(zhí)行他的源碼。一個進程即一個正被執(zhí)行中的程序。與程序不同, 一個進程是一個活躍的實體 ,并且包含了程序作為單個實例在執(zhí)行期間狀態(tài)的快照。

線程:一個線程的本質(zhì)是一組寄存器的狀態(tài),是操作系統(tǒng)對寄存器狀態(tài)的抽象

5.特殊的Linux線程實現(xiàn)

Linux對進程與線程的實現(xiàn)比較特殊,對于Linux內(nèi)核來說,并不存在線程的說法,但是Linux中進程與進程可以是有區(qū)別的。對于linux內(nèi)核來說,只有進程,創(chuàng)建進使用系統(tǒng)調(diào)用clone,可通過設(shè)置該方法的參數(shù)設(shè)置進程是否共享某些數(shù)據(jù),比如:

fork():創(chuàng)建子進程,通過調(diào)用0共享的clone,創(chuàng)建的進程是完全復(fù)制父進程的數(shù)據(jù),二者不共享不可見。

pthread_create:通過調(diào)用最多共享的clone實現(xiàn),就相當(dāng)于一般意義上的線程了。

可以看到Linus對進程與線程的觀點:
Linus的觀點,Re: proc fs and shared pids

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/69444.html

相關(guān)文章

  • Java多線程筆記(零):進程線程與通用概念

    摘要:父進程調(diào)用創(chuàng)建子進程。因而,一個進程的第一個線程會隨著這個進程的啟動而創(chuàng)建,這個線程被稱為該進程的主線程。另一方面,線程不可能獨立于進程存在。終止線程線程可以通過多種方式來終結(jié)同一個進程中的其他線程。 前言 不積跬步,無以至千里;不積小流,無以成江海。在學(xué)習(xí)Java多線程相關(guān)的知識前,我們首先需要去了解一點操作系統(tǒng)的進程、線程以及相關(guān)的基礎(chǔ)概念。 進程 通常,我們把一個程序的執(zhí)行稱為一...

    blastz 評論0 收藏0
  • java學(xué)習(xí)(十) —— java中的線程概述

    摘要:進程一般由程序數(shù)據(jù)集進程控制塊三部分組成。線程概述線程的出現(xiàn)是為了降低上下文切換的消耗,提高系統(tǒng)的并發(fā)性。線程突破了一個進程只能干一件事的缺陷,使到進程內(nèi)并發(fā)成為可能。進程與線程的關(guān)系進程是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動。 進程概述 進程:正在運行的程序,是系統(tǒng)進行資源分配和調(diào)用的獨立單位。 進程就是一個程序在一個數(shù)據(jù)集上的一次動態(tài)執(zhí)行過程。 進程一般由程序、數(shù)據(jù)集、進...

    Sanchi 評論0 收藏0

發(fā)表評論

0條評論

Backache

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<