日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【操作系统】第二章--进程的描述与控制--深入与解释(1)

發布時間:2023/12/18 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【操作系统】第二章--进程的描述与控制--深入与解释(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深入解釋之前可以先看相應的筆記理解→【操作系統】第二章–進程的描述與控制–筆記與理解(1)

文章目錄

    • 第二章--進程的描述與控制--深入與解釋(1)
        • 從操作系統的角度認識進程
          • OS為什么要引入進程
          • 到底什么是進程
          • 為什么說動態性和并發性是進程的主要特征,其他特征如何體現
          • 進程和程序之間到底是什么樣的關系
          • 為什么要引入進程的狀態
          • 狀態之間的轉換說明了什么
          • Linux在描述進程狀態上有什么特色
          • 設想你是OS的設計者,你要如何設計進程的PCB
          • 用思維導圖對進程控制塊進行全面的描述
        • 進程控制塊的方方面面
          • 理解其雙向鏈表的定義
          • 理解第一宏
        • 進程/線程創建及其線程模型
          • 為什么引入線程
          • 為什么說線程只擁有棧和少量寄存器,其他資源都共享進程的資源
          • 用戶級線程和內核級線程的區別和聯系(Linux角度)
          • 進程和線程到底共享哪些資源,哪些不能共享
        • 線程共享變量+1操作
          • 展示代碼和有出錯的運行結果
          • 展示原子操作的相關代碼和結果
          • 展示加鎖操作的相關代碼和結果
        • 進程同步
          • 什么是進程同步,為什么要引入進程同步
          • 同步機制應該遵循的原則
          • 什么是信號量,為什么引入信號量機制
          • 給出記錄型信號量wait()和signal()操作的實現代碼
          • 用wait()signal()實現司機和售票員的同步

第二章–進程的描述與控制–深入與解釋(1)

從操作系統的角度認識進程

OS為什么要引入進程
  • 整體來說:為了使程序在多道程序環境下能并發執行,并能對并發執行的程序加以控制和描述,從而在操作系統中引入了進程概念;
  • 從狀態發展需要來說:在多道程序環境下,執行時需要共享系統資源,從而導致各程序在執行過程中出現相互制約的關系,此時程序的執行表現出了間斷性(執行-暫停-執行)的特征,這些特征在程序執行的過程中發生就產生了動態性,而傳統的程序本身就只是一組指令的集合,是靜態的概念,而靜態無法描述程序執行的情況。此時,我們根本沒有辦法從程序的表面看出程序執行、停頓的狀態,更沒辦法看出程序之間的關系,所以為了在靜態的概念上深刻描述程序動態性的執行過程與程序并發執行的過程,引入了具有動態性的進程;
  • 從并發特性與獨立特性來說:程序因為沒有建立PCB而不能參與并發執行,所以引入進程就是為了使其進程實體等和其他進程實體并發執行;同樣,沒有建立PCB的程序不能作為一個獨立的單元參與運行,因而引入能獨立運行、獨立獲得資源、獨立接收調度的進程作為基本單位;
到底什么是進程
  • 嚴格定義:傳統OS中進程定義:進程是進程實體的運行過程,是系統進行資源分配的調度的一個獨立單位;
  • 其余典型定義:①進程是程序的一次執行;②進程是一個程序及其數據在處理機上順序執行時所發生的活動;③進程是具有獨立功能的程序在一個數據集合上運行的過程,他是系統進行資源分配和調度的一個獨立單位;
為什么說動態性和并發性是進程的主要特征,其他特征如何體現
  • 動態性:相比于程序的“不滅不死,不變不動”(靜態,指令的集合),進程作為一種實體進行執行是具有生命周期的,他由創建而產生、由調度而執行、由撤銷而消亡。就像是網購的物品訂單,他不是你買的東西,他只能代表數據整體,只有你對物品下單了,物品從廠商運出倉庫被創建出來、經過國家物流的調度以及傳輸中轉被執行最終到自己手里的才是物品本身,倘若你突然不想這個東西了,或者你已經拿到這個東西了,那么此時的訂單就已經完成或者無效了,就是整個物品的因你而存在的創建傳輸執行過程就撤銷消亡了;
  • 并發性:OS本身重要的特性就有并發性,而在進程這里再一次提到,不僅僅是因為操作系統,更是因為進程作為程序的實例的運行過程。從程序的角度看,每個程序之間都是平行關系,不存在并發的特質;而當有了進程之后,每個程序的進程就可以通過對CPU以及資源的切換執行,即體現出了并發特性;
  • 獨立性:獨立性是指進程實體是一個能獨立運行、獨立獲得資源獨立接受調度的基本單位。因為每個進程被創建出來的時候,就是獨立創建的,創建出來后進行調度以及執行也都是已經賦予好的,就像是網購下單好的東西從發貨到遞送到收貨的過程中,不用再去聯系廠商或者做其他額外的事情才能保證他的正常執行,這就是獨立性;
  • 異步性:是指各進程各自獨立、各自以不可預知的速度向前推進。也就是各個進程之間就算同時被創建進行執行,也不能確定到底是哪個進程率先完成執行。就像是同時網購下單的物品也不一定是哪一個先到,因為他各自的速度是不可預知的;
進程和程序之間到底是什么樣的關系
  • 進程和程序關系理解:我認為可以類比到書本知識(程序)和程序設計(進程),書本中有的信息不過是一個一個的干條條、一個一個的知識點羅列、一篇一篇章節的介紹和解釋(數據的集合),他是靜的(靜態),知識就那樣印在書本里不管你理解沒理解看沒看,都不會對書有什么影響;而程序設計卻是用到了書本中的各個知識,他將書本中的知識通過代碼段或者電路設計通過我們的思維與理解(CPU調度)呈現出來,他就是書本知識框架與聯系的一個體現;而程序設計時,可能用到了不止一個課本及參考書,多個書本的知識(多個程序),通過我們對其的總和理解(并發性)完成出的設計大多比用一個書本做出來的更為全面。
為什么要引入進程的狀態
  • 引入狀態原因:因為進程是動態的,而且是具有生命周期的,而他的生命周期就可以劃分為一組狀態,通過這組狀態對整個進程的刻畫,我們更能直觀的感受到進程的生命狀態;
狀態之間的轉換說明了什么
  • 狀態之間轉換:
  • 整體性:說明進程各個狀態之間的觸發以及執行都受到系統的調度,也從側面說明我們對計算機的操作實際上是通過我們對各個進程的操作實現的;
    • 具體轉換:
    • 就緒態>>運行態:CPU空閑時間被調度選中一個就緒進程執行,說明了系統的多道批處理以及分時處理,不會讓CPU有空閑的時間,提高CPU的利用率;
    • 運行態>>阻塞態:等待使用資源或某事發生,比如鍵盤輸入、外設傳輸等,說明了我們操作計算機是通過操作進程來實現的,也是操作系統進程圖像的體現;
    • 阻塞態>>就緒態:等待得到滿足或某事已經發生,如人工干預結束,說明了盡管我們通過進程與計算機進行交互,進程的執行過程仍然是要按照系統規定好的步驟完成,體現計算及運行過程的嚴謹性;
    • 運行態>>就緒態:運行時間片到,或出現更高優先級,一個說明了CPU會為每個進程單獨提供一個時間片,可使用的時間就是這么多,不能因為某一個程序的停滯或者異常影響其他進程的執行,體現了獨立性;一個說明進程的優先級的高低可以影響到使用CPU以及資源的優先權限;
Linux在描述進程狀態上有什么特色
  • Linux查看進程狀態:$ ps -l 其中第二列的S代表這個進程的狀態;
  • 各個狀態描述:
  • R (Running)— TASK_RUNNING(可執行狀態)
  • S (Sleep)— TASK_INTERRUPTIBLE(可中斷的睡眠狀態)
  • D(Deep sleep) — TASK_UNINTERRUPTIBLE(不可中斷的睡眠狀態)
  • T (Stopped)— TASK_STOPPED或TASK_TRACED(暫停狀態或跟蹤狀態)
  • Z (Zombie stop)— TASK_DEAD - EXIT_ZOMBIE(退出狀態,成為僵尸進程)
  • X (Dead)— TASK_DEAD - EXIT_DEAD(退出狀態,進程即將被銷毀)
  • t(tracing stop)—跟蹤狀態
  • 進程狀態特色:不僅表明了進程此時正處于的狀態,也說明了進程的操作權限(比如S和D)
  • 啟發:相比于操作系統的進程狀態,Linux的進程狀態表述更加的細致,但并不是說操作系統的進程狀態表示就沒有Linux的進程表述清晰,狀態的表述要根據其所處的位置而變化,或細化、或寬泛,就想根據不同學生的特質因材施教一樣。
設想你是OS的設計者,你要如何設計進程的PCB
  • 分析:PCB是進程管理快,他是操作系統中最重要的記錄性數據結構,對進程進行管理與控制,所以設計出來的PCB必須可以描述進程的所有信息以及所有狀態,即是什么?在干什么?
  • 設計:
    • 信息:
    • ID:每個進程自己獨有的唯一的可以表示自己的ID,就像公司中的工號,可以唯一代表自己;
    • 特征信息:每個進程都需要有自己的進程所屬,就像工作中,我們每個人所屬的部門;
    • 狀態信息:進程目前所處的狀態(就緒、阻塞、運行),就像在工作時的狀態,或是正常上班、或是出差在外、在家休假等;
    • 優先級信息:每個進程可以獲得CPU控制的大小,就像是在工作中你的職位薪水能力越高,就越有可能優先代表公司出差交涉;
    • 進程調度信息:進程當前等待或者已執行的時間,就像是出差人員離交涉開始的時間或者已經交涉了的時間;
    • 事件信息:進程由執行到阻塞所發生的事件嗎,就像是出差過程中交涉中斷的原因;
    • 通信信息:進程之間的通信關系,就像是各個公司派去代表公司開集體會議時,各個代表之間的關系;
    • 資源需求,分配控制信息:進程執行做需要的資源以及各個進程的分配情況,就像是派去出差所需要的材料以及各個出差項目分配到的人員情況;
    • 進程實體信息:程序路徑名稱和進程數據所在位置的信息,就像是出差去的路線以及開會時所在的地點
    • 控制:
    • 現場保護區:保護處在阻塞狀態的進程空間,就像是出差人員對外交涉突然中斷時,公司會為提供休息區;
    • 工作區:進程執行時的空間,就像是出差開會交涉的會議廳
用思維導圖對進程控制塊進行全面的描述

進程控制塊的方方面面

理解其雙向鏈表的定義
  • 進入源代碼:https://elixir.bootlin.com/linux/latest/source/tools/include/linux/list.h#L351
struct list_head {struct list_head *next, *prev; };
  • 正是因為這個鏈表和我們平時使用的鏈表不一樣,他只有指針域,沒有數據域,才提供給我們了很大的方便,讓我們很方便的去拓展他,我們也只需要自己定義一種數據類型,指定自己的數據域,只用這里的指針域就可以創建出多種結構:
  • 雙向鏈表:在原本就有前驅和后繼的結構鏈表中加入數據域,就形成了雙向鏈表;
  • 雙向循環鏈表:在雙向鏈表的基礎上,將頭節點的前驅指向尾節點、尾節點的后繼指向頭結點,就形成了雙向循環鏈表;
  • 單鏈表:在雙向鏈表的基礎上減少一個指針域,就退化成了單鏈表;
  • 隊列:在雙向鏈表的基礎上先實現單鏈表,再在單鏈表的基礎上只允許在鏈表的首尾進行插入刪除操作,就形成了隊列;
  • 棧:在雙向鏈表的基礎上先實現單鏈表,再在單鏈表的基礎上只允許在鏈表的頭進行插入和刪除操作,就形成了棧;
  • 樹狀結構:以樹舉例:在雙向鏈表的基礎上改變前驅和后繼的依賴關系,對他人為地賦予一種意思,就可以轉化為樹結構,比如樹中每一個節點的前驅都指向他的第一個孩子,后繼都指向他的兄弟結點,就實現了用雙向鏈表結構用孩子兄弟表示法思想的樹結構;而在這個數結構的基礎上,將前驅的指向解釋為左孩子、后驅的指向解釋為右孩子,則就將剛剛的樹結構轉化為二叉樹的結構進行表示;
理解第一宏

進程/線程創建及其線程模型

為什么引入線程
  • 線程具有許多進程所具有的特征,所以線程又被稱為“輕量級進程”,所以線程的引入必然和進程脫不開干系,于是從線程與進程入手,理解一下,引入線程的原因:
  • 直接動機:
  • 減少進程切換操作時的較大時空開銷:由于進程是資源的擁有者,所以在創建、撤銷、切換操作中需要較大的時空開銷,限制了并發成都的進一步提高。為了減少進程切換的開銷,運用分治(分而治之)的思想,把進程作為資源分配單位和調度單位這兩個屬性分開處理,即進程還作為資源分配的單位,但是不作為調度的基本單位,把調度執行與切換的責任交出去,重新設定一個來完成調度執行和切換,此時就出現了“線程”來承擔這項任務。打個比方,公司(操作系統)最開始各個部門的人手都不是很多,可能有一個人身兼雙職(進程兩大基本屬性)的情況,但是這時公司發現這樣不行,要把工作按照類別分開(分治思想),各自負責各自的項目,才能提高公司辦事效率,于是就告訴身兼兩職的可以自己進行招納助手,替自己分擔任務,于是助手(線程)的出現提高了各項的效率。
  • 增加并發度:舉個例子來說,QQ可以視頻通話,在視頻通話同時,還能進行文字聊天,同時還能傳送文件。但是進程是程序的一次執行,顯然,QQ可以同時進行的這些功能并非由一個程序順序處理就能實現。所以說,有的進程是需要“同時”處理很多事情的,但傳統的進程只能串行地執行一系列程序,基于此,就引入了線程,來增加并發度。
  • 線程自身的優勢:
  • 占用較少的系統資源, 線程的創建、撤銷和切換花費的時空間開銷都小,尤其是在切換方面,傳統的進程間并發,需要切換進程的運行環境,系統開銷很大,但是線程間并發的話,如果是同一進程內的線程切換,則不需要切換進程環境,系統開銷小;
  • 提高了并發度:傳統進程機制中,只能進程之間并發,但是引入線程后,各線程間也能并發,這就提高了并發度;
  • 提高了性能、效率和響應度:同一進程內的線程共享內存和文件, 它們之間相互通信無需調用內核, 效率高。如果對一個交互程序采用多線程,那么即使其部分阻塞或執行較冗長的操作,該程序仍能繼續運行,從而增加了對用戶的響應程度。例如,多線程web瀏覽器在用一個線程裝入圖像時,能通過另一個線程與用戶交互。
  • 使多處理機效率更高:在多處理機系統中,傳統的單線程進程,不管有多少處理機,該進程只能運行在一個處理機上,但是有了線程之后,有了多線程進程,就可以將一個進程中的多個線程分配到多個處理機上,使它們并行執行,由此加速了進程的完成。打個比方,以前為公司出差只有這個一個人(單線程進程),那就只能一次去一個地方出差(一臺處理機),但是當他有了助手(線程)之后,他就可以將任務分配開,各個出差的地點都可以去,各地的出差任務也可以同時進行(多處理機),必然加速了任務的完成。
  • 改善了程序的結構。
為什么說線程只擁有棧和少量寄存器,其他資源都共享進程的資源
  • 因為線程又稱為“輕量進程”,為了實現線程的高效性,線程本身并不能攜帶太多的信息,不然就會像進程一樣,速度變慢,所以線程只擁有少量屬于自己的資源,比如線程會私有程序計數器,用來記錄接著要執行哪一條指令;線程還私有寄存器,用來保存線程當前正在使用的變量;線程還會有堆棧,用來記錄程序的執行路徑。這些資源和信息就是進程與線程以及線程之間區分以及運作運行的區別,是線程不可缺少的東西。
  • 共享的資源:地址空間、全局變量、打開的文件、子進程、即將發生的定時器、信號與信號處理程序、賬戶信息等;
  • 父親安排10個孩子干活,整體來說各司其職,會提高干活的效率,同樣的,多線程也提高了效率和資源利用率。但是就像10個孩子如果需要同時用到某個工具所以產生沖突一樣,因為線程和線程之間的資源使用是共享的,多線程間也有可能產生對資源的爭奪與沖突,就需要有合理的分配和調度,或者說在需要資源時進行搶占以及優先排序使用,所以若有10個線程,每個線程在系統調度執行時間上占用的時間片都是1;線程自己基本上不擁有系統資源,所以它不是資源分配的基本單位,它只擁有一部分在運行中必不可少的與處理機相關的資源;就像十個孩子都想要得到父親僅有的一份零花錢,我們必須通過自己想使用零花錢原因的合理性、優先性,以及搶占的方式獲取父親僅有的零花錢,而當搶到零花錢時,會用最快的速度完成自己的事情,因為自己使用完后,別的孩子還要進行搶占使用。
  • 用戶級線程和內核級線程的區別和聯系(Linux角度)
  • 用戶級線程和內核級線程:
  • 用戶級線程僅存在于用戶級中,由應用程序通過線程庫完成所有線程的管理,用戶級線程的創建、撤消和調度不需要OS內核的支持,是在語言(如Java)這一級處理的,內核不知道線程的存在,線程切換也不需要內核特權。內核管理含線程的進程的活動,但不管理線程。而內核級線程所有的線程管理由內核完成,內核維護進程和線程的上下文,線程之間的切換需要內核支持。
  • 用戶級線程執行系統調用指令時將導致其所屬進程被中斷,內核級線程執行系統調用指令時,只導致該線程被中斷,不會影響該進程內的其他線程。
  • 用戶級線程的程序實體是運行在用戶態下的程序,而內核級線程的程序實體則是可以運行在任何狀態下的程序。
  • 在只有用戶級線程的系統內,CPU調度還是以進程為單位,處于運行狀態的進程中的多個線程,由用戶程序控制線程的輪換運行;在內核級線程的系統內,CPU調度則以線程為單位,由OS的線程調度程序負責線程的調度。
  • 進程和線程:
  • 線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位;一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線;進程之間相互獨立,某進程內的線程在其他進程不可見;從調度和切換角度來說,線程上下文切換比進程上下文切換要快得多。
  • 線程運行在進程空間內,同一進程所產生的線程共享同一內存空間,當進程退出時該進程所產生的線程都會被強制退出并清除。線程可與屬于同一進程的其它線程共享進程所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在運行中必不可少的信息(如程序計數器、一組寄存器和棧)一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。線程是操作系統可識別的最小執行和調度單位;資源分配給進程,同一進程的所有線程共享該進程的所有資源。 同一進程中的多個線程共享代碼段,數據段,擴展段。但是每個線程擁有自己的棧段,棧段又叫運行時段,用來存放所有局部變量和臨時變量;處理機分給線程,即真正在處理機上運行的是線程;線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
  • 進程和線程到底共享哪些資源,哪些不能共享
    • 共享:地址空間、全局變量、打開的文件、子進程、即將發生的定時器、信號與信號處理程序、賬戶信息、文件描述符表等;
    • 不共享:線程的程序計數器、寄存器、堆棧、狀態,進程中的信號屏蔽字等。

    線程共享變量+1操作

    展示代碼和有出錯的運行結果

    展示原子操作的相關代碼和結果

    展示加鎖操作的相關代碼和結果

    進程同步

    什么是進程同步,為什么要引入進程同步
  • 我們先了解一下同步關系,是多個并發進程(線程)協同完成一項任務時,由于數據交換需要而在進程(線程)執行次序上的的約束關系,也可以稱作合作關系,進程同步就是多個并發進程協同完成一項任務時,由于數據交換需要而在進程執行次序上具有約束關系。這種多個相關進程在“執行次序上的協調”稱為進程同步。用于保證多個進程在執行次序上的協調關系的相應機制稱為進程同步機制。
  • 原因:
  • 進程具有異步性,即各個并發執行的進程以各自獨立的、不可預知的速度向前推進,操作執行的先后順序是不確定的。就好比以管道通信為例,它需要寫進程先將數據寫進管道內,寫滿后,再由讀進程讀出數據。讀進程和寫進程并發執行,由于并發必然導致異步性,因此“寫數據”和“讀數據”兩個操作執行的先后順序是不確定的。但是實際應用的時候,又必須按照“寫->讀”的順序來執行。那么如何解決這種問題,就引入了進程同步,即為完成某種任務而建立的兩個或多個進程,因為需要在某些位置上協調它們的工作次序而產生制約關系。
  • 進程同步機制,可以對多個相關進程在執行次序上進行調整,使并發執行的諸進程之間能按照一定規則或時序共享系統資源,并很好地相互合作,從而使程序的執行具有可再現性。
  • 同步機制應該遵循的原則
    • 同步機制應遵循原則:空閑讓進,忙則等待,有限等待,讓權等待;
    • 空閑讓進:當進程處于臨界區時,表明臨界資源處于空閑狀態,應允許一個請求進入臨界區的進程立即進入自己臨界區,以有效地利用臨界資源;
    • 忙則等待:當已有進程進入臨界區時,表名臨界資源正在被訪問,因此其他試圖進入臨界區的進程必須等待,以保證對臨界資源的互斥訪問;
    • 有限等待:對要求訪問臨界資源的進程,應保證在有效時間內能進入到自己的臨界區,以免造成“死等”狀態;
    • 讓權等待:當進程不能進入自己的臨界區時,應立即釋放處理機,以免進程陷入“忙等”狀態;
    • 舉一個簡單的例子:假如說今晚是平安夜,很多人都和家人情侶小伙伴出去吃火鍋了。但是火鍋店的位子是有限的,你要想執意在這兒吃,你就得排隊等候。當一個桌的顧客吃完離開,就空出了位置,此時,排隊最前面的就能進去用餐,也就是“空閑讓進”;這個人和他的小伙伴占了那個位置,然后火鍋店的位置又滿了,其他人還是得繼續等待,這就是“忙則等待”;但是排隊的人等待也不是永遠的等待,他肯定會在有限的時間內等到的,不可能讓人家永遠餓下去啊,這就是“有限等待”;但是你突然發現你沒帶錢也沒帶手機,你等也是白等,就算排到了你沒帶錢也沒辦法去吃火鍋啊,那么就得及時退出,不要白費時間,白占位置,這就是“讓權等待”。
    什么是信號量,為什么引入信號量機制
  • 信號量:信號量就是OS提供的管理公有資源的有效手段,是在多線程環境下使用的一種設施,本質上是一個變量(可以是一個整數,也可以是更加復雜的記錄型變量),可以用信號量來表示資源的數量。用戶編程的時候可以直接調用,不必自己設計。目的是為了實現進程間的同步和互斥。主要是實現進程間的同步。
  • 引入原因:單純的信號固然可以解決很多問題,等待信號(睡眠)以及發信號(喚醒),但是真正地實際需求還需要能記錄一些信息,比如多個進程的問題,信號是不能記錄有多個進程等待的,所以就引入了信號量,來記錄幾個進程在等待、有多少可用資源,以及當進行某操作后,還有多少等待的進程和可用的資源。這樣的話,也就很便捷而有效地實現了對進程同步的監控。
  • 例如:現在各種大型商場都有地下或者頂層停車場。停車場外除了顯示有沒有車位,還要顯示剩余車位的多少。這就是一個從信號到信號量的過程。假設現在只顯示有沒有車位不顯示剩余車位的數量,那么在只剩一個車位的情況下,很多車駛入了停車場卻發現并不能停車,這對他們來說是一種時間上的浪費。但是如果能夠時刻更新剩余車位的數量,當司機在停車場外發現沒有車位,他就不會再進入停車場。信號量使監控變的更加便捷高效。
  • 給出記錄型信號量wait()和signal()操作的實現代碼

    用wait()signal()實現司機和售票員的同步

    總結

    以上是生活随笔為你收集整理的【操作系统】第二章--进程的描述与控制--深入与解释(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。