简记进程线程
一、进程简介
1、进程的构成
程序 数据 pcb
2、进程的状态
5状态:新建,就绪,执行,阻塞,终止
交换技术:将内存中暂时不用的进程数据或程序交换到外存,腾出空间交换进需执行的进程数据或程序交换进内存(换进程:挂起状态),什么情况会挂起
os释放空间
周期性执行工具软件(守护进程)
用户请求
时钟中断
父进程请求挂起子进程7状态:新建 就绪 就绪/挂起 执行 阻塞 阻塞/挂起 终止
就绪/挂起:进程在外存,调入内存可执行
阻塞/挂起:进程在外存,等待事件
3、进程的创建
- 分配唯一标识符,主检查表增加表项
- 为进程分配空间:地址空间,栈,pcb,若有共享空间创建连接
- pcb初始化:进程标识,处理机状态,进程状态
- 建立连接:放入相应队列
4、进程的调度算法
- FCFS(先来先服务)
- 时间片轮转
- 短进程优先
- 剩余最短时间优先
- 响应比优先
R=(W+S)/S
W:等待时间,S:执行时间
长进程等得越久,W越大,响应比就会变高,不至于长时间饥饿
短进程,S小
- 优先级(静态 动态)
- 多级反馈调度
多级就绪队列,来的放入第一级尾部,队列内FCFS,
第一个队列进程时间片用完没执行完放入第二个队列
第二个队列执行时间为第一个两倍
以此类推,第i个队列的优先级较上一级低,执行时间长,放的长进程(相对)
5、进程的切换
- 什么时候切换
时钟中断
I/O中断
存储访问失效(虚拟内存)
陷阱
管理程序调用
- 切换过程
1、保存线程(更新pcb)
2、把进程放入到相应队列,例如:阻塞
3、从就绪队列选其他进程执行
4、选中的进程pcb更新
5、内存管理的数据结构修改(你要占哪些空间,还需要什么空间)
6、恢复被选中进程的执行线程
6、进程间通信
- 管道
- FIFO
- 信号
- 信号量
- 消息队列
- 共享内存
- 文件
- socket
7、进程终止
- 什么时候终止
正常运行完
超时终止
内存严重不足
越界访问
使用未允许的数据
除以0
超时等待时间发生
i/o错误,如找不到文件而非要读
- 做什么
根据进程id找到pcb,读取进程状态
若为执行,终止其执行,调度新进程
如果有子孙进程也终止
将资源归还给父进程或者系统
将被终止的进程移除队列,等待其他进程来收集信息
二、线程
1、简介
1、共享进程地址空间,内存
2、tcb
3、创建终止切换花销更少
4、linux本质是单进程多线程(宣称多进程多线程),实质是多任务,task_struct标识进程创建的时候内部clone()->do_fork()函数复制主进程的地址空间,内存,所以耗时高,最后复制出来mm_struct(虚拟内存结构体),fs,files,sighand等等
线程创建的时候也是内部clone函数,最后会生成指针指向主线程的mm_struct,fs,files,sighand等等
由此形成了我们经常讨论的进程与线程的差异,本质上就在clone时参数的差异,实质还是一个task
2、同步
信号量
临界区
互斥量
事件
3、通信
锁机制 互斥锁 读写锁 条件变量
信号量机制
信号机制
全局变量
三、进程与线程的区别
进程是资源分配的最小单位,线程是cpu调度的最小单位
- 数据共享、同步
多进程数据共享复杂,需用ipc,数据是分开的同步简单,
多线程因为共享进程数据,共享简单,但也因此原因导致同步复杂
各占优势 - 内存 cpu
多进程占用内存多,切换复杂,cpu利用率低
多线程占用内存少,切换简单,速度很快
线程优 - 创建销毁切换
多进程创建销毁切换复杂,速度慢
多线程创建销毁切换简单,速度很快
线程优 - 编程调试
多进程简单
多线程复杂
进程优 - 可靠性
进程互不影响,但是一个线程挂掉会导致进程挂掉
进程优 - 分布式
多进程适应于多核,多机分布式,如果一台机器不够,扩展到多台比较简单
多线程适应于多核分布式
进程优
四、多进程多线程应用场景
- 需要频繁创建销毁的优先使用线程
最常见的应用就是web服务器,来一个连接创建一个线程,断了就销毁,要是用进程,创建和销毁的代价是很难承受的。 - 需要大量计算优先使用线程
所谓大量计算,当然就是要耗费很多cpu,频繁切换,线程最合适。
常见的有图像处理,算法处理等。 - 强相关的用线程,弱相关的用进程
例如:消息收发,消息处理弱相关可以用进程,消息处理中有消息解码和业余处理这种强相关的用线程较好 - 可能要扩展到多机分布用进程,多核用线程
一般采用多进程加多线程结合使用
五、操作系统控制结构
- 内存表
内存分配情况
外存分配情况(进程跟外存交互的)
访问共享内存去的属性(rwx)
管理虚拟存储需要的信息
- I/O设备管理表
设备是可用的还是已分配的
I/O状态
I/0传输的在主存中的源和目的地址
- 文件表
哪些文件
外存的位置
当前状态
文件管理系统统一管理
- 进程表
- 进程的位置
- 管理进程的属性
进程id
进程状态
内存中的位置
- 程序
本地,全局的变量,常量,堆栈
- pcb