中断处理

网络设备驱动和数据链路层的分析

梦想的初衷 提交于 2019-12-09 21:24:45
分类: linux源码分析 2006-07-24 16:15 1446人阅读 评论 (0) 收藏 举报 当物理网络设备接收到数据时,系统是如何知道并读取数据的呢?当前可通过两种途径解决这个问题。 一种方法是轮询方式 ,系统每隔一定的时间间隔就去检查一次物理设备,若设备“报告”说有数据到达,就调用读取数据的程序。在 Linux 中,轮询方式可通过 定时器 实现,但该方法存在一个明显的缺点:不管设备是否有数据,系统总是要固定地花 CPU 时间去查看设备,且可能延迟对一些紧急数据的处理,因为网络设备有数据时可能不能马上得到 CPU 的响应。在这种方式下,设备完全处于一种被动的状态,而 CPU 又负担过重。无论从资源的利用率上还是从效率上看,这种方法都不是最优的。 另一种方法是中断方式 ,中断方式利用硬件体系结构的中断机制实现设备和系统的应答对话,即当物理设备需要 CPU 处理数据时,设备就发一个中断信号给系统,系统则在收到信号后调用相应的中断服务程序响应对设备中断的处理。中断方式有效地解决了设备与 CPU 的对话交流问题,并将 CPU 从繁重的设备轮询中解脱出来,大大提高了 CPU 的利用率。当前不管是 Linux 平台还是 Windows 平台,它们的网络设备驱动程序 几乎都是使用中断方式 的。故在此我们主要讨论基于中断方式的网络设备驱动程序。 网 络分层引起的一个问题是

内核同步-锁机制

好久不见. 提交于 2019-12-09 20:44:18
在 Linux 系统上,多个进程可以同时运行,以及各种中断发生的中断也在同时得到处理,这种多个上下文宏观上同时运行的情况称为并发。并发具体包括如下几种可能: 1) UP平台上,一个进程正在执行时被另一个进程抢占; 2) UP平台上,一个进程正在执行时发生了中断,内核转而执行中断处理程序; 3) SMP平台上,每个处理器都会发生 UP 平台上的情况; 4) SMP平台上,多个进程或中断同时在多个 CPU 上执行; 多个并发的上下文同时使用同一个资源的情况称为竞态,而可能发生竞态的这一段代码称为临界区。内核编程时的临界区,比较多的情况是: 1) 代码访问了全局变量,并且这段代码可被多个进程执行; 2) 代码访问了全局变量,并且这段代码可被进程执行,也可被中断处理程序执行; 针对上述情况,内核提供了如下手段来解决竟态问题: 1)锁机制: 2)院子操作: 下面会先介绍锁机制。 Linux内核提供了多种锁机制,这些锁机制的区别在于,当获取不到锁时,执行程序是否发生睡眠并进行系统调度。具体包括自旋锁、互斥体、信号量。 一、自旋锁:spinlock_t 自旋锁有两个基本操作:获取与释放。获取自旋锁时,当判断锁的状态为未锁,则会马上加锁,如果已经是锁定的状态,当期执行流程则会执行“忙等待”,中间没有任何的调度操作。也就说执行流程从判断锁的状态到完成加锁,是一个原子操作,在执行上是不可分割的。

IDT 中断描述符表

拜拜、爱过 提交于 2019-12-09 13:58:52
中断描述符表(Interrupt Descriptor Table,IDT)将每个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组。与GDT不同的是,表中第1项可以包含描述符。为了构成IDT表中的一个索引值,处理器把异常或中断的向量号乘以8。因为最多只有256个中断或异常向量,所以IDT无需包含多于256个描述符。IDT中可以含有少于256个描述符,因为只有可能发生的异常或中断才需要描述符。不过IDT中所有空描述符项应该设置其存在位(标志)为0。 IDT表可以驻留在线性地址空间的任何地方,处理器使用IDTR寄存器来定位IDT表的位置。这个寄存器中含有IDT表32位的基地址和16位的长度(限长)值。IDT表基地址应该对齐在8字节边界上以提高处理器的访问效率。限长值是以字节为单位的IDT表的长度。 中断描述符表IDT和寄存器IDTR LIDT和SIDT指令分别用于加载和保存IDTR寄存器的内容。LIDT指令用于把内存中的限长值和基地址操作数加载到IDTR寄存器中。该指令仅能由当前 特权级 CPL 是0的代码执行,通常被用于创建IDT时的操作 系统初始化 代码中。SIDT指令用于把IDTR中的基地址和限长内容复制到内存中。该指令可在任何特权级上执行。   如果中断或异常向量引用的描述符超过了IDT的界限

物联网操作系统

╄→гoц情女王★ 提交于 2019-12-09 11:53:19
原文:https://blog.csdn.net/lu_embedded/article/details/78363460 前言    今天 PC 和手机时代的操作系统霸主未必能在物联网时代延续霸业 。 操作系统产业的规律是,当垄断已经形成,后来者就很难颠覆,只有等待下一次产业浪潮。 如此关键的产业环节必然是兵家必争之地 。 ARM、谷歌、微软、华为、阿里、海尔 等国内外著名的 IT 企业纷纷推出物联网操作系统,整个产业呈现出群雄逐鹿的壮观景象。 传统的嵌入式系统公司也不甘示弱,纷纷通过开源和并购策略推出面向物联网软件平台,比如 Intel、风河、芯科和 Micrium 。 在一轮新的产业浪潮中,国内创业公司也走在风口浪尖上,他们纷纷推出自己的物联网操作系统,比如 庆科、Ruff 和 RT-thread。   回溯物联网操作系统的发展历程,2014年是个重要的、标志性的起点。正是从这一年开始,ARM、谷歌、微软等国际巨头陆续登场,形形色色物联网操作系统进入我们的视野。    ARM Mbed OS   mbed OS 是 ARM 公司专门为 IoT 设计的一个操作系统平台,它支持所有基于 Cortex M 系列的控制器,mbed OS 是开源的操作系统,详情源代码请看:https://github.com/ARMmbed/mbed-os,更多介绍请看官网:https://mbed

Linux操作系统 Linux内核

我的未来我决定 提交于 2019-12-08 05:14:18
Linux内核 预备知识: 1、POSIX(Portable Operating System Interface of UNIX-可移植操作系统接口):定义了 操作系统 应该为 应用程序 提供的 接口标准 ,是IEEE为要在 各种UNIX操作系统 上运行的软件而定义的 一系列API标准的总称 。不同的操作系统根据POSIX标准将实现相同的功能的系统调用标准化。 2、一方面,设计程序只需要跟API打交道和系统调用无关紧要,另一方面, 内核 只跟 系统调用 打交道, 库函数及应用程序 是怎么系统调用不是内核所关心的。 3、完成同一功能, 不同内核 提供的 系统调用 (一个函数)是不同的,所以API又分为Windows API和Linux API。根据POSIX标准,在一个 POSIX操作系统 上开发的软件,能够在 任何其它的POSIX操作系统 上编译执行。 4、标准库:POSIX标准的C/C++库,一、BSD,这个库是AOSP使用的标准C库;二、Bionic,这个是BSD的衍生库,用于NDK开发;三、UNIX C/C++,GUN C/C++,MicroSoft Visual C/C++ 5、POSIX 进程间通信 :POSIX消息、POSIX信号量、POSIX共享内存;System V IPC 6、Linux内核的主要模块(或组件)分以下几个部分: 存储管理 、 CPU和进程管理 、

查看linux中的TCP连接数

谁都会走 提交于 2019-12-07 14:44:38
一、查看哪些IP连接本机 netstat -an 二、查看TCP连接数 1)统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数 ps -ef|grep httpd|wc -l 3)、统计已连接上的,状态为“established netstat -na|grep ESTABLISHED|wc -l 4)、查出哪个IP地址连接最多,将其封了. netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n --------------------------------------------------------------------------------------------- 1、查看apache当前并发访问数: netstat -an | grep ESTABLISHED | wc -l 对比httpd.conf中MaxClients的数字差距多少。 2、查看有多少个进程数: ps aux|grep httpd|wc -l 3

单片机中断函数的理解感悟

走远了吗. 提交于 2019-12-06 20:27:43
随着使用单片机次数越来越多,对单片机中断处理函数的理解更加升入。下面写了曾经血的教训,供大家参考。 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------       1、单片机的不同中断是有优先级的区别,当同时发生两个不同中断时,一般先处理优先级别 低 的中断处理函数。特殊的处理器对中断的定义不同。       2、进入中断处理函数,一定记得清理标志位。或者第一件事情就是 手动 清理标志位。       3、单片机处理中断的时候,该函数是占用了CPU的线程。如果该中断市定时器中断,那么在中断处理完成之前,该定时器是停下来不工作的。( 已经验证 )       4、由于第三点的原因,如果在中断处理函数里面使用了 死 循环。那就会CPU线程就会永远呆在这个处理函数里面,出不来了。       5、中断函数 不 需要 手动 调用,满足规定的条件就会自动调用。因此,大多数编译器都内部定义了中断函数地址及调用方式,中断函数的名称也不能乱取。 来源: https://www.cnblogs.com/cjyc/p

Java并发编程系列-(1) 并发编程基础

萝らか妹 提交于 2019-12-06 15:21:47
1.并发编程基础 1.1 基本概念 CPU核心与线程数关系 Java中通过多线程的手段来实现并发,对于单处理器机器上来讲,宏观上的多线程并行执行是通过CPU的调度来实现的,微观上CPU在某个时刻只会运行一个线程。事实上,如果这些任务不存在阻塞,也就是程序中的某个任务因为该程序控制范围之外的某些条件(通常是I/O)而导致不能继续执行,由于在任务之间切换会产生开销,因此并行的效率可能没有顺序执行的效率高,并行也就没有意义。 一般来讲,CPU核心数和线程数的关系为核心数:线程数=1:1;但是如果使用了超线程技术,可以达到1:2甚至更多。 CPU调度方式 CPU采用时间片轮转机制,来调度不同的线程运行,又称RR调度,注意这样会导致上下文切换。如果线程数目过大,可能产生较大的线程切换开销。 线程和进程 进程 :进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。(包括程序段,相关数据段,和进程控制块PCB) 线程 :线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 关系:一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行

Java并发多线程面试题 Top 50

吃可爱长大的小学妹 提交于 2019-12-06 14:36:22
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如: 继承thread类还是调用Runnable接口 ),然后逐渐问到并发问题像在Java并发编程的过程中遇到了什么挑战,Java内存模型,JDK1.5引入了哪些更高阶的并发工具,并发编程常用的 设计模式 ,经典多线程问题如生产者消费者,哲学家就餐,读写器或者简单的有界缓冲区问题。仅仅知道线程的基本概念是远远不够的, 你必须知道如何处理 死锁 , 竞态条件 ,内存冲突和线程安全等并发问题。掌握了这些技巧,你就可以轻松应对多线程和并发面试了。 许多Java程序员在面试前才会去看面试题,这很正常。因为收集面试题和练习很花时间,所以我从许多面试者那里收集了Java多线程和并发相关的50个热门问题。我只收集了比较新的面试题且没有提供全部答案。想必聪明的你对这些问题早就心中有数了, 如果遇到不懂的问题,你可以用Google找到答案。若你实在找不到答案,可以在文章的评论中向我求助

VxWorks实时操作系统特点介绍

痴心易碎 提交于 2019-12-06 12:37:35
VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似MicrosoftVisual C,但是提供了更丰富的调试、仿真环境和工具。 VxWorks的特点 1、VXWORKS既是一个操作系统、又是一个可以运行的最小基本程序 2、VXWORKS有BSP(可以认为是一种低层驱动),可以减小驱动程序的编写过程 3、VXWORKS具有强大的调试能力,可以在没有仿真器的情况下,通过串口调试。 4、VXWORKS具有软件DEBUG功能,可以对软件部分进行模拟调试。 5、VXWORKS具有丰富的函数库。 6、同时VXWORKS自带TCP/IP协议栈。 最大可能的减小开发者系统软硬件开发的难度,缩小开发周期,提高开发效率。 可以部分的保证软硬件开发的同步进行。 一个好的操作系统的几大特点: ● 多任务和可抢占的 ● 任务具有优先级 ● 操作系统具备支持可预测的任务同步机制 ● 支持多任务间的通信 ● 操作系统具备消除优先级转置的机制 ● 存储器优化管理 ● 操作系统的(中断延迟、任务切换、驱动程序延迟等)行为是可知的和可预测的。 ● 实时时钟服务 ● 中断管理服务 可靠性 操作系统的用户希望在一个工作稳定,可以信赖的环境中工作