在没有进程出现时:
为什么需要进程(在多道程序技术的基础上):
在主存中进程是连续存储的空间–进程控制块
进程控制块中的内容有:
进程标识符、处理机状态、进程调度信息、进程控制信息。
标识符 |
---|
状态 |
优先级 |
程序计数器 |
内存指针 |
上下文数据 |
IO状态信息 |
记账信息 |
…… |
进程的线程共享进程资源
进程(process) ,线程(Thread)
总结:
进程 | 线程 | |
---|---|---|
资源 | 资源分配的基本单位 | 不拥有资源 |
调度 | 独立调度的基本单位 | 独立调度的最小单位 |
系统开销 | 进程系统开销大 | 线程系统开销小 |
通信 | 进程间的通信 | 读写同一进程数据通信 |
创建、就绪、阻塞、执行、终止
进程调度:当进程发生进程调度时,就可以获取到CPU的资源
时间片用完:分配给某个进程使用CPU的时间用完了
IO请求:当需要IO设备资源,但是不能马上满足时
IO完成:IO请求被满足时
创建进程时拥有PCB但其他资源尚未就绪的状态称为创建状态
操作系统提供fork函数接口创建进程
进程结束由系统清理或者归还PAB的状态称为终止状态
有一群生产者进程在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程需要将所生产的产品放到一个缓冲区中,消费者进程可以从缓冲区中取走产品消费
在生活中这种模型没有问题:
在计算机中这种模型存在问题:
这里缓冲区就是临界资源
有五个哲学家,他们的生活方式是交替地进行思考和进餐,哲学家们共同使用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子。平时哲学家们只进行思考,饥饿时则试图取靠近他们的左、右两支侉子,只有两支筷子都被他拿到的时候就能就餐,进餐完毕之后,放下左右筷子继续思考
问题:
这里的筷子就是临界资源
指虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源,才可重新竞争使用该资源。
当多个线程并发使用进程资源时,会发生什么?
也会发生生产者或哲学家的问题,因此进程内多线程也需要同步
前台进程、后台进程、守护进程(特殊的后台进程)
操作系统提供fork函数接口创建进程
假设:
进程A调用fork接口创建进程B,进程B调用fork接口创建进程C
则:
进程A:父进程
进程B:子进程
进程A和进程B就是父子进程关系
父子进程关系查看命令:pstree
通过命令“man ps ”查看Linux系统中各种进程状态标记
状态符号 | 状态说明 |
---|---|
R | (TASK_RUNNING),进程正处于运行状态 |
S | (TASK_INTERRUPTIBLE),进程正处于睡眠状态 |
D | (TASK_UNINTERRUPTIBLE),进程正在处于IO等待的睡眠状态 |
T | (TASK_STOPPED),进程正处于暂停状态 |
Z | (TASK_DEAD or EXIT_ZOMBIE),进程正处于退出状态,或僵尸进程 |
ps: 列出当前进程
ps -aux:列出当前进程及进程的详细信息
ps -u xx:查看xx用户的进程
ps -aux | grep ‘A’ :查看A正在运行的进程
ps -ef --forest:查看进程树(呈现父子进程关系)
ps -aux --sort=-pcpu:以占用CPU资源的顺序(由大到小)列出所有进程
ps -aux --sort=-pmen:以占用内存的顺序列出所有进程
top: 查看系统中所有进程的状态
其中:
PID:进程ID
USER:进程所属的用户
PR:进程的优先级
VIRT:进程的虚拟内存
%CPUL:进程所占CPU资源
%MEM:进程所占内存资源
TIME:进程运行使用的时间
COMMAND:进程执行使用的命令
kill -9 1122: 无条件的停止1122编号的进程
进程调度是指计算机通过决策决定哪个就绪进程可以获得CPU使用权
抢占式调度和非抢占式调度对比:
抢占式调度 | 非抢占式调度 | |
---|---|---|
系统开销 | 频繁切换 | 切换次数少,开销小 |
公平性 | 相对公平 | 不公平 |
应用 | 通用系统 | 专用系统 |
根据就绪队列中就绪进程的先后顺序选择进程执行
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
比如:进程1和进程2都需要使用传真机、打印机,进程1先使用传真机,进程2先使用打印机,但是他们都想要使用另外一个资源,却都不释放自己现有的资源,因此:
进程1使用传真机为步骤A,使用打印机为步骤D
进程2使用传真机为步骤C,使用的打印机为步骤B
若调度顺序为A->B->C->D,就会产生死锁
若调度顺序为A->D->B->C,就不会产生死锁
四个条件必须都满足才会发生
破环产生死锁的四个必要条件中的一个即可
已分配资源表:表示每个进程已占有的A/B/C/D的资源
A | B | C | D | |
---|---|---|---|---|
P1 | 0 | 0 | 1 | 4 |
P2 | 1 | 4 | 3 | 2 |
P3 | 1 | 3 | 5 | 4 |
P4 | 1 | 0 | 0 | 0 |
所需资源表:表示每个进程对于A/B/C/D资源一共需要多少
A | B | C | D | |
---|---|---|---|---|
P1 | 0 | 6 | 5 | 6 |
P2 | 1 | 9 | 4 | 2 |
P3 | 1 | 3 | 5 | 6 |
P4 | 1 | 7 | 5 | 0 |
可分配资源表:A/B/C/D资源现在分别剩余多少
A | B | C | D |
---|---|---|---|
1 | 5 | 2 | 0 |