Linux进程入门学习(二)-基础知识

来源:互联网 发布:闪电站小猪知乎 编辑:程序博客网 时间:2024/06/02 09:47

1. 进程的地址空间

进程的地址空间,通常指的是虚拟地址空间,是进程活动的地址范围。大小为4G,主要包括两大块地址空间

    a. 内核空间(kernel space) ,大小为1G(0xc0000000 - 0xffffffff)    b. 用户空进(user space),大小为3G(0x00000000 - 0xbfffffff)

如下图表示
进程地址分布
地址空间特点:

    a. 用户地址空间与内核地址空间是隔离的,只能通过专用的系统调用才能交互;    b. 进程间的用户地址空间是独立的,而内核地址空间则是共享的。 进程虚拟地址空间的物理映射特点:    a.内核空间映射到指定的地址空间    b. 不同进程的用户空间地址动态映射到不同的物理地址空间    c. 不同进程的相同地址空间动态映射到不同的物理地址空间

进程虚据地址空间分布:
进程的4G 地址空间建立后,划分为固定的功能区间,进程的不同操作对应于不同的地址区间,如下图:
虚拟地址空间分布与实际地址映射
那么问题来了,每个进程都需要分配4G的内存空间,但是实际上内存肯定是不够分配的,那么系统是如何解决这一问题的呢?首先理清几个关系,进程要使用内存,就要向操作系统申请,操作系统就会把相应的指令发给MMU(内存处理单元),然后MMU会通过页表转换到实际内存当中(如上图)。实际上是这样子的,一个进程产生后就会向操作系统申请4G大小的内存空间,操作系统当然是答应的,如果操作系统不答应,那么进程就跑不起来,程序就无法运行。操作系统虽然是答应请求了,但是操作系统也不是直接操作内存的,而是通过MMU内存处理单元映射到实际地址空间,MMU就在这个过程当中,把操作系统申请4G地址空间通过页表来转换到实际内存中的实际地址,4G的空间被压缩后可能变成512M或者其他值,这个就取决于页表。那么问题又来了,如果进程要使用的内存空间小于实际地址空间当然是不会出事的,万一超过了实际内存地址空间怎样么办?这时MMU(内存处理单元)就会拒绝操作系统的请求,并告诉操作系统内存已经用完了(操作系统实际不知到进程用来多少内存),进程也无法执行相应超出实际内存部分的代码。

2.进程的生命周期

linux 系统中,进程的整个生老病死过程中,主要经历以下几个阶段
1)进程的创建
2)进程的调度

            进程就绪,对应就绪态            进程运行,对应执行态            进程挂起,对应休眠态、暂停态

3)进程的销毁

        正常退出,对应死亡态        非正常退出,对应僵尸态,孤儿态

进程生命周期
注意:
1)处于执行态的进程,当其不满足某一条件时,会切换到休眠态;
2)当再次满足条件时,不能直接切换到执行态,而是要先到就绪队列中,等待时间片轮转让,再次获得处理;
3)处于僵尸态的进程称为僵尸进程,而处于孤儿态的进程则称为孤儿进程。

进程状态查看
a.pstree –以树的方式查看进程
b.pstree -p:显示当前所有进程的进程号和进程id
1)使用ps 命令查看进程
ps -Af
ps -ef
ps -lA (查看具体进程:ps -lA | grep 进程名)
查看进程
相关参数如下:
F:代表这个进程旗标(process flags),说明这个进程的权限,常见有:
若4 表示此进程的权限root ;
若1 則表示此子进程仅能fork。
S:代表这个进程的状态(STAT),主要的状态有:
R (Running):该进程正在运行;
S (Sleep):该进程正在睡眠,可被唤醒。
D :不可被唤醒
T :停止状态(stop);
Z (Zombie):僵尸进程。
UID/PID/PPID:代表『此进程被该UID 所拥有/进程的PID 号/此进程的父进程PID 』
C:代表CPU 使用率,单位为百分比;
PRI/NI:Priority/Nice 的缩写,代表此进程被CPU 所执行的优先顺序,数值越小代表该进程越快被CPU 执行。
ADDR/SZ/WCHAN:都与内存,ADDR 是kernel function,指出该进程在内存的哪個部分,如果是个running 进程,一般就会显示『- 』/ SZ 代表此进程用掉多少内存/ WCHAN 表示目前进程是否工作,同样的, 若为- 表示正在工作中。
TTY:登入者的终端机位置,若为远程登入则使用动态終端介面(pts/n);
TIME:使用掉的CPU 时间,注意,是实际花费掉的CPU 运作的时间,而不是系統时间;
CMD:就是command 的缩写,造成此进程的指令。
2)使用top 动态查看进程
top -p 进程PID
top -p

            参数介绍                PID 每个进程的ID。                PPID 每个进程的父进程ID。                UID 每个进程所有者的UID 。                USER 每个进程所有者的用户名。                PRI 每个进程的优先级别。                NI 该进程的优先级值。                SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。                TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。                DSIZE 数据和堆栈的大小。                TRS 文本驻留大小。                D 被标记为“不干净”的页项目。                LIB 使用的库页的大小。对于ELF 进程没有作用。                RSS 该进程占用的物理内存的总数量,单位是KB。                SHARE 该进程使用共享内存的数量。                STAT 该进程的状态。                其中S 代表休眠状态;                D 代表不可中断的休眠状态;

关于进程祖先的说明:
逻辑电路->bootloader->系统启动->0号进程->1,2号进程。系统启动产生0号进程(内核进程),0号进程产生1号进程和2号进程,1号进程跑出内核,继续产生其他进程;2号进程则留在内核,继续管理内核中的进程。

3.进程的调度算法

当操作系统中同时执行多个进程时,决定进程获取CPU 控制权的先后顺序及控制时间长短就显得特别重要了,而这些事情是由操作系统的调度算法模块来完成的。
linux 操作系统从0.1 版本发布至今,采用的调度算法经历了无数次的改动,目前形成了
如下几种主要调度算法:
1.先来先服务调度算法
2.短作业(进程)优先调度算法
3.时间片轮转法
4.多级反馈队列调度算法
5 . 优先权调度算法的类型
6 . 高响应比优先调度算法

原创粉丝点击