当CPU处于用户模式时,CPU不能执行特权指令,也不能访问内核空间内存。
当CPU处于内核模式时,CPU可以执行所有指令并访问所有内存。
现在,在Linux中,用户模式程序可以访问所有内存(使用/dev/mem),并可以执行两个特权指令IN和OUT (我认为使用iopl() )。
因此,Linux中的用户模式程序可以做大多数在内核模式下可以完成的事情(我认为大多数事情)。
允许用户模式程序拥有所有这些功能,难道不违背拥有CPU模式的目的吗?
发布于 2019-03-10 21:31:01
因此,Linux中的用户模式程序可以做大多数在内核模式下可以完成的事情(我认为大多数事情)。
嗯,并不是所有的用户模式程序都可以,只有那些具有适当特权的程序。这是由内核决定的。
/dev/mem受到通常的文件系统访问权限和CAP_SYS_RAWIO功能的保护。iopl()和ioperm()也通过相同的能力受到限制。
/dev/mem也可以完全从内核(CONFIG_DEVMEM)编译出来。
允许用户模式程序拥有所有这些功能,难道不违背拥有CPU模式的目的吗?
嗯,也许吧。这取决于您希望特权的用户空间进程能够做什么。如果用户空间进程能够访问/dev/sda (或等效的),那么它们也可以破坏整个硬盘驱动器,尽管这违背了使用文件系统驱动程序来处理存储访问的目的。
(还有一个事实是,iopl()是通过在i386上使用CPU特权模式来工作的,因此不能说它辜负了它们的目的。)
https://unix.stackexchange.com/questions/505527
复制相似问题