
当我们在写程序是,凡是涉及到IO读写、内存分配等硬件资源的 *** 作时,往往不能直接 *** 作,而是通过一种叫 系统调用 的过程,让程序陷入到内核态运行,然后内核态的CPU执行有关硬件资源 *** 作指令,得到相关的硬件资源后在返回到用户态继续执行,之间还要进行一系列的数据传输。如此麻烦,让用户程序直接访问硬件资源不是更好吗?
假设没有这种内核态和用户态之分,程序随随便便就能访问硬件资源,比如说分配内存,程序能随意的读写所有的内存空间,如果程序员一不小心将不适当的内容写到了不该写的地方,就很可能导致系统崩溃。用户程序是不可信的,不管程序员是有意的还是无意的,都很容易将系统干到崩溃。
正因为如此,Intel就发明了ring0-ring3这些访问控制级别来保护硬件资源,ring0的就是我们所说的内核级别,要想使用硬件资源就必须获取相应的权限(设置PSW寄存器,这个 *** 作只能由 *** 作系统设置)。 *** 作系统对内核级别的指令进行封装,统一管理硬件资源,然后向用户程序提供系统服务,用户程序进行系统调用后, *** 作系统执行一系列的检查验证,确保这次调用是安全的,再进行相应的资源访问 *** 作。 内核态能有效保护硬件资源的安全。
另外,用户程序是通过内部 中断 来进行系统调用的,触发内部中断的指令是 INT N ,触发中断后CPU根据中断号到中断向量表中查找中断服务程序入口,中断服务程序的处理过程一般是,设置PSW状态字(设置了之后才能执行一切指令),保存用户态上下文,调用过程执行,执行完成恢复用户程序上下文。
运行enclave即可封装。
阿里云虚拟化Enclave提供的安全性由多个方面结合实现。底层基于带有TPM/TCM芯片的第三代神龙架构,且为EVM提供vTPM/vTCM设备来增强其安全性和可信能力。上层提供高兼容性的SDK,方便您快速搭建Enclave环境并使用。在可信证明能力方面,您可以对运行在机密执行环境中的代码进行验证,例如借助SDK,机密应用可在运行时生成证明材料(包括平台、应用信息、签名等),再通过远程证明服务端(可结合KMS)验证证明材料的有效性。当主VM切分资源给EVM,并且EVM开始运行时,底层会执行资源访问隔离,确保主VM无法访问这些已经切分出去的vCPU或内存资源,保障EVM的正常运行和私密性。
没研究过内核代码
不过有个方向 希望对你有帮助
proc下面的文件和文件夹应该是内核创建的吧
你看一下它们是怎么被创建的,应该是同样的思路
似乎有一个proc_mkdir的函数,专门在proc下创建文件夹的
你可以查一下它的源代码
以上就是关于为什么运行时程序要分成内核态和用户态全部的内容,包括:为什么运行时程序要分成内核态和用户态、内核态代码如何使用enclave封装、linux内核态如何创建文件夹(c代码实现)用户态可以使用mkdir,内核态怎么做,非常感谢您的帮忙!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)