回答
这只是一个部分答案。
主要特权分离与地址空间有关:当在“超级用户模式”下运行时,CPU可以访问所有的地址空间。 OS内核以此模式运行。用户进程没有。
这就是为什么,例如,32位Linux主机上的用户进程只有3 GB的地址空间供其处理,而理论上可用的地址空间为2^32 = 4 GB:“搁浅”的GB只是内核可访问,内核将其数据结构映射到这个千兆字节。尝试访问该地址空间的用户进程将看到一个SIGBUS。这个边界也存在于64位机器上,但是非常遥远。
在超级用户模式下,运行代码(内核)也具有修改地址空间布局的可用性:例如,它意味着它可以渲染视频卡的PCI地址空间或DMA地址您的设备空间,串口等在非监督模式下对其他运行代码(进程)完全不可见。
内核可以通过系统调用来授予对低级操作(如磁盘写入)的访问权限。当系统调用被触发时,内核以超级用户模式代表调用它的进程执行系统调用。系统调用完成或中断后,进程将恢复执行并拥有自己的权限。
当今处理器中所有这些逻辑的一个中心部分是MMU(内存管理单元),因为这是允许地址空间重写的组件 - 这就是为什么你可以拥有超过4 GB RAM的32位机器如果MMU不可用,这是不可能的事情。
从理论上讲:是的,加载注入甚至黑客,你甚至可以使用低级指令集,但实际上这是不可能的,因为有太多的资源锁定某些区域。
使用标准语言和标准库,您很可能无法获得100%的硬件,因为这些设计的方式 - 取消关键性和可能危险的决策,甚至可能使复杂(和强大)框架成为可能。使用OSS操作系统,您可以获得完全控制权,但最终还是会出现相同的问题:内核操作与您自己的操作相交,并且不会严重修改内核,您将无法获得全程控制。
如果您希望100%控制您的硬件,您将被迫通过Opcode级别的硬件指令编写您自己的引导加载程序,内核和操作系统,您几乎可以操纵任何内容;使用任何编程语言(甚至ASM)都会对您施加限制。
由于OS在引导和h/w初始化时将自己设置为最高特权所有者。 OS在MMU硬件的帮助下执行此操作。例如,在基于x86处理器有其H/W提供保护
分割两种机制:
分割,使你的记忆像段,并且这些片段可以分配权限级别( PL)从0到3,0是最高特权。在启动&初始化h/w时,您可以分配内核代码段0 PL,并且一旦它开始执行用户进程,内核将为其分配PL 3。如果用户代码尝试跳转到更多特权的内核代码,则会生成一般保护(GP)错误(中断#13),这将执行内核代码,然后可以选择终止用户进程。同样,有像
lidt
,lgdt
等指令,只能在0 PL中执行,如果用户代码试图执行它们,将会产生GP故障。分割也解决了以下问题:- 如何表示仅包含可执行代码的内存区域?
- 如何表示仅包含数据的内存区域?
寻呼:
分页内存划分为大小的页面(4KB/2MB/4MB/1GB),寻呼从H/W解决了支持以下几个问题:
- 如果什么你想说一个页面属于用户或内核?
- 如果你想说页面是只读还是只写或者都是读写?
如果用户代码试图破坏由OS寻呼规则设置,H/W生成页面错误,它执行内核代码(因为OS中断/故障/异常处理程序的初始化过程中设置一个上),这样一来内核可以决定如何处理用户进程。
分段和分页都涉及更多的主题,但这个答案只在你的问题的上下文中。
- 1. 操作系统特权级别与硬件特权级别
- 2. linux如何成为一个内核和一个操作系统
- 3. 如果存在的东西做一些
- 4. 系统操作/意向是否以特定的权限级别发送?
- 5. 最轻量级的Linux内核操作系统
- 6. 是否有一个低级prepend操作的文件系统?
- 7. 如何统计独特的操作?
- 8. 什么操作系统的东西需要检查部署共享库
- 9. Linux内核操作系统寄存器
- 10. 检测操作系统级别的引发事件(操作系统外观)
- 11. 操作系统和内核有什么区别?
- 12. 将EXE文件转换为类似操作系统的东西
- 13. 多核和操作系统
- 14. 如何使用Java获取操作系统级别的信息?
- 15. MessageBox操作系统。独立
- 16. 如何在我的操作系统内核中启用IRQ8?
- 17. 真的==特别的东西?
- 18. 我该如何要求操作系统在另一个内核上运行每个线程? - Linux操作系统
- 19. 有了root访问权限,我该如何访问操作系统级别的通知系统?
- 20. 什么是融合位置提供商的最低Android操作系统级别
- 21. 如何在操作系统级别解释Unix命令
- 22. 操作系统如何引入C语言来编写内核
- 23. 平板电脑操作系统的低级文本引擎
- 24. 移动到64位操作系统时的共享内存性能降低
- 25. unix-like操作系统如何实现IPC共享内存?
- 26. 识别操作系统
- 27. 你如何做一个MySQL WHERE东西='东西'或...(PHP)
- 28. 如何让Android操作系统知道我的应用程序有什么东西要做,当它是背景?
- 29. 升级特定的Linux内核子系统?
- 30. 日内瓦服务器的最低操作系统要求?
StackOverflow是针对特定的编程问题,而不是一般的操作系统设计问题。 –