进程概念:
1.个程序运行在操作系统上,即操作系统为该程序分配一系列的资源,并且将该进程描述为一个PCB(task_struct)结构体。
2. 进程即运行起来的程序,分配CPU资源的实体
task_struct结构体主要内容:
1.标识符,即进程id
2.上下文数据,保存进程执行时,寄存器当中的数据内容
3.程序计数器,保存当前进程所要执行的下一条命令
4.内存指针,指向进程执行所需要的数据和代码
5.状态,表示当前进程的所处状态
等等…
进程状态:
1.运行态(R)
2.可中断睡眠态(S)
3.不可中断睡眠态(D)
4.停止态(T)
5.僵尸态(Z)
6.跟踪态(t)和死亡态(X)
僵尸进程:
产生原因:
由于子进程先于父进程退出,
子进程退出时,为了保存自己的退出状态,等待父进程获取自己的退出状态,释放子进程资源
但是由于父进程并没有关心子进程退出,导致子进程一直占用着系统资源,不释放,直到父进程读取子进程退出状态
也就导致子进程变成了僵尸进程
危害:
造成内存泄漏,浪费系统资源,正常的进程无法创建
详见:https://blog.csdn.net/Code_ZX/article/details/84636809
孤儿进程:
父进程先于子进程退出
子进程没有父进程获取自身的退出状态,也就变成了孤儿进程
但是,所有的孤儿进程都被一号(init)进程所收养,由一号进程作为所有孤儿进程的父进程,负责孤儿进程的资源释放
详见:https://blog.csdn.net/Code_ZX/article/details/84636809
**注:**孤儿进程在系统后台运行
进程优先级:
概念:决定CPU资源分配的先后顺序,在进程中,优先级有PRI值表现,值越高,代表优先级越低
查看进程优先级命令:ps -efl
UID:进程执行者的身份
PID:进程ID
PPID:父进程ID,也称线程ID
PRI:代表进程优先级,值越小,优先级越高
NI:进程nice值,在-20—19的范围内,可通过修改nice值,修改进程优先级
修改进程优先级:
原理:PRI(new) = PRI(old) + NI(nice)
命令:
nice -n + nice值 + 运行程序指令 在程序运行前修改优先级
renice nice值 -p + PID 在程序运行时修改优先级
进程其他概念:
竞争性:因为CPU资源有限,每个进程为了抢夺CPU资源,因此进程之间具有竞争属性
也就引出了 优先级
独立性:每个进程运行当中是相互独立的,不能影响其他进程的运行
并行: 并行是指多个CPU,每个CPU加载一个进程,同时运行多个进程
并发: 并发指单个CPU,多个进程在其采用进程切换的方式,在一段时间内,相当于多个进程 同时运行的方式
环境变量:
概念:操作系统中具有特殊功能的全局参数
查看环境变量:
echo $变量名:显示该环境变量的值
export:设置一个新的环境变量
env:显示所有的环境变量
unset:清除环境变量
set: 显示本地定义的shell变量和环境变量
通过代码获取环境变量方法:
1.命令行的第三个参数 char* env[]
2.通过第三方变量(environ):环境变量表,是一个字符指针数组,
需要extern声明
3.通过getenv(参数): 参数环境变量名
程序地址空间(进程地址空间)(虚拟地址空间):
1.4G为例:
从低位(0X00000000)到高位(0XC0000000):用户区
依次是:代码区—>已初始化全局数据区—>未初始化全局数据区—>堆区
—>共享区—>栈区—>命令行参数和环境变量区
从(0XC0000000)到(0Xffffffff):内核区,用户访问受限
2.(物理地址)内存地址:其实是对内存的编号,一个地址的指向就是内存的某一个位置
用户一概看不到,由OS统一管理
3.页表:1.记录虚拟地址与物理地址之间的映射关系
2.内存的访问控制
如图:
我胡汉三又回来了!!!!!!!