OS重要知识点摘录(考研用)——第一章:计算机系统概述
本文参考于《2021年操作系统考研复习指导》(王道考研),《计算机操作系统教程》
UNIX是一种多用户分时操作系统。
所谓特权指令,是指计算机中不允许用户直接使用的指令,如I/O指令、置中断指令、存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令 。 在具体实现上,将CPU的状态划分为用户态(目态)和核心态(又称管态、内核态)。
用户自编程序运行在用户态,OS内核程序运行在核心态。
系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此,需要在核心态建立一些“门”,以便实现从用户态进入核心态。在实际OS中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常。 发生中断或异常时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的。
中断也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成,希望处理机能够向设备发下一个输入/输出请求,同时让完成输入/输出后的程序继续运行。时钟中断,表示一个固定的时间片已到,让处理机处理计时、启动定时运行的任务等。这一类中断通常是与当前指令执行无关的事件,即它们与当前处理机运行的程序无关。
异常(Exception)也称内中断、例外或陷入、陷阱(trap),指源自CPU执行指令内部的事件, 如程序的非法操作码、地址越界、算术溢出、虚存系统的缺页及专门的陷入指令等引起的事件。对异常的处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理。
所谓系统调用,是指用户在程序中调用OS所提供的一些子功能, 系统调用可视为特殊的公共子程序。系统中的各种共享资源都由OS统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、进行I/O传输及管理文件等),都必须通过系统调用方式向OS提出服务请求,并由OS代为完成。
系统调用相关功能涉及系统资源管理、进程管理之类的操作,对整个系统的影响非常大,因此必定需要使用某些特权指令才能完成,所以系统调用的处理需要由OS内核程序负责完成,要运行在核心态。 用户程序可以执行陷入指令(又称访管指令或trap指令)来发起系统调用,请求OS提供服务。 可以这么理解,用户程序执行“陷入指令”,相当于把CPU的使用权主动交给OS内核程序(CPU状态会从用户态进入核心态),之后操作系统内核程序再对系统调用请求作出相应处理。处理完成后,操作系统内核程序又会把CPU的使用权还给用户程序(即CPU状态会从核心态回到用户态)。这么设计的目的是:用户程序不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求OS代为执行,以便保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其他进程的运行。
一些由用户态转向核心态的例子:
(1)用户程序要求操作系统的服务,即系统调用
(2)发生一次中断
(3)用户程序中产生了一个错误状态
(4)用户程序中企图执行一条特权指令
(5)从核心态转向用户态由一条指令实现,这条指令也是特权命令,一般是中断返回指令
若程序的运行由用户态转到核心态,则会用到访管指令,访管指令是在用户态使用的,所以它不可能是特权指令。
特权指令与非特权指令:
所谓特权指令,是指有特殊权限的指令,由于这类指令权限最大,使用不当将导致整个系统崩溃,如清内存、置时钟、分配系统资源、修改虚存的段表或页表、修改用户的访问权限等。为保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用。因此,特权指令必须在核心态执行。实际上,CPU在核心态可以执行指令系统的全集。
为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,核心态下可以使用全部指令。在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。从用户态转换为核心态的唯一途径是中断或异常。
访管指令与访管中断:
访管指令是一条可以在用户态下执行的指令。在用户程序中,因要求OS提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将OS转换为核心态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向OS请求服务。
访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。
处于用户态的用户程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断点处继续执行。
中断、异常、系统调用:
中断、异常、系统调用是OS与设备和程序交互的手段。
系统调用(来源于应用程序):应用程序主动向OS发出服务请求
异常(来源于不良的应用程序):非法指令或其他坏的处理状态(如内存出错)
中断(来源于外设):来自不同的硬件设备的计时器和网络的中断
(1)三者产生的源头:
中断:外设;
异常:应用程序意想不到的行为(如除0操作、恶意程序、程序需要的资源未满足)
系统调用:应用程序请求OS提供服务
(2)三者的处理时间
中断:异步事件(应用程序不知道事件何时产生);
异常:同步(执行到某特定指令后一定会产生);
系统调用:异步或同步;返回点有可能异步(应用程序发出请求后去做其他事,OS处理完请求后,给应用程序发出异步消息),也有可能同步。
(3)三者的响应
中断:持续,对用户应用程序是透明的(应用程序未感觉到有中断产生,OS完成中断过程)
异常:杀死或重新执行意想不到的应用程序指令
系统调用:等待和持续(等待服务完成后,继续执行)
大内核系统将OS的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。
但随着OS设计规模急剧增长,OS设计人员试图按照复杂性、时间常数、抽象级别等因素,将OS内核分成基本进程管理、虚存、I/O与设备管理、IPC、文件系统等几个层次,继而定义层次之间的服务结构,提高OS内核设计上的模块化。但由于层次之间的交互关系错综复杂,定义清晰的层次接口非常困难。
为解决OS的内核代码难以维护的问题,提出了微内核的体系结构。它将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行, 从而降低了内核的设计复杂性。那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。
微内核结构有效地分离了内核与服务、服务与服务,使得它们之间的接口更加清晰,维护的代价大大降低,各部分可独立地优化和演进,从而保证了OS的可靠性。
微内核结构的最大问题是性能问题,因为需要频繁地在核心态与用户态之间进行切换,OS的执行开销偏大。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153788.html