色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 對進程的理解

對進程的理解 時間:2018-09-28      來源:未知

關于進程的理解,首先得知道進程和程序有什么區別!其實程序大家并不陌生,前面也寫過很多程序,那什么是程序?程序是指令和數據的有序集合,本身沒有任何運行的含義,是一個靜態的概念。那什么又是進程呢?程序是保存在磁盤上的,要想程序實現一定的功能,需要有執行的過程,是一個動態的概念,而對于程序是靜態的概念,無法描述程序在內存中的執行情況,所以才引入了進程的概念,進程是一個程序的一次執行過程,是是程序執行和資源管理的小單位。  

對于進程,在同一時間CPU只能處理一個事件,實際上是串行的,但是CPU執行的速度非常快,所以我們感覺像是并行一樣。進程是一個實體,進程不僅包括程序的指令和數據,而且包括程序計數器值、CPU的所有寄存器值以及存儲臨時數據的進程堆棧。它包括三部分:程序、數據、進程控制塊PCB,對于進程可以分成三部分:代碼段、數據段、堆棧段。

代碼段:存放程序的可執行代碼。

數據段:存放程序的全局變量、常量、靜態變量。

堆棧段:堆用于存放動態分配的內存變量,棧用于函數調用,它存放著函數的參數、

函數內部定義的局部變量。

而程序分成了兩部分:只有代碼段和數據段(.bss:未初始化的全局變量或靜態局部變量,.data:已初始化的全局變量或靜態局部變量)

每一個進程都有獨立的4g的虛擬空間,而0-3g是用戶可用空間,3g-4g是內核空間,每一個進程都擁有相同的內核空間,所以3g-4g是每一個進程的共享空間。物理內存是實際存在的空間,這個空間是根據你電腦的內存條大小來確定的,對于每一個擁有獨立4g虛擬空間的進程,都會在內存條上分配一定的空間大小(所以為什么說內存越大電腦的速度越快?比如10個進程在2g內存上運行,需要為每個進程分配200兆的空間來運行,如果10個進程在4g內存上運行,需要為每個進程分配400兆的空間)

對于獨立4g虛擬空間的進程,怎么加載到物理內存上的呢?

進程中的每一條指令,比如a+b這條指令會被加載到物理內存中,等下一次進程再次被調度時,系統就會知道再次從什么地方開始執行。

上圖中的雙向循環鏈表是保存在3g-4g的內核空間的。

對于進程控制塊PCB(process control block),系統通過PCB對進程進行管理和調度。PCB包括創建進程、執行程序、退出進程以及改變進程的優先級等。而進程中的PCB用一個名為task_struct的結構體來表示,定義在linux內核代碼include/linux/sched.h中,每當創建一新進程時,便在內存中申請一個空的task_struct結構,填入所需信息,同時,指向該結構的指針也被加入到task數組中,所有進程控制塊都存儲在task[]數組中。存放進程的信息的PCB是存放在內存中。在這里需要重點去看的是,在PCB結構體中有兩項重點來看一下,PID(進程號)和status(進程狀態),PID、PPID分別代表的是進程號和父進程號,通過進程號來唯一的表示一個進程;這兩個值都是非零正整數。

Linux中進程的類型也有這樣幾種:

1) 交互進程:該類進程是由shell控制和運行的。交互進程既可以在前臺運行,也可以

在后臺運行。該類進程經常與用戶進行交互,需要等待用戶的輸入,當接收到用戶的輸入后,該類進程會立刻響應,典型的交互式進程有:shell命令進程、文本編輯器等

2)批處理進程:該類進程不必與用戶進行交互,通常在后臺運行,不必很快地響應,它會被提交到一個隊列中進行順序執行。典型的批處理進程有:編譯器的編譯操作、數據庫搜索引擎。

3)守護進程:該類進程在后臺運行。它一般在Linux啟動時開始執行,系統關閉時才結

束。很多系統進程都是以守護進程的形式存在。

舉例:電腦的網線口,不插網線會有小嘆號,當插上網線設置好ip后就能上網,這是因為網口驅動程序是守護進程,當系統啟動時,此進程就已經被創建,此守護進程后會不停的去詢問有沒有網線…

同時根據進程在不同時刻存在的不同狀態,分成了這樣幾類:

1)運行態:此時進程或者正在運行,或者準備運行。R

2)等待態:此時進程在等待一個事件的發生或某種系統資源。

a)可中斷: 處在這種狀態下的進程可以被信號中斷,接收到信號或被顯示地喚醒呼叫,喚醒之后,進程將轉變為運行態。S 

b)不可中斷:它不會處理信號,只有在它所等待的事件發生時,進程才被顯示的

喚醒  D

3)停止態:此時進程被暫停,當收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU信號,會進入暫停狀態。T 

4)僵尸態:這是一個已終止的進程,但還在進程向量數組中占有一個task_struct結構。Z

僵尸有什么特性?

占空間、不起作用,每一個進程都有PCB,描述進程的信息,進程退出時PCB還存在,存放著進程的狀態,死亡的狀態等,所以程序結束之后PCB還存在,內核棧也存在(內核棧:大小為4k-8k,保存在3g-4g的空間,系統調用函數是需要棧的,而這個棧就是是內核棧)內核棧是占空間的,所以如果僵尸態的進程多了的話,是要消耗資源的,

僵尸進程是怎么產生的?

子進程先退出,父進程沒有收尸,那子進程就是僵尸進程

父進程退出后,子進程存在,那子進程就是孤兒進程, 那子進程的父進程就是init進程,

init是系統啟動后的用戶進程,其中還有一個0號進程,它是系統上電后,由0號進程產生init進程

5)死亡態: 這是終狀態,父進程調用wait函數將子進程回收。瞬間發生,程序員不

可見  X

  狀態的顯示可以使用man ps查看到

       <    high-priority (not nice to other users) 高優先級

       N    low-priority (nice to other users) 低優先級

       L    has pages locked into memory (for real-time and custom IO) 頁面鎖定在內存(實時或定制的IO)

       s    is a session leader會話組的組長

       l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) 進程中包含線程

       +    is in the foreground process group. 前臺進程

以上便是我對進程相關內容的一些理解,現在分享給大家,如果存在質疑的地方請主動提出。

上一篇:Linux下文件的特殊權限

下一篇:如何編寫塊設備驅動

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 四虎成人精品无码永久在线 | 亚洲乱码AV中文一区二区 | 毛片区| 国产精品一区二区熟女不卡 | 老少交欧美另类 | 亚洲性无码av在线欣赏网 | 欧洲性XXXX免费视频在线观看 | 日韩AV无码午夜免费福利制服 | 亚洲AV永久无码天堂网毛片 | 欧美精品国产一区二区三区 | 多人运动免费观看不用登录 | 国产午夜AAA片无码无片久久 | 亚洲色婷婷综合久久 | 国产精品久久久久久无码 | 大人片视频免费 | 免费观看又黄又爽的视频 | 四虎影视在线观看2413 | 国产精品一区在线免费观看 | 特级太黄A片免费播放一 | 免费观看很黄很色裸乳视频网站 | 国产 AV 仑乱内谢 | 在线中文字幕视频 | 日韩福利在线 | 免费永久看黄神器 | 欧美激情网站 | 国产麻豆91精品三级站 | 狠狠亚洲超碰狼人久久 | 人人人人爽 | A∨无码天堂AV | 怡红院成人av | japanese乱人伦精品 | 五月伊人| 欧美日韩无套内射另类 | 日本黄页网站免费观看 | 成年女人毛片免费视频播放器 | 青青艹av | 宝贝小嫩嫩好紧好爽H视频 神马午夜羞羞AV | 无码avav无码中文字幕 | 色偷偷久久一区二区三区 | 亚洲AV综合色区无码一区爱AV | 亚洲欧美成人一区二区在线 |