前言
本篇通过介绍操作系统OS的重要功能,了解并发并行, 了解操作系统的一项重要功能 “进程管理” , 通过了解进程管理认识进程是操作系统资源分配的基本单位 ,如有错误,请在评论区指正,让我们一起交流,共同进步!
文章目录
- 前言
- 1. 进程管理
- 1.1 进程的描述
- 1.2 进程的管理
- 2. 了解并发 与 并行
- 3. 内存分配
- 4. 进程通信
- 总结
本文开始
1. 进程管理
进程管理是操作系统的一项重要功能, 用来管理多项进程;
说到进程, 哪什么是进程呢?
进程: 一项运行的程序 或者 一个运行的任务;
例如: 各种.exe文件, exe文件是一种可执行文件
了解了进程, 哪什么是进程管理呢?
进程管理就是当运行的进程个数增多, 就需要对它们进行管理;
进程管理包括:
①对进程的描述: 使用结构体(PCB - 进程控制模块)对进程进行描述, 表示出进程的各种信息;
②对这些进程的管理: 使用一些数据结构(双向链表),组织这些结构体;
1.1 进程的描述
进程的描述使用结构体, 结构体中有很多属性, 这里介绍一些重要的属性;
进程中的结构体称为: PCB
- pid : 结构体唯一的身份标识 (例如数据库的唯一主键用来表示身份)
- 内存指针 : 用来描述进程在内存中使用的资源位置;
[注意] 进程运行起来需要占用内存资源 - 文件描述符表 : 进程运行起来使用的硬盘资源;
[注意] 什么是文件表述符表 ? ? ?
文件标识符: 用来记录(标识)文件被打开
进程运行会打开文件, 每打开一次文件就会产生一个文件标识符, 一个进程可能打开多个文件, 这样会产生一组文件表示符, 将这些文件标识符放入顺序表中, 就称为文件标识符表;
从2和3来看, 进程的运行都需要操作系统进行资源分配 => 所以说 进程是操作系统进行资源分配的基本单位
- 进程调度 - 有一组属性, 用来辅助进行进程调度
[注意] 这些属性与CPU资源相关
①进程状态(两种) :
就绪态: 进程已经准备, 随时可以在CPU上执行
堵塞态: 进程暂时不能在CPU上执行
例如: 一些小学生去学校上课, 正常的小学生去上课, 可以认为是就绪态, 但是有些小学生生病了, 就暂时不能去学校了, 这就可以认为是阻塞态
②进程的优先级
进程的执行不是无序的, 进程之间的调度是有不公平的, 有的需要优先调度
例如: 老人, 成年人, 小学生做公交车, 目前认为公交车座位的满了, 成年人看到小学生可能把座位让给他, 而小学生和成年人看到老人可能把座位让给老人;
③进程的上下文
进行在执行过程中, 如果进程离开CPU, 需要把当前的结果存档, 当再次进入CPU, 会重新恢复存档(也就是读档), 接着进行下面操作;
[注意] 寄存器: 保存进程执行的中间结果, 进程执行到那块的指令等等
上下文: 进程在执行过程中, 在CPU内部一系列寄存器的值;
当进程离开CPU就需要存档, 把当前的寄存器中的值 保存到PCB中的上下文中;
当进程再次运行, 就需要读档, 把PCB中的值恢复到寄存器中;
④ 进程的记账信息
记账信息就是记录 进程 在CPU中运行的时间, 为进程调度提供参考依据
1.2 进程的管理
可以把每个进程认为是一个节点, 操作系统就使用双向链表来管理进程
① 创建一个进程, 相当于创建一个节点, 连接在链表上
② 删除一个进程, 相当于删除一个节点在一个链表上
③ 遍历进程(任务管理器上运行的程序任务是排成的链表) , 就是遍历链表
2. 了解并发 与 并行
并行: 同一时刻, 两个核心执行两个进程, 认为 两个进程时同时进行的
并发: 一个核心, 先运行一个进程1, 运行一会, 马上切换另一个进程2, 在运行一会,切换进程 3…
当进程之间的切换时间足够短时 就认为 1,2,3…进程就是同时执行的 => 一个核心多次调度, 时间足够短, 认为多个进程是并发的
[注意] 每台电脑上的看自身的配置这里是(8核16线程); 逻辑处理器: 16个逻辑核心; 内核: 8个物理核心
但我们常说的 并发 = 并行 + 并发
3. 内存分配
操作系统给进程分配内存, 所使用是 “虚拟内存地址” , 也就是说 进程访问的内存地址都不是真实的地址, 而是虚拟的; 这样的优点是让进程执行期间互不干扰
例子如图:
这里只是粗糙的说明一下, 绿色为虚拟内存, 红色为校验操作;
页表: 用于校验, 方便知道当前地址是否是有效的; (如果没有页表进程之间会产生BUG(野指针等情况), 从而出现运行错误等)
内存分配执行流程:
进程根据虚拟内存地址, 访问虚拟内存, 再到页表校验查找对应的内存, 如果找到会映射到真实的内存上, 没找到无法进行下一步操作, 也不会影响的其他进程;
从上面的内存的分配流程里, 可以知道一个进程无法干预另一个进程, 进程之间有独立性;
4. 进程通信
一些必要的时候需要进程与进程之间进行通信, 互相配合; 这就用到了进程之间的通信;
进程间通信: 在隔离的情况下, 有一个公共的区域, 让进程之间进行数据交换;
这里只是了解一下进程通信;
总结
✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!