操作系统运行环境

语雀笔记地址:操作系统运行环境 · 语雀

处理器运行模式

计算机系统中,通常CPU执行两种不同性质的程序:一种是操作系统内核程序;另一种是用户自编程序(即系统外层的应用程序,或简称“应用程序”)。对操作系统而言,这两种程序的作用不同,前者是后者的管理者,因此“管理程序”(即内核程序)要执行一些特权指令,而“被管理程序”(即用户自便程序)出于安全考虑不能执行这些指令。

1、特权指令

在操作系统中,特权指令(Privileged Instruction)是指具有高权限的指令,只能被操作系统或特定程序使用,普通应用程序无法直接执行。操作系统需要通过访问处理器的特权级别或程序状态字(PSW)来限制这些指令的使用。

由于操作系统拥有特殊的权限和高级别的访问权限,因此可以调度和管理计算机系统中的各种资源。但这也意味着操作系统必须对用户程序执行的每一条指令进行控制和监管,防止用户非法使用操作系统的资源,损害系统的稳定性和安全性。

在x86架构的计算机中,特权指令一般分为Ring0(内核态)和Ring3(用户态)两个级别。Ring0表示特权级别最高的内核态,在该级别下运行的程序可以直接访问硬件和系统资源。Ring3表示特权级别最低的用户态,在该级别下运行的程序无法直接访问硬件和系统资源,必须通过操作系统提供的接口来访问。

特权指令一般包含系统调用、处理器状态保存和恢复、中断处理、存储器保护和访问等功能。操作系统需要对这些指令进行控制和管理,并对用户程序请求的特权指令进行许可或拒绝,以确保系统安全、稳定和高效地运行。

2、非特权指令

非特权指令(Non-priveleged Instruction)是指普通的指令,用户程序可以直接执行的指令,不需要特殊的权限或特权级别。这些指令通常用于普通应用程序的执行,并且不会对计算机系统的安全和稳定性产生影响。

与特权指令不同,用户程序可以直接调用和使用非特权指令,而不需要对操作系统资源和硬件设备进行访问和控制。例如,常见的算术指令、移动指令和逻辑指令等,都是非特权指令,用户程序可以直接调用这些指令进行运算和控制流程。

需要注意的是,虽然非特权指令不需要特殊的权限或特权级别,但用户程序仍然需要遵守操作系统的规则和限制。例如,用户程序不应该越权访问操作系统的资源或读写其他进程的数据,否则会触发访问异常或权限异常,导致程序崩溃或终止。

操作系统通过特权指令和非特权指令的区分和管理,可以实现对用户程序的控制和监管,保证系统的运行的安全性、稳定性和可靠性。

3、特权指令与非特权指令的实现

在具体实现上,将CPU的运行模式划分为用户态(目态)和核心态(又称管态、内核态)。

a.核心态

核心态(Kernel mode)是指操作系统运行的最高特权级别,也是操作系统内核代码执行的特权级别。在核心态中,操作系统可以直接访问计算机的硬件资源,如CPU、内存、磁盘、网络等,并对它们进行控制和管理。

操作系统在核心态下运行时,其掌控了整个计算机系统的控制权,可以直接操作硬件设备、内存和中断处理等重要功能,因此是操作系统必须具备的最高特权级别。在核心态下,操作系统可以执行特权指令、访问特殊的寄存器和内存区域。

b.用户态

用户态(User mode)是指操作系统下一个比较低的特权级别,是一种让应用程序运行于低特权级别的保护机制。在用户态下运行的程序是受到操作系统管理和控制的,必须通过系统调用等接口来访问操作系统的资源和服务。

在用户态下,进程只能访问自己的内存地址空间,不能访问其他进程的内存地址空间,也不能直接访问内核态的资源。如果需要操作内核态的资源,例如文件系统、网络接口等操作,需要通过系统调用来获取内核态的服务。

相对于核心态而言,用户态下的应用程序不能直接访问计算机的硬件资源无法直接处理各种异常和中断。当应用程序需要进行IO操作、代码段切换等操作时,需要请求操作系统提供服务,操作系统通过核心态来完成相应的操作,保证对计算机的控制力度。

操作系统在用户态和核心态之间实现了特权级别的隔离,以增强操作系统的稳定性和安全性。操作系统内核代码采用核心态运行,可以直接访问和管理计算机的硬件资源和系统服务;应用程序采用用户态运行,受到操作系统严格监控。

用户自编程序运行在用户态,操作系统内核程序运行在核心态。

在软件工程思想和结构化程序设计方法影响下诞生的现代操作系统,几乎都是分层式的结构。操作系统的各项功能分别被设置在不同的层次上。一些与硬件关联较紧密的模块,如时钟管理、中断处理、设备驱动等处于最低层。其次是运行频率较高的程序,如进程管理、存储器管理和设备管理等。这两部分内容构成了操作系统的内核。这部分内容的指令操作工作在核心态。内核是计算机上配置的底层软件,它管理着系统的各种资源,可以看作是连接应用程序和硬件的一座桥梁,大多数操作系统的内核包括4 方面的内容。

一、时钟管理

在计算机的各种部件中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。例如,在分时操作系统中采用时间片轮转调度在实时系统中按截止时间控制运行在批处理系统中通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。

二、中断机制

引入中断技术的初衷是提高多道程序运行环境中 CPU 的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,成为操作系统各项操作的基础。例如,键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代操作系统是靠中断驱动的软件。

中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。这样可以减少中断的处理时间,提高系统的并行处理能力。

三、原语

按层次结构设计的操作系统,底层必然是一些可被用的公用小程序,它们各自完成一个规定的操作。它们的特点如下:

1)处于操作系统的最低层,是最接近硬件的部分。

2)这些程序的运行具有原子性,其操作只能一气呵成(出于系统安全性和便于管理考虑)

3)这些程序的运行时间都较短,而且调用频繁。

通常把具有这些特点的程序称为原语(Atomic Operation)。定义原语的直接方法是关闭中断让其所有动作不可分割地完成后再打开中断。系统中的设备驱动、CPU 切换、进程通信等功能中的部分操作都可定义为原语,使它们成为内核的组成部分。

四、系统控制的数据结构及处理

系统中用来登记状态信息的数据结构很多,如作业控制块、进程控制块(PCB)、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效的管理,系统需要一些基本的操作,常见的操作有以下3 种:

1)进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等

2)存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等

3)设备管理。缓冲区管理、设备分配和回收等。

总之,核心态指令实际上包括系统你那个调用类指令和一些针对时钟、中断和原语的操作指令。

中断和异常

中断的概念

  • 中断是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。
  • 操作系统是“中断驱动”的;换言之,中断(广义)是激活操作系统的唯一方式
  • 中断有广义和狭义之分,上述中断时指广义的中断

中断的作用:

CPU 上会运行两种程序,一种是操作系统内核程序,一种是应用程序 。

在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序。

中断”是让操作系统内核夺回CPU使用权的唯一途径

如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序

内核态->用户态:执行一条特权指令——修改PSW的标志位为“用户态”,这个动作意味着操作系统 将主动让出CPU使用权 。

用户态->内核态:由“中断”引发,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺 回CPU的使用权。

中断的类型

内中断

与当前执行的指令有关, 中断信号来源于CPU内部

例子 1:试图在用户态下执行特权指令

例子 2:执行除法指令时发现除数为 0

例子 3:有时候应用程序想请求操作系统内核的服务,此时会执行一条特殊的指令——陷入指令,该指令会引发一个内部中断信号

执行“陷入指令”,意味着应用程序主动地将CPU控制权还给操作系统内核。 “系统调用”就是通过陷入指令完成的 。

外中断

与当前执行的指令无关, 中断信号来源于CPU外部

每一条指令执行结束 时,CPU都会例行检查 是否有外中断信号

例子 1:时钟中断——由时钟部件发来的中断信号

例子2:I/O中断——由输入/输出设备发来的中断信号

中断的分类

中断机制的基本原理

不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号 的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。

小结

系统调用

什么是系统调用?有何作用?

知识点回顾: 操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接 口和程序接口。其中,程序接口由一组系统调用组成

“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务

系统调用与库函数的区别

为什么系统调用是必须的?

什么功能要用到系统调用?

应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

系统调用的过程

传递系统调用参数 -> 执行陷入指令(用户态) -> 执行相应的内请求核程序处理系统调用(核心态) ->返回应用程序

注意:

1. 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态。

2. 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行 。

小结

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值