进程概念
-
冯洛依曼体系
冯洛伊曼体系结构 --奠定了现代计算机的硬件体系结构
现代计算机的五大硬件单元:
输入设备:键盘
输出设备:显示器
存储器:内存
运算器: cpu
控制器
-
操作系统
目的:是计算机更人性化,人机交互能够更加友好
功能:统筹管理计算机上的软硬件资源
管理方式:
-
库函数和系统调用接口的关系
上下级的调用关系,库函数就是对系统调用接口的一层封装
-
操作系统对下管理软硬件资源,对上提供良好的交互环境
进程概念
-
概念:
- 进行中的程序, 进程就是PCB task_struct
PCB:内存指针, 程序计数器,上下文数据,标识符PID,进程状态,优先级,io状态
-
查看进程
ps -ef aux /proc pid_t getpid()
-
进程创建
fork() 通过复制调用进程(父进程),创建一个新的进程(子进程)
复制PCB 代码共享 数据独有
创建子进程的目的:分摊压力,完成其它的任务 (通过返回值分辨父子进程)
父进程:返回值是子进程的pid, pid < 0创建失败 pid == 0 创建成功
-
进程状态
R S D T Z X T
- Z 僵尸进程: 进程退出但是资源没有完全释放–处于僵尸状态
- 产生原因:子进程先于父进程退出,保存退出返回值在PCB中,这时候操作系统不会随意释放所有资源因为父进程可能关心子进程退出原因,但是父进程可能没有及时关注这个通知,导致子进程退出后资源一直无法完全释放,处于僵尸状态–成为僵尸进程
- 处理方法:退出父进程
- 如何避免:父进程等待
- 孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程
- 守护进程:特殊(脱离与终端+会话的关联)的孤儿进程
-
进程优先级
优先级: 决定资源的优先分配权的等级划分
让操作系统运行更加合理
交互式进程
批处理进程
设置: ps-efi
PRI 优先级 NI nice值: PRI无法直接设置,但是可以通过设置N值,进而调整PRI值
PRI = PRI + NI
renice -n size -p pid
-
环境变量:保存系统运行环境参数的变量 --全局特性
命令: env echo set export unset
常见:HOME SHELL PATH
代码中的操作以及特性:int main(,char* env[]) extern environ; char getenv(char)
-
程序地址空间
虚拟地址空间–内存描述符mm_struct
虚拟地址空间用过页表与物理地址进行映射
作用: 保持进程独立性, 通过页表映射物理地址–充分利用物理内存, 增加内存访问控制
-
子进程的创建过程
-
进程控制
-
进程创建:fork, vfork, clone
-
进程终止:进程退出场景–退出方式 return exit _exit $? errno – perror strerror
-
进程等待: 等待子进程状态改变(等待子进程终止)–避免产生僵尸进程
pid_t wait(int statu) — 阻塞等待任意一个子进程退出, 没有子进程退出在一直等待, 获取子进程退出返回值,返回退出子进程的pid
waitpid(int pid, int* statu, int opt)
默认阻塞等待任意一个子进程/指定子进程退出,没有子进程则一直等待
但是waitpid 第三个参数可以将waitpid 设置为非阻塞, 没有子进程退出则立即报错返回0
-
阻塞/非阻塞
完成功能的时候如果不具备完成条件,区别就是是否立即返回
-
-
程序替换
如果程序异常终止,低7位中保存异常信号值>0, 否则低7位为0,通过低7位是否为0判断程序是否异常退出
-
替换原因
让子进程完成其它功能
-
如何替换
execl
execlp
execle
execv
execvp
execve
execl与execv的区别:参数的赋予是以指针数组赋值还是不定参
有p与无p的区别: 第一个参数,程序名称是否需要路径
有e和无e区别: 环境变量是否有用户自己设置
-
原理:
将进程的虚拟地址空间所映射在物理内存的区域进行改变,改变成另一个程序在内存中的位置,更新页表信息,重新初始化虚拟地址空间