模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序_操作系统基础6-支持操作系统的最基本的硬件-中断...

无论是桌面PC操作系统还是嵌入式都是多任务的操作系统,而很遗憾,处理器往往是单个的,即便在硬件成本逐渐下降,而硬件配置直线上升的今天,PC机的核心可能已经达到4核心,8核心,而手机移动设备更不可思议的达到16核心,32核心,处理器的数量依然不可能做到每个任务一个CPU,所以CPU必须作为一种全局的资源让所有任务共享。说到共享,如何共享呢?什么时候给任务A用,什么时候给任务B用......这就是进程调度,具体的安排就由调度算法决定了。进程如何去调度?现代操作系统一般都是采用基于时间片的优先级调度算法,把CPU的时间划分为很细粒度的时间片,一个任务每次只能占用这么多的时间,时间到了就必须交出使用权,换由其他的任务使用。这种要看操作系统的定时器机制了。那么时间片到之后,系统做了什么呢?这就要用到我们的中断了,时间片到了由定时器触发一个软中断,然后进入相应的处理历程。当然这一点不足以表明中断的重要性,计算机操作系统自然离不开外部设备:鼠标、键盘、网卡、磁盘等等。就拿网卡来讲,计算机并不知道什么时候数据包会来到,能保证的就是数据来了能正常接收就行了。但是我又不可能一直等着接收数据包,要是这样其他任务就死完了。所以合理的办法是,你数据包来到之后,通知我,然后我再对你处理,怎么通知呢?答:中断!

定义:

(广义的)指CPU对突发的外部事件的反应过程或机制。CPU收到外部信号(中断信号)后,停止当前工作,转去处理该外部事件,处理完毕后回到原来工作的中断处(断点)继续原来的工作。中断信号来自外围硬件(相对于CPU和内存)的异步信号或来自软件的同步信号。

b5523083e1a1472ac5bb2e51c5a5c62c.png

引入中断的目的

  • 实现并发活动

1. CPU和外设并发工作:当外设工作完毕,产生信号通知CPU,让CPU处理外部事件;

2. 两个进程并发运行:通过时钟的切换,进程并发使用CPU,时钟产生一个中断信号通知CPU将使用权切换到另一进程

  • 实现实时处理

实时系统中处理机随时响应并进行处理各种监测和控制装置随机向处理机发出的中断请求

  • 故障自动处理

处理机中设有各种故障检测和错误诊断的部件,一旦发现故障或错误,立即发出中断请求,进行故障现场记录和隔离,为进一步处理提供必要的依据

中断的一些概念

中断源:

引起中断的事件或原因,或发出中断申请的来源。

中断类型:

f44178b836b089d96e23e0043c2306a0.png
  • 外中断(Interruption):指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发下一个输入 / 输出请求,同时让完成输入/输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。 外中断又可分为不可屏蔽中断可屏蔽中断。对于不可屏蔽中断,CPU必须无条件响应,而对于可屏蔽中断,CPU可以响应,也可以不响应,CPU一般设置两根中断请求线:可屏蔽中断请求INTR(Interrupt Require)和不可屏蔽中断请求NMI(NonMaskable Interrupt)。对于可屏蔽中断,除了受本身的屏蔽位控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(Interrupt Flag)的控制,IF位为1,可以得到CPU响应,否则,得不到响应。
  • 内中断:也称为异常(exception),是由CPU内部事件所引起的中断,例如进程在运算中发生了上溢或者下溢,有如程序出错,如非法指令,地址越界等。通常把这类中断称为内中断或者陷入。若系统发现有陷入事件,CPU也将暂停正在执行的程序,转去执行该陷入事件的处理程序。

断点:

程序中断的地方,将要执行的下一指令的地址。

现场(上下文)Context

用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量寄存器值当时的环境等。
中断信号由外部设备发起,准确来说是由外部设备的控制器发起,因为外部设备本身并不能发起信号。硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。

现场的保护:进入中断服务程序之前,栈

现场的恢复:进入中断服务程序之后,栈

中断的响应过程

2dccc280ef8550417c72011a50b8ee1e.png

中断响应的实质

中断响应的实质是交换CPU的模式交换指令执行地址处理器状态,以达到如下目的:

1、保留及恢复程序断点及有关信息。

2、自动转入相应的中断处理程序执行。

参考: 华中科技大学软件学院苏曙光老师的操作系统原理课程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XMLhttp学习应用

Client.htm页面代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><title>客…

机器学习没有想象中的那么难

文末彩蛋&#xff0c;不容错过&#xff01;背景从去年的AlphaGo到今年人工智能首次写进政府工作报告&#xff0c;人工智能正在席卷全球&#xff0c;引发第4次工业革命&#xff0c;而AI的核心技术是机器学习和深度学习。目前&#xff0c;机器学习已广泛应用于数据挖掘、计算机视…

json.net java_java解析JSON (使用net.sf.json)

例如JSON字符串str如下&#xff1a;{"data": [{"basic_title": "运筹帷幄因特网","basic_creator": "马跃&#xff0c;余南阳编著","basic_publisher": "成都市&#xff1a;西南交通大学出版社","…

Docker查看应用的实际内存

前言 我们把应用部署到Docker里面之后&#xff0c;有什么办法查看这个应用占用了多少内存呢&#xff1f;docker本身提供了一个命令让我们可以直接看到当前时间所有容易占用的情况。docker stats --no-stream从上面来看&#xff0c;这几个应用用的内存加起来已经是将近12G了。但…

如何动态的生成某种类型的集合呢_知乎画报」的移动端动态化工程实践

本文基于移动端动态化方案在知乎原生推广落地页「知乎画报」上的实践经验&#xff0c;对该方案技术升级过程中的思考以及技术关键细节做了详尽的解读。商业化是互联网公司发展的重要阶段&#xff0c;App 端的商业广告业务对移动端动态化能力的需求很强烈&#xff0c;一方面需要…

asp.net 得到上一页地址

if(!IsPostBack) ViewState["retu"]Request.UrlReferrer.ToString();

任正非致歉华为前程序员:回来吧,公司错了

近几日&#xff0c;因着任正非连续签发邮件&#xff0c;无处不在热议华为&#xff0c;其中与所有的技术人可谓密切相关。除了一员工因说真话&#xff0c;被晋升两级&#xff0c;根据其自愿选择工作岗位及地点&#xff0c;并由无线网络产品线总裁邓泰华保护其不受打击报复之外&a…

Asp.Net Core之Identity应用(下篇)

一、前言在上篇中简单介绍了 Asp.Net Core 自带的 Identity,一个负责对用户的身份进行认证的框架&#xff0c;当我们按需选择这个框架作为管理和存储我们应用中的用户账号数据的时候&#xff0c;就会添加到自己的项目当中去。这个时候&#xff0c;默认情况我们会使用自带的数据…

python随机数生成验证码_Python随机数random模块学习,并实现生成6位验证码

一、前言学习python随机数random模块的使用 ,并使用模块中的函数&#xff0c;实现6位验证码生成二、random模块1、random.random()返回0-1直接的随机数&#xff0c;类型为float>>>print(random.random())0.12591846916629082、random.randint(1, 8)返回1-8直接的随机数…

python没有菜单栏怎么搞mac_Mac 下 sublime 怎么调出顶端菜单栏

点击Sublime的Preferences->Setting-Default菜单&#xff0c;打开它的配置文件。找到如下一行的配置&#xff1a;"fold_buttons": true&#xff0c;值为true则是显示三角折叠按钮&#xff0c;反之则不显示。当然了&#xff0c;不推荐直接改它的默认配置文件&#…

如果每一种语言都对应一种女生,你会喜欢哪一个?

这几天调试都很顺利&#xff0c;今天很意外的不要加班&#xff0c;哥几个看着窗外还是白天&#xff0c;还有点不适应。没想到哥几个突然开始YY&#xff1a;如果每种语言都对应一种女生&#xff0c;你会喜欢哪一个&#xff1f;程序猿寂寞起来&#xff0c;我自己都害怕。碍于人数…

asp.net core安全事项(下)

越权越权是非常严重的安全漏洞&#xff0c;通常状态是开发人员对请求的限制逻辑不严格导致的。如果系统中有角色的概念&#xff0c;越权可能出现不同角色间的越权和同角色间的越权。相同角色&#xff1a;A用户&#xff0c;B用户是相同的角色。A用户和B用户都可以调用 /photo/{i…

[导入]php 安全基础 第八章 共享主机 文件系统浏览

8.4. 文件系统浏览 除了能在共享服务器上读取任意文件之外&#xff0c;攻击者还能建立一个可以浏览文件系统的脚本。由于你的大多数敏感文件不会保存在网站主目录下&#xff0c;此类脚本一般用于找到你的源文件的所在位置。请看下例&#xff1a; <pre> <?php if (iss…

python求函数极值_python 遗传算法求函数极值的实现代码

废话不多说&#xff0c;大家直接看代码吧&#xff01;"""遗传算法实现求函数极大值—Zjh"""import numpy as npimport randomimport matplotlib.pyplot as pltclass Ga():"""求出二进制编码的长度"""def __init__…

java读取文件跳过_在Java中读取文本文件-为什么跳过行?

我是新来的,只是努力尝试读取文本文件.每行上都有一个单词和相应的数字代码.想法是将其读取并将代码和单词放在单独的变量中.我对这个领域了解不多,但是我一直在网上四处寻找,并提出了以下建议&#xff1a;try{FileReader freadernew FileReader(f);BufferedReader inFilenew B…

程序员的项目周期(表情包版)

0. 需求审评会议进行中1. 开发阶段进行中….2. 代码复查阶段3. 测试阶段….4. 需求突然要改….5. 项目上线

巧用Dictionary实现日志数据批量插入

背景最近再做一个需求&#xff0c;就是对站点的一些事件进行埋点&#xff0c;说白了就是记录用户的访问行为。那么这些数据怎么保存呢&#xff0c;人家点一下保存一下&#xff1f;显然不合适&#xff0c;肯定是需要批量保存&#xff0c;提高效率。问题窥探首先&#xff0c;我想…

[导入]php 安全基础 附录B. 函数

附录B. 函数 在我写作本书的时候&#xff0c;http://php.net/quickref.php列出了共3917个函数&#xff0c;其中包括一些类似函数的语法结构&#xff0c;在此我不准备把它们从函数中区分开来&#xff0c;而是把它作为函数看待。 由于函数数量很大&#xff0c;一一说明它们的正确…

python os rename用法_Python os.rename() 方法

Python os.rename() 方法概述os.rename() 方法用于命名文件或目录&#xff0c;从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError。语法rename()方法语法格式如下&#xff1a;os.rename(src, dst)参数src -- 要修改的目录名dst -- 修改后的目录名返回值该方法没有返回值实…