【操作系统】为什么需要内核

  • 源码阅读工具:Source Insight
  • 关键字:
    • 内核Kernel
    • 特权级
    • 授权
  • 主要内容:国科大杨力祥《操作系统高级教程》课堂笔记1 —— 本节课主要探讨了Linux内核,从逻辑推理的角度带大家体会什么是内核,为什么需要内核。

一、授权

1.观点

未经授权,不得访问其他用户的资源

访问自己的资源,总是授权的。

2.探讨

问题:未经许可,用户是否能访问外设(IO)中自己的资源?

  • 答案:不可以。
  • 原因:IO物理端口只有一个,而用户程序具有不确定性(可能会做一些坏事),如果开放端口,可能会无法控制。
  • 解决办法:若用户非要访问(IO指令/MMIO),则用特权级拦住。
    • 特权级:CPU剥夺了应用程序访问外设的能力。

问题:而自己的资源,应该要能访问的,那怎么办?

  • 因为:用户进程是不确定的,并且它应该是不确定的,没有理由要求它确定。
  • 一组确定的程序来访问自己的资源————即内核

二、特权级

1.特权级的概念

在linux系统中特权级别分为0,1,2,3一共四个级别,0最大 ,3最小。

  • 一般内核代码运行在0特权级;
  • 驱动、虚拟机等运行在1,2特权级;
  • 而我们自己写的程序一般运行在3特权级,也就是最低级别。

2.探讨

问题:用户程序指令(3特权)为什么不能访问0特权的数据?
答:因为用户程序指令具有不确定性。

问题:0特权能否直接跳到3特权?
答:不允许,若此时0特权跳转过去后仍保持全态,那么应用程序就会直接变为kernel。

三、接续访问机制

接续访问机制:用户发起 -> 内核接续(IO行为) -> 交付用户

1.观点

  • 内核的工作,是用户进程访问行为的延续

  • 内核需要结构化,提供一组自洽的、一致的syscall

  • 接续访问机制的重要保障:用户态和内核态之间有面"墙"(墙是由某些硬件机制创建的)

以RISCV为例:CSR寄存器组和CSR指令(CSR:Control and Status Registers)。

2.探讨

提问:既然未经授权,不得访问其他用户的资源。那所谓授权,又是给谁的?

思考

  • 给用户?同一个用户,有可能可以读A文件,而B文件不行;
  • 给资源?同一份资源,有可能用户1可以读,而用户2不行。

答:给"访问":一般是三元组(用户,操作,资源)。即一次授权对应一次访问

提问:从用户发起到内核接续,也即不确定行为到确定行为,如何实现?
答:1. 反转状态;2. 要求转移指令确定的落点:(1)限制用户进程的跳转指令;(2)限制用户进程的跳转落点。

补充:以RISC-V为例,(1)只能是ecall指令;(2)只能是mtvec,中断向量基址,该值由OS内核指定。

提问:既然内核可以用某些硬件机制建墙,那用户岂不是也可以用它来拆墙?

通俗版解答:

  • 机器上电,操作系统先来,先建好墙,完事了把拆墙工具收到墙内。
  • 用户想要拆墙,就要先进到墙内;
  • 想要进到墙内,就要先拆墙。

以RISCV为例:
想要从U模式变到M模式,就必须使用CSR指令修改CSR寄存器组;
想要使用CSR指令修改CSR寄存器组,就必须已经处于M模式,否则机器报异常。

学术版解答:

  • 用时间的不可逆性来建构空间的各项异性;
  • 互为必要条件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值