【操作系统学习笔记04】
以下是下面链接中教程的笔记,如有侵权请联系我删除。随便学学可能不严谨,但如果有离谱错误烦请指正。
https://www.bilibili.com/video/BV1YE411D7nH?p=3&vd_source=febdc1a8028af6b442667407286a2750
进程 #
进程概念#
程序:静态的可执行文件,指令集合
进程:动态,进程实体的运行过程,系统进行资源分配和调度的单位
进程实体
- PCB:Process Control Block,进程控制块,一种数据结构,是进程存在的唯一标志
- 程序段:指令序列
- 数据段:运行过程中产生的数据
PCB
- 进程描述信息(PID、UID)
- 进程控制和管理信息(CPU、磁盘、网络使用,进程状态:运行/阻塞...)
- 资源分配清单(正在使用的文件、内存、I/O设备)
- 处理机相关信息(寄存器值等)
进程特征#
- 动态性:略
- 并发性:略
- 独立性:能独立运行,能接受调度,获得资源的基本单位
- 异步性:略
- 结构性:指每个进程实体都有PCB、数据段、程序段
进程状态#
- 创建态:进程资源分配,PCB初始化
- 就绪态:创建完成,具备运行条件,等待CPU
- 运行态:略
- 阻塞态:进程等待某个事件发生
- 终止态:进程执行exit系统调用,OS之后会控制进程下CPU,回收PCB
PCB中有变量state记录进程状态
进程的组织#
通过一系列指针进行:执行指针、就绪队列指针、XX资源相关阻塞队列指针等
- 链接方式:指针指向按优先级排序的PCB链表第一个元素
- 索引方式:指针指向索引表,由索引表管理PCB
进程控制#
即对状态转换的实现
如何实现:使用原语(有原子性的程序)
原语使用 关中断指令、开中断指令 两个特权指令实现若干特权指令的原子性
关中断指令会让CPU不再检查是否有外部中断信号。开中断略。
进程控制相关原语
- 创建原语
- 申请空白PCB
- 新进程分配资源
- 初始化PCB
- PCB插入就绪队列
- 撤销原语
- 找到PCB
- 剥夺CPU,分配CPU给其它资源
- 终止所有子进程
- 释放进程拥有的资源
- 删除PCB
- 阻塞原语
- 找到PCB
- 保护进程运行环境,PCB状态改为阻塞态
- PCB插入等待队列
- 唤醒原语
- 找到PCB
- PCB从等待队列移出,设置为就绪态
- PCB插入就绪队列
- 切换原语
- 运行环境存入PCB
- PCB移到对应队列(就绪或运行)
- 选择另一个进程执行,更新其PCB
- 根据PCB中的运行环境信息,恢复运行环境
PCB中保存的运行环境信息包括各类寄存器内容
认识两个寄存器:
PC:存下一条指令的地址
IR:存当前正在运行的指令
进程间通信 #
-
共享存储:进程可以通过系统调用申请共享存储区与其它进程共用,需要使用操作系统内核的同步互斥工具,保证对该区域互斥操作
- 基于存储区
- 高级通信方式
- 速度快、限制少
- 基于数据结构
- 低级通信方式
- 速度慢、限制多
- 基于存储区
-
消息传递:通过操作系统的发送消息/接收消息 两个原语交换格式化的消息
- 直接通信:收发都指定目标进程(PCB里有进程的消息队列)
- 间接通信:收发制定目标信箱
-
管道通信:通过系统调用申请一个管道文件(pipe,大小固定的内存缓冲区,特殊的共享文件,先进先出)
- 管道通信是半双工通信,某一时段只能单向传输。全双工要设置两个管道。
- 操作系统需要让进程互斥访问管道
- 管道写满时,写进程会阻塞
- 管道为空时,读进程会阻塞
- 管道数据读出后彻底消失
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!