学习笔记——OS的运行环境

基于上一篇内容有关微内核结构的内核基础知识。

链接:https://blog.csdn.net/LY_624/article/details/105370954

一、基本概念

1.现代的操作系统内核中基本包括:

              1)一些与硬件关联较紧密的模块,诸如时钟管理、中断处理、设备驱动等处于最底层;

              2)运行频率较高的程序,诸如进程管理、存储器管理和设备管理等。

2.核心态与用户态

              目的:为了防止OS本身及关键数据(如PCB等)遭受到应用程序有意或者无意的破坏。

              核心态:又称系统态,管态。具有较高的特权,能执行一切指令,访问所有寄存器和存储区。传统的OS都在系统态运行。

              用户态:又称目态。具有较低的执行权利。只能访问指定的寄存器和存储区。一般,应用程序在用户态运行。

             从用户态转向核心态的唯一途径是中断或异常。

3.特权指令与非特权指令

              特权指令:必须运行在核心态,只能用于操作系统或其他系统软件,不能直接给用户使用。

                               如:I/O指令、置中断指令、存取某些内存保护的寄存器、置PSW、清内存等。

              非特权指令:运行在用户态。当用户态下使用特权指令时,将产生中断阻止用户使用。

4.访管指令与访管中断

访管指令是一条可以在用户态下执行的指令。

在用户程序中,因要求OS提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将OS转为核心态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向OS请求服务。

访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段,从而引起访管中断。

执行过程:当处于用户态的程序使用访管指令时,系统根据访管指令的操作数执行访管中断处理程序,访管中断处理程序将按系统调用的操作数和参数转到相应的例行子程序。完成服务功能后,退出中断,返回到用户程序断电继续执行。

二、OS的运行机制

1.时钟管理

如时间片轮转,每当时间片用完,由时钟管理产生一个中断信号,促使调度程序重新调度。

2.中断机制

如各种类型的系统调用、键盘命令的输入、进程调度、设备驱动等。现代OS,是靠中断驱动的软件。

中断机制中,只有小部分属于内核,负责保护和恢复中断现场的信息,转移控制权到相关的处理程序。

3.原语

原子操作:一个操作中的所有动作,要么全做,要么全不做。换言之,它是一个不可分割的基本单位。

原语执行过程中不允许被中断。原子操作在系统态下执行,常驻内存。

如对链表进行操作的原语、实现进程同步、设备驱动、CPU切换等。

4.系统控制的的数据结构及处理

如JCB、PCB、链表、消息队列、内存分配表等。

需要一些基本操作:进程管理、存储器管理、设备管理等。

以上可以看出,核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令,是指令系统的全集。

三、中断与异常

重要作用:从用户态转向核心态的唯一途径是中断或异常,是通过硬件实现的。如用一个特殊寄存器的一位来表示CPU所处的工作状态,0表示核心态,1表示用户态。若进入用户态,只需将该位置为1即可。

中断需要保存PC以及PSW的内容,PC值由中断隐指令自动保存,通用寄存器的内容由OS保存;

而子程序调用保存PC即下一条指令地址,而不用保存PSW。

外中断:通常是与当前程序运行无关的事件,即它们与当前处理机运行的程序无关。

如I/O结束中断、时钟中断等。

内中断(异常):一般源于当前程序的运行现场,而且异常不能被屏蔽,一旦出现必须处理。

可分为故障(fault)、陷阱(trap)和终止(abort)三类。

如程序的非法操作码、地址越界、算数溢出、虚存系统缺页以及专门的陷入指令等。

四、系统调用

系统调用是用户在程序中调用OS所提供的一些子功能,系统调用可以被看做特殊的公共子程序。在用户程序中,凡是与资源有关的操作(如存储分配、I/O传输以及管理文件等)都必须通过系统调用方式向OS发出服务请求,并由OS代为完成。

功能包括:设备管理、进程控制、进程通信、文件管理、内存管理等。

显然,系统调用运行在核心态,通过系统调用的方式使用系统功能,保证系统的稳定性和安全性,防止用户随意更改或访问系统的数据或命令。系统调用是通过硬件中断机制或异常实现的。

由用户态转向核心态的例子:

        1)用户程序要求系统服务;

        2)发生一次中断;

        3)用户程序中产生了一个错误状态;

        4)用户程序企图执行一条特权指令;

由用户态转向核心态,所用的堆栈由用户堆栈转向系统堆栈;需要使用访管指令,访管指令运行在用户态,不是特权指令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章