进程控制块PCB(进程描述符)
(1)PCB
每個(gè)進(jìn)程在內(nèi)核中都有一個(gè)進(jìn)程控制塊(PCB)來維護(hù)進(jìn)程相關(guān)的信息,Linux內(nèi)核的進(jìn)程控制塊是task_struct結(jié)構(gòu)體。grep -r “task_struct” /? 可以查找根目錄下,包含task_struct的文件文件?;蛘?find /usr -name sched.h。從而,在/usr/include/linux/sched.h文件中可以查看struct task_struct 結(jié)構(gòu)體定義。其內(nèi)部成員有很多,我們重點(diǎn)掌握以下部分即可:
(1)進(jìn)程id。系統(tǒng)中每個(gè)進(jìn)程有唯一的id,在C語(yǔ)言中用pid_t類型表示,其實(shí)就是一個(gè)非負(fù)整數(shù)。
(2)進(jìn)程的狀態(tài),有就緒、運(yùn)行、掛起、停止等狀態(tài)。
(3)進(jìn)程切換時(shí)需要保存和恢復(fù)的一些CPU寄存器的值。
(4)描述虛擬地址空間的信息(如虛擬地址與物理地址之間的映射關(guān)系)。
(5)描述控制終端的信息(桌面終端、文字終端和設(shè)備終端,pts/0或者tty0等)。
(6)當(dāng)前工作目錄(當(dāng)前進(jìn)程的工作目錄)。
(7)umask掩碼(對(duì)文件的一種保護(hù)機(jī)制,文件權(quán)限)。
(8)文件描述符表,包含很多指向file結(jié)構(gòu)體的指針。
(9)和信號(hào)相關(guān)的信息。
(10)用戶id和組id。
(11)會(huì)話(Session)和進(jìn)程組(功能相似的一些進(jìn)程組成一個(gè)進(jìn)程組)。
(12)進(jìn)程可以使用的資源上限(Resource Limit)。(ulimit –a命令可以查看)
(2)ulimit命令詳解
ulimit -a命令用來顯示各種進(jìn)程能夠使用的資源上限(顯示并控制shell啟動(dòng)的程序或進(jìn)程所能夠使用的資源上限,ulimit為shell內(nèi)建命令),Linux對(duì)于每個(gè)用戶,系統(tǒng)限制其最大進(jìn)程數(shù),為提高性能,可以根據(jù)設(shè)備資源情況,設(shè)置個(gè)Linux用戶的最大進(jìn)程數(shù),一些參數(shù)需要設(shè)置為無(wú)限制,如:數(shù)據(jù)段長(zhǎng)度:ulimit -d unlimited???? 最大內(nèi)存大小:ulimit -m unlimited????? 堆棧大小:ulimit -s unlimited
在用這個(gè)命令的時(shí)候主要是為了產(chǎn)生core文件,就是程序運(yùn)行發(fā)行段錯(cuò)誤時(shí)的文件:ulimit -c unlimited??? 從而產(chǎn)生core文件。
[root@localhost ~]# ulimit -a
core file size????????? (blocks, -c) 0
data seg size?????????? (kbytes, -d) unlimited
scheduling priority???????????? (-e) 0
file size?????????????? (blocks, -f) unlimited
pending signals???????????????? (-i) 14473
max locked memory?????? (kbytes, -l) 64
max memory size???????? (kbytes, -m) unlimited
open files????????????????????? (-n) 1024
pipe size??????????? (512 bytes, -p) 8
POSIX message queues???? (bytes, -q) 819200
real-time priority????????????? (-r) 0
stack size????????????? (kbytes, -s) 8192
cpu time?????????????? (seconds, -t) unlimited
max user processes????????????? (-u) 14473
virtual memory????????? (kbytes, -v) unlimited
file locks????????????????????? (-x) unlimited
如果需要修改open files (-n) 1024的值,命令就是limit -n 2048(隨各自需要設(shè)置),其余類似。
參數(shù)解釋:
?? -a 顯示目前資源限制的設(shè)定。?
???? ? -c <core文件上限> 設(shè)定core文件的最大值,單位為區(qū)塊。?
?? ????-d <數(shù)據(jù)節(jié)區(qū)大小> 程序數(shù)據(jù)節(jié)區(qū)的最大值,單位為KB。?
??? ?? -f <文件大小> shell所能建立的最大文件,單位為區(qū)塊。?
???? ? -H 設(shè)定資源的硬性限制,也就是管理員所設(shè)下的限制。?
???? ? -m <內(nèi)存大小> 指定可使用內(nèi)存的上限,單位為KB。?
?????? -n <文件數(shù)目> 指定同一時(shí)間最多可開啟的文件數(shù)。?
????? ?-p <緩沖區(qū)大小> 指定管道緩沖區(qū)的大小,單位512字節(jié)。?
????? ?-s <堆疊大小> 指定堆疊的上限,單位為KB。?
????? ?-S 設(shè)定資源的彈性限制。?
????? ?-t <CPU時(shí)間> 指定CPU使用時(shí)間的上限,單位為秒。?
????? ?-u <程序數(shù)目> 用戶最多可開啟的程序數(shù)目。?
????? ?-v <虛擬內(nèi)存大小> 指定可使用的虛擬內(nèi)存上限,單位為KB。
(3)進(jìn)程狀態(tài)
進(jìn)程基本的狀態(tài)有5種。分別為初始態(tài)(創(chuàng)建),就緒態(tài),運(yùn)行態(tài),掛起態(tài)與終止態(tài)。其中初始態(tài)為進(jìn)程準(zhǔn)備階段,常與就緒態(tài)結(jié)合來看。
?
總結(jié)
以上是生活随笔為你收集整理的进程控制块PCB(进程描述符)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试管婴儿不促排可以吗
- 下一篇: 家用的投影仪分辨率越高越好还是越低越好?