我们都对运行程序很熟悉,无论是QQ,微信都是一个个在运行的程序
我们也都知道有这样一个职业叫做——程序员,就是编写这些程序的代码的。
那么代码从编写好后到最终执行的过程是怎样的呢?实际有三步
预处理 编译 链接
我们感觉好像很简单,但实际上程序运行需要各种资源,会有一些异常,这些处理我们往往不关心,而这些实际上是系统应用程序——操作系统来完成的
换句话说程序执行的整个生命周期都受操作系统控制
比如 建立程序的内存映像, CPU的分配 内存分配、释放 文件访问,输入输出(I/O) 中断(异常)处理
从用户观点看,操作系统是一个虚拟机
让用户(程序员)在使用计算机时不涉及计算机硬件的细节,使硬件细节和用户(程序员)隔离开来,即建立一种简单的高度抽象。
从系统观点来看,操作系统是一个资源管理器:管理系统的软硬件资源
硬件资源:构成计算机系统所必须配置的所有硬件: CPU、内存、时钟、磁盘。 软件资源:程序和数据(文件)。
总结来看,操作系统有四大功能
进程管理,内存管理,文件管理, I/O设备管理
基于操作系统的功能
操作系统可以定义为
OS是硬件之上的第1层软件(系统软件),是一组程序,用来有效控制和管理计算机系统的各类资源(硬件和软件资源:设备、文件、存储器、CPU、程序(进程)), 以方便用户使用计算机(用户和计算机的接口)
从输入开始到输出结束,用户要求计算机所做的一次业务处理的全部工作(一次业务处理往往需要包括多个程序配合)所以操作系统中的作业(Job)通常又可以理解为是一组相关任务或程序的集合
作业由三部分组成:1 程序 2要执行的程序代码 3数据
作业通常需要访问和处理数据,因此数据是作业的另一个重要组成部分
作业往往有着自己的控制信息等
假设你正在使用一台多任务操作系统的个人电脑,你同时打开了以下两个应用程序:
在这个情景中,操作系统将视每个应用程序为一个作业,并为其分配资源和执行环境。
为改进内存和I/O设备之间的吞吐量 ,进行批处理操作
就是3.1讲的是一个作业处理
而3.2 就是同时处理多个作业,多个作业构成一个队列,依次处理
缺点:
用户不能干预自己作业的运行 一旦发现作业错误不能及时改正 延长了软件开发时间 一般只适用于成熟的程序或大型的计算程序
内存中只有一个用户程序
因为I/O很费时,若当前程序因等待I/O而暂停, 则CPU空闲
我们现在的操作系统肯定都是多道程序,核心目的让CPU忙起来,提高效率
多道程序+批处理=多道批处理系统
与单道批处理系统相比: 系统吞吐量(单位时间内完成的总工作量)大; 资源利用率高; 周转时间(作业从进入系统到完成所经历的时间)长。
多个用户(程序)共享一台计算机,按时间片(time slice)轮流使用。
什么是 时间片:OS将CPU时间划分为若干个片段
并发:两个或多个事件在同一时间间隔内交替发生,不一定是同时执行。
并行:两个或多个事件在同一时刻发生。
多用户:允许多个用户通过各自的终端使用同一台主机,共享主机系统中的各类资源。 多任务:允许多个程序并发执行。
一个 比喻更好理解
还有比如实时OS,网络OS,分布式OS
CPU是执行程序的核心部件
CPU 通过状态标识,知道是操作系统程序还是用户程序在执行,从而给到OS特权指令(只能由OS执行的命令),进行一些紧急任务建立存储保护,清内存、关中断等
CPU两种工作状态
核心态
处于核心态的时候
全部指令(包括特权指令)可以执行 可使用所有资源 并具有改变处理器状态的能力
用户态
处于用户态的时候
只有非特权指令能执行 特权级别不同,可运行的指令集合也不同 特权级别越高,可以运行的指令集合越大 高特权级别对应的可运行指令集合包含低特权级的
CPU的程序状态字PSW
指示程序执行的当前状态,主要包括
CPU的工作状态——指明核心态还是用户态,用来说明当前在CPU上执行的是操作系统还是应用程序,从而决定其是否可以使用特权指令或拥有其他的特殊权力
条件标志——反映指令执行后的结果特征
中断标志——指出是否允许中断
CPU的程序计数字PC
指示下一条要执行的指令
程序必须存放在内存中才能运行。
在多任务系统中,操作系统要管理、保护各任务的程序和数据,使它们不至于受到破坏和相互干扰。 操作系统本身也要存放在内存中并运行,不能被破坏。
**内存分块:**块作为分配内存空间的基本单位,如4KB为1块。
为什么要按块来分配内存空间?旨在简化对内存的分配和管理
内存保护: OS正常运行的基本条件
常用的保护机制
(1) 界限寄存器 存放某任务在内存的上界和下界地址(或者下界与长度),越界后产生越界中断
(2) 存储保护键( Key) 当一个程序进入内存时,OS为其分配一个唯一的Key。 同时将分配给它的每个存储块都设置成该Key
指CPU在收到外部中断信号后,停止原来工作,转去处理该中断事件,完毕后回到原来断点继续工作。 CPU对系统中发生的“异步(随机)”事件的处理
中断类型
1 硬件中断
又分为两类
内部异常(硬故障中断 : 如电源断掉,程序性中断 :如溢出,越界,非法指令等)
外部中断(CPU外部发生的特殊事件,通过“中断请求”向CPU请求处理 如打印机缺纸等)
2 异常(Exception)
3 陷入(Trap)
4 访管中断(系统调用)
中断响应过程
1 关中断 防止其他中断修改影响当下中断
2 保护断点和程序状态 将断点和程序状态保存到栈或特殊寄存器中
3 识别中断事件
进行程序的同步,计数等
1 硬件时钟:通过时钟寄存器实现。 绝对时钟:记录当前时间 相对时钟(间隔时钟):分时系统的基础。
2 软件时钟:通过时钟队列实现。
将程序中的相对地址转换为绝对地址。
原因:运行前不可能知道程序将放在内存的什么位置。
静态重定位:程序装入内存时,由装入程序重定位
动态重定位:CPU每次访问内存时,由动态地址转换机构(硬件)自动进行
(1)并发 计算机系统中同时存在多个运行的程序,需要OS管理和调度
(2)共享 “同时”访问 互斥共享
(3)虚拟 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务 (4)异步 程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知 只要运行环境相同,OS需要保证程序运行的结果也要相同