| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 进程的切换的过程 -> 正文阅读 |
|
[嵌入式]进程的切换的过程 |
一、进程何时切换? 中断时切换,包括: 外部中断,异常,系统调用 二、中断可以分为哪几类? 1、外部中断,也简称中断 ????????由CPU外部设备引起的外部事件如I/O中断、时钟中断、控制台中断等是异步产生的(即产生的时刻不确定),与CPU的执行无关 2、内部中断,也简称异常, ????????在CPU执行指令期间检测到不正常的或非法的条件(如除零错、地址访问越界)所引起的内部事件称作,也称内部中断 3、陷入中断,简称软中断,使用请求系统服务的系统调用而引发的事件 三、外部中断是什么?为何引入外部中断? ????????外部设备的速度远远低于CPU的速度,为了提高CPU的利用率,引入了中断机制(中断是系统?来响应硬件设备请求的?种机制) ????????当CPU收到中断信号或异常事件后,它会暂停当前的程序或任务,在操作系统处理与硬件相关的事情时,CPU去处理与这个信号相关的工作(这样就不用一直等待IO了,通常以内核线程执行),在完成对这个事件的处理后再跳回到刚才被打断的程序或任务中; 四、进程执行系统调用的过程? 1、程序跳入陷阱(trap)是什么? ????????程序指令跳入内核并将特权提升到内核态,此外为了确保操作系统能从陷阱经指令正确返回,处理器会将程序计数器、标志和其他一些寄存器的内容推送到每个进程的内核栈中,返回陷阱则将从栈中弹出这些值,并恢复执行用户态(操作系统执行完系统调用返回后,会检查当前进程是否处于就绪状态,时间片是否用完,如果用完就去schedule()调用其他进程,否则出栈寄存器,恢复现场) 2、所谓的陷阱表是什么? ????????陷阱表是使陷阱指令与OS要运行的代码对应起来(不能直接跳转到要运行的地址,这样不安全)通过设置陷阱表,OS能将异常事件与需要运行的代码对应起来。 如果一个程序直接在CPU中运行,总过程?(一行一行看)
怎么就一个进程,不是说进程的切换吗? 上面讲述了程序执行系统调用的过程,系统调用有点特别。 先考虑以下场景,假如一个进程在CPU运行,这就意味着操作系统没有运行,如果操作系统没有'运行',他就不能做事。所以他如何重获CPU控制权? 刚才我们看到了在系统调用时,操作系统获得了CPU控制权,其实在过去的某些系统(早期的Macintosh操作系统)就是等待系统调用使操作系统获取CPU控制权; 一个进程在系统调用时,如打开文件并随后读取文件,或者创建新进程,再或者什么也不干就显示地调用yield系统调用,只是将控制权交给操作系统,操作系统获得了CPU的控制权,他可以运行其他进程。 但是,这种被动的方式不太理想,不安全,假如进程进入无限循环从不进行系统调用,操作系统就获得不了主动权。 五、操作系统如何实现进程之间的切换? 1、操作系统如何主动获得控制权? 利用时钟中断获得控制权:时钟设备可以编程每隔几毫秒产生一次中断,当产生中断时,正在运行的程序停止,操作系统中预先配置的中断处理程序会先运行,此时操作系统重新获取CPU控制权。 注意,硬件发生中断时有一定的责任,尤其是中断发生时,要为正在运行的程序保存足够的状态,以便随后从陷阱返回指令能够正确恢复正在运行的程序(各种寄存器进入内核栈,这与显式调用系统调用陷入内核时的行为相似)。 2、保存和恢复上下文(上下文切换) 我们知道操作系统可以通过时钟中断获取CPU的控制权,那么之后操作系统选择运行哪个进程就是调度程序做出的,它是操作系统的一部分(有着相应的调度策略); 如果决定切换,OS就会决定执行一些底层代码。总的来说是将当前正在运行进程寄存器中的值保存到内核栈中,并为即将要执行的进程从内核栈中恢复一些寄存器的值。这样操作系统可以确保最后执行从陷阱返回指令时,不是返回到之前运行的进程,而是继续执行另一个进程。 为了保存当前正在运行的进程的上下文,操作系统会执行一些底层汇编代码,用来保存通用寄存器、程序计数器,以及当前正在运行的进程的内核栈指针,然后恢复寄存器、程序计数器,并切换内核栈,供即将运行的进程使用。 通过切换内核栈,内核在进入切换代码系统调用时,是一个被中断进程的上下文,在返回时,是另一个即将执行的进程的上下文。当操作系统最终执行从陷阱返回指令时,即将执行的进程就编程了当前运行的进程。至此上下文切换完成。 下面是进程切换的具体过程:
在这个过程中,发生了两种类型的寄存器保存恢复 第一次:发生时钟中断时,由硬件隐式保存 第二次:操作系统决定A切换B进程,内核寄存器被软件(OS)明确保存 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:26:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |