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

Linux操作系統(tǒng)篇:進程

這篇具有很好參考價值的文章主要介紹了Linux操作系統(tǒng)篇:進程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一. 前置知識

1.1馮諾依曼體系結構

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

我們常見的計算機,如筆記本。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系

為什么計算機要采用馮諾依曼體系呢?

在計算機出現之前有很多人都提出過計算機體系結構,但最終選擇馮諾依曼是因為用比較少的錢就可以做出效率不錯的計算機

截至目前,我們所認識的計算機,都是由一個個的硬件組件組成

輸入單元:包括鍵盤 , 鼠標,掃描儀 , 寫板等
中央處理器 (CPU) :含有運算器和控制器等
輸出單元:顯示器,打印機等
關于馮諾依曼,必須強調幾點:
這里的存儲器指的是內存
不考慮緩存情況,這里的CPU 能且只能對內存進行讀寫,不能訪問外設 ( 輸入或輸出設備 )
外設 ( 輸入或輸出設備 ) 要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。 、一句話,所有設備都只能直接和內存打交道。
為什么說所有的設備只能直接和內存進行數據傳輸,不能直接和CPU傳輸?
以CPU為中心,離CPU越近,存儲效率就越高,造價越高
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
外設(磁盤)的運行速度是毫秒級別,內存是微秒級別,CPU是納秒級別,如果說外設(磁盤)直接和CPU進行數據傳輸,會導致效率低下,比如說外設直接和CPU傳輸,外設給CPU發(fā)送一點數據,CPU就做計算,CPU非???,CPU不僅僅要處理外設的數據還有別的事情要做,當處理完外設的數據,CPU就切換任務,等外設傳進來一點數據,CPU就要停下當前的任務,切換任務再去處理外設傳進來的數據,多次的切換任務會使效率降低,讓內存先接收外設的數據,讓內存?zhèn)鹘oCPU,可以提升效率
兩臺電腦進行信息的傳輸是怎么傳輸的呢?
兩臺電腦就相當于兩套馮諾依曼體系,A,B兩個人進行信息交互,A通過鍵盤(輸入設備)將數據寫入到內存,內存?zhèn)鹘oCPU計算,經CPU計算完再傳送給內存,內存再由網卡(輸出設備)發(fā)給B,B的輸入設備接收,傳給B的內存,再傳給B的CPU計算,最后傳給B的顯示屏(輸出設備),B就可以看到了

1.2 操作系統(tǒng) (OS)

1.2.1 簡述操作系統(tǒng)

操作系統(tǒng)是什么?

是軟件,管理軟硬件資源,開機自動再內存啟動

為什么開機自動啟動,為什么用它?

操作系統(tǒng)管理軟硬件資源,為用戶提供良好的體驗,如果沒有它,用戶就得自己手動調試硬件,自己兼顧軟硬件

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

1.2.2 用戶部分

用戶就是指的是使用者,用戶操作接口就是操作系統(tǒng)給用戶提供的系統(tǒng)調用接口

為什么要提供操作接口?

操作接口分為shell外殼(Linux下的shell,Windows下的圖形化界面),lib(動靜態(tài)庫),部分指令(部分指令指的是操作系統(tǒng)提供的一些基本命令或者工具)

1) 用戶直接使用接口,降低了技術門檻

2) 其次是操作系統(tǒng)怕用戶搞破壞,給硬件搞壞

system call就是操作系統(tǒng)向上層提供的系統(tǒng)調用函數

1.2.3 系統(tǒng)軟件部分

這部分就是操作系統(tǒng)管理軟硬件,操作系統(tǒng)對軟硬件資源的管理分為兩步:

1. 描述起來,用 struct 結構體
2. 組織起來,用鏈表或其他高效的數據結構
簡稱: 先描述再組織 (非常重要,以后會經常提及到!??!)
操作系統(tǒng)系統(tǒng)內不僅要管理硬件,軟件例如進程,也是要管理,也是通過先描述再組織的方式管理,操作系統(tǒng)就是C語言寫的,所以用struct結構體記錄進程的所有屬性,這是先描述,這個存儲記錄進程屬性的結構體就是PCB,Linux中是struct task_struct。用鏈表將所有的進程結構體連接起來,這是再組織。

1.2.4硬件部分

這部分沒什么好說的,就是外設,硬件

二.進程

2.1基本概念

1、已經加載到內存中的程序/正在運行的程序叫做進程,一個操作系統(tǒng)不僅僅只能運行一個進程,可以同時運行多個進程。
2、操作系統(tǒng),必須將進程管理起來,而管理的過程是先描述,再組織。
3、任何一個進程,在加載到內存的時候,形成真正的進程時,操作系統(tǒng)要先創(chuàng)建描述進程(屬性)的結構體對象PCB(process control block)---進程控制塊(進程屬性的集合)。
4、此結構體包括進程編號,進程的狀態(tài),優(yōu)先級,代碼和數據相關的指針信息等。
5、根據進程的PCB類型,該進程創(chuàng)建對應的PCB對象。有了PCB結構體對象,在操作系統(tǒng)中對進程進行管理,變成了對單鏈表進行增刪改查。
6、進程=內核數據結構(PCB)+代碼和數據。
7、在linux中描述進程的結構體叫做task_struct,最基本的組織進程task struct方式采用雙向鏈表組織的,里面包含進程的所有屬性。

描述進程 -PCB
進程信息被放在一個叫做進程控制塊的數據結構中,可以理解為進程屬性的集合。
課本上稱之為 PCB process control block ), Linux 操作系統(tǒng)下的 PCB : task_struct
Linux中,通常用雙鏈表管理進程的PCB,next節(jié)點指向的是下一個進程PCB的結構體
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
task_struct-PCB 的一種
Linux 中描述進程的結構體叫做 task_struct 。
task_struct Linux 內核的一種數據結構,它會被裝載到 RAM( 內存 ) 里并且包含著進程的信息。
task_ struct 內容分類
標示符 : 描述本進程的唯一標示符,用來區(qū)別其他進程。
狀態(tài) : 任務狀態(tài),退出代碼,退出信號等。
優(yōu)先級 : 相對于其他進程的優(yōu)先級。
程序計數器 : 程序中即將被執(zhí)行的下一條指令的地址。
內存指針 : 包括程序代碼和進程相關數據的指針,還有和其他進程共享的內存塊的指針
上下文數據 : 進程執(zhí)行時處理器的寄存器中的數據 [ 休學例子,要加圖 CPU ,寄存器 ] 。
I O 狀態(tài)信息 : 包括顯示的 I/O 請求 , 分配給進程的 I O 設備和被進程使用的文件列表。
記賬信息 : 可能包括處理器時間總和,使用的時鐘數總和,時間限制,記賬號等。
其他信息
組織進程
可以在內核源代碼里找到它。所有運行在系統(tǒng)里的進程都以 task_struct 鏈表的形式存在內核里。
查看進程
進程的信息可以通過 /proc 系統(tǒng)文件夾查看
如:要獲取 PID 1 的進程信息,你需要查看 /proc/1 這個文件夾。

2.2Linux有關進程的指令

ls /proc:顯示系統(tǒng)中動態(tài)運行的所有進程的信息
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
ls /proc/進程pid -l:查看進程的詳細信息,詳細信息中cwd和exe是當前對我們來說最重要的,cwd是當前工作目錄,就是該進程的源文件的路徑,chdir函數可以更改進程的工作目錄,chdir("目標目錄")。 exe就是進程的源文件是哪個
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
ps查看進程
? ? ? ? ps ajx | grep xxx: 顯示出進程名字中帶有xxx的進程
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
? ? ? ? ps ajx | grep head -1: 顯示出屬性,通常配合其他ps指令使用 ,比如:ps ajx | grep xxx && ps ajx | grep head -1
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
getpid():獲取進程pid,getppid()獲取進程ppid
#include<stdio.h>
#include<unistd.h>
 
int main()
{
        while(1)
        {
                printf("我的pid是%d,我的ppid是%d\n",getpid(),getppid());
                sleep(1);
        }
        return 0;
}

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

父進程含義:
我們登錄xshell時,系統(tǒng)會為我們創(chuàng)建一個bash進程,即命令行解釋的進程,幫我們在顯示器中打印對話框終端。
我們在對話框中輸入的所有的指令都是bash進程的子進程。
bash進程只進行命令行解釋,具體執(zhí)行出錯只會影響他的子進程。
進程PID會變化,而它的ppid一般在同一個終端下啟動,它都是不變的,而它的所有的進程的父進程都是bash。

fork:創(chuàng)建子進程:
創(chuàng)建子進程PCB,填充PCB對應的內容,讓子進程和父進程指向相同的代碼,父子進程都是有獨立的task struct,可以被CPU調度運行了。

不同方法創(chuàng)建子進程
①./運行程序---指令級別創(chuàng)建子進程
②fork()?--- 代碼層面創(chuàng)建子進程

為什么fork要給子進程返回零,給父進程返回子進程PID?
fork給父進程返回子進程pid,用來標定子進程的唯一性。而子進程只要調用getpid()就可獲取進程的PID。返回不同的返回值,是為了區(qū)分,讓不同的執(zhí)行流,執(zhí)行不同的代碼快。(一般而言,fork之后的代碼父子共享)

一個函數是如何做到返回兩次的?一個變量怎么會有不同的內容?如何理解?
任何平臺,進程在運行的時候是具有獨立性的。代碼共享并不影響獨立性,因為代碼不可修改。而數據上互相獨立,子進程理論上要拷貝父進程數據。但創(chuàng)建出來的子進程,對于大部分父進程不會訪問,所以子進程在訪問父進程數據時進行寫時拷貝即可(子進程和父進程訪問的是不同的內存區(qū))。

誰決定把一個進程放到CPU上去運行呢?是由調度器(CPU)去決定的。
如果父子進程被創(chuàng)建好fork()往后誰先進行呢?誰先進行由調度器決定,不確定。

三. 進程的狀態(tài)

3.1?概括

進程狀態(tài)其實就是進程PCB中的一個變量,int status,更改狀態(tài)就是更改這個變量的

#define NEW 1
#define RUNNING 2
#define BLOCK 3

pcb->status = NEW;
if(pcb->status == NEW) //如果狀態(tài)是NEW,該放入哪個隊列
else if(pcb->status == RUNNING) //如果是RUNNING,該放入哪個隊列

3.2 運行狀態(tài)

只要在運行隊列的進程,狀態(tài)就是運行狀態(tài)

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

3.3 阻塞狀態(tài)

所編寫的代碼中或多或少都會訪問系統(tǒng)的某些資源,比如鍵盤,在調用scanf函數時,就是從鍵盤拿數據,如果一直不輸入,鍵盤上就不會有數據? ?------->? ?進程要訪問的資源就沒有就緒? -------->? 不具備足夠的資源和條件? ?--------->? ?進程代碼就沒法接著執(zhí)行。

這時候的進程狀態(tài)就是阻塞狀態(tài)

3.4掛起狀態(tài)(阻塞掛起狀態(tài))

如果一個進程被阻塞了,注定了,這個進程需要的資源沒有就緒,如果這時候操作系統(tǒng)的內存資源嚴重不足了怎么辦呢?操作系統(tǒng)會將內存數據進行置換到外設,將所有的阻塞狀態(tài)的進程置換到外設的swap分區(qū),( 補充:swap分區(qū)時在磁盤的一塊區(qū)域,大小和內存大小一樣或者比內存小,不能太大,如果太大,就會很依賴swap分區(qū),就會增加置換次數,置換次數變多,IO操作次數變多,效率就會受到影響 ),被置換到sawp分區(qū)的進程的狀態(tài)就是掛起,如果不講這些進程置換,計算機就宕機了,所以置換就算非常慢也沒有辦法。這種狀態(tài)一般不會出現,出現了就說明計算機快完蛋了。

體現在Linux中,有些差別但是無可厚非

①R運行狀態(tài): 表明進程是在運行中或者在運行隊列里。
②S睡眠狀態(tài): 意味著進程在等待事件完成。
③D磁盤休眠狀態(tài):讓進程在磁盤寫入完畢期間,這個進程不能被任何人殺掉。
④T停止狀態(tài): 可以通過發(fā)送 SIGSTOP(kill -19) 信號給進程來停止(T)進程。這個被暫停的進程可以通過發(fā)送 SIGCONT 信號(kill -18)讓進程繼續(xù)運行。
⑤X死亡狀態(tài):操作系統(tǒng)將該進程的數據全部釋放掉。
⑥Z僵尸進程:進程一般退出的時候,如果父進程,沒有主動回收子進程信息,子進程會一直讓自己出于Z狀態(tài),進程的相關資源尤其是task_struct結構體不能被釋放。

四. 進程優(yōu)先級

4.1基本概念

cpu 資源分配的先后順序,就是指進程的優(yōu)先權( priority )。
優(yōu)先權高的進程有優(yōu)先執(zhí)行權利。配置進程優(yōu)先權對多任務環(huán)境的 linux 很有用,可以改善系統(tǒng)性能。 還可以把進程運行到指定的CPU 上,這樣一來,把不重要的進程安排到某個 CPU ,可以大大改善系統(tǒng)整體性能
查看系統(tǒng)進程
linux 或者 unix 系統(tǒng)中,用 ps –l 命令則會類似輸出以下幾個內容:
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器
Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

4.1 PRI NI

PRI and NI
PRI 也還是比較好理解的,即進程的優(yōu)先級,或者通俗點說就是程序被 CPU 執(zhí)行的先后順序,此值越小
進程的優(yōu)先級別越高
NI ? 就是我們所要說的 nice 值了,其表示進程可被執(zhí)行的優(yōu)先級的修正數值
PRI 值越小越快被執(zhí)行,那么加入 nice 值后,將會使得 PRI 變?yōu)椋?/span> PRI(new)=PRI(old)+nice
這樣,當 nice 值為負值的時候,那么該程序將會優(yōu)先級值將變小,即其優(yōu)先級會變高,則其越快被執(zhí)行
所以,調整進程優(yōu)先級,在 Linux 下,就是調整進程 nice
nice 其取值范圍是 -20 19 ,一共 40 個級別。
PRI vs NI
需要強調一點的是,進程的 nice 值不是進程的優(yōu)先級,他們不是一個概念,但是進程 nice 值會影響到進
程的優(yōu)先級變化。
可以理解 nice 值是進程優(yōu)先級的修正修正數據
top 命令更改已存在進程的 nice
top
進入 top 后按 “r”–> 輸入進程 PID–> 輸入 nice
其他概念
競爭性 : 系統(tǒng)進程數目眾多,而 CPU 資源只有少量,甚至 1 個,所以進程之間是具有競爭屬性的。為了高
效完成任務,更合理競爭相關資源,便具有了優(yōu)先級
獨立性 : 多進程運行,需要獨享各種資源,多進程運行期間互不干擾
并行 : 多個進程在多個 CPU 下分別,同時進行運行,這稱之為并行
并發(fā) : 多個進程在一個 CPU 下采用進程切換的方式,在一段時間之內,讓多個進程都得以推進,稱之為并發(fā)

五. 環(huán)境變量

5.1基本概念

科技 環(huán)境變量 一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運行環(huán)境的一些參數 如:我們在編寫C/C++ 代碼的時候,在鏈接的時候,從來不知道我們的所鏈接的動態(tài)靜態(tài)庫在哪里,但
是照樣可以鏈接成功,生成可執(zhí)行程序,原因就是有相關環(huán)境變量幫助編譯器進行查找。
環(huán)境變量通常具有某些特殊用途,還有在系統(tǒng)當中通常具有全局特性

5.2常見環(huán)境變量

PATH : 指定命令的搜索路徑
HOME : 指定用戶的主工作目錄 ( 即用戶登陸到 Linux 系統(tǒng)中時 , 默認的目錄 )
SHELL : 當前 Shell, 它的值通常是 /bin/bash 。

5.3查看環(huán)境變量方法

echo $NAME //NAME: 你的環(huán)境變量名稱

5.4和環(huán)境變量相關的命令

1. echo: 顯示某個環(huán)境變量值
2. export: 設置一個新的環(huán)境變量
3. env: 顯示所有環(huán)境變量
4. unset: 清除環(huán)境變量
5. set: 顯示本地定義的 shell 變量和環(huán)境變量

5.5環(huán)境變量的組織方式

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

5.6通過代碼如何獲取環(huán)境變量

命令行第三個參數
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
 int i = 0;
 for(; env[i]; i++){
 printf("%s\n", env[i]);
 }
 return 0;
}

通過第三方變量environ,libc中定義的全局變量environ指向環(huán)境變量表,environ沒有包含在任何頭文件中,所以在使用時 要用extern聲明。

#include <stdio.h>
int main(int argc, char *argv[])
{
 extern char **environ;
 int i = 0;
 for(; environ[i]; i++){
 printf("%s\n", environ[i]);
 }
 return 0;
}

六. 進程地址空間

6.1程序地址空間分布情況

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

//myproc.c
 
#include <stdio.h>
#include <stdlib.h>
 
int g_val_1;
int g_val_2 = 100;
 
int main()
{
        printf("code addr: %p/n", main);
        const char *str = "hello bit";
        printf("read only string addr: %p\n", str);
        printf("init global value addr: %p\n", &g_val_2);
        printf("uninit global value addr: %p\n", &g_val_1);
        char *mem = (char*)malloc(100);
        printf("heap addr: %p\n", mem);
        printf("stack addr: %p\n", &str);
 
        return 0;
}

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

注:static修飾的局部變量,編譯的時候已經被編譯到全局數據區(qū)。

6.2地址空間

一個小實驗

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
 
int g_val = 100;
 
int main()
{
    pid_t id = fork();
    if (id == 0)
    {
        int cnt = 5;
        //子進程
        while (1)
        {
            printf("I am child, pid : %d, ppid : %d, g_val: %d, &g_val: %p\n", getpid(), getppid(), g_val, &g_val);
            sleep(1);
            if (cnt) cnt--;
            else
            {
                g_val = 200;
                printf("子進程change g_val : 100->200\n");
                cnt--;
            }
        }
    }
    else
    {
        //父進程
        while (1)
        {
            printf("I am parent, pid : %d, ppid : %d, g_val: %d, &g_val: %p\n", getpid(), getppid(), g_val, &g_val);
            sleep(1);
        }
    }
}

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

問1:怎么可能同一個變量,同一個地址,同時讀取,讀到了不同的內容結論?
答:
①如果變量的地址是物理地址,不可能存在上面的現象,絕對不是物理地址,是線性地址/虛擬地址。
②子進程的進程地址空間繼承自父進程,但是當實際訪問讀取時,需要根據相同的虛擬地址(映射)查找不同的物理地址。
③修改子進程變量時,先經過寫時拷貝(是由操作系統(tǒng)自動完成的)并重新開辟空間,但是在這個過程中,不會影響虛擬地址。

拓展:在32位計算機中,有32位的地址和數據總線
每一根地址總線只有0、1(32根,2^32種)
(三類線:地址總線,數據總線控制,總線
CPU和內存中連的線叫系統(tǒng)總線
內存和外設中連的線叫IO總線)

問2:什么叫做地址空間?如何理解?
答:
①進程在極端情況下所能訪問的物理內存的最大值。地址,總線,排列組合形成地址范圍[0,2^32]。
②通過定義一個區(qū)域的起始和結束來實現地址空間上的區(qū)域劃分。
③所謂的進程地址空間,本質上是一個描述進程可視范圍的大小
地址空間內一定要存在各種區(qū)域劃分,對線性地址進行start和end即可
在范圍內,連續(xù)空間中,每一個最小單位都可以有地址,這個地址可以被對象直接使用。

問3:地址空間本質是內核的一個數據結構對象,類似PCB一樣,地址空間也是要被操作系統(tǒng)管理的:先描述,再組織 。這樣做的目的是什么?
答:
①讓進程以統(tǒng)一的視角看待內存,進程就不需要再維護自己冗余的代碼
②增加進程虛擬地址空間可以讓我們訪問內存的時候,增加一個轉換的過程,在這個轉化的過程中,可以對尋址記請求進行審查,所以一旦異常訪問,直接攔截,該請求不會到達內存,保護物理內存。

6.3頁表

①每個當前正在執(zhí)行的進程的頁表,在CPU內有一個cr3寄存器,保存當前頁表的起始地址(這是物理地址)。該進程在運行期間cr3寄存器中頁表的地址/當前進程正在運行的臨時數據,本質上屬于進程的硬件上下文。

②代碼區(qū)和字符常量區(qū)所匹配的頁表所對應的虛擬物理地址映射標志位決定是否只讀。(代碼是只讀的,字符常量區(qū)只讀的)

③操作系統(tǒng)對大文件可以實現分批加載,惰性加載的方式。另外有一個標志位標識對你的代碼和數據是否已經被加載到內存。

④如果發(fā)現當前代碼和數據并未加載到內存里,此時,操作系統(tǒng)觸發(fā)缺頁中斷。將未加載到內存中的代碼和數據,重新加載到內存里,把這段內存的地址填寫到對應的頁表當中,再訪問。

注:寫時拷貝也是缺頁中斷:一旦創(chuàng)建子進程,可讀的內容不變,可寫的內容對應的虛擬內存以及操作系統(tǒng)會把父進程對應的可寫區(qū)域內容全部改成只讀,從而子進程繼承下來也為只讀。一旦父進程或子進程嘗試對數據段進行寫入時,會通過觸發(fā)讀權限問題進行寫時拷貝。

問:進程在被創(chuàng)建的時候,是先創(chuàng)建內核數據結構呢,還是先加載對應的可執(zhí)行程序呢?
答:先要創(chuàng)建內核數據結構,即處理好進程維護的PCB地址空間和頁表對應關系,再慢慢加載可執(zhí)行程序。

⑤掛起:進程對應的代碼和數據全部釋放掉,頁表清空,并且頁表標志位,對應虛擬地址所表征的是否在內存的標志位置為0代表不在內存里。

6.4 Linux的內存管理模塊:進程管理和內存管理,實現軟件層面上的解耦合

Linux操作系統(tǒng)篇:進程,操作系統(tǒng),linux,運維,服務器

①因為有地址,空間和頁表的存在將進程管理模塊和內存管理模塊進行解耦合

②進程=內核數據結構(task_struct&&mm_struct&&頁表)+程序的代碼和數據

③總結:進程具有獨立性,為什么?怎么做到的?
a.每個進程具有單獨的PCB和進程地址空間頁表,所以在那個數據結構上,每個進程都是互相獨立的。
b.只要將頁表,映射到物理內存的不同區(qū)域,每個區(qū)域的代碼和數據就會互相解耦。
c.把PCB換了,進程地址空間自然而然就換了。頁表的起始地址屬于進程的下文,進程只要切換,頁表也就切換。

補充:缺頁中斷的好處:缺頁中斷本質上是重新分配內存,改變加載程序的先后順序和單次加載量。提高首次加載速度,局部上加載速度變快。很好的將內存分批釋放,減少內存申請空窗期,加快內存申請釋放,從而變相是我們內存的使用率越來越高。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-841243.html

到了這里,關于Linux操作系統(tǒng)篇:進程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 操作系統(tǒng)課程設計-Linux 進程控制

    操作系統(tǒng)課程設計-Linux 進程控制

    目錄 前言 1 實驗題目 2 實驗目的 3 實驗內容 3.1 進程的創(chuàng)建 3.1.1 步驟 3.1.2 關鍵代碼 3.2 子進程執(zhí)行新任務 3.2.1 步驟 3.2.2?關鍵代碼 4 實驗結果與分析 4.1 進程的創(chuàng)建 4.2 子進程執(zhí)行新任務 5 代碼 5.1 進程的創(chuàng)建 5.2 子進程執(zhí)行新任務 ?????????本實驗為課設內容,博客內容為

    2024年01月18日
    瀏覽(28)
  • 【Linux操作系統(tǒng)】深入探索Linux進程:創(chuàng)建、共享與管理

    【Linux操作系統(tǒng)】深入探索Linux進程:創(chuàng)建、共享與管理

    進程的創(chuàng)建是Linux系統(tǒng)編程中的重要概念之一。在本節(jié)中,我們將介紹進程的創(chuàng)建、獲取進程ID和父進程ID、進程共享、exec函數族、wait和waitpid等相關內容。 在Linux系統(tǒng)中,進程的創(chuàng)建使用 fork() 系統(tǒng)調用。 fork() 系統(tǒng)調用會創(chuàng)建一個與當前進程相同的子進程,子進程會復制父進

    2024年02月12日
    瀏覽(35)
  • Linux操作系統(tǒng)——第二章 進程控制

    Linux操作系統(tǒng)——第二章 進程控制

    ? ? 目錄 進程創(chuàng)建 fork函數初識 fork函數返回值 寫時拷貝 fork常規(guī)用法 fork調用失敗的原因 進程終止 進程退出場景 進程常見退出方法 _exit函數 exit函數 return退出 進程等待 進程等待必要性 進程等待的方法 wait方法 waitpid方法 獲取子進程status 進程程序替換 替換原理 替換函數

    2024年02月08日
    瀏覽(24)
  • Linux操作系統(tǒng)-06-進程與服務管理

    Linux操作系統(tǒng)-06-進程與服務管理

    使用ps命令查看進程。包括過濾進程信息 使用systemctl命令管理和運行Linux服務 進程(Process):操作系統(tǒng)正在運行的應用程序。任意一個進程,都會消耗CPU和內存資源, 服務(Service):通過服務控制面板直接啟動的應用程序,也可能是操作系統(tǒng)啟動時自啟動的后臺應用程序。

    2024年03月12日
    瀏覽(23)
  • 【Linux】初步理解操作系統(tǒng)和進程概念

    【Linux】初步理解操作系統(tǒng)和進程概念

    操作系統(tǒng)是一款純正的 “搞管理” 的文件 。 那操作系統(tǒng)為什么要管理文件? “管理” 又是什么? 它是怎么管理的? 1.操作系統(tǒng)幫助用戶,管理好底層的軟硬件資源; 2.為了給用戶提供一個良好,安全的環(huán)境 即操作系統(tǒng)通過管理好底層的軟硬件資源,為用戶提供一個良好

    2024年02月15日
    瀏覽(17)
  • 操作系統(tǒng)練習:在Linux上創(chuàng)建進程,及查看進程狀態(tài)

    操作系統(tǒng)練習:在Linux上創(chuàng)建進程,及查看進程狀態(tài)

    進程在執(zhí)行過程中可以創(chuàng)建多個新的進程。創(chuàng)建進程稱為“父進程”,新的進程稱為“子進程”。每個新的進程可以再創(chuàng)建其他進程,從而形成進程樹。 每個進程都有一個唯一的進程標識符(process identifier,pid)。在Linux中,init進程是所有其他進程的根進程。 在Linux中,可以

    2024年02月12日
    瀏覽(25)
  • 【Linux】進程概念(馮諾依曼體系結構、操作系統(tǒng)、進程)-- 詳解

    【Linux】進程概念(馮諾依曼體系結構、操作系統(tǒng)、進程)-- 詳解

    1、概念 (1)什么是馮諾伊曼體系結構? 數學家馮·諾伊曼于 1946 年提出存儲程序原理,把程序本身當作數據來對待,程序和該程序處理的數據用同樣的方式儲存。 馮·諾伊曼理論的要點是:計算機的數制采用二進制邏輯;計算機應該按照程序順序執(zhí)行。人們把馮·諾伊曼的

    2024年02月22日
    瀏覽(21)
  • 麒麟操作系統(tǒng)(Linux)使用和維護:進程相關的操作命令

    麒麟操作系統(tǒng)(Linux)使用和維護:進程相關的操作命令

    ? 目錄 1. 查看進程 2. top命令實時監(jiān)控進程 3. 殺死進程 4. 圖形界面查看和殺死進程 ????????作為國產操作系統(tǒng),無論是銀河麒麟,還是中標麒麟,它們的服務器操作系統(tǒng)或者桌面操作系統(tǒng),已經廣泛應用于工業(yè)生產和科學研究領域。因為麒麟操作系統(tǒng)的內核是Linux系統(tǒng)內

    2024年02月04日
    瀏覽(28)
  • Linux操作系統(tǒng)——第四章 進程間通信

    Linux操作系統(tǒng)——第四章 進程間通信

    ? ? 目錄 進程間通信介紹 進程間通信目的 進程間通信發(fā)展 進程間通信分類 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 管道讀寫規(guī)則 管道特點 命名管道 創(chuàng)建一個命名管道 匿名管道與命名管道的區(qū)別 命名管道的打開規(guī)則 system V共享內存 共享內存示意圖? 共享內存數

    2024年02月09日
    瀏覽(14)
  • 【Linux】馮諾依曼體系結構 && 操作系統(tǒng) && 進程概念

    【Linux】馮諾依曼體系結構 && 操作系統(tǒng) && 進程概念

    目錄 一、馮諾依曼體系結構 二、操作系統(tǒng) ?1、概念 ?2、設計OS的目的 三、進程 ?1、基本概念 ?2、描述進程-PCB ?3、組織進程 ?4、查看進程和終止 ?5、通過系統(tǒng)調用獲取進程標識符 ?6、通過系統(tǒng)調用創(chuàng)建進程-fork ?7、進程狀態(tài) ?8、特殊進程 ? ?8.1 僵尸進程 ? ?8.2 孤兒進

    2024年02月10日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包