操作系统的运行机制和体系结构 (三) --- 非特权指令、特权指令,用户态、核心态,应用程序、内核程序...

操作系统的运行机制和体系结构

代码和指令的区别

我们所说的代码一般指一段有意义的字符串,我们可以理解它的意思。比如,我们在C语言中写 x = x + 1;,我们可以清楚的理解这段代码的意思,但是计算机CPU却无法理解,因为它只能理解机器指令。我们来看看这段代码转换为机器指令后,变成了什么亚子。

001011000000011010011111
100100100000110000000001
001011000000011010011111

显然,我们看不懂这是什么意思,但是计算机CPU看得懂,它可以把这些3条指令转换为相应的电信号,去控制其他组件的运行。(这3条机器指令是我胡编的,实际上翻译成为的指令不是这样的)

简而言之,他们的区别在于:

  • 代码:我们能理解,但是计算机CPU无法理解。但可以通过某些程序转换为指令。
  • 指令:我们不能理解,但是计算机CPU能理解并执行指令之中相应的操作。

非特权指令和特权指令

在计算机之中,有的指令是"人畜无害"的,比如加法指令。
但是有的指令却十分危险,比如内存清零指令。如果某程序可以使用这个指令,这就意味着该程序可以将其他程序的内存数据随意清零,这样做显然很危险。
所以,我们必须对这些指令加以分类,将指令分为特权指令(如内存清零指令),和非特权指令(如普通的运算指令)。

  • 非特权指令
    “人畜无害”,安全的指令,程序可以随便用。
  • 特权指令
    危险的指令,只允许某些程序的调用。

问:CPU怎么判断当前是否可以执行特权指令呢?
这就引出了CPU的两种状态,用户态,还有核心态。


用户态和核心态

CPU的两种状态:

  • 用户态
    当CPU处于用户态时,CPU只能执行非特权指令,

  • 核心态
    而当CPU处于核心态时,CPU能执行非特权指令和特权指令。

问:那CPU怎么知道自己位于哪个状态呢?
其实CPU中有一个寄存器 — 程序状态字寄存器(PSW),当该寄存器的值是0时,表示CPU处于用户态;而当为1时,表示CPU处于核心态。


应用程序和内核程序

在用户态和核心态的基础上,我们划分了两种程序,应用程序和内核程序。

  • 应用程序
    应用程序运行于用户态,只能执行非特权指令。
  • 内核程序
    内核程序是操作系统的管理者,运行于核心态,所以可以执行特权指令和非特权指令。

大内核和微内核

操作系统的内核分为两种,一种是大内核,一种是微内核。下面用图示展示二者的区别。
在这里插入图片描述可以看出,大内核比微内核多了一个层次 (处理机管理,存储管理,设备管理等),既大内核需要负责更多的工作。
下面举个例子说说二者有什么优缺点。

假如你和你的小伙伴开了一家公司,由于公司刚开,人员比较少,所以你们既当管理人员,又当处理人员。
现在有一个任务,公司要去商店采购一堆货物,所以你把采购清单列好之后,自己直接去商店采购,然后采购任务就完成了。
在这里插入图片描述
在这里,你并不需要向管理人员汇报采购什么(因为你就是管理人员…)。
所以当你即是管理人员,又是处理人员时,你的办事效率会很高,但是这样有一个不好的地方,那就是分工不明确。

等你们公司发展壮大之后,公司的人越来越多,而且此时,公司的分工明确了。
那么如果你们公司要采购货物, 过程是这样的:处理人员写好采购清单->发送给管理人员,等待审核->审核通过->处理人员向财务人员申请经费->经费到手,开始采购->采购完成。
在这里插入图片描述
显然,这个过程比较繁琐,但是分工很明确。

回到操作系统,
例子中的第一种情况就是大内核的情况,CPU不必在用户态(处理人员)和核心态(管理人员)之间来回切换,这样可以提高工作的效率,但是结构(分工)有些混乱。
而第二种情况就是微内核的情况,CPU必须来回切换用户态(处理人员)和核心态(管理人员,财务人员),工作效率降低了,但是结构(分工)很清晰。


总结

在这里插入图片描述

感谢

以上内容大部分来自王道操作系统系列视频教学。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值