1.I/O中断驱动;
I/O结构:设备控制器可允许多个设备与其相连,每个设备控制器维护一定量的本地存储和一组特定用途的寄存器(cpu中),该设备控制器负责本地存储与设备之间数据传递。操作系统为每个控制器提供一个设备驱动程序,该驱动程序负责控制设备控制器,并为操作系统的其他部分提供统一的设备访问接口;
当开始I/O,驱动程序加载设备控制器的寄存器(CPU中),设备控制器检查寄存器的内容,以便决定执行啥操作,然后控制器开始从设备向本地存储传输数据。
传输完成后,设备控制器通过中断通知驱动程序,然后驱动程序返回操作系统。
2.I/O中断适合少量数据移动。
大量数据时使用直接内存访问DMA direct memory access:DMA设备控制器可以直接在本地缓冲和内存之间传递数据,无需CPU干预;
计算机的体系结构
单处理器系统:一个cpu;带有其他专用处理器包括特定设备处理器(磁盘,键盘等处理器)或更通用处理器(I/O处理器),由其执行有限指令集;有时候由操作系统管理,cpu发出指令,由其执行自己的任务,不由cpu直接调度;
有时候专用处理器集成到硬件,操作系统不能通信,其自主完成任务;
多处理器系统:两个或多个cpu共享总线或多个设施;
根据处理器是否存在主从关系两种类型:对称处理 symmetric multiprocessing SMP(每个处理器完成所有任务,有各自寄存器,本地缓存,但共享内存等资源)和非对称处理(asymmetric multiprocessing)
增加吞吐量:增加处理器,规模经济:共享,增加可靠性:一个出故障可由其他代替;
多核:多个计算核集成到单个芯片;
操作系统的结构:L1.特点:多道程序设计:通过安排作业(编码与数据)使CPU总有一个执行作业,当某i任务执行需要等待一个任务完成时,CPU会切换另一个作业,提高了利用率;分时系统(多任务系统)是多道程序设计的延申,用户还可以进行交互(通过键盘等输入设备发出指令,等待结果;
作业调度:内存太小不能加载所有作业,操作系统需要做出选择;
CPU调度:多个任务同时执行时操作系统要做出选择;操作系统需要中断驱动,操作系统会等待时间的发生,陷阱(或异常)是一种软件生成的中断,或源于出错(除数为零或无效内存访问),或源于用户程序特定请求(执行操作系统某个服务);
为了区分系统代码与用户代码的执行,操作系统至少有两种模式:用户模式及系统模式(内核模式或特权模式,监视模式);通过一个模式位来表示,用户模式(1),内核模式(0);
当操作系统控制计算机时,为系统模式;执行用户程序时为用户模式;
定时器;在一段时间后中断用户模式,操作系统重新控制计算机;
假设位于磁盘的文件需要修改,那么先将文件加载到内存,之后该文件被复制到高速缓存和内部寄存器,然后该文件的副本出现在了多个地方,先修改寄存器中文件的值,然后不同地方该文件不相同,只有当寄存器中的值被复制写入磁盘时,文件值才会相同;
位图:n位二进制串,每个位置i的数值与其i处资源相关;
比如0表示资源可用,1表示资源不可用;
例如:001:第三个资源不可用;
操作系统的结构
用户界面:
一种形式为命令行command-line interface(CLT)
另一种为批处理界面,命令即控制这些文件的指令可以编成文件以便运行;
最常用的是图形用户界面graphical user interface(GUI),利用桌面desktop的概念,采用基于鼠标的视窗和菜单系统;
当遇到错误时,有时转储内存信息到磁盘,并使用调试器debugger(一种系统程序)确定问题原因;无论正常还是异常,最终都将控制转到命令解释程序;对于交互系统,直接执行下一条指令
对于GUI,弹出错误提示;
对于批处理系统,终止整个作业,直接执行下一个作业;
程序执行:系统加载程序到内存并执行;
用户与操作系统的界面:
有的操作系统内核包括命令解释程序,其他操作系统,包括Windows和UNIX,将命令解释程序看作是一个特殊程序,当一个任务开始或用户首次登录时,该程序就会运行;
有多个可选命令解释程序的系统来说,这些解释程序称为外壳;
命令解释程序:获取并执行用户的下一条指令;
具体有两种实现方式:1.本身包含了执行的代码
2.通过系统程序实现大多数命令,如UNIX,将执行的代码
在一个文件中, 通过命令确定该文件,然后将它加载到内存中,打开执行;
使用户可以增加新文件来增加命令而无需修改程序;
系统调用
应用开发人员根据API application programming interface设计程序,使其能在支持API的任何程序上运行;
三组常见API 适合Windows的Windows API,适合POSIX系统的POSIX API,适合Java虚拟机的Java API,程序员通过操作系统提供的函数库调用API.
对于运行Linux和UNIX的用c语言编写的程序,库名为libc。
API为程序员调用实际的系统调用,
Window函数CreateProcess()实际调用Windows内核中的系统调用NTCreateProcess();
有的程序设计语言运行时,编译器直接提供的函数库提供了系统调用接口,以连接到操作系统的系统调用,系统调用接口截取API函数调用,调用操作系统的所需系统调用;
系统调用的六种类型:进程控制,文件管理,设备管理,信息维护,通信,保护;
操作系统的结构
下列为传统的UNIX结构;
分层方法:
最底层0层为硬件,最高层为用户接口;
每层只能调用较低层功能和服务;
可以自下向上调试各层,第一次只使用了基本硬件,可以先调试,正确后开始下一层;每层要为更高层隐藏该层数据结构和操作,硬件等,因为较高层无需知道更低层操作如何实现