首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
devops
debian
apache
ssh
centos
tomcat
colors
压力测试
jenkins
vagrant
curl
7层
ubuntu
sftp
grep
容器
service
服务器
kubectl
awk
运维
crontab
nginx
docker
交换机
k8s
stdout
dns
port
grafana
负载均衡
linux
shell
cron
log4j
ftp
centos7
zsh
tengine
touch
unix
sudo
路由器
fabric
server
4层
当前位置:
开发笔记
>
运维
> 正文
在Linux中用内核编程来中断处理程序
作者:keleesen | 来源:互联网 | 2017-08-07 09:39
在Linux中用内核编程来中断处理程序--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
中断处理程序
除最后一章外,目前我们在内核中所做的事情就是响应一个进程的请求,可能通过处理一个特殊文件、发送一个ioctl或进行一个系统调用。但是内核的工作不只是响应进程请求,另一个也是很重要的工作是向连接到机器的硬件发布命令或消息。
CPU和其他硬件的交互有两种。第一种是CPU给硬件发命令。另一种是硬件需要告诉CPU一些东西。第二种交互叫做中断,它很难实现,因为它需要处理硬件,而不是CPU。硬件设备通常由一个非常小的ram,而如果你不在这个ram中的信息可用时把它们读出,它们就会丢失。
在Linux下,硬件中断叫做IRQ(Interrupt Requests的缩写)。有两种IRQ,短类型和长类型。短IRQ需要很短的时间,在此期间机器的其他部分被锁定,而且没有其他中断被处理。一个长IRQ需要较长的时间,在此期间可能发生其他中断(但不是发自同一个设备)。如果可能的话,最好把一个中段声明为长类型。
如果CPU接到一个中断,它就会停止一切工作(除非它正在处理一个更重要的中断,在这种情况下要等到更重要的中断处理结束后才会处理这个中断),把相关的参数存储到栈里,然后调用中断处理程序。这意味着在中断处理程序本身中有些事情是不允许的,因为这时系统处在一个未知状态。解决这个问题的方法是让中断处理程序做需要马上做的事,通常是从硬件读取信息或给硬件发送信息,然后把对新信息的处理调度到以后去做(这叫做半底),返回。内核确保尽快调用半底,而当调用时,任何允许在内核模块中做的事情就都可以做了。
实现的方法是在接到相关的IRQ(在Intel平台上有16个IRQ)时调用中断处理程序。这个函数接到IRQ号码、函数名、标志、一个/proc/interrupts的名字和传给中断处理程序的一个参数。标志中可以包括SA_SHIRQ来表明你希望和其他处理程序共享此IRQ(通常很多设备公用一个IRQ),或者一个SA_INTERRUPT表明这是一个紧急中断。这个函数仅在此IRQ没有其他处理程序或需要共享所有处理程序时才会成功运行。
那么,有了中断处理程序,我们就可以和硬件通信,并且可以使用queue_task_irq和tq_immediate和mark_bh(BH_IMMEDIATE)来调度半底。在2.0版本中不能使用标准queue_task的原因是中断可能发生在某个queue_task的中间。我们需要mark_bh是因为早期的Linux版本只有一个长度为32的半底队列。现在它们中的一个(BH_IMMEDIATE)用于那些没有得到分配给它们的半底入口的驱动程序的半底链表。
linux
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
运维
大数据就业前景及人才需求
近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ...
[详细]
蜡笔小新 2023-12-14 16:25:20
运维
数据库的存储结构及其重要性
本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ...
[详细]
蜡笔小新 2023-12-14 16:00:02
port
Oracle中tnsnames.ora的作用和配置方法
本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ...
[详细]
蜡笔小新 2023-12-14 07:44:06
port
Linux进程控制块PCBtask_struct结构体结构及作用详解
本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ...
[详细]
蜡笔小新 2023-12-13 21:31:18
服务器
图解redis的持久化存储机制RDB和AOF的原理和优缺点
本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ...
[详细]
蜡笔小新 2023-12-13 20:24:11
服务器
Linux下Perl的安装及第一个程序运行
本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ...
[详细]
蜡笔小新 2023-12-13 18:29:11
grep
解决Mac上无法使用localhost连接mysql的问题
本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ...
[详细]
蜡笔小新 2023-12-13 17:48:58
服务器
计算机存储系统的层次结构及其优势
本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ...
[详细]
蜡笔小新 2023-12-13 17:32:41
docker
Webmin远程命令执行漏洞复现及防护方法
本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ...
[详细]
蜡笔小新 2023-12-13 16:14:53
docker
Linux磁盘的分区、格式化的观察和操作步骤
本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ...
[详细]
蜡笔小新 2023-12-13 15:57:13
awk
Linux 正则表达式基础及使用注意事项
本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ...
[详细]
蜡笔小新 2023-12-13 14:24:45
ubuntu
Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2023-12-13 13:30:30
运维
如何在服务器主机上实现文件共享的方法和工具
本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ...
[详细]
蜡笔小新 2023-12-13 13:23:48
运维
问题2:重新命名或者移动数据文件、日志文件到新的位置
本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ...
[详细]
蜡笔小新 2023-12-13 13:02:24
port
imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ...
[详细]
蜡笔小新 2023-12-13 12:34:44
keleesen
这个家伙很懒,什么也没留下!
Tags | 热门标签
devops
debian
apache
ssh
centos
tomcat
colors
压力测试
jenkins
vagrant
curl
7层
ubuntu
sftp
grep
容器
service
服务器
kubectl
awk
运维
crontab
nginx
docker
交换机
k8s
stdout
dns
port
grafana
RankList | 热门文章
1
为任何整数数组定义函数
2
如何在delphi中对TJSONArray进行排序
3
浅谈Java中是否直接可以使用enum进行传输
4
Java配置win10环境变量过程图解
5
如何在WebView中更新请求标头
6
CSS粘性位置处理不同的标题高度
7
mybatis实现图书管理系统
8
Springboot hibernate envers使用过程详解
9
SSM框架把日志信息保存到数据库过程详解
10
Mybatis懒加载的实现
11
SpringBoot整合模板引擎过程代码实例
12
CSS过渡,带按钮,不覆盖文本
13
Flexbox-如果有1个项目,则居中对齐;如果有2个项目,则将居中对齐
14
尝试通过ng update升级到Angular Material 8时,获得了@ angular / *版本〜9.0.0-next-0。为什么会有这种差异?
15
Vuetify应用栏过高-占用屏幕的一半
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有