多任务(20250210)
1. 进程的概念
(1) 程序:是一段存放在外存中代码的集合(静态的)
(2) 进程:是一个程序动态执行的过程,包括创建、调度、消亡(动态的)
2. 如何实现多任务
Linux中,通过进程、线性实现多任务
3. 进程
正在执行的程序(动态),需要消耗内存和CPU,是一个动态执行的过程
进程的生存周期:创建 -> 调度 -> 消亡
进程:源代码编译为可执行程序,运行程序,消耗CPU和内存资源
进程和程序的区别:
1)程序是永存,进程是暂时的
2)进程有程序状态的变化,程序没有
3)进程可以并发,程序无并发
4)进程与进程会存在竞争计算机的资源
5)一个程序可以运行多次,变成多个进程, 一个进程可以运行一个或多个程序
4. 进程的创建
每个进程被创建时,操作系统回味进程创建4G虚拟的内存空间
系统启动(空间被创建)时,bss段按位清零
5. 进程调度
原则:保障多个任务能同时执行
1)宏观并行
多个任务同时向下执行
2)微观串行
CPU在多个任务中快速切换,保障多个任务同时向下执行
多任务操作系统分为:
非抢占式多任务:由调度程序来决定什么时候停止一个进程的运行(如时间片结束时),以便其他进程得到执行机会
Unix, Linux抢占式多任务:除非进程自己主动停止运行,否则会一直执行。
Mac os9 Windows3.1
常用调度算法:
1. 先来先执行,后来后执行
2. 短作业优先
3. 高优先级调度算法
4. 时间片轮转调度算法
6. 进程的状态
1)运行态(用户运行态、内核运行态) R
正在执行,且被CPU任务调度所执行的进程
2)就绪态 R
正在执行,没有CPU任务调度执行的进程(只缺少cpu)
3)可唤醒等待态 S
也称为睡眠态,阻塞等待资源的进程
4 )不可唤醒等待态 D
不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
5) 暂停态 T
被暂停执行的进程
6) 僵尸态 Z
进程执行结束,空间没有被回收
7) 结束态 X
进程执行结束,空间被回收
三态图
Linux七态图
7. 进程相关指令
1.ps -aux
查看进程状态
ps -aux|grep a.out
2.top
根据CPU占用率查看进程信息
q 退出
3.ps -ef
查看当前时刻进程信息
PID:进程的ID号(唯一)
PPID:父进程的ID号
4.pstree
查看进程关系
pstree -p
查看所有进程关系及pid号
pstree -sp + 进程id号
查看某一进程关系
5.kill
killall
给进程发送一个信号
kill -9 进程PID
killall -9 进程名
6.jobs
查看当前终端下的后台执行任务
7.fg 编号
让一个后台执行的任务放到前台执行
8 进程相关接口
父子进程:
父进程:创建新进程的进程称为新进程的父进程
子进程:被创建的进程称为原进程的子进程
8.1 fork 函数
pid_t fork(void);
一次调用,会返回两次。
子进程先运行还是父进程先运行,顺序不确定,变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。
功能:通过该函数可以从当前进程中克隆一个同名新进程。
克隆的进程称为子进程,原有的进程称为 父进程。
子进程是父进程的完全拷贝。
子进程的执行过程是从fork函数之后执行。
子进程与父进程具有相同的代码逻辑。
参数:
返回值:
失败返回-1
成功父进程中返回子进程的PID
子进程中返回0
8.2 getpid函数
pid_t getpid(void);
功能:
获得调用该函数进程的pid
参数:
返回值:
进程的pid
8.3 getppid函数
pid_t getppid(void);
功能:
获得调用该函数进程的父进程pid号
参数:
返回值:
返回父进程id号