1+P83
各种软件通过OS提供的资源抽象使用硬件资源
OS允许不同程序共享硬件资源
基本功能……
提供操作界面
控制程序运行
管理系统资源
配置系统参数
监控系统状态
工具软件集合
操作系统是一个大型的程序系统,它负责计算机系
统软、硬件资源的分配;控制和协调并发活动;提
供用户接口,使用户获得良好的工作环境。
- 操作系统的特性
并发性
共享性
不确定性
操作系统的功能一
进程管理
处理机分配
CPU管理
处理机管理
具体功能
进程控制:创建,暂停,唤醒,撤销
进程调度:调度策略,优先级
进程通信:进程间通信
操作系统的功能二
存储管理
为应用程序运行高效提供内存空间。
支持多道程序设计
作用
内存分配
内存共享
内存保护
虚拟内存
操作系统的功能三
设备管理
提供统一的设备资源使用接口,管理设备的分配和
使用。
设备无关性
设备的传输控制
设备的驱动
操作系统的功能四
文件管理:文件和目录的管理
提供简便统一的信息存取和管理方法,并解决信息共享、数
据的存取控制等问题。
存储空间管理
文件的操作
目录的操作
文件和目录的存取权限管理
- 操作系统的评价指标
- 吞吐率
- 响应能力
- 资源利用率
- 可移植性
- 可靠性
-
操作系统发展的四个典型阶段
1.手工操作(无操作系统) 40年代到50年代早期
2.单道批处理系统 50年代
3.多道批处理系统 60年代初
4.分时操作系统 60年代中 -
多道程序设计技术
在内存中存放多道程序,当某道程序因为某种原因
(例如请求I/O时)不能继续运行时,监控程序便调
度另一程序投入运行。这样可以使CPU尽量处于忙碌
状态,提高系统效率。 -
多道批处理系统
采用多道程序设计技术实现的处理系统称为多道批
处理系统。 -
缺点
- 作业处理时间长
- 交互能力差
- 运行过程不确定
- 60 年代硬件的两个重大进展
- 中断技术
- 通道技术
专门处理外设与内存之间的数据传输的处理机。
-
多终端计算机
主机采用 分时技术轮流为每个终端服务,每个终端都感觉到
是“独占”主机! -
分时系统的特点
- 多路调制性
- 独占性
- 交互性
第一个实用化的分时操作系统 UNIX
第一次把各种外部设备也看作文件
- 多处理机系统
特点
- 具有并行处理能力
- 紧耦合、存在瓶颈、可扩展性差
- 不支持大规模并行计算;不支持分布处理
Linux kernel版本
- x.y.zz-www
- x.y指主版本号,zz指次版本号,www指发行号
- 主版本号:偶数是稳定版本,奇数号是测试版本
2+P50
- 面对用户,裸机配置操作系统后称为 操作系统虚拟机
- 用户界面
- 屏蔽硬件细节
- 扩展硬件功能
- 系统更安全
- 系统更可靠
- 效率更高
-
逻辑结构
OS的设计和实现思路 -
逻辑结构的种类
1.单体式结构
2.模块化结构
3.可扩展内核结构(微内核结构)
4.层次式结构 -
单体式结构
优点
一个逻辑模块的函数可以直接访问另一个逻辑模块
的数据结构,提高效率。
缺点
修改复杂 -
模块化结构
特点
模块设计、编码和调试独立
模块调用自由
模块通信多以全局变量形式完成
缺点
信息传递随意,维护和更新困难。 -
可扩展内核结构(微内核结构)
客户 :应用程序
服务器 :操作系统
微内核
足够小,提供OS 最基本的核心功能和服务
① 实现与硬件紧密相关的处理
② 实现一些较基本的功能;
③ 负责客户和服务器间的通信。
核外服务器
完成OS 的绝大部分功能,等待 客户 提出请求。
由 若干服务器或进程共同构成
例如:进程/线程服务器,虚存服务器,设备
管理服务器等,以 进程 形式运行在用户态。 -
层次式结构
分层原则
- 硬件相关——最底层
- 外部特性——最外层
- 中间层——调用次序或消息传递顺序
- 共性服务——较低层
- 活跃功能——较低层
层次结构的优点
结构清晰,避免循环调用。
整体问题局部化,系统的正确性容易保证。
有利于操作系统的维护、扩充、移植。
- 支持操作系统的最基本硬件结构
- CPU
- 内存
- 中断
- 时钟
- 态的分类
- 核态(Kernel mode)
- 用户态 (User mode,目态)
- 管态(Supervisor mode)
介于核态和用户态之间
Ring 0:特权指令,OS内核或驱动程序
Ring 1:管态
Ring 3:应用程序
合法的访问:RPL <= DPL
请求特权级:RPL,Requested Privilege Level
描述符特权级:DPL,Descriptor Privilege Level
- 用户态向核态转换
- 用户请求OS提供服务
- 发生中断
- 用户进程产生错误(内部中断)
- 用户态企图执行特权指令
-
核态向用户态转换的情形
一般是中断返回:IRET -
引入中断的目的
- 实现并发活动
- 实现实时处理
- 故障自动处理
- 中断类型
- 强迫中断和自愿中断
强迫中断:程序没有预期:例:I/O、外部中断
自愿中断:程序有预期。例:执行访管指令 - 外中断(中断)和内中断(俘获)
外中断:由CPU外部事件引起。例:I/O,外部事情。
内中断:由CPU内部事件引起。例:访管中断、程序中断 - 外中断:不可屏蔽中断和可屏蔽中断
不可屏蔽中断:中断的原因很紧要,CPU必须响应
可屏蔽中断:中断原因不很紧要,CPU可以不响应
- 中断响应的实质
- 交换指令执行地址
- 交换CPU的态
3+P110
到处闲逛警谭乔,
路遇违章把话聊。
警光询问那里去?
成华大道二仙桥!
《听许巍到西12的日子》
-
操作系统的生成
满足特定硬件环境和用户需要,组装和构建操作系
统过程。 -
操作系统生成的主要步骤
- 根据硬件环境/用户要求配置功能模块和构造参数
- 构建(build )OS
- 实模式(实地址模式,REAL MODE )
- 程序按照8086寻址方法访问0~FFFFFh(1MB)空间
- 寻址方式:物理地址(20位)=段地址:偏移地址。
- CPU单任务运行
实模式 存取的1M 空间
前面640K 【00000 -- 9FFFF】 :基本内存
中间128K 【A0000 -- BFFFF】 :显卡显存
末尾256K 【C0000 -- FFFFF】 : BIOS
Fireware,固件
C0000 -- C7FFF:显示卡BIOS
C8000 -- CBFFF:IDE控制器BIOS
F0000 -- FFFFF:系统BIOS 功能:
- CMOS设置
- 基本I/O设备中断服务
- POST(上电自检)
- 系统自举
AH=02功能:读扇区
ES:BX=缓冲区的地址
- 保护模式(内存保护模式,PROTECT MODE )
- 寻址方式:段( 16位)和偏移量( 16位),寻址4GB
段页式虚拟内存管理机制(段,页)
段的属性:起始地址,存取属性,权限级别,…
新增32位寄存器:GDR,LDR,CR0,CR1,CR2,… - 虚拟地址,进程,封闭空间
- 应用程序和操作系统的运行环境都被保护
- CPU支持多任务
- 按下PowerOn 或者Reset 键
开始执行( FFFF0 )单元的指令
JUMP POST ; POST:加电自检
POST之后……
查找显卡BIOS ,调用显卡 BIOS ;
依次查找其它设备执行相应设备的BIOS ;
根据用户指定顺序从硬盘或光驱等媒介启动OS 。
OS 启动后,由OS 接管计算机
OS启动过程
从加电到用户工作环境准备好的过程
- 初始引导
- 核心初始化
- 系统初始化
常见引导程序:
(1)ntldr (WinXP以下)
(2)bootmgr(Vista以上含Win7)
(3)GRUB
(4)LILO
核心初始化
目的:OS内核初始化系统的核心数据
系统初始化
为用户使用系统作准备,使系统处于待命状态
最近抄别人代码好像有点过火了
DOS 操作系统的构成
io.sys: 提供DOS与BIOS的调用接口
msdos.sys: 进程管理、存储管理、文件管理、解释系统调用
command.com:Shell命令和键盘命令解释及执行
MBR:Main Boot Record
- 和OS 启动相关的数据和代码
- 存放在主启动扇区(Main Boot Sector )
- 512 BYTES
- 结束:AA55h
写启动相关的数据和代码(Boot Code)
- MBR扇区 (Master Boot Record Sector)
- PBR扇区( Partition Boot Record )
- 512字节
- 用户界面的定义
OS提供给用户控制计算机的机制,又称用户接口
用户界面的类型
- 操作界面
- 系统调用 (System Call,系统功能调用,程序界面)
Bash的主要功能
- 命令行编辑功能
- 命令和文件名补全功能
- 命令历史功能
- 命令别名功能
- 提供作业控制功能
- 具有将命令序列定义为功能键的功能
- 管道与重定向
- Shell Script 脚本编程
单曲:《野火一季》
增加指令:自陷指令或系统调用指令
系统调用的特点
- 一般涉及核心资源或硬件的操作
- 运行于核态。
- 每个系统调用具有唯一的编号:ID
- 调用过程会产生中断:自愿中断
LINUX 系统调用的实质
- 系统调用是Linux内核的出口。 ?????
- 系统调用通过软中断(INT 80H)向内核发出服务请求
- 系统调用采用API方式向用户提供,遵循 POSIX标准
4+P191
女生一般不会主动
除非她特别特别特别特别特别特别特别特别特别
特别特别特别特别特别特别特别特别特别特别特别
特别特别特别特别非常非常非常非常非常非常非常
非常非常非常非常非常非常非常非常非常非常非常
喜欢你
描述和管理程序的“运行过程”——进程
进程定义
进程是程序在某个数据集合上的 一次运行 活动。
数据集合:软/硬件环境,多个进程共存/共享的环境
进程的特征
- 动态性
进程是程序的一次执行过程,动态产生/消亡 - 并发性
进程可以同其他进程一起向前推进; - 异步性
进程按各自速度向前推进 - 独立性
进程是系统分配资源和调度CPU的单位;
进程与程序的区别
动态与静态
进程是动态的:程序的一次执行过程
程序是静态的:一组指令的有序集合
暂存与长存
进程是暂存的:在内存驻留
程序是长存的:在介质上长期保存。
程序和进程的对应
一个程序可能有多个进程。
Linux 进程分类 (按运行特点分)
1)交互进程
2)批处理进程
3)守护进程( daemon进程)
进程的状态
1.运行状态(Running)
进程已经占有CPU,在CPU上运行。
2.就绪状态(Ready)
具备运行条件但由于无CPU,暂时不能运行
3.阻塞状态(Block)【等待(Wait)】
因为等待某项服务完成或信号来到而不能运行的状态
例如等待:系统调用,I/O操作,合作进程的服务或信号…
就绪 运行:进程调度
运行 就绪:时间片到;被抢占
运行 阻塞:服务请求;等待信号
阻塞 就绪:服务完成;信号来到
挂起(suspend) 和 解挂(resume ,激活activate)
- 挂起:用户或OS将进程有意暂停; 解挂:将挂起的进程继续。
- 阻塞:活动阻塞(正常阻塞)和静止阻塞(阻塞时挂起) ;
- 就绪:活动就绪(正常就绪)和静止就绪(就绪时挂起) 。
进程挂起
typedef DWORD (WINAPI
*NtSuspendProcess)(HANDLE ProcessHandle );
进程继续
typedef DWORD ( WINAPI
*NtResumeProcess )( HANDLE hProcess ) ;
Linux进程的状态
- 可运行态
就绪运行: - 阻塞(等待)态
浅度阻塞:TASK_INTERRUPTIBLE(可中断)
深度阻塞:TASK_UNINTERRUPTIBLE(不可中断) - 僵死态:TASK_ZOMBIE
- 挂起态:TASK_STOPPED
进程控制块 (Process Control Block , PCB)
- 描述进程的状态、资源、和相关进程的关系的一种数据结构。
- PCB是进程的标志
- 创建进程时创建PCB;进程撤销后PCB同时撤销
进程控制的概念
在进程生存全期间,对其全部行为的控制
四个典型的控制行为
- 创建进程
- 撤消进程
- 阻塞进程
- 唤醒进程
原语
由若干指令构成的具有特定功能的函数
具有原子性,其操作不可分割
进程控制原语
- 创建原语
- 撤消原语
- 阻塞原语
- 唤醒原语
子进程由fork( )创建后,通常处于就绪状态
exec函数族( 包括若干函数)
功能
装入一个指定的可执行程序运行
使子进程具有和父进程完全不同的新功能。
步骤
- 根据文件名找到相应的可执行文件。
- 可执行文件的内容填入子进程的地址空间
- exec调用成功就会进入新进程执行且不再返回。
- exec调用失败返回-1,继续在克隆来的地址空间中从调用点向下执行
线程的概念( Thread )
- 线程比进程更小,是进程的一个执行路径。
- 创建一个线程比创建一个进程开销要小得多。
- 一个进程可以创建多个线程;
- 线程间通信十分方便
- 多个线程共享CPU可以实现并发运行
线程的应用:如果把程序中某些函数创建为 线程 ,
那么这些函数将可以 并发 运行!
AfxBeginThread(线程函数,参数)
CreateRemoteThread(进程,线程函数,参数)
pthread_create(线程函数,参数)
进程的 互斥 关系
多个进程由于共享具有独占性的资源,必须协调各进程对资
源的存取顺序:确保没有任何两个或以上的进程同时进行资
源的存取操作
临界区[ [Critical Section]
进程中访问临界资源的程序段
硬件方法
- 中断屏蔽
- 测试并设置
- 交换指令
软件方法 - 锁
- 信号量
进程的同步关系
若干 合作进程 为了共同完成一个任务,需要相互协调
运行步伐: 一个进程A A 开始 某个操作 之前必须要求 另一
个进程B B 已经完成 某个操作 ,否则 进程A A 只能 等待
进程的 同步 关系—— 另一种解释
合作进程中某些操作之间需要满足某种先后关系或
某个操作能否进行需要某个前提条件满足,否则只
能等待。
互斥关系属于特殊的同步关系。
设计临界区访问机制的四个原则
- 忙则等待
- 空闲让进
- 有限等待
- 让权等待
进程在运行过程 受 信号灯 控制 ,并能 改变 信号灯 。
- 进程受控制:进程因信号灯的状态被阻塞或被唤醒。
- 改变信号灯:信号灯的状态可以被进程改变。
P ,V 是荷兰语:P asseren 通过 ,V rijgeven 释放
信号量 ( Semaphore )
- 允许指定数目的多个线程/进程访问临界区。
- 一种资源计数器,用于限制并发线程的数量。
- 初值设为N,则表示允许N个进程/线程并发访问资源。
事件( Event )
用于通知一个或多个线程某事件出现或标识某操作已经完成。
事件对象的分类
1.自动重置的事件:使用WaitForSingleObject等待到事件对象
变为有信号状态后该事件对象自动变为无信号状态。
2.人工重置的事件:使用WaitForSingleObject等待到事件对象
变为有信号状态后该事件对象的状态不变,除非人工重置事
件。
MOOC课程
4.7.1 匿名管道通信
4.7.2 Linux信号通信