软中断

Linux内核学习第五周 系统调用

╄→尐↘猪︶ㄣ 提交于 2020-03-31 13:56:33
一、实验截图 二、系统调用流程图: 三、总结:系统调用过程分析 linux 的系统调用过程:用户程序 →C 库(即 API ): INT 0x80 →system_call→系统调用服务例程→内核程序。我们常说的用户 API 其实就是系统提供的 C 库。 系统调用是通过软中断指令 INT 0x80 实现的,而这条 INT 0x80 指令就被封装在 C 库的函数中。软中断和我们常说的硬中断不同之处在于,软中断是由指令触发的,而不是由硬件外设引起的。 INT 0x80 这条指令的执行会让系统跳转到一个预设的内核空间地址,它指向系统调用处理程序,即 system_call 函数。系统调用处理程序 system_call 并不是系统调用服务例程,系统调用服务例程是对一个具体的系统调用的内核实现函数,而系统调用处理程序是在执行系统调用服务例程之前的一个引导过程,是针对 INT 0x80 这条指令,面向所有的系统调用的。简单来讲,执行任何系统调用,都是先通过调用 C 库中的函数,这个函数里面就会有软中断 INT 0x80 语句,然后转到执行系统调用处理程序 system_call , system_call 再根据具体的系统调用号转到执行具体的系统调用服务例程。 system_call 函数是怎么找到具体的系统调用服务例程的呢?通过系统调用号查找系统调用表 sys_call_table

蜕变成蝶~Linux设备驱动之中断与定时器

拜拜、爱过 提交于 2020-03-25 07:40:55
  “我叮咛你的 你说 不会遗忘 你告诉我的 我也全部珍藏 对于我们来说 记忆是飘不落的日子 永远不会发黄 相聚的时候 总是很短 期待的时候 总是很长 岁月的溪水边 捡拾起多少闪亮的诗行 如果你要想念我 就望一望天上那 闪烁的繁星 有我寻觅你的 目光” 谢谢你,曾经来过~   中断与定时器是我们再熟悉不过的问题了,我们在进行裸机开发学习的 时候,这几乎就是重难点,也是每个程序必要的模块信息,那么在Linux中,我们又怎么实现延时、计数,和中断呢? 一、中断 1.概述   所谓中断是指cpu在执行程序的过程中,出现了某些突发事件急待处理,cpu必需暂停执行当前执行的程序,转去处理突发事件,处理完之后cpu又返回原程序位置并继续执行,根据中断来源,中断分为内部中断和外部中断,软中断指令等属于内部中断,中断还可以分为可屏蔽中断和不可以屏蔽中断。Linux 的中断处理分为顶半部和底半部,顶半部完成尽可能少得的比较紧急的功能,往往只是简单的完成“登记中断”的工作,就是将底半部处理程序挂到该设备的底半部处理队列中去,中断处理机制如下图: 2、中断编程 2.1 申请和释放中断 (1) 申请irq int request_irq (unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname

2019-2020-1 20175311 《信息安全系统设计基础》 ucosii-1的学习

夙愿已清 提交于 2020-03-05 22:58:19
下载安装vc6.0和Visual Studio 2017 按照题目要求,对 vc6.0 和 ucos 进行下载解压安装,将ucos导入vc6.0即可编译运行。 可以在以下网址下载: https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes 问题一:ucos是如何分层的?ucos分为硬件相关层,驱动接口层,应用接口层,应用层。 1.硬件相关层 在这层中,要尽量所有硬件相关都囊括在其中。不管是GPIO还是定时器,或串行接口。只要提供标准统一的接口,就可以让上层会因此而变的很潇洒。这其中有三个最为重要的接口Open,Close,Ctrl。 Open主要来完成对应硬件初始化,形参中包括了些,初始化的相关参数。Close失能硬件。Ctrl来实现一些控制的修改如:优先级,中断回调函数等等,硬件的不同,内容也大为不同。 2.驱动接口层 其实在上一层也算是驱动层,只不过因为硬件相关,而把他分离。这层中会用到一个或多个硬件层的接口,进行组合来实现特定功能的程序。这部分程序可举例进行说明。以Flash为列,它这里主要调用硬件层的SPI函数接口,但是主要的写,读指令都是在这里函数中完成的。在这层中需要提供5个标准统一的接口函数:XXXOpen、XXXClose、XXXWrite、XXXRead、XXXIoCtl

《操作系统》知识点复习

佐手、 提交于 2020-03-04 15:43:38
定义:操作系统是对计算机资源(硬件、软件)管理、为用户提供服务(交互、运行环境)的软件、是种系统软件。 计算机用户与硬件之间一直运行的一个程序,狭义称为内核(kernel)程序 目标:方便用户解决问题、使用计算机,通过管理软件有效使用计算机硬件资源 结构:层次 用户—》应用程序-》操作系统-》硬件 组织:启动:先确认每个设备是否正常->开启引导程序Bootstrap(主板):设备初始化、操作系统载入内存、运行进程 中断 :一个事件的触发是由软中断、硬中断实现 Ctrl+Alt+Delete快捷启动是什么中断? 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。 硬中断是可屏蔽的,软中断不可屏蔽。 有专门的文件标识符 标准输入:键盘 标准输出:显示器 多道程序设计的基本特征:无序性、多道性、间断性 分时系统追求:快速响应用户 I/O结构 :设备控制器有本地缓冲器,CPU负责内存与本地缓冲器之间的数据传递,设备控制器控制本地缓冲器和外设之间的。通过中断通知I/O设备操作完成 所以为了提高cpu利用率,采用DMA直接访问内存方式,以块为单位完成传送触发中断 I/O操作:同步:只有I/O结束后,用户程序才能运行 异步:I/O期间,用户程序也能运行 存储结构:存储设备:1.磁盘 2.闪存 3.固态硬盘

linux UART串口驱动开发文档

*爱你&永不变心* 提交于 2020-02-29 09:39:11
内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明. 目录索引: 一. Linux的串口接口及层次. 二. Linux的中断机制及中断共享机制. 三. Linux的软中断机制. 四. TTY与串口的具体关联. 一. Linux的串口接口及层次 . 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理 . W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 0x20000000起1K空间. W83977: 0x30000000起1K空间.

CPU不可中断和僵尸进程

吃可爱长大的小学妹 提交于 2020-02-18 05:44:43
top时S列为进程的状态: R:运行状态 i:空闲状态 D:不可中断状态,进程正在和硬件交互,为了保护硬件,处于不可中断状态。 Z:僵尸状态,实际上进程已经结束,但父进程没有回收资源。 S:睡眠状态,可中断。 T:暂停状态,进程收到SIN_STOP信号暂停。调试加断点的时候,进程就处于这种状态。 X:进程已经挂掉。 大量不可中断状态,系统或硬件出现故障,可能会出现,检查IO问题。 僵尸状态: 1、父进程创建子进程后,没有调用wait等待, 2、子进程结束会给父进程发送sig_children,父进程没有接受此sig_children处理。 3、或者子进程结束太快,父进程没得及做以上2步操作。 当父进程结束,僵尸子进程会被init回收。 当父进程长期不结束,僵尸子进程也会长期存在。 dstat 查看系统的IO情况。 信号中断(软中断) 本质上是一种异步处理机制。 中断被分成上下两部分处理。 上部分:硬中断,直接处理硬件情况,反应很快。 下部分:软中断,为内核线程,反应相对不如上中断快。 每个CPU都有1个软中断内核线程,名字为ksoftirqd/0 。 硬中断一般对应各种IO问题。 软中断发生频率过高,内核线程会因为CPU使用率过高,导致软中断处理不及时,造成各种问题,像网络延时,调度缓慢等性能问题。 来源: CSDN 作者: 技术老虎Tiger 链接: https://blog

中断与异常

筅森魡賤 提交于 2020-02-08 16:06:02
arm对异常(中断)处理过程 1 初始化: :: a 设置中断源,让它可以产生中断 :: b 设置中断控制器(可以屏蔽某个中断,优先级) :: c 设置CPU总开关,(使能中断) 2 执行其他程序:正常程序 3 产生中断:按下按键--->中断控制器--->CPU 4 cpu每执行完一条指令都会检查有无中断/异常产生 5 发现有中断/异常产生,开始处理。对于不同的异常,跳去不同的地址执行程序。这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。如下就是异常向量表,对于不同的异常都有一条跳转指令。 (3-5都是硬件强制做的) 6 这些函数做什么事情? :: 软件做的: :: a 保存现场(各种寄存器) :: b 处理异常(中断): :::: 分辨中断源 :::: 再调用不同的处理函数 :: c 恢复现场 --------------------------------------异常向量表------------------------------------- .globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr

信号和中断的比较 + 中断和异常的比较

巧了我就是萌 提交于 2020-01-28 11:56:02
概念太多了,信号,软中断,中断等等。试着做总结。 下面这个里面主要讲了硬件中断: http://www.cnblogs.com/charlesblc/p/6261741.html 下面这个里面主要讲了软中断,硬中断: http://www.cnblogs.com/charlesblc/p/6263208.html 这里先比较一下异常和中断 参考 http://blog.csdn.net/dodo_check/article/details/8806961 l 中 断(也称硬件中断) 定义:中断是由 其他硬件设备 依照CPU时钟周期信号随机产生的。 分类: 可屏蔽中断 非可屏蔽中断 来源: 间隔定时器和I/O l 异 常(也称软件中断) 定义:当指令执行时 由CPU控制单元 产生的。 分类: 处理器探测到的异常 ² 故障 ² 陷阱 ² 异常终止 编程异常(也称软中断) ² int指令 来源: 程序的错误产生的 内核必须处理的异常(例如:缺页和内核服务的请求-int) 异常处理 l 当发生异常时,CPU控制单元产生一个硬件出错码。 l CPU根据该中断吗找到中断向量表内的对应向量,根据该向量转到中断处理程序。 l 中断处理程序处理完之后向当前进程发送一个SIG***信号。 l 若进程定义了相应的信号处理程序则转移到相应的程序执行,若没有,则执行内核定义的操作。 中断处理 l

Linux课程设计报告【全集】

杀马特。学长 韩版系。学妹 提交于 2020-01-26 06:45:32
4个题目:进程创建及创建过程分析、进程族亲关系分析、进程间软中断通信、进程间管道通信 (欢迎评论/私信) 笔者用的是“ProcessOn免费在线作图网站”作的图。 报告格式要求:正文{中文:宋体、五号、单倍距;英文:Times New Roman、11号、单倍距} 一级标题{宋体、小三号、加粗} 二级标题{四号} 三级标题{小四} 不允许有四级标题 图命名{在图下方居中、宋体、五号、 仅允许出现2级图名 eg.3-1<空格>名称} 图中文字{宋体、小五} 表命名{在表上方居中、......} 表中文字{......} 页眉{学号<空格>姓名、宋体、小四、居中} 页脚{目录页码用罗马数字、正文页码用阿拉伯数字} 注* 参考文献格式要求、缩进要求 题目1 进程创建及创建过程分析 参看书P163~166 1.1设计目的 灵活运用fork系统调用创建进程,深入分析进程创建过程及fork系统调用返回值的含义,透彻分析父子进程代码共享、执行流程及数据集合的变化轨迹。 1.2设计要求 设计的程序能体现出父子进程执行轨迹的差别,也能体现出父子进程数据集合的差别。 1.3程序源代码 #include<stdio.h> #include<unistd.h> pid_t fork(void); int main() { printf("parent pid=%d\n",getpid()); pid_t

中断&异常

五迷三道 提交于 2020-01-16 04:00:33
中断分类      类别 原因 返回行为 例子 广义 中断 异步中断 ( 狭义中断 ) 中断 ( interrupt) 可屏蔽中断 来自 I/O 设备的信号 总是返回到下一条指令 所有的 IRQ 中断 不可屏蔽中断 电源掉电和物理存储器奇偶校验 同步中断 ( 也称异常 ) 陷阱 (trap) 有意的异常 总是返回到下一条指令 系统调用、信号机制 ( 通过软中断实现 ) 故障 (fault) 潜在可恢复的错误 返回到当前指令 缺页异常、除 0 错误、段错误 终止 (abort) 不可恢复的错误 不会返回 硬件错误 注: 80386有两根引脚INTR和NMI接受外部中断请求信号,INTR接受可屏蔽中断请求。在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。 中断的定义( wikipedia ) 中断 是指由于接收到来自外围硬件(相对于 中央处理器 和 内存 )的 异步 信号或来自 软件 的 同步 信号,而进行相应的硬件/软件处理。硬件中断导致处理器通过 一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令(汇编中的int 指令),以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。软中断陷入内核,常被用于实现系统调用(int 80等)。