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

資訊專欄INFORMATION COLUMN

操作系統中的進程和線程

Backache / 2326人閱讀

摘要:輕量級進程和內核線程是的關系。線程一個線程的本質是一組寄存器的狀態,是操作系統對寄存器狀態的抽象。

操作系統中的進程和線程 1.進程和線程的學習中容易混亂的地方

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

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

經典的書籍如《現代操作系統》多是從原理的角度去說,高屋建瓴,但是難以有切身感受

操作系統對進程和線程的實現也是不同的,架構者對進程和線程的理念有所不同,Linux和Windows內核對線程的實現不同。

2.進程模型的演變

最初,進程的內涵分為兩個方面:

調度,執行的基本單位

最初操作系統不支持線程的概念,內核中維護著進程的各種信息,如運行狀態,優先級,寄存器等,也就是說OS可以根據這些信息調度和執行進程。

資源所有權

包括程序,數據,文件,socket 等資源。

將兩個獨立的功能分離,出現了線程的概念:

作為執行與調度的基本單位——thread

資源所有權: process

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

線程的創建成本遠遠低于進程,因為線程中包含的數據量少于進程,線程只需要執行相關的數據即可,如,pc,寄存器,棧,執行狀態

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

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

彼時操作系統沒有提供對線程的支持,只是在應用層面實現了線程,操作系統并不知道,,內核維護著進程表,仍然以進程為單位進行系統調用。進程自身維護著線程表,維護線程的狀態。

優勢

不用切換到內核態,性能極佳,

進程自己可以有定制的調度算法

在不支持多線程的操作系統實現多線程程序,如DOS

劣勢

對線程的操作,如創建,調度,都是應用程序實現,導致編程困難

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

<2>內核級線程

后來,操作系統內核開始支持線程,就出現了內核級線程模型。這種線程模型中,內核維護著進程表和線程表,也就是說,內核可以對線程直接進行調度,

優勢

內核的調度粒度小至線程,就不會出現用戶級進程那種阻塞了進程,進程中所有線程都被迫“阻塞”的情況,內核線程被阻塞,不會導致進程被阻塞,進程中的其他線程依然可以繼續執行

劣勢

開銷挺大,從用戶態到內核態的切換有一定的開銷

支持的線程總量較小,因為內核線程占據內核的空間,而內核所持有的空間是有限的

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

<3>混合線程

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

4.概括進程和線程的本質

進程:當用戶啟動一個應用,系統將程序的源碼和數據從磁盤加載到內存中,并且開始執行他的源碼。一個進程即一個正被執行中的程序。與程序不同, 一個進程是一個活躍的實體 ,并且包含了程序作為單個實例在執行期間狀態的快照。

線程:一個線程的本質是一組寄存器的狀態,是操作系統對寄存器狀態的抽象。

5.特殊的Linux線程實現

Linux對進程與線程的實現比較特殊,對于Linux內核來說,并不存在線程的說法,但是Linux中進程與進程可以是有區別的。對于linux內核來說,只有進程,創建進使用系統調用clone,可通過設置該方法的參數設置進程是否共享某些數據,比如:

fork():創建子進程,通過調用0共享的clone,創建的進程是完全復制父進程的數據,二者不共享不可見。

pthread_create:通過調用最多共享的clone實現,就相當于一般意義上的線程了。

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69444.html

相關文章

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

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

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

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

    Sanchi 評論0 收藏0

發表評論

0條評論

Backache

|高級講師

TA的文章

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