非零基础自学计算机操作系统
文章目录
- 非零基础自学计算机操作系统
- 第1章 操作系统概述
- 1.5 操作系统的硬件环境
- 1.5.1 定时装置
- 1.5.2 堆与栈
- 1.5.3 寄存器
第1章 操作系统概述
1.5 操作系统的硬件环境
构建一个高效、可靠的操作系统,硬件需要提供哪些支持?
1.5.1 定时装置
为实现系统的管理和维护,硬件必须提供定时装置,也就是实时时钟。硬件时钟通常有两种,即绝对时钟和间隔时钟。
【1】绝对时钟
绝对时钟类似于电子表,其时间表示形式为年:月:日:时:分:秒。绝对时钟的值保存于硬件寄存器中,开机时可由电源供电计时,关机时可由机内电池供电计时,其值可由程序设定和修改,但是一般通过特权指令完成。当然,程序也可以读取绝对时钟的值。
绝对时钟是必要的,操作系统需要根据绝对时钟的值记录作业进入系统和处理的时间、文件的修改和存取时间、资源占用时间、日志记录时间等。
【2】间隔时钟
间隔时钟也称为闹钟,它每隔固定的时间,如10ms,发生一次时钟中断。时钟中断发生后,操作系统获得系统的控制权,以便运行系统管理和实现程序并发。后面将会看到,中断是系统并发的必要条件,即只有通过中断才能实现多道程序设计。尽管除时钟外还有其他可能引起中断的事件,但是那些事件是否发生、何时发生都不确定,而只有时钟中断是最“忠实可靠”的,可见间隔时钟是现代操作系统的基础。
利用间隔时钟还可以实现逻辑时钟,例如,要实现一个50ms的逻辑时钟,可以设置一个初值为5的变量,每次时钟中断将变量值减1,当其值减至0时即达到50ms。
1.5.2 堆与栈
在计算机学科领域中,“堆”和“栈”是两种不同的数据结构,用途截然不同,尽管用户进程的“堆”和“栈”在物理上通常是相邻的。
每个运行程序都有一个堆和两个栈(一个用户栈,一个系统栈)。
堆属于用户空间,用于保存程序中的动态变量,例如树的结点,堆空间由操作系统分给运行程序,由于不同程序运行时对动态变量的使用情况不尽相同,因而堆空间大小需求不定。
为了既节省空间又能满足所有程序对堆空间的需求,操作系统一般为运行程序分配一个基本大小的堆,如8KB,如果程序运行时对堆空间的需求没有超过8KB,则不需要操作系统进一步的帮助,对堆空间的使用由应用软件管理;但如果用户程序运行时对堆的需求超过了8KB,则会发生中断,操作系统为其扩充堆空间,如再分配8KB,如此继续下去。
用户栈属于用户空间,用于保存用户函数调用时的返回点、参数、局部变量、返回值。
除此之外用户栈还有一个用途,即传送调用操作系统时传给操作系统的参数。用户程序调用操作系统时,有两个载体可以用来传递参数:寄存器和用户栈,对于比较小的数据,如一个字符、一个整数、一个浮点数,可以通过寄存器传递:但比较长的参数,如文件名(字符串),寄存器通常是放不下的,只能通过用户栈传递。
对每个系统调用,操作系统都规定了参数和返回值的存放位置,用户程序必须遵循相应的规定。
系统栈也称核心栈,系统栈在逻辑上属于操作系统空间,主要有两个用途:一是保存操作系统子程序间相互调用的返回点、参数、局部变量、返回值,当然长度较小的参数和返回值也可以通过通用寄存器传递,这个用途与用户栈相似:二是中断响应时保存中断现场,包括PSW和PC,以及中断处理过程中用到的寄存器值。
对于嵌套中断,被中断程序的现场信息依次压入系统栈,中断返回时逆序弹出。
程序切换的同时伴随着堆、用户栈和系统栈的切换,但硬件的栈指针是多个进程共享的。
1.5.3 寄存器
硬件系统提供一套寄存器,由运行进程使用。程序切换时,一般需要把寄存器的当前值保存起来,再次运行前再恢复。这些寄存器简介如下。
① 程序状态字(program status word,PSW):如图下所示,
IBM360/370程序状态字由16B组成,表示当前程序的运行环境,其中每个“X”表示1B(4b)。其中,前8位为系统屏蔽位,第06位分别对应7个通道通道,第7位对应外中断:第1215位为CMWP,第13位为开关中断位M,第15位为系统状态位P;第1631位为中断码,用于保存中断字(详细中断信息):第3638位为程序屏蔽位,分别对应定点溢出、十进溢出、阶下溢;第39位备用。
可以看出,有些中断是不可屏蔽的,如时钟、地址越界、缺页、非法指令。
② 指令计数器(PC),记载运行程序下一条指令的地址。
③ 栈指针SP,管态与目态各一个,分别保存系统栈和用户栈的栈顶位置。
④通用寄存器(rgs),若干个,用于存数和计算,还可用来保存系统调用时传给操作系统的参数,以及由操作系统传给用户的返回值。
⑤浮点寄存器(fgs),若干个,用于存数和计算,也可用来保存系统调用时传给操作系统的参数,以及由操作系统传给用户的返回值。
⑥ 地址映射寄存器,一般有一对,分别记录内存区域的起始地址和长度,分别称为基址寄存器(base)和限长寄存器(limit)。