中断处理

【计算机组成原理】 输入/输出系统

依然范特西╮ 提交于 2019-12-18 02:35:31
I/O 系统基本概念 I/O 系统中的几个基本概念如下: 外部设备。包括输入/输出设备及通过输入。输出接口才能访问的外存储结构。 接口。在各个外设与主机之间传输数据时进行各种协调工作的逻辑部件。协调包括传输过程中速度的匹配、电平和格式转换等。 输入设备,用于向计算机系统输入命令和文本、数据等信息的部件。键盘和鼠标是最基本的输入设备。 输出设备。用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件。显示器和打印机是最基本的输出设备。 外存设备。指除计算机内存及 CPU 缓存等外的存储器。硬磁盘、光盘等是最基本的外存设备。 一般来说,I/O 系统由 I/O 软件和 I/O 硬件两部分构成: I/O 软件。包括驱动程序、用户程序、管理程序、升级补丁等。通常采用 I/O 指令和通道指令实现 CPU 与 I/O 设备的信息交换。 I/O 硬件。包括外部设备、设备控制器和接口、I/O 总线等。通过设备控制器来控制 I/O 设备的具体动作:通过 I/O 接口与主机(总线)相连。 在输入/输出系统中,经常需要进行大量的数据传输,而传输过程中有各种不同的 I/O 控制方式,基本的控制方式有以下 4 种: 程序查询方式。由 CPU 通过程序不断查询 I/O 设备是否已经做好准备,从而控制 I/O 设备与主机交换信息。 程序中断方式。只在 I/O 设备准备就绪并向 CPU

ARM异常及中断处理介绍(中断是异常的一种)

谁都会走 提交于 2019-12-18 02:27:03
中断 概念 :是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。 中断源 概念 :可以引起中断的信号源。 异常优先级 ARM处理器中有7种类型的异常,按优先级 从高到低 的排列如下: 复位异常 (Reset)、 数据异常 (Data Abort)、 快速中断异常 (FIQ)、 外部中断异常 (IRQ)、 预取异常 (Prefetch Abort)、 软中断异常 (SWI)、 未定义指令异常 (Undefined interrupt)。 优先级最低的两种异常是软件中断异常和未定义指令异常。因为正在执行的指令不可能既是一条软中断指令,又是一条未定义指令,所以软中断异常和未定义指令异常享有相同的优先级。 注意 在ARM处理器中(Exception)和中断(Interrupt)有些差别,异常主要是从处理器被动接受异常的角度出发,而中断带有向处理器主动申请的色彩。此文中对“异常”和“中断”不做严格区分;两者都是指请求处理器打断正常的程序执行流程,进入特定程序循环的一种机制。 异常 概念 :异常由内部或外部源产生并引起处理器处理一个事件。在处理异常之前,处理器状态必须保留,一遍在异常处理程序完成后,原来的程序能够重新执行。同一时刻可能出现多个异常。 注意 当异常出现时

Java并发编程,Condition的await和signal等待通知机制

落爺英雄遲暮 提交于 2019-12-18 01:39:28
Condition简介 Object类是Java中所有类的父类, 在线程间实现通信的往往会应用到Object的几个方法: wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll() 实现等待/通知机制,同样的, 在Java Lock体系下依然会有同样的方法实现等待/通知机制。 从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制,Condition与Lock配合完成等待/通知机制, 前者是Java底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。 两者除了在使用方式上不同外,在功能特性上还是有很多的不同: Condition能够支持不响应中断,而通过使用Object方式不支持 Condition能够支持多个等待队列(new 多个Condition对象),而Object方式只能支持一个 Condition能够支持超时时间的设置,而Object不支持 参照Object的wait和notify/notifyAll方法,Condition也提供了同样的方法: 针对Object的wait方法 void await() throws InterruptedException//当前线程进入等待状态

计算机组成原理复习

旧时模样 提交于 2019-12-17 19:12:30
title: 计算机组成原理复习 date: 2018-06-28 14:08:04 tags: 课程学习 1.计算机硬件包括:输入设备,输出设备,运算器,控制器,存储器 2.计算机软件一般分为两大类:一类应用软件,另一类叫系统软件,操作系统属于系统软件类 3.第一代计算机的逻辑部件采用的是电子管,1946-1957年; 第二代计算机的逻辑部件采用的是晶体管,1958-1964年; 第三代计算机的逻辑部件采用的是中小规模集成电路,1965-1971年; 第四代计算机的逻辑部件采用的是大规模及超大规模集成电路,1972至今 4.计算机系统由硬件系统和软件系统构成。 5.计算机系统的三个层次结构由内到外分别是硬件系统,软件系统和应用软件 6.用高级语言编写的程序称为源 程序,经编译程序或解释程序翻译后称为 目标程序 7.将源程序翻译成目标程序的软件是编译器或编译程序 8.程序设计语言一般分为3类:机器语言,汇编语言,高级语言 9.编译方式是使用编译程序把源程序编译成机器代码的 目标程序 ,并以机器程序 的形式保留 10.简要说明计算机系统的层次结构? 计算机系统具有层次性,它由多级层次结构组成。从功能上计算机系统可分为五个层次级别: 第一级是微程序设计级。这是一个硬件级,它由机器硬件直接执行微指令。 第二级是一般机器级,也称为机器语言级。它由微程序解释机器指令系统.这一级是硬件级。

IDT系统中断描述表以及绕过Xurtr检测的HOOK姿势

半城伤御伤魂 提交于 2019-12-17 10:49:01
什么是中断? 指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 比如:除零(0号中断)、断点(3号中断)、系统调用(2e号中断)、以及异常处理等都会引发中断,所以自然需要相应的中断例程去进行处理。 这样操作系统就会用数据结构来维护这些中断例程,这个数据结构就是IDT(Interrupt Descriptor Table)。 中断描述表 IDT表的长度与地址是由CPU的IDTR寄存器来描述的。IDTR寄存器共有48位,高32位是IDT表的基地址,低16位是IDT的长度。 typedef struct _IDTR{ USHORT IDT_limit; USHORT IDT_LOWbase; USHORT IDT_HIGbase; }IDTR,*PIDTR; IDTR idtr; __asm SIDT idtr; 可以通过以上SIDT指令可以读取IDTR寄存器。然后通过MAKEWORD宏把高位与地位组合起来就可以获得IDT表的基地址了。 简单来说,IDT表是一张位于物理内存的线性表,共有256个表项。在32位模式下,每个IDT表项的长度是8个字节(64 bit),IDT表的总长度是2048字节。 kd> r idtr idtr

为什么不能在中断中使用printf--不可重入函数

一个人想着一个人 提交于 2019-12-17 08:07:37
前言 前两天在笔试的时候遇到了关于能否在中断中使用printf的问题,当时有点蒙,笔试结束后查阅了资料,这里进行以下总结 可重入函数和不可重入函数 printf不能在中断中被调用的原因是它是一个不可重入函数,而在中断中要避免调用不可重入函数,首先我们先说说什么是可重入函数,什么是不可重入函数 简单说来,区分一个函数是否可重入就是看这个函数能否在未返回的时候再次被调用。而造成一个函数不可重入的原因往往是使用了全局变量,如果一个函数未返回再执行一次会导致对全局变量的操作是不安全的。就例如我们常用的printf、malloc、free都是不可重入的函数,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表,在多线程的环境下,如果没有很好的处理数据保护和互斥访问,就会发生错误 在unix里面通常都有加上_r后缀的同名可重入函数版本 如果实在没有,不妨在可预见的发生错误的地方尝试加上保护锁同步机制等等 如何写可重入的函数 我们只要遵循几条规则,写出来的函数就是可重入的: 不要使用全局变量。因为别的代码很可能覆盖这些变量值 在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做“进入/退出核心”或者用OS_ENTER_KERNAL/OS_EXIT_KERNAL来描述

LDK3读书笔记(第一章)

自作多情 提交于 2019-12-17 01:21:34
操作系统 :   操作系统是指在整个系统中负责完成 基本功能 和 系统管理 的那些部分。包括内核、设备驱动程序、启动引导程序、用户界面、基本的文件管理工具和系统工具。 内核基本组成 : 负责响应中断的 中断服务程序 负责管理多个进程从而分享处理器时间的 调度程序 负责管理进程地址空间的 内存管理程序 网络 进程间通信 服务程序 内核空间 :处于 系统态 并 被保护 起来的 内存 空间。 应用程序的工作方式:   当一个应用程序执行一条系统调用,我们说 内核正在代其执行 。如果进一步解释,在这种情况下,应用程序被称为通过系统调用 在内核空间运行 ,而内核被称为 运行于进程上下文中 。这种交互关系(应用程序通过系统调用界面陷入内核)是应用程序完成其工作的基本行为方式。 我们可以将每个处理器在任何指定时间点上的活动必然概括为下列三者之一: 运行于用户空间,执行用户进程; 运行于内核空间,处于进程上下文,代表某个特定的进程执行; 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。   以上所列几乎包括所有情况,即使边边角角的情况也不例外。例如,当CPU空闲时,内核就运行一个空进程,处于进程上下文,但运行于内核空间。 中断机制:   当硬件设备想和系统通信的时候,它首先要发出一个异步的中断信号去打断处理器的执行,继而打断内核的执行。中断通常对应着一个中断号

多线程基础知识

亡梦爱人 提交于 2019-12-16 22:07:40
线程与进程的区别   1. 进程是资源分配的最小单元,线程是CPU调度的最小单元。所有与进程相关的资源,均被记录再PCB中。   2. 线程隶属于某一个进程,共享所有进程的资源。线程只由堆栈寄存器、程序计数器和TCB构成。   3. 进程可以看作独立的应用,线程不能看作独立的应用。   4. 进程有独立的地址空间,相互不影响,而线程只是进程的不同执行路径,如果线程挂了,进程也就挂了。所以多进程的程序比多线程程序健壮,但是切换消耗资源多。    Java中进程与线程的关系   1. 运行一个程序会产生一个进程,进程至少包含一个线程。   2. 每个进程对应一个JVM实例,多线线程共享JVM中的堆。   3. Java采用单线程编程模型,程序会自动创建主线程。   4. 主线程可以创建子线程,原则上要后于子线程完成执行。 线程中start方法和run方法的区别   Java中创建线程的方式有两种,不管使用继承Thread的方法是hiRunnable接口的方法,都需要重写run方法。调用start方法会创建一个新的线程并启动,run方法只是启动线程后的回调函数,如果调用run方法,那么执行run方法的线程不会是新创建的线程,而如果使用start方法,那么执行run方法的线程就是我们刚刚启动的那个线程。 public class Main { public static void main

手把手,嘴对嘴,讲解UCOSII嵌入式操作系统的任务调度策略(四)

假装没事ソ 提交于 2019-12-16 15:04:12
继续...... 再回到那个重要得函数: void OS_Sched (void) { #if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0u; #endif OS_ENTER_CRITICAL(); if (OSIntNesting == 0u) { /* Schedule only if all ISRs done and ... */ if (OSLockNesting == 0u) { /* ... scheduler is not locked */ OS_SchedNew(); OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; if (OSPrioHighRdy != OSPrioCur) { /* No Ctx Sw if current task is highest rdy */ #if OS_TASK_PROFILE_EN > 0u OSTCBHighRdy->OSTCBCtxSwCtr++; /* Inc. # of context switches to this task */ #endif OSCtxSwCtr++; /* Increment context switch

NIO-Channel接口分析

对着背影说爱祢 提交于 2019-12-16 14:12:19
目录 NIO-Channel接口分析 目录 前言 接口 SCTP协议 UDP协议 TCP协议 文件 总结 相关文献 NIO-Channel接口分析 目录 NIO-概览 NIO-Buffer NIO-Channel NIO-Channel接口分析 前言 本来是想学习Netty的,但是Netty是一个NIO框架,因此在学习netty之前,还是先梳理一下NIO的知识。通过剖析 源码 理解NIO的设计原理。 本系列文章针对的是JDK1.8.0.161的源码。 上一篇 介绍了Channel的基本使用,下面对Channel的接口进行分析。 接口 SCTP协议 SCTP(Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。 对于SCTP协议这里不详细描述,想了解的同学可以看下 这篇文章 SCTP协议平时用的不多,这里不做具体讨论。 UDP协议 NIO使用DatagrmChannel实现了UDP协议的网络通讯。 下面我们对各个接口进行分析。 AutoCloseable 和 Closeable 分别是自动关闭和主动关闭接口。当资源(如句柄或文件等)需要释放时,则需要调用close方法释放资源。 public interface AutoCloseable { void close(