- 源码阅读工具:Source Insight
- 关键字:
- 内核Kernel
- 特权级
- 授权
- 主要内容:国科大杨力祥《操作系统高级教程》课堂笔记1 —— 本节课主要探讨了Linux内核,从逻辑推理的角度带大家体会什么是内核,为什么需要内核。
未经授权,不得访问其他用户的资源
访问自己的资源,总是授权的。
问题:未经许可,用户是否能访问外设(IO)中自己的资源?
问题:而自己的资源,应该要能访问的,那怎么办?
在linux系统中特权级别分为0,1,2,3一共四个级别,0最大 ,3最小。
问题:用户程序指令(3特权)为什么不能访问0特权的数据?
答:因为用户程序指令具有不确定性。
问题:0特权能否直接跳到3特权?
答:不允许,若此时0特权跳转过去后仍保持全态,那么应用程序就会直接变为kernel。
接续访问机制:用户发起 -> 内核接续(IO行为) -> 交付用户
内核的工作,是用户进程访问行为的延续
内核需要结构化,提供一组自洽的、一致的syscall
接续访问机制的重要保障:用户态和内核态之间有面"墙"(墙是由某些硬件机制创建的)
以RISCV为例:CSR寄存器组和CSR指令(CSR:Control and Status Registers)。
提问:既然未经授权,不得访问其他用户的资源。那所谓授权,又是给谁的?
思考:
答:给"访问":一般是三元组(用户,操作,资源)。即一次授权对应一次访问。
提问:从用户发起到内核接续,也即不确定行为到确定行为,如何实现?
答:1. 反转状态;2. 要求转移指令确定的落点:(1)限制用户进程的跳转指令;(2)限制用户进程的跳转落点。
补充:以RISC-V为例,(1)只能是ecall指令;(2)只能是mtvec,中断向量基址,该值由OS内核指定。
提问:既然内核可以用某些硬件机制建墙,那用户岂不是也可以用它来拆墙?
通俗版解答:
以RISCV为例:
想要从U模式变到M模式,就必须使用CSR指令修改CSR寄存器组;
想要使用CSR指令修改CSR寄存器组,就必须已经处于M模式,否则机器报异常。
学术版解答: