操作系统OS是指控制和管理整个计算机系统的硬件和软件资源,合理地组织、调度计算机的工作与资源的分配,进而为用户和其他软件提供方便接口与环境的程序集合。
操作系统的特征主要可分为并发、共享、虚拟和异步,其中,并发与共享是操作系统两个最基本的特征,两者互为存在的条件:若系统不允许程序进行并发操作,则资源无需共享;若系统不允许程序共享资源,则并发操作无法执行。
并发是指两个或多个事件在同一时间间隔内发生,在宏观上表现为“同时”,在微观上是分时交替进行。这里需要区分的概念是串行、并行和并发,三者的关系如下图所示:
共享指的是系统中的资源可供内存中多个并发执行的进程共同使用,资源共享方式可分为互斥共享方式和同时访问方式。
互斥共享方式:如打印机、磁带机等资源一段时间内只允许一个进程访问该资源,而在一段时间内只允许一个进程访问的资源称为临界资源,访问该临界资源的程序片段称为临界区。
同时访问方式:如磁盘设备等资源允许在一段时间内由多个进程“同时”访问,这里的“同时”是宏观上的同时,在微观上表现为分时交替地对资源进行访问。
虚拟是指把一个物理上的实体变为若干逻辑上的对应物,用于实现虚拟的技术称为虚拟技术,包括虚拟处理器技术(时分复用,通过多道程序设计技术来实现对一个处理器的分时使用)、虚拟存储器技术(空分复用,将一台机器的物理存储器变为虚拟存储器,以便从逻辑上扩充存储器容量)、虚拟设备技术(将一台物理I/O设备虚为多台逻辑上的I/O设备,并允许每个用户占用一台逻辑上的I/O设备,使临界资源变为共享资源)。
多道程序环境中允许程序并发执行,但由于资源有限,程序运行时不是一气呵成,而是走走停停,以不可预知的速度前进。
操作系统作为资源的管理者,主要管理的任务有:处理器管理、存储器管理、文件管理和设备管理。
为了方便用户对计算机的使用,操作系统为用户提供了使用计算机服务的接口,这些接口主要分为命令接口(又分为联机命令接口和脱机命令接口)和程序接口(有一组系统调用组成,用户通过在程序中使用系统调用实现相关服务)。
没有任何软件支持的计算机称为裸机,裸机在最里层,其外层是操作系统,操作系统将裸机改造成功能更强、使用更方便的机器。
在处理机的具体实现上,将CPU的运行模式划分为用户态(目态)和核心态(管态、内核态)。当CPU处于核心态时,可以执行特权指令(不允许用户直接使用的指令,如I/O指令、置中断指令等),切换回用户态时也需要使用特权指令;当CPU处于用户态时,只能执行非特权指令(允许用户直接使用的指令,仅限于访问用户的地址空间);用户自编程序运行在用户态,操作系统内核程序运行在核心态。需要注意的是:特权指令必须在核心态执行,从用户态转换为核心态的唯一途径是中断或异常。
内核是计算机上配置的底层软件,它管理着系统的各种资源,系统内核的指令工作在核心态,主要内容可分为:
中断(Interruption)也称为外中断,是指来自CPU执行指令外部的事件,通常用于信息输入/输出,如设备发出的I/O结束中断,表示设备输入/输出处理已经完成。
异常(Exception)也称为内中断,是指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出等引起的事件。
系统调用是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。
“库函数(Library function)是将函数封装入库,供用户使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。
库函数可以说是对系统调用的一种封装,因为系统调用面对的是操作系统,系统包括Linux、Windows等,如果直接系统调用,会影响程序的移植性,所以这里使用了库函数,比如说C库,这样只要系统中安装了C库,就都可以使用这些函数,比如printf() scanf()等,但需要注意的是不是所有的库函数都涉及系统调用,比如“取绝对值”函数不涉及系统调用。
因此,应用程序可以直接进行系统调用,也可以利用库函数实现间接地系统调用,三者的关系如下图所示:
将操作系统按功能划分为若干具有一定独立性的模块,每个模块具有某方面的管理功能,并规定好各模块间的接口,便于模块间的通信。
将系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的系统服务
将内核中最基本的功能保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低内核的设计复杂度。
虚拟机是一台逻辑计算机,是指利用特殊的虚拟化技术,通过隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境。
操作系统的特点有四个:并发、共享、虚拟、异步;操作系统的功能主要有三点:系统资源的管理者、作为用户与硬件系统之间的接口、实现了计算机资源的扩充。
中断又分为外部中断和内部异常,外部中断是指中断信号来自CPU执行指令外部的事件,比如I/O请求等,而内部异常是指中断信号来自CPU执行指令内部的事件,比如地址越界、内存泄漏等内部错误。
系统调用是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。开云体育 开云平台开云体育 开云平台开云 开云体育平台开云 开云体育平台开云 开云体育平台