一:计算机基本构成
计算机有四个主要的结构化部件:
- 处理器(Processor):控制计算机的操作,执行数据处理功能。当只有一个处理器时,它通常指中央处理器(CPU)。
- 内存(Main memory):存储数据和程序。此类存储器通常是易失性的,即当计算机关机时,存储器的内容会丢失。相对于此的是磁盘存储器,当计算机关机时,它的内容不会丢失,内存常也称为实存储器(real memory)或主存储器(primary memory)。
- 输入/输出模块(I/O modules):在计算机和外部环境之间移动数据。外部环境由各种外部设备组成,包括辅助存储器设备(如硬盘)、通信设备和终端。
- 系统总线(System bus):为处理器、内存和输入/输出模块间提供通信的设施。
处理器的一种功能是和存储器交换数据。为此,它通常使用两个内部(对处理器而言)寄存器:存储器地址寄存器(Memory Address Register,MAR),存储器地址寄存器用于确定下一次读/写的存储器地址;存储器缓冲寄存器(Memory Buffer Register,MBR),存储器缓冲寄存器用于存放要写入存储器的数据或者从存储器读取的数据。同理,输入输出地址寄存器(I/O Address Register,简称I/O AR或I/O地址寄存器)用于确定一个特定的输入/输出设备,输入/射出缓冲寄存器(I/O Buffer Register,简称I/O BR或I/O缓冲寄存器)用于在输入/输出模块间交换数据。
如图:
内存模块有一组单元组成,这些单元由顺序编号的地址定义。每个单元包含一个二进制数,可以解释为一个指令或数据。输入/输出模块在外部设备与处理器和存储器之间缠讼数据。输入/输出模块包含内存缓冲区,用于临时保存数据,直到它们被发出去。
二:
操作系统发展有三条主线:多道程序批处理擦操作、分时和实时事务系统。它们在时间安排和同步中产生的问题推动了进程概念的发展。
- 多道程序设计是为了让处理器和I/O设备(包括存储设备)同时保持忙状态,以实现最大效率。其关键机制是:在响应表示I/O事务结束的信号时,操作系统将对内存中驻留的不同程序进行处理器切换。
- 发展的第二条主线是通用的分时。其设计目标是能及时响应单个用户的要求,但是由于成本的原因,又要可以同时支持多个用户。由于用户反应时间相对比较慢,这两个目标是可以同时实现的。例如:一个典型用户平均需要每分钟2秒的处理事件,则可以有近30个这样的用户共享一个系统,并且感觉不到互相的干扰。当然,这一计算中,还必须考虑操作系统的开销因素。
- 发展的第三条主线是实时事务处理系统。在这种情况下,很多用户都在对数据库进行查询或修改,例如航空公司的预订系统。事务处理系统和分时系统的主要差别在于前者局限于一个或几个应用,而分时系统的用户可以从事程序卡发、作业执行以及使用各种各样的应用程序。
早期开发多道程序和多用户交互系统使用的主要工具是终端。一个已定义事件的发生可以暂停任何作业的活动。处理器保存某些上下文,然后跳转到中断处理程序中,处理终端,然后恢复用户被中断的作业或者其他作业的处理。
但是这种类似于“手动”的方法很容易出错。一般产生错误有4个主要原因:
- 不正确的同步:常常会出现这样的情况:一个例程必须挂起,等待系统中其他地方的某一事件。例如,一个程序启动了一个读I/O操作,再继续进行之前必须等到缓冲区有数据。在这种情况下,需要来自其他例程的一个信号,而设计不正确的信号机制可能导致信号丢失或者收到重复信号。
- 失败的互斥:常常会出现多个用户或程序视图同时使用一个共享资源的情况。例如,两个用户可能试图同时编辑一个文件。如果不控制这种访问,就会发生错误。因此必须有某种互斥机制,以保证一次只允许一个例程对一部分数据执行事务处理。很难证明这类互斥机制的实现对所有可能的事件序列都是正确的。
- 不确定的程序操作:一个特定的程序结果只依赖于改程序的输入,而并不依赖共享系统中其他程序的活动。但是,当程序共享内存并且处理器控制他们交错执行时,它们可能会因为重写相同的内存区域而发生不可预测的相互干扰。因此,程序调度顺序可能会影响某个特顶程序的输出结果
- 死锁:很可能有两个或多个程序相互挂起等待。例如:两个程序可能都需要两个I/O设备执行一些操作(如从磁盘复制到磁带)。一个程序获得了一个设备的控制权,而另一个程序获得了另一个设备的控制权,它们都等待对方释放自己想要的资源。这样的死锁依赖于资源分配和释放的时机安排。
解决这些问题需要一种系统级的方法监控处理器中不同程序的执行。进程的概念为此提供了基础。进程可以视为由三部分组成:
- 一段可执行的程序
- 程序所需要的相关数据(变量、工作空间、缓冲区等)
- 程序执行的上下文
最后一部分是根本。执行上下文(execution context)又称进程状态,使操作系统用来管理和控制进程所需的内部数据。这种内部信息和进程是分开的,因为操作系统信息不允许进程直接访问。上下文包括操作系统管理进程及处理器正确执行进程所需要的信息:包括各种处理器寄存器的内容,如程序计数器和数据寄存器,还包括操作系统使用的信息,如进程优先级及进程是否在等待特定I/O时间完成。
下图给出了一种进程管理的办法。两个进程A和B,存在于内存某些部分。也就是说,
给每个进程(包含程序、数据和上下文信息)分配一块存储器区域,并且在由操作系统建立和维护的进程表中进行记录。进程表包含记录每个进程的表象,表项内容包括指向包含进程的存储快地址的指针,还包括该进程的部分或全部执行上下文。执行上下文的其余部分放在别处,可能和进程自己保存在一起,通常也可能保存在内存中独立的一块区域中。
在上图中,进程索引寄存器表示进程B正在执行。以前执行的进程临时被中断,在A中断的同时,所有寄存器的内容被记录在它的执行上下文环境中,以后操作系统就可以执行进程切换,恢复进程A的执行。进程切换过程包括保存B的上下文和恢复A的上下文。挡在程序计数器中载入指向A的程序区域的值时,进程A自动恢复执行。
三:操作系统若干操作特征
CPU提供Dual-mode机制,实现OS自我保护。
系统调用:从用户态穿越到内核态。
1.以此区分系统在执行用户代码还是内核代码。
2.有些CPU带有特权指令,这些指令只能放在内核态执行
3.系统调用自动地从用户态切换至内核态,系统调用返回指令自动地从内核态切换至用户态。
程序中通常以API使用,而不是直接系统调用。