在没有系统调用的情况下写入磁盘



我正在尝试了解环3到环0的传输如何在操作系统中工作。

我想我知道系统调用是如何工作的了。

我的理解是,当用户模式程序想要进行系统调用时,它将设置调用参数并发送一个INT,该INT将把控制权传递给操作系统,操作系统将读取参数,完成该工作,然后将控制权返回给用户程序。还有更多优化的sys进入武器sys退出变体。

如果用户主动调用系统调用,所有这些对我来说都是有意义的。

然而,为了保证安全,操作系统不能假设调用者将使用系统调用来访问资源。

我的问题是-如果用户程序直接尝试直接访问资源(磁盘)而不涉及操作系统,会发生什么?

操作系统如何拦截它?

任何I/O硬件,例如磁盘控制器,将(由设计者选择)响应I/O端口地址或内存空间地址,或者两者都响应。没有其他方法可以与硬件通信。硬件在外面的巴士上。程序代码必须读/写一些I/O端口或者必须读/写一些内存;该地址是真正的设备而不是实际的RAM。

在x86上,由于内核控制对两者的访问:

  • I/O端口,通过设置或不设置I/O端口权限,阻止环3访问

  • 物理内存空间地址(通过控制虚拟到物理地址的映射)

则绝对可以从用户模式移除访问。

因此,用户模式不能执行针对设备的指令。这是任何硬件上内核/用户分离的基本方面:内核可以控制用户模式可以做什么。

以@sawdust的注释为例——一旦内核设置了上述限制,那么:

  • 尝试发出I/O端口指令将被捕获到内核,因为没有授予访问权限。

  • 对内存空间设备地址的访问是不可表达的;没有用户空间虚拟地址等同于所需的特定物理地址。

相关内容

最新更新