国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux從入門到精通】進程的基本概念

這篇具有很好參考價值的文章主要介紹了【Linux從入門到精通】進程的基本概念。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?【Linux從入門到精通】進程的基本概念

? 我們通過對上篇文章馮諾依曼體系結(jié)構(gòu)對硬件進行講解后, 本篇文章會對進程進行深入講解。同時會講解PCB(進程控制塊)。希望本篇文章內(nèi)容會對你有所幫助。

文章目錄

一、再次理解操作系統(tǒng)

1、1 操作系統(tǒng)的作用

1、2 操作系統(tǒng)的管理

二、進程基本的概念

2、1 什么是進程

2、2 進程控制塊 PCB

2、3?查看Linux上的進程

2、4 再次理解進程?

2、5?task_struct內(nèi)容分類

2、5、1 進程標識符 PID

2、5、2 退出碼

三、總結(jié)?


???♂??作者:@Ggggggtm????♂?

???專欄:Linux從入門到精通???

???標題:進程的基本概念 ??

????寄語:與其忙著訴苦,不如低頭趕路,奮路前行,終將遇到一番好風景???

【Linux從入門到精通】進程的基本概念

一、再次理解操作系統(tǒng)

? 在學習進程之前,我們先來理解一下操作系統(tǒng)。我們學習完馮諾依曼體系結(jié)構(gòu)后,知道計算機是由一個個硬件組成的。只有一堆硬件,計算機可以運行起來嗎?答案是不可能的。還需要結(jié)合軟件才能運行起來。例如最重要的軟件:操作系統(tǒng)。

? 前面的文章中我們提到,操作系統(tǒng)是一款管理軟硬件的軟件。我們這里就有很多問題:操作系統(tǒng)是管理哪些軟硬件呢?操作系統(tǒng)為什么要管理呢?操作系統(tǒng)是怎么進行管理的呢?我們接著往下看。

1、1 操作系統(tǒng)的作用

? 我們先來看一張圖:

【Linux從入門到精通】進程的基本概念

? 我們用戶是不會直接跟底層的硬件打交道的。首先,新手用戶不懂底層硬件的使用。其次,底層硬件學習起來成本太高。我們所使用的都是可視化界面,一個個軟件。而軟件是怎么跟底層的硬件打交道的呢?原因是中間有一個操作系統(tǒng)。

? 通過上圖我們看到,我們作為用戶都是在向計算機使用簡單操作或發(fā)送許多指令,達到我們使用計算機的目的。而我們的每個操作是要貫穿操作系統(tǒng),操作系統(tǒng)經(jīng)過一系列操作將我們的指令“翻譯”成底層硬件認識的指令,進而送達硬件部分。從這里我們了解到,操作系統(tǒng)有連接上層用戶軟件和下層驅(qū)動和硬件的作用。

? 一個個硬件放在那里是不能運行起來的,他們之間需要產(chǎn)生聯(lián)系。操作系統(tǒng)就是對下要管理好各種驅(qū)動程序和各個硬件資源,為上層的軟件提供一個良好的運行環(huán)境。

1、2 操作系統(tǒng)的管理

? 在上節(jié)圖片中看到,操作系統(tǒng)的主要的四個功能:內(nèi)存管理、進程管理文件管理、驅(qū)動管理。我們發(fā)現(xiàn),操作系統(tǒng)主要就是進行管理的。那到底是怎么管理的呢

? 在這里舉一個例子:學校管理學生。當一個學校只有幾個學生時,那這個學校管理起來就很容易,并且可以很容易的記住這幾個學生的所有信息。當學校有幾千名甚至上萬名學生時,管理起來似乎就并沒有那么容易。為了更好的管理學生呢,學校會將所有學生的各種信息、屬性統(tǒng)計起來,放在一張表格中。當需要看某個學生的成績時,直接通過該同學的信息屬性直接篩查出來即可。我們發(fā)現(xiàn)這樣管理似乎就簡單起來了。

? 操作系統(tǒng)的管理也正是如此。對比上述的例子,我們知道操作系統(tǒng)中軟硬件資源多而復(fù)雜(學生很多),為了更好的管理這些軟硬件資源,可以將這些軟硬件資源進行描述(學生入學填寫各種屬性、信息),通過各種高效的數(shù)據(jù)結(jié)構(gòu)將他們組織起來(放到一張表格中,需要時可通過篩查直接找到)。

? 通過上面的描述,我們總結(jié)管理其實就是先描述,后組織。這里我們再引入進程。那操作系統(tǒng)是怎么對進程進行管理的呢?我們可以直接理解操作系統(tǒng)是對進程先進行描述,再把進程組織起來。我們接下來進入我們主題:進程。

二、進程基本的概念

2、1 什么是進程

? 我們在自己電腦上任務(wù)管理器下就可以查看進程,如下圖:

【Linux從入門到精通】進程的基本概念

? 那到底什么是進程呢?

? 我們在很多地方可能看到:加載到內(nèi)存中的程序,就是進程。這種概念是正確的嗎?我們不妨先接著往下探索一下。

2、2 進程控制塊 PCB

? 在學習進程中,我們都知道每個進程都會有一個PCB。為什么呢?PCB又是什么呢?

? 我們上述提到了,操作系統(tǒng)對進程的管理就是先描述,后組織。怎么對進程進行描述的呢?答案就是:進程控制塊PCB是對進程描述的一個結(jié)構(gòu)體。這里我們知道了PCB是用來描述進程的一個結(jié)構(gòu)體。是為了我們后面對進程更好的組織和管理。

? 在Linux下描述進程的PCB是task_struct。有很多同學會在這里有點搞不清楚了。PCB和task_struct到底是什么關(guān)系呢?這里給大家舉一個例子:在現(xiàn)實生活中,我們都知道相親都靠媒婆。你可能也認識幾個媒婆,例如你的鄰居王阿姨就是媒婆,我們也叫她為王婆。媒婆是一個統(tǒng)稱,王婆就是媒婆中的一個具體的人。同樣,PCB是進程控制塊的統(tǒng)稱,task_struct就是PCB中的具體的一種進程控制塊。我們知道PCB是描述進程的一個結(jié)構(gòu)體,

那么這個結(jié)構(gòu)體中都有進程的哪些屬性呢?我們接著往下看。

2、3?查看Linux上的進程

? 我們在上面了解到進程后,我們不妨在Linux下查看一下進程。我們先在Linxu下寫一個C語言代碼,代碼如下:

  #include<stdio.h>                                                                                                                                            
      
  int main()    
  {    
      
    while(1)    
    {    
      sleep(1);    
      
      printf("hello OS,pid";    
    }                                                                                    
    return 0;                                                                            
  }

? 我們寫的是一段無限循環(huán)的代碼。是為了我們后面可以更好的觀察進程。我們編譯生成 myporc可執(zhí)行程序查看進程的指令是:ps axj | head -1 && ps axj | grep "proc"。我們可看下圖一起理解:

【Linux從入門到精通】進程的基本概念

?當我們結(jié)束程序后,我們就會發(fā)現(xiàn)進程中就不再有該程序,如下圖:

【Linux從入門到精通】進程的基本概念

? ?我們曾經(jīng)所有運行創(chuàng)建的程序,本質(zhì)上都是在內(nèi)村上創(chuàng)建進程。

2、4 再次理解進程?

? 問題回溯:加載到內(nèi)存中的程序,就是進程嗎?

? 這里舉個例子:在清華大學里面的學生就算是清華大學的學生嗎?你可能會說是的。那么問題來了。我現(xiàn)在確實是一個河北省的大學生,我現(xiàn)在坐個火車來到清華了,我就是清華的學生了嗎?想得美ovo!是清華的學生就應(yīng)該有清華的學生證。

? 加載到內(nèi)存中的程序也是一樣,程序確實是程序,但不能稱它為進程。我們上面學到了為更好的控制進程,我們還有PCB來描述進程。加載到內(nèi)存中的程序,就是進程這個說法并不準確。我們目前可理解進程=程序文件內(nèi)容+維護進程相關(guān)的數(shù)據(jù)結(jié)構(gòu)。我們可結(jié)合下圖理解:

【Linux從入門到精通】進程的基本概念

? PCB就是操作系統(tǒng)給每個進程提供的。在Linux上就會自動創(chuàng)建出struct task_struct{} 結(jié)構(gòu)體。task_struct就會包含了進程的所有屬性和信息。

? 有同學就會有所疑惑:操作系統(tǒng)到底在哪里呢?注意:操作系統(tǒng)也是一款軟件。當我們開機時,我們相當于就是啟動了操作系統(tǒng)這款軟件,相關(guān)內(nèi)容數(shù)據(jù)就會加載到了內(nèi)存中。當然,操作系統(tǒng)也會有其對應(yīng)的PCB。只不過操作系統(tǒng)這款軟件的功能較為強大。

? 當有多個進程時,操作系統(tǒng)就會用搞笑的數(shù)據(jù)結(jié)構(gòu)將它們組織起來,以便后續(xù)的更好的管理。

? 當我們知道進程中還包含了task_struct后,CPU拿數(shù)據(jù)時,是直接找程序的內(nèi)容數(shù)據(jù),還是找task_struct呢??答案是找task_struct。我們看下圖:

?【Linux從入門到精通】進程的基本概念

? 如上,假如內(nèi)存中有6個進程。其中每個進程的PCB都有特殊的聯(lián)系,也就是操作系統(tǒng)見他們組織起來了。CPU拿數(shù)據(jù)時,會直接找對應(yīng)進程task_struct,這樣會更加高效。為什么呢?因為task_struct中包含了指向內(nèi)容數(shù)據(jù)的指針,找到了進程對應(yīng)的task_struct就可以找到對應(yīng)的內(nèi)容數(shù)據(jù)!到這里我們知道了PCB中包含了對應(yīng)的內(nèi)容數(shù)據(jù)指針。還有呢?

2、5?task_struct內(nèi)容分類

? task_struct中包含的內(nèi)容很多,在這里給大家列出主要的內(nèi)容:

  • 標示符: 描述本進程的唯一標示符,用來區(qū)別其他進程。
  • 狀態(tài): 任務(wù)狀態(tài),退出代碼,退出信號等。
  • 優(yōu)先級: 相對于其他進程的優(yōu)先級。
  • 程序計數(shù)器: 程序中即將被執(zhí)行的下一條指令的地址。
  • 內(nèi)存指針: 包括程序代碼和進程相關(guān)數(shù)據(jù)的指針,還有和其他進程共享的內(nèi)存塊的指針。
  • 上下文數(shù)據(jù): 進程執(zhí)行時處理器的寄存器中的數(shù)據(jù)。
  • I/O狀態(tài)信息: 包括顯示的I/O請求,分配給進程的I/O設(shè)備和被進程使用的文件列表。
  • 記賬信息: 可能包括處理器時間總和,使用的時鐘數(shù)總和,時間限制,記賬號等。
  • 其他信息。
? 這里標識符下面會對齊詳解。狀態(tài)有運行狀態(tài),阻塞狀態(tài)等等。退出碼也會在下發(fā)進行詳解。程序計數(shù)器也就是PC指針,該指針存儲的是下條指令的地址。內(nèi)存指針我們上面提到了。上下文數(shù)據(jù)記賬信息會另寫一篇文章對其進行詳解,因為上下文數(shù)據(jù)相對復(fù)雜,也比較重要。I/O狀態(tài)信息我們可簡單理解為輸入輸出信息狀態(tài)及請求。注意:并不是你在控制I/O,也不是你所寫的代碼在控制I/O,而是進程在控制I/O。

2、5、1 進程標識符 PID

? 進程標識符PID就是唯一標示一個進程。我們這里有一個函數(shù)getpid()可以直接返回進程的PID,如下圖:

【Linux從入門到精通】進程的基本概念? 我們可結(jié)合下面例子一起理解一下。代碼如下:

#include<stdio.h>    
#include<sys/types.h>    
#include<unistd.h>    
    
int main()    
{    
    
  while(1)    
  {    
    sleep(1);    
    
    printf("hello OS,pid:%d\n",getpid());                                                                                                                    
  }                                                                                                                        
  return 0;                                                                                                                
}     

? 運行結(jié)果如下圖:【Linux從入門到精通】進程的基本概念

? 當然,我們也可通過此PID找到該進程,指令為:ps ajx | grep 16940。結(jié)果如下:

【Linux從入門到精通】進程的基本概念

? 我們也可通過 kill 指令來終止該進程,指令:kill -9 16940。結(jié)果如下圖:

【Linux從入門到精通】進程的基本概念

? 一個進程也是有父進程的,可通過getppid()函數(shù)獲得父進程的PPID。一般在命令行上運行的命令,其父進程基本上都為bash。

2、5、2 退出碼

? 你有沒有想過,在我們所寫的代碼中,為什么最后都會有一句 return 0呢?return 100 可以嗎?這里的 return 的數(shù)據(jù)就是我們程序結(jié)束的結(jié)束碼,查看結(jié)束嗎的指令為:echo $?。具體如下圖:

【Linux從入門到精通】進程的基本概念

? ?注意,echo $? 是指的最近一次的退出碼。又如下圖:

【Linux從入門到精通】進程的基本概念

三、總結(jié)?

? 本篇文章的內(nèi)容就講解到這里。我們來稍微總結(jié)一下:我們在講述進程之前,是學習了馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)管理,是我們理解起來進程更加容易。而不是突然蹦出來一個概念,顯得枯燥難理解。當然,進程中還有很多細節(jié),包括我們還沒有講解上下文數(shù)據(jù),后面都會給大家解釋。進程是一個十分重要的概念,對我們后面的學習也很重要,我們需要反復(fù)閱讀,查閱資料去理解進程概念。也希望本篇文章會對你有所幫助,讓你有所收獲。?文章來源地址http://www.zghlxwxcb.cn/news/detail-445507.html

到了這里,關(guān)于【Linux從入門到精通】進程的基本概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【Linux從入門到精通】進程的狀態(tài)

    【Linux從入門到精通】進程的狀態(tài)

    ?? ? 當我們了解到進程是什么東西后,我們再來看看進程都會有那些狀態(tài)。本篇文章會對進程的不同狀態(tài)進行詳解,希望會對你的理解有所幫助! 文章目錄 一、了解進程的不同狀態(tài) 二、詳解進程的不同狀態(tài) 2、1 R運行狀態(tài)(running) 2、1、1??運行態(tài)是指程序在運行嗎? 2、

    2024年02月07日
    瀏覽(23)
  • 【Linux從入門到放棄】進程概念、查看進程、創(chuàng)建進程

    【Linux從入門到放棄】進程概念、查看進程、創(chuàng)建進程

    ?????作者: @情話0.0 ??專欄:《Linux從入門到放棄》 ??個人簡介:一名雙非編程菜鳥,在這里分享自己的編程學習筆記,歡迎大家的指正與點贊,謝謝! ??那在還沒有學習進程之前,就問大家,操作系統(tǒng)是怎么管理進行進程管理的呢?很簡單,先把進程描述起來,再

    2024年02月12日
    瀏覽(24)
  • 【Linux從入門到精通】線程詳解(線程與進程區(qū)別)

    【Linux從入門到精通】線程詳解(線程與進程區(qū)別)

    ? ? 本篇文章主要 對線程的概念和線程的控制進行了講解 。其中我們再次對進程概念理解。同時 對比了進程和線程的區(qū)別 。希望本篇文章會對你有所幫助。? 文章目錄 一、線程概念 1、1 什么是線程 1、2?再次理解進程概念 1、3 輕量級進程 二、進程控制 2、1 創(chuàng)建線程?pt

    2024年02月07日
    瀏覽(25)
  • 【Linux】進程概念,輕松入門【上篇】

    【Linux】進程概念,輕松入門【上篇】

    目錄 一, 馮* 諾依曼體系結(jié)構(gòu) 1,存儲結(jié)構(gòu) ?編輯 二, 操作系統(tǒng)? 1,概念 2,設(shè)計OS的目的 3,定位 4,如何理解 \\\"管理\\\" 5, 總結(jié)? 三,進程 1. 概念 ?那么如何區(qū)分進程? 程序? 2. PCB —— 描述進程 3. 組織進程 補充: cwd ?4.? task_struct ——PCB ?(1)?PID——標識符 5.父子進程

    2024年02月13日
    瀏覽(37)
  • 【Linux從入門到精通】上下文概念詳解

    【Linux從入門到精通】上下文概念詳解

    ? ? 上篇文章(進程的基本概念)我們講解了進程后,還留下了一個上下文數(shù)據(jù)概念還沒有解釋。本篇文章會對上下文概念進行詳解。在理解上下文概念時,同時會引出很多新的概念。我們都會對此進行詳細解釋,希望本篇文章會對你有所幫助。? 文章目錄 ?一、什么是上下

    2024年02月05日
    瀏覽(16)
  • 【Linux從入門到精通】進程地址空間(虛擬地址 vs 物理地址)

    【Linux從入門到精通】進程地址空間(虛擬地址 vs 物理地址)

    ?? ? 本篇文章會圍繞 三個問題(什么是地址空間?地址空間是如何設(shè)計的?為什么要有地址空間?) 進行展開講述。其中主要是了解虛擬地址和物理地址的區(qū)別。希望本篇文章會對你有所幫助。 文章目錄 一、什么是地址空間? 1、1 驗證地址空間 1、2 地址空間是指的物理

    2024年02月10日
    瀏覽(45)
  • Linux從入門到精通 --- 2.基本命令入門

    Linux從入門到精通 --- 2.基本命令入門

    2.1 Linux的目錄結(jié)構(gòu) Linux的目錄結(jié)構(gòu)是一個樹型結(jié)構(gòu),沒有盤符概念,只有一個根目錄/,所有文件都在它下面 2.1.1 路徑描述方式 Linux系統(tǒng)中,路徑之間的層級關(guān)系用:/來表示 Linux系統(tǒng)中,路徑之間的層級關(guān)系用:來表示 2.2 Linux命令入門 命令行:Linux終端,是一種命令提示符

    2024年04月10日
    瀏覽(16)
  • 『Linux從入門到精通』第 ? 期 - 信號概念 & 信號的產(chǎn)生

    『Linux從入門到精通』第 ? 期 - 信號概念 & 信號的產(chǎn)生

    ??作者簡介: 花想云 ,在讀本科生一枚,C/C++領(lǐng)域新星創(chuàng)作者,新星計劃導(dǎo)師,阿里云專家博主,CSDN內(nèi)容合伙人…致力于 C/C++、Linux 學習。 ?? 專欄簡介:本文收錄于 Linux從入門到精通 ,本專欄主要內(nèi)容為本專欄主要內(nèi)容為Linux的系統(tǒng)性學習,專為小白打造的文章專欄。

    2024年03月15日
    瀏覽(19)
  • 『Linux從入門到精通』第 ? 期 - 僵尸進程?孤兒進程?為什么他有如此慘烈的身世...

    『Linux從入門到精通』第 ? 期 - 僵尸進程?孤兒進程?為什么他有如此慘烈的身世...

    ??作者簡介: 花想云 ,在讀本科生一枚,C/C++領(lǐng)域新星創(chuàng)作者,新星計劃導(dǎo)師,阿里云專家博主,CSDN內(nèi)容合伙人…致力于 C/C++、Linux 學習。 ?? 專欄簡介:本文收錄于 Linux從入門到精通 ,本專欄主要內(nèi)容為本專欄主要內(nèi)容為Linux的系統(tǒng)性學習,專為小白打造的文章專欄。

    2024年02月16日
    瀏覽(20)
  • Kubernetes(K8s)從入門到精通系列之五:K8s的基本概念和術(shù)語之應(yīng)用類

    Service: Service指的是無狀態(tài)服務(wù),通常多個程序副本提供服務(wù),在特殊情況下也可以是有狀態(tài)的單實例服務(wù),比如MySQL這種數(shù)據(jù)存儲類的服務(wù)。 K8s里的Service具有一個全局唯一的虛擬ClusterIP地址,客戶端可以通過這個虛擬IP地址+服務(wù)的端口直接訪問該服務(wù),再通過部署K8s集群的

    2024年02月14日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包