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

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 . 高响应比优先调度算法

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值