例如C语言中的代码经过编译器翻译,得到机器语言指令。其中高级语言的代码翻译的结果可能会对应多条指令。简单来说,指令就是处理器CPU能识别、执行的最基本的命令
有的指令执行起来不会对操作系统或者其他的内容产生影响,而有的程序有着很高的权限,如果随意的使用,可能会对整个系统带来严重的影响。例如内存清零指令,如果用户程序可以随意使用这个指令,那么就意味着一个用户可以将其它用户的内存数据随意清零,显然这是很危险的
由此,可将指令划分为以下两类
不允许用户程序使用。例如内存清零指令
允许用户程序随意使用。例如普通的运算指令
因为指令是被CPU所识别、执行的命令,所以上述根据指令是否可以被用户程序使用的划分方式就存在一个问题,CPU如何判断当前是否可以执行特权指令,即当前内存中存放的程序并交给CPU来处理的是否是用户程序。因此,操作系统给定了两种处理器状态
此时CPU只能执行非特权指令
此时CPU无论是特权指令还是非特权指令都可以执行
至于如何控制CPU的这两种状态:用程序状态字寄存器PSW中的某个标志位来标识当前处理器处于什么状态,比如0为用户态,1为核心态
因为存在两种指令,所以对应的根据是否能使用特权指令,将程序划分为内核程序和应用程序
操作系统的内核程序是系统的管理者,既可以执行特权指令,又可以执行非特权指令,处理器运行在核心态
为了保证系统能安全运行,普通应用程序只能执行非特权指令,运行在用户态
上述的两种指令、两种处理器状态、两种程序都是人为进行划分的结果,所以会发现两种处理器状态和两种程序的划分具有一定的联系。两种处理器状态的是以内存中的程序是两种程序中的哪一种作为划分依据的。
由上诉操作系统的运行机制可知,程序可被划分为内核程序和应用程序。那么内核程序和应用程序应该各自完成什么样的功能呢,或者说如何从程序所完成的功能的角度来将程序划分为内核程序和应用程序。
之前有提到过计算机系统的层次结构,其中操作系统层,是可以继续进一步划分的。更靠近应用程序的部分为非内核功能,更靠近硬件部分的为内核功能。具体的,内核(功能)可以划分为对系统资源管理的功能(包括基础管理、存储器管理、设备管理等功能)、时钟管理、中断处理以及原语(设备驱动、CPU切换等)
总而言之,内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序。
用于实现计时功能,包括并发等等都离不开它。时钟相当于是整个计算机系统的心跳。
负责实现中断机制
一种特殊的程序,是最接近硬件的部分。这种程序的运行是具有原子性的。所谓原子性,就是这个程序要么不执行,要么执行到底中途不能被打断。且其运行时间较短、跳用频繁
这三个模块是与硬件联系较为紧密的
对于系统资源管理的功能部分,有的操作系统不将其划分为内核功能。不同的操作系统,对内核功能的划分可能不一样。
所以由此对操作系统的体系结构进行了划分,将把系统资源管理的功能部分划分为内核的操作系统的体系结构,称为大内核,将不把系统资源管理的功能部分划分为内核的操作系统的体系结构,称为微内核
操作系统的体系结构问题和企业的管理问题很相似。
内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令。用户态、核心态的切换相当于普通员工和管理层之间的工作交接
企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高,因为很多事情可以免去报备之类的流程;缺点是组织结构混乱,例如分工模糊不明确,难以维护
企业的体量越来越大,管理层只负责一些核心的工作。优点就是组织结构清晰,方便维护;缺点则是效率低下