为什么linux在找到对应的驱动程序前要先产生一个异常?
看韦东山的书的时候发现的原文是
以LED为代表:
1.应用程序使用库提供的open函数打开代表LED的设备文件
2.库根据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核
3.内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序
我不明白,什么叫"会引起CPU异常,进入内核"? CPU异常到底指的是什么?是不是就是中断?
如果不是,这么做比起中断方式来有什么好处? SWI软中断 ARM为例,普通应用程序在用户空间,运行在虚拟地址模式。而驱动作为内核的一部分,与内核一起工作在实模式中。这个中断,即产生SWI异常,使CPU切换到内核中。。 rtx也用类似办法,我认为这种办法比其他同类型rtos好多了 SWI或者SVC,隔离用户和系统内核,用户通知内核即可,让内核去操作硬件设备。
RTOS中任务切换的概念被Linux用来调用驱动了,这不说还真不知道 一般来说中断是指外部事件引起的,异常通常是cpu的内部事件引起的。 sgweilong 发表于 2016-4-29 11:08
SWI或者SVC,隔离用户和系统内核,用户通知内核即可,让内核去操作硬件设备。
RTOS中任务切换的概念被Linux ...
不是,是rtx这个rtos用了linux或者dos这样的软中断做法,其他很多rtos都没有这么干的 内核工作在ring0级别,应用工作在ring3级别,通过软中断或者调用门进入ring0级别 妹子,你对操作系统原理和计算机体系结构不通啊 lz学了多久Linux? 妹子很努力啊 这和x86的sysenter/int 80h产生系统调用是一回事╮(╯▽╰)╭不产生异常无法主动切换上下文 xwkm 发表于 2016-5-1 00:18
这和x86的sysenter/int 80h产生系统调用是一回事╮(╯▽╰)╭不产生异常无法主动切换上下文 ...
她没内核态和用户态的概念!你跟她说INT 80h……( ̄◇ ̄;)
页:
[1]