国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

操作系統

2024-06-28 13:23:49
字體:
來源:轉載
供稿:網友
操作系統 - 線程

之前已經討論過進程了,現在討論線程。我在想如何用現實中的具體事物來比較進程和線程的關系。

舉個我認為較恰當的例子。把進程比作一個工廠中的車間,車間中有若干個生產線,但是每條生產線都需要不同的零件,原料和員工。零件,原料和員工,是所有生產線都可以共同使用的資源。這里就把生產線當做線程吧。這樣,每條生產線就只用管自己的生產過程。

就如討論進程一樣,這里還是列舉一下線程所包含的實體。

PRogram counter

Register

Statck

State

不難發現,線程關心的只是下一刻CPU執行所需的必要實體,只需要知道PC等寄存器的信息,當前棧指針,不用關心我有沒有子進程啊,我的地址空間在哪里,我打開了什么文件等等的信息。因為這些信息CPU已經知道了。

為什么要使用線程

在《現代操作系統》中已經說明了使用線程的種種優勢,很容易就能看明白。其實根據上文,也能猜到答案。這里就不用說明了。

線程實現的方式

線程可以在內核中實現,也可以在用戶空間實現。我自己的理解是這樣的:在內核中實現就是操作系統提供線程支持;在用戶空間中實現就是用戶自己實現。本來以為JVM的線程就是在用戶空間上實現的,但是搜了一下,貌似linux平臺下是調用Pthred庫實現的。這里還是深入學習一下這兩種線程的實現方式,為以后的工作和學習打下基礎,說不定什么時候就用上了。看了幾遍《現代操作系統》中的相關章節,可是自己還是云里霧里的,不是很清楚,這一次就好好的搞明白(不一定搞的明白,目前還沒有接觸過用戶空間實現的線程,也許是我孤陋寡聞)。

用戶空間實現線程

在這種情況下,內核不知道線程的存在。當一個進程中的線程執行完畢,不需要進行系統調用(Trap),不需要進行上下文交換,所以線程的切換非常快。

但是在發生I/O中斷的時候,必須要內核去處理了。那么問題來了,內核會鎖住當前線程所在的進程,因為內核不知道線程的存在,只知道進程。解決這個辦法有點麻煩。《現代操作系統》中提出了一個解法,在某些UNIX版本中有一個select系統調用,它可以判斷I/O操作是否會阻塞。如果阻塞就不執行I/O操作。這樣run-time system(用的英文版教材,很多術語不會翻譯或者亂翻譯,囧)就知道是執行I/O,還是執行該進程的其它進程。

內核實現線程

內核實現線程和進程區別不大。但是在線程被銷毀時,內核并不會銷毀線程的數據結構,只是會標記該線程是不可執行的。這樣,當新線程被創建時,覆蓋不可執行的線程的數據,效率大大的提高了。

還有一個問題,當一個多線程的進程執行fork時,子進程是否需要復制父進程的所有線程還是個別線程,如何操作。這個,因為很少接觸Linux下的C編程,所以暫時放在這里吧。

進程和線程的區別

面試的時候,這個問題可能是問的最多的,可以考察歸納能力和是否理解進程和線程。這里給出自己的理解。

首先,進程是操作系統資源分配和調度的基本單元,它包含了程序能夠執行的必要資源。而線程也叫做輕權進程,只擁有CPU執行所需的必要資源。沒有進程,線程無法單獨執行。

其次,進程的執行一般是線程的,一條道走到黑。線程只是進程執行的不同路徑,并發的執行。

就寫這么多吧。

歡迎大家一起交流和學習啊。

-end-


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 顺昌县| 林周县| 天津市| 洪洞县| 石渠县| 璧山县| 凤山市| 黎川县| 尼玛县| 互助| 玉田县| 山西省| 剑河县| 百色市| 耒阳市| 朔州市| 青铜峡市| 淮南市| 苗栗县| 永定县| 津市市| 湟源县| 张家口市| 额济纳旗| 泸定县| 天柱县| 光泽县| 石林| 静乐县| 甘肃省| 从化市| 寿光市| 临高县| 铁岭市| 白城市| 内江市| 金川县| 阜康市| 龙陵县| 得荣县| 伊金霍洛旗|