Linux进程概念

本文深入解析进程的概念,从冯诺依曼体系结构出发,探讨操作系统如何通过进程描述符控制进程运行,详细介绍进程创建、状态、优先级及环境变量等核心知识点。

系统编程:

进程概念—>进程控制—>基础IO—>进程间通信—>进程信号—>多线程

进程概念:

冯诺依曼体系结构—现代计算机硬件体系结构
计算机五大硬件单元:

1、输入设备:键盘
2、输出设备:显示器
3、存储器:内存
4、运算器:CPU
5、控制器

所有设备都是围绕存储器工作的

在这里插入图片描述
硬件结构决定了软件行为

操作系统:一个软件安装在计算机硬件上

目的:为了让计算机更加好用—功能:合理统筹管理计算机上边的软硬件资源
管理:先描述,再组织

graph TD
A[用户,打印hello bit] -->B(shell,库printf)
B --> C[系统调用接口]
C -->D[文件管理,内存管理,操作系统,进程管理]
D -->E[硬件驱动]
E -->F[键盘,鼠标,显示器等]

库函数与系统调用接口的关系: 库函数封装了系统调用接口,是上下级的调用关系

进程:

进程是什么: 进行中的程序
[外链图片转存失败(img-6ukyUyAJ-1564212815938)(en-resource://database/590:1)]
操作系统通过pcb来控制一个进程的运行,这个pcb也叫进程描述符,描述了一个运行中的程序,在操作系统角度,进程就是pcb-task_struct
cpu分时机制:切换调度进程,每个进程只运行很短一段时间(时间片)

内存指针
程序计数器
上下文数据
标识符PID
进程状态
优先级—交互式(前台)/批处理(后台)
IO状态信息
记账信息

[外链图片转存失败(img-X8aoUSqt-1564212815945)(en-resource://database/1821:1)]

进程查看

ps -ef/aux —查看系统所有进程信息
/proc —保存系统中正在运行的程序信息
pid_t getpid() —获取调用进程的pid

进程创建:创建一个子进程

fork()—通过复制调用进程(父进程)创建一个新的进程(子进程)
(内存指针,上下文数据,程序计数器)

复制父进程的pcb(意味着和父进程拥有一样的内存指针,程序计数器,上下文数据)
在这里插入图片描述
和父进程运行相同的代码,一样的运行位置,
处理一样的数据
父子进程代码共享,数据独有
pid_t fork(void);
如何分辨父子进程:返回值

父进程:返回子进程的pid,pid>0
子进程:返回0
失败:返回-1

创建子进程的意义:

分摊压力,cpu资源足够的情况父子进程同时处理数据,效率高,希望完成其它的任务

进程状态:就绪,运行,阻塞

Linux进程状态

运行态(R):
可中断睡眠态(S):
不可中断睡眠态(D):
停止态(T):
僵死态(Z):
死亡态(X):
追踪态(t):

僵尸进程: 处于僵死态的进程—进程退出了但是资源没有完全释放(没有完全退出)==
如何产生: 子进程先于父进程退出,将自己的退出原因保存在pcb中,操作系统检测到子进程退出,因为父进程有可能关注退出原因,所以不敢随意释放所有资源,通知父进程子进程的退出,但是这时候父进程可能正在打麻将,没有关注到这个通知导致子进程退出了,但是资源一直没有完全释放,处于僵死状态,成为僵尸进程

危害:资源泄露,一个用户能够创建的进程是有限的,可能导致新进程创建失败
处理:干掉父进程
如何避免:进程等待

孤儿进程: 父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程`

守护进程/精灵进程: 特殊的孤儿进程

进程优先级:通过一个评级来决定一个进程的cpu资源优先分配权

为了让计算机运行的更加合理(因为进程的性质各有不同—批处理/交互式)

查看:ps -l —PRI —NI
修改:优先级无法直接修改,但是可以通过修改NI的值,来调整PRI的值

PRI=PRI+NI
renice -n ni_val -p pid / / / nice -n ni_val ./main
nice值范围:-20~19
优先级调整更多的是针对cpu密集型程序(对cpu资源要求比较高)
磁盘密集型程序因为本身对cpu资源要求就不是很高,因此大多数情况下,没必要调整
竞争性: 独立性: 并行 并发

环境变量:保存有设置操作系统运行环境参数的变量

查看环境变量:env / echo / set
设置环境变量:export
删除环境变量:unset
常见环境变量:HOME SHELL / PATH
环境变量在代码中的操作/特性:全局特性—继承


程序地址空间:

地址:内存区域的编号
—进程的虚拟地址空间—内存描述符—mm_struct
操作系统通过mm_struct这个结构体给进程描述了一个虚拟的地址空间
如何描述:

mm_struct
{
    ulong size;
    ulong code_start;
    ulong code_end;
    ulong data_start;
    ulong data_end;
}


虚拟地址空间+页表:提高内存利用率,对内存访问进行控制
保证进程独立性
在这里插入图片描述


写时拷贝技术:父进程创建了子进程,但是并没有直接给予子进程开辟内凑你,拷贝数据,而是跟父进程映射到同一个位置,但是如果内存中数据发生的改变,那么对于改变的这块内存,需要重新给子进程开辟内存,并且更新页表信息。提高子进程创建性能
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值