Linux中的所有驱动程序都在相同的上下文或不同的上下文中工作?

Linux中的所有驱动程序都在相同的上下文或不同的上下文中工作?,第1张

概述Linux中的所有驱动程序都在相同的上下文(内核空间的地址空间)中运行,或者每个驱动程序在不同的环境中运行(类似于不同进程在用户空间的不同地址空间中的工作方式)?最佳答案在x86-Linux中,32位,所有驱动程序都在所谓的内核模式下运行(由于英特尔组织其CPU保护方案的方式,有时称为环0模式).当进程调用驱动程序时(例如,您发出对设备驱动程序的read()

Linux中的所有驱动程序都在相同的上下文(内核空间的地址空间)中运行,或者每个驱动程序在不同的环境中运行(类似于不同进程在用户空间的不同地址空间中的工作方式)?最佳答案在x86-linux中,32位,所有驱动程序都在所谓的内核模式下运行(由于英特尔组织其cpu保护方案的方式,有时称为环0模式).
当进程调用驱动程序时(例如,您发出对设备驱动程序的read()系统调用),驱动程序内部会有一个执行的函数.据说该函数在该进程的上下文中执行.

这意味着驱动程序函数在调用进程的内存映射中执行.这意味着驱动程序函数不仅可以访问存储在内核保留地址(虚拟地址0xC0000000及更高版本)中的自身变量和结构,还可以访问用户调用进程的变量和代码.这允许copy_to_user()或copy_from_user()等函数能够与用户调用进程交换信息.

回想一下,linux中任何进程的内存映射都有两个部分:用户进程可用的最大3GB内存的一大部分.此内存对于该进程是私有的. 1GB的另一部分用于内核.此部分在所有用户进程的内存映射中共享.驱动程序的代码,堆栈和全局变量位于此1GB空间内.

还有另一个上下文:中断上下文. linux驱动程序可以为硬件中断安装处理程序.当触发此中断时,将执行处理程序,但这次,它将在当时正在执行的任何进程的上下文中执行(即,尚未从用户进程调用处理程序)

典型的驱动程序是函数的集合,其中大多数是在进行系统调用的用户进程的请求下执行的,因此大多数情况下,在上下文中正在执行驱动程序(实际上是它的一个实例)一个特定的用户进程(但与用户进程中的代码不同,驱动程序执行所有权限).驱动程序的某些部分可能被其他内核函数异步调用,因此它们可能在另一个上下文中执行,与属于正在使用该驱动程序的进程的内容无关.

还要记住,多个用户进程可能正在使用驱动程序,因此每个进程在其自己的上下文中执行相同的代码.应该写一个驱动程序,以便重新输入,以避免副作用.

总结

以上是内存溢出为你收集整理的Linux中的所有驱动程序都在相同的上下文或不同的上下文中工作?全部内容,希望文章能够帮你解决Linux中的所有驱动程序都在相同的上下文或不同的上下文中工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1046974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存