操作系统
什么是操作系统?
操作系统是介于应用程序以及用户和硬件之间的系统软件;负责管理协调硬件,软件等计算机资源工作;为上层用户、应用程序提供简单易用的服务。
操作系统的功能
-
向上作为用户和硬件之间的接口:
-
程序接口: 用户通过程序间接使用,由一组系统调用组成
-
命令接口:
- 连接命令接口(交互式命令接口):不断进行交互,一收一发的执行模式。
- 脱机命令接口(批处理命令接口); 用户一次输入很多命令,成批处理这些命令。
-
GUI: 图形界面
-
-
向下作为系统资源的管理者:
- 处理机管理: 管理CPU的分配
- 文件管理: 打开文件夹,找到应用程序
- 存储器管理: 保存数据到存储器
- 设备管理: 调用摄像头等设备
操作系统的特征
- 并发:多个应用程序在同一间隔时间内发生
- 共享:系统资源可供内存中多个并发执行的进程共同使用
- 虚拟:把物理上的实体变为若干个逻辑上的对应物
- 异步:在多道程序的环境下,多个程序并发执行,由于资源有限,只能通过分配使用的方式进行。
并发和共享互为存在条件,没有并发,共享就没有意义;没有共享,就不能同时访问同一个资源,并发就不能实现。
操作系统的发展进程
- 人工操作
- 单道批处理系统:一次只能处理一道作业,效率低
- 多道批处理系统: 多道程序并发执行,共享资源,资源的利用率大大提高,但是用户响应时间长,没有人机交互功能。
- 分时系统 :以时间片为单位轮流给用户服务,解决人机交互问题;但是不能处理一些紧急任务
- 实时操作系统:能够优先响应一些紧急任务,某些紧急任务不需要时间片排队就可以优先解决。
操作系统的组成
操作系统由运算器、控制器、存储器、输入、输出设备。(io设备,接口,总线,接口,存储器);
操作系统的运行机制
指令
- 特权指令:不允许用户程序使用的指令
- 非特权指令: 允许用户使用
CPU状态
- 用户态: 只能执行非特权指令,不提供给程序直接调用。
- 核心态: 所有指令都能执行,
中断是唯一能让CPU从用户态切换到核心态的操作。
两种程序
- 内核程序: 运行在核心态的系统管理者,既可以执行特权指令,也可以执行非特权指令。
- 应用程序: 执行非特权指令,运行在用户态。
库函数和系统调用的区别
系统调用时操作系统向上层提供的接口(程序接口)
某些库函数是对系统调用的进一步封装
高级语言通过库函数间接执行系统调用
什么是进程?
什么是程序?
程序表现为系统中一个可执行文件(静态的文件);
进程的定义:
进程是进程实体的运行过程,是系统进行资源分配的基本单位。
进程的组成
进程由数据段、程序段、PCB组成。
进程的状态转换
进程拥有创建态、就绪态、运行态、阻塞态、终止态五种基本状态。
创建态:进程正在创建,操作系统正在为其分配资源,初始化PCB
就绪态:进程已经具备运行条件,但是由于CPU没有空闲,暂时不能运行。
阻塞态:因为某个时间而暂时不能运行
运行态:就绪态的进程获得的CPU的使用权之后就进入运行态
终止态:进程运行结束,正在被系统撤销,回收资源,撤销PCB。
转换过程:
就绪态==》运行态:进程获得所有除处理机外的资源之后,CPU调度该进程
运行态==》就绪态:正在执行的进程时间片到达或者处理机被强占,就会从运行态转换为就绪态。
运行态==》阻塞态:进程通过系统调用的方式申请某种资源或者请求等待某个事件的完成,就会从运行态变为阻塞态。
阻塞态==》就绪态:申请的资源被分配或者等待的事件已经发生,就会从阻塞态转换为就绪态等待CPU的调度。
操作系统的调度算法
时间片轮转调度
按照进程到达就绪队列的顺序,轮转让各个进程执行一个时间片,当然,只有作业放入内存并且建立PCB之后才能分配处理机时间片
这是一种抢占式算法。当时间片很大的情况下,就会退化为先来先服务算法;当时间片很小的时候会导致进程调度和切换很频繁;最终所有的任务都会被执行,不会导致饥饿现象的产生。
优先级调度算法
为每个进程设置一个优先级,会优先执行优先级较高的进程;如果每次进入的进程优先级都比较高,那么就可能导致饥饿现象的产生。
短作业优先算法
选择当前已经到达的并且服务时间短的作业优先服务,默认是非强占式的算法;当有更短服务时间的作业进入的时候,不会强占当前的处理机
先来先服务算法
先进入的进程会优先执行,对长作业后面的短作业不公平。
多级反馈队列调度算法
设置多级队列优先级从高到低,时间片从小到大,新进程到达第一级队列,按照先来先服务分配时间片,如果时间片用完还没有结束就放入下一级队列队尾,如果已经在最下级队列,则重新放回最下级队列队尾;只有高一级队列为空时才会处理下一级队列中的进程
高响应比优先算法
在每次调度的时候计算各个作业/进程的响应比,选择响应比高的作业为其服务
什么是线程?
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
线程和进程的关系
一个进程可以包含多个线程;每个进程至少存在一个主线程。
进程是分配资源的基本单位,线程是系统调度的基本单位。
一个进程中的所有线程是可以共享资源的;不同进程中的线程要共享数据就要进行进程间通信