码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 计算机操作系统-第十二天


    目录

    进程控制的基本概念

    什么是进程控制

    如何实现进程控制

    如何实现原语的”原子性“

    与进程控制相关的原语

    进程创建中的原语

    进程终止中的原语

    进程的阻塞和唤醒中的原语

    进程的切换中的原语

     知识滚雪球-程序是如何运行的?:

    本节思维导图


    进程控制的基本概念

    什么是进程控制

            进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。简单理解就是:进程控制就是要实现进程状态转换

    如何实现进程控制

            利用微内核中的”原语“实现,前面我们提到原语是一种特殊的程序,它的执行具有原子性,也就是说,这段程序的运行必须一气呵成,不可中断。也就是说进行进程转换的过程要一气呵成这又是为什么? 

    假设PCB中的变量state表示进程当前所处状态,1表示就绪态、2表示阻塞态...

    假设此时进程2等待的事件发生,则操作系统中,负责进程控制的内核程序至少需要做两件事:

    ①将PCB2的state设为1

    ②将PCB2从阻塞队列放到就绪队列

    如果此时不能一气呵成,那么假设完成第一步后内核程序接收到了中断信号,那么虽然PCB2的state = 1但是它仍然被放在阻塞队列中,很明显这样是不对的。

    所以,如果进程转换不能做到一气呵成,就有可能导致操作系统中的某些关键数据结构信息不统一的情况,这会影响操作系统进行别的管理工作。

    如何实现原语的”原子性“

    用"关中断指令”和“开中断指令”这两个特权指令实现原子性

            在我们之前的学习中,我们可以知道当CPU执行完每条指令后都会进行外部中断信号的检查,当检测到外部中断信号后就会先执行中断处理程序然后才会去执行下一条指令。

            而我们当CPU执行关中断这个特权指令后,就不会再进行上述判断是否有外部中断信号的操作,CPU会依次执行关中断指令后的指令,直到遇到开中断指令后才会恢复检查外部中断信号的操作。

    还有一点需要注意的是,这两条指令都只允许内核程序使用,不允许用户程序使用

    与进程控制相关的原语

    进程创建中的原语

    进程终止中的原语

    进程的阻塞和唤醒中的原语

    进程的切换中的原语

     知识滚雪球-程序是如何运行的?:

            我们在之前的学习中知道了,CPU会从内存中取出指令,而CPU中会设置很多“寄存器”,用来存放程序/指令在运行过程中所需要的某些数据。常见的寄存器有PSW(程序状态字寄存器)、PC(程序计数器寄存器)、IR(指令寄存器)、通用寄存器、ACC、MQ、MAR、MDR......

    其中,PC寄存器用于存放下一条指令的地址,IR用于存放当前正在执行的指令,而通用寄存器中会储存一些其它必要的信息

            如果当执行完指令3后,另一个进程也开始上CPU运行,而另一个进程在运行过程中也会使用各个寄存器,这就可能导致该进程会覆盖指令3在寄存器中存储的内容,那么该如何切换回之前的进程?

    解决办法:在进程切换时先在PCB中保存这个进程的运行环境(只保存一些必要的寄存器信息,比如PSW寄存器,PC寄存器、通用寄存器中的内容),当原来的进程再次投入运行时,可以通过PCB恢复它的运行环境。

    本节思维导图

    其实,无论哪个进程控制原语,要做的无非三类事情:

    1、更新PCB中的信息(修改进程状态state、保存/恢复运行环境)

    2、将PCB插入合适的队列

    3、分配/回收资源 

    ~over~

  • 相关阅读:
    STC8H开发(十五): GPIO驱动Ci24R1无线模块
    【JAVA学习笔记】63 -坦克大战1.3-敌方发射子弹,击中坦克消失并爆炸,敌人坦克随机移动,规定范围限制移动
    计算机毕业设计php_thinkphp_vue的家乡石泉网站-乡村家乡旅游信息网站(源码+系统+mysql数据库+Lw文档)
    SpringBoot项目jar发布获取jar包所在目录路径
    C语言中的文件操作
    【postgresql 基础入门】表的操作,表结构查看、修改字段类型、增加删除字段、重命名表,对表的操作总是比别人棋高一着
    每日一练——返回链表的中间结点
    决策树算法之鸢尾花特征分类可视化详解【机器学习】
    【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库
    jQuery 中的 bind(), live(), delegate(), on()的区别
  • 原文地址:https://blog.csdn.net/m0_73975164/article/details/133955099
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号