知识卡片
把权限级别切换简化成数组引用的翻转而非重建数据结构
内容
操作系统在用户态和内核态间切换是极高频操作,若每次都重新计算内存映射表,开销大到不可接受。JPC为读写、用户管理员四种权限组合各自预建一份线性地址空间结构,切换时只需把当前引用从一组预建数组换成另一组,本质是改两个指针指向。若某种状态切换极其频繁,与其现算现建,不如提前准备好每种状态,切换时只做一次廉价引用替换。
参考来源
- 位置:《架构之美》第9章《JPC:一个纯Java的x86 PC模拟程序》9.6节《保护模式的危险》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0202.xhtml)
- 结论依据:原文明确"我们为每个组合(读-用户、读-管理员、写-用户和写-管理员)制造一个线性地址空间……在用户模式和管理员模式之间的转换只需要改变内存系统中的两个引用",并特别指出这种设计"非常适合Linux内核的分页方法"。
- 原始内容:我们为每个组合(读-用户、读-管理员、写-用户和写-管理员)制造一个线性地址空间……在用户模式和管理员模式之间的转换只需要改变内存系统中的两个引用……我们到内核空间的切换仅仅是数组引用的翻转,这也是一个低开销的进程。