编译后的产物或者二进制文件被载入到内存中运行起来的程序就是进程。
进程五态
- 创建 创建PCB结构
- 就绪
- 运行
- 阻塞
- 终止
七态 :多了就绪挂起和阻塞挂起是由于磁盘扇入和扇出导致的。
进程控制块
PCB 主要有:
- 进程描述信息:进程描述各个进程,进程描述符,用户标识符
- 进程控制信息:当前状态,调度优先级
- 资源分配清单:有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的 I/O 设备信息
- CPU相关信息:寄存器的值
对于PCB组织来说就是通过链表的形式把相同的状态的进程链接在一起,组成各种队列。
进程的上下文切换就是包含虚拟内存,栈,全局变量,等用户空间的资源,包含内核栈堆,寄存器等内核空间的资源。
线程
线程是进程当中的一个执行流程,共享代码段,数据段以及打开的文件等资源,
但是有自己独立的寄存器和栈保障执行的流程是分开的。
- 一个进程可以同时存在多个线程
- 各个线程之间可以并发的执行
- 各个线程之间共享地址空间和文件等资源
线程是调度的最小单位
线程的优点
- 线程的创建,销毁 时间比进程快
- 线程的切换时间比进程快
- 线程之间的数据传输效率比较高
两者比较
进程是资源分配的基本单位(内存,文件描述符),线程是调度的基本单位
进程拥有完整的资源平台,但是线程只享有必要的资源,如寄存器和栈
线程同样具有进程的几种基本状态
线程能减少并发执行的开销
创建线程比进程更快,因为线程共享进程的内存信息,文件信息
线程的销毁比进程快。
同一个进程的线程切换比进程快
进程切换需要切换页表
进程页表的创建、更新和销毁等操作都由内核负责。
一个多级页表,由多个页表项组成。每个页表项记录了虚拟页和物理页的映射关系
- 包括虚拟页号、物理页号、权限位等信息。多级页表的结构可以有效地管理大型的虚拟地址空间。
操作系统会切换进程的页表。
具体操作包括将新进程的页表加载到MMU(内存管理单元)中。
以更新虚拟地址空间和物理内存的映射关系。这样,当新进程执行时。
它的虚拟地址访问将会映射到正确的物理内存位置。
进程调度算法
- 先来先服务
- 短作业优先
- 高响应比优先
- 高优先级调度算法
- 时间片轮训
- 多级反馈队列调度算法
- 完全公平调度算法
进程之间通信方法
- 管道
- 消息队列
- 共享内存
- 信号量
- 信号
- socket
- tcp
哲学家就餐问题
- 服务生解法:
- 资源分级解法
死锁产生条件
- 互斥
- 循环等待
- 资源编号,按照顺序优先级获取资源
- 不可抢占
- 申请资源的时候必须释放保持的资源在需要的时候再获取
- 持有并等待
- 启动的时候必须获取到所有的资源
银行家算法:
当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待
锁
- 互斥锁
- 加锁失败会阻塞休眠
- 自旋锁
- 加锁失败会循环等待
CAS
操作
- 加锁失败会循环等待
- 读写锁
- 读读不互斥 其他的都互斥
- 乐观和悲观锁
- 乐观锁认为冲突概率很低,直接修改了共享数据之后,验证有没有发生冲突,要是有就放弃本次操作
硬盘调度算法
- 最佳页面置换
- 先进先出
- 最近未使用
- 最不常用
- 时钟页面置换算法