<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 進(jìn)程控制開(kāi)發(fā)之:Linux進(jìn)程概述

進(jìn)程控制開(kāi)發(fā)之:Linux進(jìn)程概述

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257132.htm

7.1進(jìn)程概述

7.1.1進(jìn)程的基本概念

1.進(jìn)程的定義

進(jìn)程的概念首先是在20世紀60年代初期由MIT的Multics系統和IBM的TSS/360系統引入的。在40多年的發(fā)展中,人們對進(jìn)程有過(guò)各種各樣的定義?,F列舉較為著(zhù)名的幾種。

(1)進(jìn)程是一個(gè)獨立的可調度的活動(dòng)(E.Cohen,D.Jofferson)。

(2)進(jìn)程是一個(gè)抽象實(shí)體,當它執行某個(gè)任務(wù)時(shí),要分配和釋放各種資源(P.Denning)。

(3)進(jìn)程是可以并行執行的計算單位。(S.E.Madnick,J.T.Donovan)。

以上進(jìn)程的概念都不相同,但其本質(zhì)是一樣的。它指出了進(jìn)程是一個(gè)程序的一次執行的過(guò)程,同時(shí)也是資源分配的最小單元。它和程序是有本質(zhì)區別的,程序是靜態(tài)的,它是一些保存在磁盤(pán)上的指令的有序集合,沒(méi)有任何執行的概念;而進(jìn)程是一個(gè)動(dòng)態(tài)的概念,它是程序執行的過(guò)程,包括了動(dòng)態(tài)創(chuàng )建、調度和消亡的整個(gè)過(guò)程。它是程序執行和資源管理的最小單位。因此,對系統而言,當用戶(hù)在系統中鍵入命令執行一個(gè)程序的時(shí)候,它將啟動(dòng)一個(gè)進(jìn)程。

2.

進(jìn)程是系統的基本調度和管理資源的單位,那么從系統的角度看如何描述并表示它的變化呢?在這里,是通過(guò)塊來(lái)描述的。塊包含了進(jìn)程的描述信息、控制信息以及資源信息,它是進(jìn)程的一個(gè)靜態(tài)描述。在中,進(jìn)程控制塊中的每一項都是一個(gè)task_struct結構,它是在include/linux/sched.h中定義的。

3.進(jìn)程的標識

在Linux中最主要的進(jìn)程標識有進(jìn)程號(PID,ProcessIdenityNumber)和它的父進(jìn)程號(PPID,parentprocessID)。其中PID惟一地標識一個(gè)進(jìn)程。PID和PPID都是非零的正整數。

在Linux中獲得當前進(jìn)程的PID和PPID的系統調用函數為getpid()和getppid(),通常程序獲得當前進(jìn)程的PID和PPID之后,可以將其寫(xiě)入日志文件以做備份。getpid()和getppid()系統調用過(guò)程如下所示:

/*pid.c*/

#includestdio.h>

#includeunistd.h>

#includestdlib.h>

intmain()

{

/*獲得當前進(jìn)程的進(jìn)程ID和其父進(jìn)程ID*/

printf(ThePIDofthisprocessis%dn,getpid());

printf(ThePPIDofthisprocessis%dn,getppid());

}

使用arm-linux-gcc進(jìn)行交叉編譯,再將其下載到目標板上運行該程序,可以得到如下結果,該值在不同的系統上會(huì )有所不同:

$./pid

ThePIDofthisprocessis78

THePPIDofthisprocessis36

另外,進(jìn)程標識還有用戶(hù)和用戶(hù)組標識、進(jìn)程時(shí)間、資源利用情況等,這里就不做一一介紹,感興趣的讀者可以參見(jiàn)W.RichardStevens編著(zhù)的《AdvancedProgrammingintheUNIXEnvironmen》。

4.進(jìn)程運行的狀態(tài)

進(jìn)程是程序的執行過(guò)程,根據它的生命周期可以劃分成3種狀態(tài)。

n 執行態(tài):該進(jìn)程正在運行,即進(jìn)程正在占用CPU。

n 就緒態(tài):進(jìn)程已經(jīng)具備執行的一切條件,正在等待分配CPU的處理時(shí)間片。

n 等待態(tài):進(jìn)程不能使用CPU,若等待事件發(fā)生(等待的資源分配到)則可將其喚醒。

它們之間轉換的關(guān)系如圖7.1所示。

圖7.1進(jìn)程3種狀態(tài)的轉化關(guān)系

7.1.2Linux下的進(jìn)程結構

Linux系統是一個(gè)多進(jìn)程的系統,它的進(jìn)程之間具有并行性、互不干擾等特點(diǎn)。也就是說(shuō),每個(gè)進(jìn)程都是一個(gè)獨立的運行單位,擁有各自的權利和責任。其中,各個(gè)進(jìn)程都運行在獨立的虛擬地址空間,因此,即使一個(gè)進(jìn)程發(fā)生異常,它也不會(huì )影響到系統中的其他進(jìn)程。

Linux中的進(jìn)程包含3個(gè)段,分別為“數據段”、“代碼段”和“堆棧段”。

n “數據段”存放的是全局變量、常數以及動(dòng)態(tài)數據分配的數據空間,根據存放的數據,數據段又可以分成普通數據段(包括可讀可寫(xiě)/只讀數據段,存放靜態(tài)初始化的全局變量或常量)、BSS數據段(存放未初始化的全局變量)以及堆(存放動(dòng)態(tài)分配的數據)。

n “代碼段”存放的是程序代碼的數據。

n “堆棧段”存放的是子程序的返回地址、子程序的參數以及程序的局部變量等。如圖7.2所示。、

圖7.2Linux中進(jìn)程結構示意圖

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程


pid控制器相關(guān)文章:pid控制器原理



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>