暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python并发编程(3)-简单总结操作系统:中断+系统调用

小儿来一壶枸杞酒泡茶 2021-04-01
853

看视频总结,纯手打一下为了加深记忆:

PS:下面的知识点总结大部分来自《王道考研》操作系统课程的笔记!!!

一些基本概念梳理

  • 资源:任何为任务所占用的实体;

  • 代码临界段:指处理时不可分割的代码。一旦这部分代码开始执行则不允许中断打入;

  • 共享资源:可以被一个以上任务使用的资源;

  • 任务:也称作一个线程,是一个简单的程序。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。典型地,每个任务都是一个无限的循环,每个任务都处在以下五个状态下:休眠态,就绪态,运行态,挂起态,被中断态(线程状态);

  • 任务切换:将正在运行任务的当前状态(CPU寄存器中的全部内容)保存在任务自己的栈区,然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行(进程上下文切换和线程上下文切换)

  • 内核:负责管理各个任务,为每个任务分配CPU时间,并负责任务之间通讯。分为不可剥夺型内核和可剥夺型内核;

  • 内核空间 :操作系统(Operating System)是管理计算机硬件与软件资源的程序,操作系统内核驻留在受保护的内核空间。

  • 用户空间:应用是运行在操作系统上运行的程序,工作在用户空间。

  • 隔离:出于安全性和稳定性的考虑,用户空间的程序是无法直接执行内核代码(例如:I/O 读写、创建新进程/线程)的,也无法直接的访问内核数据,必须通过系统调用。

  • 调度:内核的主要职责之一,决定轮到哪个任务运行。一般基于优先级调度法;

优先级的问题:

  • 任务优先级:分为:
  • 优先级不可改变的静态优先级
  • 优先级可改变的动态优先级;

优先级反转:优先级反转问题是实时系统中出现最多的问题。共享资源的分配可导致优先级低的任务先运行,>优先级高的任务后运行。解决的办法是使用“优先级继承”算法来临时改变任务优先级,以遏制优先级反转。

  • 互斥
  • 处理共享共享数据时的排他性。虽然共享数据区简化了任务之间的信息交换,但是必须保证每个任务在处理共享共享数据时的排他性。

满足互斥条件的一般方法有:

  • 关中断
  • 使用测试并置位指令(TAS)
  • 禁止做任务切换
  • 利用信号量。
  • 实时操作系统中的中断:因为采用实时操作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。

中断响应时间通常被定义为:

  • 中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间。
  • 中断延迟时间=MAX(关中断的最长时间,最长指令时间) + 开始执行ISR的第一条指令的时间。
  • 最大中断禁止时间:

PSl:当实时操作系统(RTOS)运行在核态或执行某些系统调用的时候,是不会因为外部中断的到来而中断执行的。只有当实时操作系统(RTOS)重新回到用户态时才响应外部中断请求,这一过程所需的最大时间就是最大中断禁止时间。

  • 任务切换时间:当由于某种原因使一个任务退出运行时,实时操作系统(RTOS)保存它的运行现场信息、插入相应队列、并依据一定的调度算法重新选择一个任务使之投入运行,这一过程所需时间称为任务切换时间。

pS:上述中, 最大中断禁止时间和任务切换时间是评价一个实时操作系统(RTOS)实时性最重要的两个技术指标。

  • 线程和CPU: 线程是和CPU核绑定的,而进程会在核中间进行切换.

  • 指令:就是让CPU做一件具体的事情

  • 原子性:是指某种任务执行,要么不执行,要么执行到底,中间不可中断。

  • IPC :跨进程通信方式

1 OS的运行机制

指令

定义:
  • 指令就是处理器(CPU)能失败和执行最基本的命令。
  • 指令不等同于我们的代码:代码是一堆0和1组合而成的机器语言指令。
分类:
  • 特权指令:系统最高级的指令,系统级别的指令(不允许用户程序进行使用控制)
  • 非特权指令:用户基本逻辑处理指令(对系统无害的非系统级指令)
CPU如何判断执行特权指令:

定义CPU的处理器状态:

  • 用户态(目态):此时CPU只能执行非特权指令
  • 核心态(管态):此时特权和非特权指令都可以执行(超级管理级别)

程序状态寄存器(PSW)的某个标志位来进行标记:如:

  • 0 用户态
  • 1 核心态

程序

因指令区分特权和非特权,对应的程序也需要进行区分,有的程序需要特权指令,有的不需要。

程序分类
  • 内核程序:可以执行特权和非特权,运行在和心态中。
  • 应用程序:为保证系统运行安全机制,不允许普通程序执行特权指令,只能运行在用户态。

2 操作系统内核

内核是计算机上配置的底层软件,是操作系统最基本最核心的部分。

PS:内核程序:实现操作系统内核功能的程序.

因为有内核程序和应用程序,那我们的操作系统什么样级别的功能需要运行再内核态中的呐?

操作系统内核功能层上的分类:

  • 内核功能
  • 非内核功能

对于内核功能来说,因为主要涉及到和硬件之间交互管理,通常需要很多程序模块管理:

  • 时间管理:实现计时功能(进程切换调度,都基于时间片的机制,所以非常重要)
  • 中断处理
  • 原语(设备驱动,CPU切换等)

PS:原语:是一种特殊的程序,它接近于硬件的部分,这种程序的运行具有原子性,运行时间较短,调用频繁

图结:

操作系统体系结构:

对资管管理不同方式下:

  • 大内核

    1)定义:把操作系统的主要功能模块都作为系统内核,运行再内核态

    2)优点:高性能

    3)缺点:内核模块多代码庞大,结构混乱,难以维护

  • 微内核

    1)定义:只把基础的功能保留在内核

    2)优点:内核功能少,结构清晰,方便维护

    3)缺点:需要频繁的在核心态和用户态之间进行切换(工作任务提审和执行),性能有所损耗,性能低

3 操作系统内核--中断和异常

在计算机运行过程中,当发生某个事件后,CPU 会停止当前程序进程运行,然后去处理当前接收到的事件,并在处理完毕后继续执行原程序进程。

1)为了更高效提高系统利用率和管理

早起计算机系统的运行:

串行的运行:单位时间内,只有有一个程序运行。

缺点:计算机系统的利用率低下,上面中需要等待IO处理完成才会移除标记任务完成在从CPU上标记任务完成,然后再给下一个任务执行。

操作系统的引入:是为了更高效提高系统利用率和管理。

2)中断介入的主要目的

近代操作系统中,是很多程序进程运行着的,每个进程的启动的时候,都会被加载到计算机的内存中,所以我们的计算机内存中充斥着很多任务都再不断运行和资源共享或竞争。而且部分任务,再执行的过程中可能有涉及到需要系统内核授权执行的指令的话,此时就需要中断机制切入:

如:处于用户态的程序需要申请或运行一些核心态的指令的时候,需要操作系统介入,(如进程切换,分配I/O设备等)这些的操作由于是需要特权指令的,所以此时需要要求CPU从用户态,转换为核心态才可以执行当前用户程序申请的特权指令,当切换为核心态后,当前申请的进程处于暂停状态,操作系统获得计算机的控制权,进行相关调度任务安排。

3)用户态和核心态的切换

  • “用户态” ===>'核心态'的切换:

    用户态和核心态的切换主要是应对一些需要特权指令的时候进行切换,它的切换是通过:中断机制实现的,并且只能使用中断来进行切换。没有别的方法。

  • “核心态” ===>'用户态'的切换:

    核心到用户的切换是通过执行一个特权的指令,把程序的状态字(PSW)的标记设置为用户态。

4)中断分类:

硬中断
  • 由外部设备(例如:磁盘,键盘,网卡,时钟等)产生,用来通知操作系统外设状态变化。

PS:时钟中断属于硬中断的一种,定期打断 CPU 执行的线程,以便切换给其他线程以得到执行机会。(时间片轮询机制)

软中断(如:系统调用)
  • 是一条 CPU 指令,由当前正在运行的进程产生。

5)中断处理过程:

  • 1:每条指令执行的结束后,CPU都检测是否有外部中断信号。
  • 2:如果存在外部终端杆信号,则需要保护中断进行的CPU环境,便于下次进程原地恢复。
  • 3:CPU根据中断信号类型转入相应的重点关处理程序(此时CPU出于核心态)。
  • 4:处理完成后,发送结束信号,恢复上一次进程CPU环境并退出中断,返回原进程继续往下执行。

6)中断好处:

  • 不需要等待CPU轮询等待触发条件成立,直接在条件成立之后,向 CPU 发送中断事件,强制中断 CPU 当前执行的程序,转而去执行中断处理程序。

4 操作系统内核--系统调用

定义:系统调用(Syscall) 是【软中断】处理程序的一种。

作用:用于让程序的运行从用户态陷入内核态。

系统中各自资源统一由操作系统进行调度管理,涉及相关的资源分配的(如:IO操作,文件管理,存储分配等)都需程序使用【系统调用】的接口提出系统服务的申请,最终由操作系统完成,保障系统稳定和安全,规避用户非法操作。

运行:运行于核心态。

白话说明:

【系统调用】可以理解是一种特殊接口函数,它是由操作系统提供给应用程序(程序员)使用的一些比较页数的系统级别接口函数,我们应用程序(程序员编码)可以发出系统调用请求获取操作系统的服务。

系统调用就是用户程序和硬件设备之间的中间代理人。

调用流程:

  • 1.程序从用户态陷入内核态
  • 2.根据系统调用号,在系统调用表中查询对应的系统调用函数的内存地址,执行系统调用函数。
  • 3.恢复程序用户态,让程序从内核态返回用户态

4.1)系统调用功能分类:

  • 设备管理:完成设备的请求、释放、启动等
  • 文件管理:文件的读写,创建,删除等
  • 进程控制:完成进程的创建、撤销,阻塞,唤醒等
  • 进程通信:完成进程之间的消息的传递、信号传递等
  • 内存管理:完成内存的分配和回收等

4.2)系统调用和库函数的区别:

  • 库函数可以是系统调用进一步的封装,也可以不包含有系统调用的函数

    如:

    • 文件管理-涉及系统调用,则相关函数需要系统调用函数
    • 简单的逻辑加减等-不涉及则不需要系统调用服务。

4.3)系统调用背后的过程

PS:来自王道考研老师的视频:

个人其他博客地址

简书:https://www.jianshu.com/u/d6960089b087

掘金:https://juejin.cn/user/2963939079225608

小钟同学 | 文 【原创】| QQ:308711822

  • 1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。
  • 2:关于文章内容,有部分内容参考自互联网,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。


文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论