操作系统的概念
操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
操作系统的功能:
1.操作系统作为系统资源的管理者,提供的功能包括:处理机管理;储存器管理;文件管理;设备管理。
2.操作系统作为用户与计算机硬件之间的接口,提供的功能包括:
- 命令接口(用户直接使用):包括联机命令接口(说一句做一句)、脱机命令接口(说一堆做一堆)
- 程序接口(系统调用):用户通过程序间接使用
- GUI:图形化界面
3.操作系统作为最接近硬件的层次:封装功能。
操作系统的四个特征
并发
并发指两个或多个事件在同一时间间隔内发生,这些事件在宏观上是同时发生的,但在微观上是交替发生的。
并行则指同一时刻能运行多个指令,并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。
操作系统与程序并发是同时诞生的,操作系统通过引入进程和线程,使得程序能够并发运行。
共享
共享是指系统中的资源可以被多个并发进程共同使用。
有两种共享方式:互斥共享方式和同时共享方式。
互斥共享的资源称为临界资源,例如打印机,摄像头等,在同一时刻只允许一个进程访问,需要用同步机制来实现互斥访问。
同时共享方式允许一个时间段内由多个进程同时对同一个资源进行访问,如文件传输。
并发性与共享性互为存在条件。
虚拟
虚拟技术把一个物理实体转换为多个逻辑实体。主要有两种虚拟技术:时(时间)分复用技术和空(空间)分复用技术。没有并发性,就谈不上虚拟性。
多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。
虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。
异步
异步是指,在多道程序环境下,允许多个程序并发执行,由于资源有限,进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。只有系统拥有并发性,才可能导致异步性。
操作系统的发展
还包括:网络操作系统、分布式操作系统、个人计算机操作系统等。
操作系统的运行机制与体系结构
运行机制
两种指令:
- 特权指令:如内存清零指令
- 非特权指令:如普通的运算指令
两种处理器状态(寄存器中的某一位来标识):
- 用户态(目态):此时CPU只能执行非特权指令;
- 核心态(管态):特权指令、非特权指令都可执行。
两种程序:
- 内核程序:既可以执行特权指令,也可以执行非特权指令,运行在核心态;
- 应用程序:只能执行非特权指令,运行在用户态。
操作系统的内核
内核是计算机配置的底层软件,是操作系统最基本、最核心的部分,实现操作系统内核功能的程序就是内核程序。
大内核:
大内核是将操作系统功能作为一个紧密结合的整体放到内核。由于各模块共享信息,因此有很高的性能。缺点在于内核代码庞大,结构混乱,难以维护。
微内核:
由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。
缺点在于因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。
中断
发生中断意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如切换线程、分配I/O设备等),需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态转化为核心态,使操作系统获得计算机的控制权,有了中断才能实现多道程序并发执行。
用户态——>核心态 是通过中断实现的,且中断是唯一途径。
核心态——>用户态 的切换是通过执行一个特权指令,将程序状态字PSW的标志位设置为用户态。
中断的分类:
系统调用
应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成(进入核心态)。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
Linux 的系统调用主要有以下这些:
Task | Commands |
---|---|
进程控制 | fork(); exit(); wait(); |
进程通信 | pipe(); shmget(); mmap(); |
文件操作 | open(); read(); write(); |
设备操作 | ioctl(); read(); write(); |
信息维护 | getpid(); alarm(); sleep(); |
安全 | chmod(); umask(); chown(); |
系统调用的过程
传递系统调用的参数——>执行陷入指令(用户态)——>执行相应的内请求核程序处理系统调用(核心态)——>返回应用程序。
注:
- 陷入指令 = trap指令 = 访管指令;
- 陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态;
- 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行;
- 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令。