操作系统【进程: 原理 调度 通信】

进程原理

进程:对CPU进行的抽象与装扮。本质是程序加载到内存上。
进程就是为了在cpu上实现多道编程。
进程就是内存上的一片内存空间,然后等待上cpu执行。(物理程序计数器控制)
物理层面:所有进程使用同一程序计数器
逻辑层面:每个进程有自己的计数器,记录下一条指令在的位置(确定挂起后重新执行点的位置)

多道编程
cpu利用率:进程20%用cpu,80%IO
单进程 80的利用率
n进程 1-0.8^n 利用率(在前面IO时利用cpu)一般12道到极限。

理解:提升通道,提高CPU利用率,然后当前时段 所有进程使用CPU的时间为 time*利用率,然后进行均匀(或其它方式)分配。
00:00时A程序运行,单道效率20,A需要CPU运行10分钟。
单道情况下,需要50分钟完成A的运行
n道情况下,需要 10/(1-0.8^n)*n(这里的n道,理论上需要均分任务)分钟完成。
(但是多道进程切换也需要消耗资源!!!!!)

进程产生于消亡:
产生:
1 系统初始化(女娲造人)
2 执行进程产生新的进程(生子)
3 用户请求创立新进程(试管婴儿)

消亡:
1 进程执行完毕(寿终)
2 进程执行错误自己退出(自杀)
3 进程别其他进程终止(他杀)
4 进程异常强制退出(exception处决)(越界被OS捕捉)

同级别的进程只能杀掉自己的子进程或自己,但是不能kill掉其他同级别进程。但是super级别的进程可以。

进程结构
linux:进程组(也就是进程树)
windows:进程平等

进程状态
执行:
阻塞:等待IO或者其他操作形成的阻塞
就绪:非阻塞被挂起的状态或者新进的可以马上被执行的进程
状态转变:1 阻塞需要先就绪才能被执行(逻辑) 2 就绪态不能回的阻塞(因果律,不需要等待资源就不阻塞)

进程空间/地址空间
地址空间是进程所需要的资源(存储单元的内容)
目的是让多个进程空间共享一个物理内存

进程管理
OS通过 进程控制块/进程表(PCB)来记录进程(内存上的开辟的固定空间)
寄存器,程序计数器,状态字,栈指针,优先级,PID,信号,创建时间,CPU消耗时间等
数据结构:线性表,链表,struct或者树图等结构。

进程创建
1 分配PCB(分配空间)
2 初始化寄存器
3 初始化页表
4 程序代码从磁盘读入内存
5 CPU进入 用户态
6 跳到程序的起始地址(设置程序计数器)(一般5 6 合并一起完成)
UNIX:1 fork创建一个一样的新进程 2 exec新进程地址空间用另一个程序的内容覆盖,跳转到新程序的起始位置,实现新程序的启动。
Windows:调用CreateProcess系统函数,传递参数,创建新的页表。

PS
关于pro celery调度任务
4个pid指的起了4个celery进程,其中每个celery可以指定线程数n,但是指定多于1时gpu占用溢出,因为GPU是任务处理,运行时除了计算还需要占用显存,新任务进来计算没问题可以挂起线程,但是显存就会不够用而报错。

进程调度

1 FCFS:先来先调度
2 时间片轮转:每个进程上CPU固定时间(提高响应时间,但是切换消耗大)
3 短任务优先(STCF):需要CPU时限短的优先(提高响应时间,但是会造成长任务的等待)
4 优先级调度:短任务就是其一种。调整优先级可以调整进程的切换(低等级进程饥饿升级,无法保证响应时间)
5 混合调度:队列优先级大类,细分为时间片轮转执行
6 实时调度:1)最早截止任务优先(按照ddl执行,动态) 2)最短周期优先(不抢占,静态)
7 优先级倒挂(类似死锁)

进程通信

管道(pipe):半双工
可以存在于内存或者硬盘中
shell中: | ps -aux | grep python, 前面的输出作为后面的输入
一般用于 父子进程间的通信,一端读一端写

记名管道:半双工
命名管道可以支持多个客户端连接一个服务器端。支持无关系进程通信

socket:
TCP的连接,socket两端进行通信: 服务端socketB1监听, 客户端socketF发送连接请求到socketB1, 收到连接请求后B1产生B2并与F进行通信(传输数据等操作),B1继续回到监听

信号:(内核对象,内核数据结构)
前面两个建立会消耗资源。
需要传递信号时,生成一个信号,产生特殊中断,然后OS在内核数据结构中查找信号接收方,进行通知,被通知进程进行处理。

信号量(semaphore)
更像一种同步机制,上锁,实现不同进程或同进程下线程的同步。

共享内存:
不同进程共同享有一片公用内存(全部变量的进程不算???)

消息队列:
内核中的ListNode,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值