日常学习记录10:内核态、用户态、异常、系统调用、内核空间

内核是操作系统中很重要的概念,尤其是对Linux系统来说,但是内核两个字又很抽象,此外还有内核态、用户态等等概念,这篇文章来盘一下。

1.什么是内核?

一句话的回答:
“内核是操作系统常驻存储器的部分” ——援引自《深入理解计算机系统》P504

详细一点点:
内核是为应用程序提供对硬件安全访问的软件,具有管理进程管理内存管理硬件设备IO等能力。

2.什么是内核态、内核模式 | 用户态、用户模式?

内核态 = 内核模式
用户态 = 用户模式

在处理器中用了某寄存器的一个bit来描述应用程序当前享有的权力,这个bit叫做方式位(mode bit),方式位置位时进行就进入内核模式
运行在内核模式的进程可以执行指令集中的任何指令,可以访问系统中存储器的任何地址

相应的,如果没有设置方式位时应用程序就运行在用户模式,默认也是在用户模式下。
运行在用户模式的进程不允许执行特权指令(发起I/O),也不允许直接引用地址内核区中的代码和数据。

/*********
如果程序默认运行在用户模式的话,那就不具备使用硬件设备的能力,那应该怎么去使用硬件IO呢——进入到内核模式

那怎么进入到内核模式呢——通过系统调用

那系统调用是啥——见4,但是先盘一下异常
/*********

3.什么是异常?

这里的异常不是编程语言里的try、catch、throw异常,而是操作系统中的异常,好像有点陌生有熟悉,其实具体到实例就一目了然了,盘一下:

异常有4种,分别是中断、陷阱、故障、终止

其中,中断比较熟悉,计算机组成原理课上讲过,另外几个看汉字认识,放到计算机场景里可能稍微有点懵。其实都是平常编程中遇到过的,例如常见的有:

中断:硬件I/O(网卡收发socket、磁盘读写文件、定时器芯片)
陷阱:系统调用(read函数、fork函数、exec函数、exit函数)
故障:缺页异常、分母为0、算术溢出、非法访问的内存地址
终止:硬件错误
在这里插入图片描述

回顾2中提出的问题,怎么从用户模式进入内核模式,通过系统调用即可,也是异常之一。

4.什么是系统调用?

一句话概括:
系统调用就是从用户模式到内核模式的桥梁。

从程序员的角度来看,系统调用看起来和普通的函数一样,直接使用就行了。实际上执行的原理有很大区别。

普通函数的过程:
(1)函数的参数入栈
(2)保存调用函数的下一条指令地址
(3)调用函数
(4)返回保存的指令地址
(5)返回值出栈[如果有的话]

系统调用的过程:
(1)根据异常号[系统调用为80]与异常表寄存器找到对应的异常表表项
(2)根据表项里记录的异常处理程序地址调用对应的异常处理程序
(3)处理完之后将控制返回给被中断的程序

在这里插入图片描述
在这里插入图片描述

5.什么是内核空间、用户空间?

内核空间:存放操作系统的数据、代码,具体就是前四分之一的内存空间
用户空间:存放用户进程的数据、代码

处于用户态的程序只能访问用户空间
而处于内核态的程序可以访问用户空间和内核空间

参考文献
  1. 《深入理解计算机系统》8.1~8.2
  2. 内核态(内核空间)和用户态(用户空间)的区别和联系
  3. linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
  4. 函数调用过程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值