习学发开 发表于 2016-4-24 21:22:23

为什么linux在找到对应的驱动程序前要先产生一个异常?

看韦东山的书的时候发现的

原文是
以LED为代表:
1.应用程序使用库提供的open函数打开代表LED的设备文件
2.库根据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核
3.内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序

我不明白,什么叫"会引起CPU异常,进入内核"? CPU异常到底指的是什么?是不是就是中断?
如果不是,这么做比起中断方式来有什么好处?

fengxin32 发表于 2016-4-24 21:42:11

SWI软中断

qqfirer 发表于 2016-4-24 21:51:11

ARM为例,普通应用程序在用户空间,运行在虚拟地址模式。而驱动作为内核的一部分,与内核一起工作在实模式中。这个中断,即产生SWI异常,使CPU切换到内核中。。

myxiaonia 发表于 2016-4-29 10:44:57

rtx也用类似办法,我认为这种办法比其他同类型rtos好多了

sgweilong 发表于 2016-4-29 11:08:30

SWI或者SVC,隔离用户和系统内核,用户通知内核即可,让内核去操作硬件设备。
RTOS中任务切换的概念被Linux用来调用驱动了,这不说还真不知道

wangcjishu 发表于 2016-4-29 15:19:59

一般来说中断是指外部事件引起的,异常通常是cpu的内部事件引起的。

myxiaonia 发表于 2016-4-30 13:01:19

sgweilong 发表于 2016-4-29 11:08
SWI或者SVC,隔离用户和系统内核,用户通知内核即可,让内核去操作硬件设备。
RTOS中任务切换的概念被Linux ...

不是,是rtx这个rtos用了linux或者dos这样的软中断做法,其他很多rtos都没有这么干的

lswood 发表于 2016-4-30 14:56:16

内核工作在ring0级别,应用工作在ring3级别,通过软中断或者调用门进入ring0级别

lswood 发表于 2016-4-30 14:59:17

妹子,你对操作系统原理和计算机体系结构不通啊

fengyunyu 发表于 2016-4-30 18:09:11

lz学了多久Linux?

yuntian 发表于 2016-4-30 19:00:17

妹子很努力啊

xwkm 发表于 2016-5-1 00:18:53

这和x86的sysenter/int 80h产生系统调用是一回事╮(╯▽╰)╭不产生异常无法主动切换上下文

Scarlette 发表于 2016-5-1 00:56:05

xwkm 发表于 2016-5-1 00:18
这和x86的sysenter/int 80h产生系统调用是一回事╮(╯▽╰)╭不产生异常无法主动切换上下文 ...

她没内核态和用户态的概念!你跟她说INT 80h……( ̄◇ ̄;)
页: [1]
查看完整版本: 为什么linux在找到对应的驱动程序前要先产生一个异常?