一.多任务:让系统具备同时处理多个任务的能力
1.如何实现多任务
1.1进程:操作系统上正在运行的程序,需要消耗内存和CPU
1.1.1 进程的生存周期:创建、调度、消亡
1.1.1.1进程的创建:每个进程被创建时,操作系统会为该进程分配4G的虚拟内存空间。
1.1.1.2进程的调度:微观串行、宏观并行
cpu在调度时常用的调度算法:时间片轮转调度算法、高优先级优先算法、先来先服务后来后执行、短作业优先
进程的状态:三态图
1
linux进程七态图
1.运行态(用户运行态、内核运行态) R
正在执行,且被CPU任务调度所执行的进程
2.就绪态 R
正在执行,没有CPU任务调度执行的进程(只缺少cpu)
3.可唤醒等待态 S
也称为睡眠态,阻塞等待资源的进程
4.不可唤醒等待态 D
不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
5.暂停态 T
被暂停执行的进程
6.僵尸态Z进程执行结束,空间没有被回收
7.结束态 X
进程执行结束,空间被回收
1.1.1.3进程的消亡
提出进程
回收进程
1.1.2进程与程序的区别
进程 | 程序 | |
存储区域不同 | 内存 | 硬盘 |
状态不同 | 动态执行过程、短暂的 | 静态的数据集合、永恒的 |
关系 | 一个进程可以运行多个程序 | 程序运行可以产生多个进程 |
进程需要消耗CPU,进程间会资源竞争 |
1.1.3进程的常用命令
ps -aux:查看系统中所有进程的信息和状态
PID:进程的ID号 PPID:父进程的ID号
父进程:创建新进程的进程称父进程
子进程:创建出的新进程
操作系统运行时会打开一号进程,由一号打开2、3……进程
top:动态查看当前系统进程状态及CPU/内存占有率
ps -ef:查看进程状态信息和父子进程ID号
pstree:查看进程间的关系 pstree -p(关系族谱可带ID号) pstree -p id号(可查看某id的关系族谱图)
kill(给进程发送信号)
kill -l 查看kill相关命令的信号数
kill -信号编码 pid让某pid进程执行编码
ps -aux | grep a.out(组合命令)
|管道:将前面的输出作为后面的输入
grep(查找匹配)
jobs(查看后台进程编号)(当前终端)
fg(将后台编号将进程调到前台)
pid_t fork(void);
功能:通过拷贝父进程产生一个新的子进程
拷贝父进程0-3G的虚拟内存
内核中拷贝父进程的PCB块更新自己的PID号
父子进程用户空间互相独立,数据不独立
参数无
返回值:
成功:子进程的ID号返回给父进程、0返回给子进程
失败:-1返回父进程
当产生子进程后,根据FIFO调度算法,先执行父进程,由于内核的PCB保存了父进程的产生子进程的位置,继续向下执行。
fork()&&fork()||fork()为五个进程,要根据返回值查看,是否fork()
pid_t getpid() ;获取子进程ID
pid_t getppid(); 获取父进程ID