操作系统 双模操作
操作系统中的双模操作可保护操作系统免受非法用户的侵入。我们通过将某些系统指令标记为特权指令以防止其造成危害来实现这种防御。硬件只允许在核心模式下执行特权指令。特权指令的示例包括切换到用户模式的命令、I/O监控、控制定时器和处理中断。
为了确保操作系统的正常执行,我们必须区分机器代码执行和用户定义代码。大多数计算机系统已经开始提供硬件支持,以帮助区分不同的执行模式。操作系统有两种模式:
用户模式 和 核心模式 。
需要一个模式位来标识当前指令正在执行的特定模式。如果模式位为1,则表示处于用户模式;如果模式位为0,则表示处于核心模式。
注意:系统启动时,总是以核心模式启动。
操作系统的双模类型
为确保操作系统正常工作,操作系统有两种模式:用户模式和核心模式。
1. 用户模式
当计算机系统运行用户应用程序(如文件创建或其他应用程序)时,用户模式下没有直接访问计算机硬件的权限。对于执行与硬件相关的任务,例如当用户应用程序请求操作系统提供服务或发生中断时,系统必须切换到核心模式。用户模式的模式位为1。这意味着如果系统处理器的模式位为1,则系统处于用户模式。
2. 内核模式
所有操作系统的底层任务都在内核模式下执行。由于内核空间可以直接访问系统的硬件,所以内核模式负责处理所有需要硬件支持的进程。除此之外,内核模式的主要功能是执行特权指令。
这些特权指令不被授予用户访问权限,这就是为什么这些指令无法在用户模式下处理的原因。因此,用户受限制的所有进程和指令都在操作系统的内核模式下执行。内核模式的模式位为0。因此,为了使系统在内核模式下运行,处理器的模式位必须等于0。
示例
通过模式位,我们可以区分代表操作系统执行的任务和代表用户执行的任务。
- 计算机系统代表用户应用程序执行时,系统处于用户模式。
- 但是,当用户应用程序通过系统调用向操作系统请求服务时,它必须从用户模式转换为内核模式来满足请求。正如我们所说,这种架构增强对系统运行的许多其他方面都是有用的。
- 在系统引导时,硬件以内核模式启动。
- 然后加载操作系统并在用户模式下启动用户应用程序。
- 每当发生陷阱或中断时,硬件从用户模式切换到内核模式,并将模式位状态更改为0。
- 因此,每当操作系统控制计算机时,它处于内核模式。
- 系统总是在将控制传递给用户程序之前通过将模式位设置为1来切换到用户模式。
需要双模式操作
某些类型的进程需对用户隐藏,并且某些不需要任何类型硬件支持的任务。使用OS的双模式,可以分别处理这些任务。
此外,操作系统需要以双模式运行,因为内核级程序执行OS的所有底层功能,如进程管理、内存管理等。如果用户更改了这些内容,可能会导致整个系统崩溃。因此,为了仅向用户指定任务的访问权限,操作系统需要双模式。
所以,每当系统处理用户应用程序时,它处于用户模式。每当用户请求某些硬件服务时,从用户模式到内核模式的转换就会发生,这是通过将模式位从1改变为0来完成的。为了返回到用户模式,模式位再次改为1。
用户模式和内核模式切换
在其生命周期中,进程以用户模式和内核模式执行。用户模式是正常模式,在此模式下,进程的访问权限有限。然而,内核模式是特权模式,在此模式下,进程对系统资源(如硬件、内存等)具有无限制的访问权限。进程可以通过在内核模式下执行访问内核数据来访问硬件I/O等服务。任何与进程管理、I/O硬件管理和内存管理相关的操作都要求进程在内核模式下执行。
重要的是要知道,处于内核模式下的进程可以访问任何设备和内存,而在内核模式下的任何崩溃都会导致整个系统崩溃。但是,用户模式下的崩溃只会导致故障进程崩溃。
内核提供了系统调用接口(SCI),它们是用户进程进入内核模式的入口点。系统调用是进程从用户模式进入内核模式的唯一方式。下图详细说明了从用户模式切换到内核模式的过程。
- 当应用程序处于用户模式时,它会调用 Glibc ,这是由软件程序员使用的库。
- Glibc库知道对不同架构调用系统调用的正确方法。它根据架构的应用程序二进制接口(ABI)设置参数传递方式,为系统调用入口做准备。
- 现在,Glibc调用ARM的软件中断指令,通过更新CPSR寄存器的模式位将处理器置于监管模式,并跳转到向量地址0x08。
- 到目前为止,进程执行处于用户模式。在执行SWI指令后,进程被允许执行内核代码。现在,内存管理单元(MMU)会允许该进程对内核虚拟内存的访问和执行。
- 从向量地址0x08开始,进程执行加载并跳转到SW中断处理程序 vector_swi() ,用于ARM。
- 在 vector_swi() 中,从SWI指令中提取出系统调用号(SCNO),并使用SCNO作为系统调用表 sys_call_table 中的索引来执行系统调用函数。
- 在系统调用执行完毕后,在返回路径中,会先恢复用户空间的寄存器,然后进入用户模式开始执行。
为什么需要切换模式
切换用户模式和内核模式有两个主要原因,如下:
- 如果所有东西都在单一模式下运行,我们将会出现早期版本Windows的微软问题。如果一个进程能够利用漏洞,那么该进程就可以控制系统。
- 某些条件被称为陷阱、异常或系统故障,通常由异常情况(如除零、无效内存访问等)引起。如果进程运行在内核模式下,这样的陷阱情况可能导致整个操作系统崩溃。而在用户模式下的进程只会导致用户模式进程崩溃。
因此,进行模式切换是为了确保一个更稳定、安全的系统。
用户模式和内核模式的区别
计算机可以在用户模式或内核模式下运行。用户模式和内核模式的区别在于用户模式是应用程序运行的受限模式,而内核模式是在访问硬件资源时计算机进入的特权模式。
计算机在这两种模式之间进行切换。频繁的上下文切换可能会降低速度,但是在内核模式下执行所有进程是不可能的。这是因为,如果一个进程失败,整个操作系统可能会失败。下面是用户模式和内核模式之间的一些其他区别,如下:
术语 | 用户模式 | 内核模式 |
---|---|---|
定义 | 用户模式是一种受限模式,应用程序在其中执行和启动。 | 内核模式是特权模式,计算机在访问硬件资源时进入该模式。 |
模式 | 用户模式被视为从属模式或受限模式。 | 内核模式是系统模式、主模式或特权模式。 |
地址空间 | 在用户模式下,一个进程获得自己的地址空间。 | 在内核模式下,进程获得一个单一的地址空间。 |
中断 | 在用户模式下,如果发生中断,只有一个进程会失败。 | 在内核模式下,如果发生中断,整个操作系统可能会失败。 |
限制 | 在用户模式下,访问内核程序有限制,无法直接访问它们。 | 在内核模式下,用户程序和内核程序都可以访问。 |