Operating system 一个关于操作系统保护边界的真实示例?
我试图理解用户/内核边界在操作系统中是如何工作的 我一直在读关于它的文章,似乎如果用户级别的某些东西试图执行禁止的操作,硬件会触发陷阱并将控制发送回内核级别的操作系统,内核会处理这种情况 这怎么可能呢?有些东西怎么能直接从用户级转到硬件级,不是所有的交互都是通过系统调用(在内核级)完成的吗?然后内核将预测该操作是否非法 我有点困惑,我想一个关于这个流程如何工作的真实示例(使用用户级应用程序+操作系统,如linux)可能会帮助我理解,如果有人能做到,我会非常感激 有些东西怎么能直接从用户级转到硬件级,不是所有的交互都是通过系统调用(在内核级)完成的吗 许多交互不是通过系统调用进行的。作为一个实际例子;在80x86上,可能导致从用户切换到内核的因素有: a) 任何中断,包括:Operating system 一个关于操作系统保护边界的真实示例?,operating-system,Operating System,我试图理解用户/内核边界在操作系统中是如何工作的 我一直在读关于它的文章,似乎如果用户级别的某些东西试图执行禁止的操作,硬件会触发陷阱并将控制发送回内核级别的操作系统,内核会处理这种情况 这怎么可能呢?有些东西怎么能直接从用户级转到硬件级,不是所有的交互都是通过系统调用(在内核级)完成的吗?然后内核将预测该操作是否非法 我有点困惑,我想一个关于这个流程如何工作的真实示例(使用用户级应用程序+操作系统,如linux)可能会帮助我理解,如果有人能做到,我会非常感激 有些东西怎么能直接从用户级转到硬件
- 任何异常(调试异常、分割异常、无效操作码异常、常规保护故障、页面故障、机器检查异常等)。这些表示编程错误(例如,被零除),或硬件故障(机器检查异常),或内核扩展功能的机会(例如,页面错误表示内核需要从交换空间获取数据,因为内核正在扩展程序可以使用的“内存”量,等等)
- 任何IRQ(来自请求注意的设备)
- 从一个CPU发送到另一个CPU的任何中断(运行在该CPU上的软件/内核)
- 软件中断(来自同一CPU)
- SYSCALL,syscenter
- 涉及调用门或任务门的“call far”或“jmp far”
- 软件中断(来自同一CPU)。两次提到,因为它适合这两个类别
例如,当(用户)进程运行时可能发生的情况;程序可能会执行一些代码(然后尝试访问一些实际上不在RAM中的数据,从而导致页面错误,内核从内存映射文件中获取程序想要访问的数据),然后程序可能会执行更多的代码(触发无效操作码异常,其中内核模拟当前/旧CPU上实际上不支持的较新指令),然后程序可能会执行更多代码(但会被网卡的IRQ中断,其中内核/设备驱动程序安排发送/接收更多TCP/IP包),然后程序可能会执行更多的代码(但会被一个计时器中断,该计时器会导致内核执行一些任务切换,以允许其他进程有一些CPU时间),然后程序可能会执行更多的代码(并被CPU告知内核正在变热,内核可能会将进程迁移到另一个较冷的CPU而中断);而程序本身也不会意识到这些事情发生了(并且会认为它一直在使用CPU,而事实并非如此)。伙计,我必须承认,我花了一段时间才理解整个答案(不得不用谷歌搜索你提到的一些事情),但我想我终于明白了。谢谢你,这是一个非常好的回答/解释,我可以清楚地看到你花了多少时间和耐心来仔细解释,我真的很感激你所做的:)非常感谢!