【Linux】進程2——管理概念,進程概念

1.什么是管理?

那在還沒有學習進程之前,就問大家,操作系統是怎么管理進行進程管理的呢?

很簡單,先把進程描述起來,再把進程組織起來!

我們拿大學為例子

  • 最典型的管理者——校長
  • 最典型的被管理者——學生

1.我們平時見得到校長嗎?見不到——管理者和被管理者是不需要見面的

2. 這個就引出一個新的問題,管理者在不見被管理者的情況下,如何做好的管理?

  • 我們在學校就清楚,我們考試考了多少分,曠了多少節課,個人信息,校長想看都能看到
  • 就算校長來見我們,也是為了獲取我們更多的信息
  • 所以只要校長有足夠多的我們的信息,不見面都可以對我們進行有效的管理
  • 管理的本質就是:通過對數據的管理,達到對人的管理

3.管理者和被管理者面都不見,管理者怎么拿到被管理者的數據呢?

  • ?我們還是拿校長和學生為例
  • 校長是通過老師,輔導員來獲取學生的數據

4.拿老師和輔導員是不是管理者?

  • 不是,因為老師和輔導員只是在執行他們該做的東西,所以他們不是真正的管理者
  • 他們更多的是執行者
  • 校長相當于操作系統,老師,輔導員相當于驅動程序,學生相當于被管理的軟硬件資源
  • 這樣子就理解了操作系統怎么管理底層的軟硬件資源了

5.操作系統怎么管理軟硬件資源?——先描述,后組織

  • 操作系統只需要獲取對應的軟硬件資源的狀態數據即可,獲取狀態數據的這個過程是通過驅動程序來執行的
  • 雖然每個學生的信息都不同,但是他們都有下面這些屬性——電話,姓名,身高,體重,成績,籍貫......
  • 校長可以通過一個結構體來記錄這些屬性,這樣子學生的屬性不就被描述起來了嗎!!!——這個有點像面向對象編程里的抽象啊
  • struct student
    {
    char name[20];
    int number[20];
    ...
    struct student*next;
    };

  • 這樣子我們就可以使用一個結構體對象來記錄一個學生的信息,每個學生都帶有一個指向下一個學生的結構體指針,這樣子就很好管理了
  • 這樣子校長對學生的管理工作就變成了對鏈表的增刪查改
  • 校長找成績最高的同學,只需要不斷遍歷鏈表即可
  • 上面這個把學生描述成結構體的過程叫做描述的過程
  • 將每個學生結構體通過結構體指針鏈接成一條鏈表的過程叫做組織的過程

我們的軟硬件資源被操作系統管理,操作系統通過軟硬件的數據對它進行管理,可是軟硬件資源的數據太大,那么操作系統很難做管理

但是每一種設備都有共同的屬性,我們描述清楚設備的屬性,然后通過一定方法組織起來

這樣子,操作系統對軟硬件的管理就變成了對數據結構的管理?

管理的核心理念

  1. 操作系統管理軟硬件資源時,必須先描述起來,再組織?
  2. 在操作系統中,我們管理對象,最終都可以轉變為對某種數據結構的增刪查改——這個一般叫建模
  3. 描述事物的方法:c語言的struct,c++的類等

    組織方式:依賴于某種數據結構

這個咋這么像面向對象編程的抽象!!!c++的類,STL容器!!!這個直接給了我們提供了這樣一種描述事物的方式,這樣子就能完成對事物的統一管理

理解了管理的概念,我們就會知道

  • 操作系統中注定存在大量的數據結構

linux操作系統是c語言寫的,c語言只能用結構體來描述對象,所以linux只能用struct來描述對象?

2.c/c++庫函數調用和系統調用的關系

?我們用c語言編寫了一個程序,在屏幕打印一個hello world,但是在但是屏幕是硬件,硬件是受操作系統管理,操作系統不信息任何人,所以操作系統肯定封裝了一個c語言函數調用接口

所以他們是上下層的調用和被調用的關系,庫函數在上,系統調用在下

3.進程

  1. 進程:一個已經加載到內存的程序
  2. 進程:正在運行的程序
  3. 進程:任務

?我們可以查看linux的進程

widows里面也有進程

事實上

進程就是內核PCB數據結構對象+你自己的代碼和數據?

3.1.PCB?

我們知道一個操作系統可以同時進行多個進程

?

程序要運行的話,就得先把相關數據加載到內存中,等待cpu運行產生進程,那么加載進內存該如何管理呢?操作系統需要直接面向加載到內存中的代碼嘛?

答案是不需要。

我們可以先把進程類比上面的學生,先描述進程,再把它們組織起來

任何一個進程,在加載到內存的時候,形成真正的進程的時候,操作系統,要先創建描述進程的結構體對象——PCB(process control block),也就是進程控制塊

3.1.1.理解PCB的本質

?人是怎么樣辨別認識一個事物或者對象?

  • 都是通過屬性認識的

舉個例子,叫你自我介紹,你基本都是在講你的屬性——名字,興趣,才能,成就,籍貫等等

當屬性的集合夠多的時候,你就能知道這個對應的是什么了

比如,它是一個人,他是中國最頂級的動作明星,他是男生,他演過《十二生肖》

我們就很容易得知這個人就是成龍

同樣的我們描述進程,就是把進程足夠多的屬性描述起來,多到只有一個進程與之匹配,那么我們就能將這堆足夠多的屬性集合來描述進程,這個集合就是PCB,linux操作系統是c語言寫的,c語言只能用結構體來描述對象,所以linux只能用struct來描述對象,所以PCB就是一個結構體

這個也是面向對象編程的核心理念

3.1.2.PCB的歷程/作用

  1. 進程創建時,操作系統先為它新建一個PCB,該結構之后常駐內存,任意時刻都可以存取,并在進程結束時刪除。PCB是進程實體的一部分,是進程存在的唯一標志。
  2. 進程執行時,系統通過其 PCB 了解進程的現行狀態信息,以便操作系統對其進行控制和管理;進程結束時,系統收回其PCB,該進程隨之消亡。

3.在進程的整個生命期中,系統總是通過PCB對進程進行控制的,亦即系統唯有通過進程的PCB才能感知到該進程的存在。

  • 當操作系統欲調度某進程運行時,要從該進程的 PCB 中查出其現行狀態及優先級;
  • 在調度到某進程后,要根據其PCB 中所保存的處理機狀態信息,設置該進程恢復運行的現場,并根據其PCB中的程序和數據的內存始址,找到其程序和數據;
  • 進程在運行過程中,當需要和與之合作的進程實現同步、通信或訪問文件時,也需要訪問 PCB;
  • 當進程由于某種原因而暫停運行時,又需將其斷點的處理機環境保存在PCB中。

?

3.2.PCB的組織方式

在一個系統中,通常存在著許多進程的PCB,有的處于就緒態,有的處于阻塞態,而且阻塞的原因各不相同。操作系統怎么管理這么多進程呢?

為了方便進程的調度和管理,需要將各進程的PCB用適當的方法組織起來。

這樣子對進程的管理就變成了對數據結構的增刪查改

目前有下面幾種組織方式

  • 1.線性表方式:不論進程的狀態如何,將所有的PCB連續地存放在內存的系統區。這種方式適用于系統中進程數目不多的情況,不適合頻繁的進程調度
  • 2.索引表方式:該方式是線性表方式的改進,系統按照進程的狀態分別建立就緒索引表、阻塞索引表等。其中進程阻塞可能由于I/O請求、申請緩沖區失敗、等待解鎖、獲取數據失敗等原因造成,將其組成一張表忽略了進程的優先級,不利于進程的喚醒。

  • 3.鏈接表方式:系統按照進程的狀態將進程的PCB組成隊列,從而形成就緒隊列、阻塞隊列、運行隊列等。

3.3程序段

程序段就是能被進程調度程序調度到CPU執行的程序代碼段。

3.4數據段

一個進程的數據段,可以是進程對應程序加工處理的原始數據,也可以是程序執行時候產生的中間或最終結果。

?4.Linux是怎么取管理進程的?

  • 課本上稱之為PCB(process control block),Linux操作系統下的PCB是:?task_struct?。
  • task_struct是Linux內核的一種數據結構,它會被裝載到RAM(內存)?里并且包含著進程的信息。

4.1.task_ struct內容分類

實際上這個結構體的成員非常多,我們只列舉最主要的

  1. 標示符: 描述本進程的唯一標示符,用來區別其他進程。
  2. 狀態: 任務狀態,退出代碼,退出信號等。
  3. 優先級: 相對于其他進程的優先級。
  4. 程序計數器: 程序中即將被執行的下一條指令的地址。
  5. 內存指針: 包括程序代碼和進程相關數據的指針,還有和其他進程共享的內存塊的指針
  6. 上下文數據: 進程執行時處理器的寄存器中的數據[休學例子,要加圖CPU,寄存器]。
  7. I/O狀態信息: 包括顯示的I/O請求,分配給進程的I/O設備和被進程使用的文件列表。
  8. 記賬信息: 可能包括處理器時間總和,使用的時鐘數總和,時間限制,記賬號等。
  9. 其他信息

4.3.組織進程

可以在內核源代碼里找到它。

所有運行在系統里的進程都以task_struct雙向鏈表的形式存在內核里。

4.4.查看進程

(1)進程信息可以通過 /porc系統文件夾查看,具體查看那個進程,需要得知其標識符(PID)。

看到以下有很多的數字還是藍標的,數字就是PID,藍標說明這是個目錄,

?比如接下來我想看看PID為1的進程信息。

這個信息查看的不夠詳細,所以可以帶上 -l選項查看詳細信息?

(2)用ps工具來查看

關于ps工具,咱們只需要記住,只查看自己的bash進程選項為?-l,查看系統所有運行的進程選項為aux,這個不加-

這里可以看到,標識符PID展示出來了,還有一個PPID,這是父進程的PID,我們驚奇的發現,下面的ps指令的PPID是上面bash的PID。

命令行上的命令的父進程基本上都是bash。?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24029.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

來自工業界的知識庫 RAG 服務(三),FinGLM 競賽獲獎項目詳解

背景介紹 前面介紹過工業界的 RAG 服務 QAnything 和 RagFlow 的詳細設計,也介紹過來自學術界的 一些優化手段。 前一陣子剛好看到智譜組織的一個金融大模型比賽 FinGLM,主要做就是 RAG 服務的競賽,深入研究了其中的幾個獲獎作品&#xff…

Pyramid Vision Transformer, PVT(ICCV 2021)原理與代碼解讀

paper:Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions official implementation:GitHub - whai362/PVT: Official implementation of PVT series 存在的問題 現有的 Vision Transformer (ViT) 主要設計…

C++結合ffmpeg獲取聲音的分貝值

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、分貝是什么?1.功率量2.場量 二、實際操作1.分析wav文件2.讀取麥克風 總結 前言 最近面對一個需求,就是需要傳遞聲音文件到模型里推…

鏈表的回文結構OJ

鏈表的回文結構_牛客題霸_牛客網對于一個鏈表,請設計一個時間復雜度為O(n),額外空間復雜度為O(1)的算法,判斷其是否為。題目來自【牛客題霸】https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?tpId49&&tqId29370&rp1&a…

CodeMeter助力Hilscher,推動實現全球智能制造連接解決方案

Hilscher的旗艦店為開放工業4.0聯盟(OI4)社區提供了應用商店的便捷和開放性,將這一概念引入工業領域。該商店依托CodeMeter的許可證管理和加密保護,為工業用戶提供了豐富的應用和解決方案庫,滿足他們在車間自動化和連接…

2020年06月C語言二級真題

計算矩陣邊緣元素之和 題目描述 輸入一個整數矩陣,計算位于矩陣邊緣的元素之和。 所謂矩陣邊緣的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。 輸入格式 第一行分別為矩陣的行數n和列數m,兩者之間以一個空格分開。 接下來輸…

WPF中讀取Excel文件的內容

演示效果 實現方案 1.首先導入需要的Dll(這部分可能需要你自己搜一下) Epplus.dll Excel.dll ICSharpCode.SharpZipLib.dll 2.在你的解決方案的的依賴項->添加引用->瀏覽->選擇1中的這幾個Dll點擊確定。(添加依賴) 3.然后看代碼內容 附上源碼 using Excel; usi…

計網復習資料

一、選擇題(每題2分,共40分) 1. Internet 網絡本質上屬于( )網絡。 A.電路交換 B.報文交換 C.分組交換 D.虛電路 2.在 OSI 參考模型中,自下而上第一個提供端到端服務的是( )。 A.數據鏈路層 B.傳輸…

Thinkphp使用Elasticsearch查詢

在Thinkphp中調用ES,如果自己手寫json格式的query肯定是很麻煩的。我這里使用的是ONGR ElasticsearchDSL 構建 ES 查詢。ongr ElasticsearchDSL 的開源項目地址:GitHub - ongr-io/ElasticsearchDSL: Query DSL library for Elasticsearch。ONGR Elastics…

100V 15A TO-252 N溝道MOS管 HC070N10L 惠海

MOS管的工作原理是基于在P型半導體與N型半導體之間形成的PN結,通過改變柵極電壓來調整溝道內載流子的數量,從而改變溝道電阻和源極與漏極之間的電流大小。由于MOS管具有輸入電阻高、噪聲小、功耗低等優點,它們在大規模和超大規模集成電路中得…

package.json中resolutions的使用場景

文章目錄 用途配置示例使用方法注意事項和peerDependencies有什么不同peerDependenciesresolutions 總結 ?創作者:全棧弄潮兒 🏡 個人主頁: 全棧弄潮兒的個人主頁 🏙? 個人社區,歡迎你的加入:全棧弄潮兒的…

git【工具軟件】分布式版本控制工具軟件

一、Git 的介紹 git軟件的作用:管理軟件開發項目中的源代碼文件。 常用功能: 倉庫管理、文件管理、分支管理、標簽管理、遠程操作 功能指令: add,commit,log,branch,tag,remote…

Ubuntu Linux LTS 24.04 AMD64 桌面版安裝記錄

下載iso aria2c -x 4 -s 12 "https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.163.com/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso" "https://mirrors.zju.edu.cn/ubuntu…

[pyradiomics][python]pyradiomics所有whl文件下載地址匯總

源碼地址:https://github.com/AIM-Harvard/pyradiomics pyradiomics是一個開源的Python軟件包,專門用于從醫學影像中提取高通量的定量特征,這些特征被稱為影像組學(Radiomics)特征。以下是關于pyradiomics的詳細介紹: 一、基本概…

華為端云一體化開發 (起步1.0)(HarmonyOS學習第七課)

官方文獻: 為豐富HarmonyOS對云端開發的支持、實現端云聯動,DevEco Studio推出了云開發功能,開發者在創建工程時選擇云開發模板,即可在DevEco Studio內同時完成HarmonyOS應用/元服務的端側與云側開發,體驗端云一體化協…

大數據面試題第二期*6

題1、Namenode掛了怎么辦? 方法一:將SecondaryNameNode中數據拷貝到namenode存儲數據的目錄。 方法二:使用importCheckpoint選項啟動namenode守護進程,從而將SecondaryNameNode中數據拷貝到namenode目錄中。 題2、Hadoop 的namenode 宕機怎么…

論文代碼解讀STPGNN

1.前言 本次代碼文章來自于《2024-AAAI-Spatio-Temporal Pivotal Graph Neural Networks for Traffic Flow Forecasting》,基本模型結構如下圖所示: 文章講解視頻鏈接 代碼開源鏈接 接下來就開始代碼解讀了。 2.代碼解讀 class nconv(nn.Module):de…

NDIS Filter開發-網絡數據的傳輸

和NIC小端口驅動不同的是,無需考慮網絡數據具體是如何傳輸的,只需要針對NBL進行處理即可。Filter驅動程序可以啟動發送請求和接收指示,或“過濾”其他驅動程序的請求和指示。Filter模塊堆疊在微型端口適配器上。 驅動程序堆棧中的Filter模塊…

谷粒商城實戰(033 業務-秒殺功能4-高并發問題解決方案sentinel 1)

Java項目《谷粒商城》架構師級Java項目實戰,對標阿里P6-P7,全網最強 總時長 104:45:00 共408P 此文章包含第326p-第p331的內容 關注的問題 sentinel(哨兵) sentinel來實現熔斷、降級、限流等操作 騰訊開源的tendis&#xff0c…

ctfshow web

【nl】難了 <?php show_source(__FILE__); error_reporting(0); if(strlen($_GET[1])<4){echo shell_exec($_GET[1]); } else{echo "hack!!!"; } ?> //by Firebasky //by Firebasky ?1>nl //先寫個文件 ?1*>b //這樣子會把所有文件名寫在b里…