当前位置: 首页 > news >正文

认识进程 -了解进程调度


前言

本篇通过介绍操作系统OS的重要功能,了解并发并行, 了解操作系统的一项重要功能 “进程管理” , 通过了解进程管理认识进程是操作系统资源分配的基本单位 ,如有错误,请在评论区指正,让我们一起交流,共同进步!


文章目录

  • 前言
  • 1. 进程管理
    • 1.1 进程的描述
    • 1.2 进程的管理
  • 2. 了解并发 与 并行
  • 3. 内存分配
  • 4. 进程通信
  • 总结

本文开始

1. 进程管理

进程管理是操作系统的一项重要功能, 用来管理多项进程;

说到进程, 哪什么是进程呢?
进程: 一项运行的程序 或者 一个运行的任务;
例如: 各种.exe文件, exe文件是一种可执行文件

在这里插入图片描述

了解了进程, 哪什么是进程管理呢?
进程管理就是当运行的进程个数增多, 就需要对它们进行管理;
进程管理包括:
①对进程的描述: 使用结构体(PCB - 进程控制模块)对进程进行描述, 表示出进程的各种信息;
②对这些进程的管理: 使用一些数据结构(双向链表),组织这些结构体;


1.1 进程的描述

进程的描述使用结构体, 结构体中有很多属性, 这里介绍一些重要的属性;
进程中的结构体称为: PCB

  1. pid : 结构体唯一的身份标识 (例如数据库的唯一主键用来表示身份)
  2. 内存指针 : 用来描述进程在内存中使用的资源位置;
    [注意] 进程运行起来需要占用内存资源
  3. 文件描述符表 : 进程运行起来使用的硬盘资源;
    [注意] 什么是文件表述符表 ? ? ?
    文件标识符: 用来记录(标识)文件被打开
    进程运行会打开文件, 每打开一次文件就会产生一个文件标识符, 一个进程可能打开多个文件, 这样会产生一组文件表示符, 将这些文件标识符放入顺序表中, 就称为文件标识符表;

   从2和3来看, 进程的运行都需要操作系统进行资源分配 => 所以说 进程是操作系统进行资源分配的基本单位

  1. 进程调度 - 有一组属性, 用来辅助进行进程调度
    [注意] 这些属性与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. 进程通信

一些必要的时候需要进程与进程之间进行通信, 互相配合; 这就用到了进程之间的通信;
进程间通信: 在隔离的情况下, 有一个公共的区域, 让进程之间进行数据交换;
这里只是了解一下进程通信;


总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

http://www.lryc.cn/news/35779.html

相关文章:

  • 第十届省赛——7外卖店优先级
  • 做自动化测试选择Python还是Java?
  • C#基础之基础语法(一)
  • 【JVM篇1】认识JVM,内存区域划分,类加载机制
  • CHAPTER 5 文件共享 - FTP
  • 【MySQL】将 CSV文件快速导入 MySQL 中
  • Ngnix安装教程(2023.3.8)
  • 【C语言】每日刷题 —— 牛客(2)
  • 关于算法的一些简单了解
  • mysql无法启动服务及其他问题总结
  • 数据库表字段命名规范
  • 23种设计模式-命令模式(android应用场景介绍)
  • vector你得知道的知识
  • 【C++进阶】四、AVL树(二)
  • React 服务端渲染
  • 【算法设计-搜索】回溯法应用举例(1)
  • C++基础了解-23-C++ 多态
  • 【GNN/深度学习】常用的图数据集(资源包)
  • Clickhouse中bitmap介绍以及计算留存Demo
  • 大数据是什么?学习后能找高薪工作么
  • 如何提取视频中的音频转文字?分享提效减负视频转文字方法
  • 脑机接口科普0018——前额叶切除手术
  • FPGA工程师面试——基础知识
  • 全国青少年软件编程(Scratch)等级考试一级真题——2019.12
  • 【Integrated Electronics系列——数字电子技术基础】
  • 【微信小程序】-- 页面处理总结(三十一)
  • Spring Batch使用详细例子
  • 漏洞预警|Apache Dubbo 存在反序列化漏洞
  • Tomcat源码分析-spring boot集成tomcat
  • 一个古老的html后台的模板代码