操作系统复习笔记
文章目录
- 操作系统复习笔记
- 第1章 绪论
-
- 1.1 操作系统的定义和特点
- 1.2 操作系统功能
- 1.3 操作系统的性能
- 1.4 操作系统的发展历史
-
-
- 四个经典阶段
- 进一步发展
-
- 第2章 操作系统结构和硬件支持
-
- 2.1 操作系统的逻辑结构
-
- 整体结构(单体结构,宏内核结构)
- 层次结构
- 微内核结构(客户/服务器结构)
- 2.2 处理机的态
-
- CPU
- 内存
- 中断
- 时钟
- 第3章 用户界面
-
- 3.1 用户环境和结构
- 3.2 生成操作系统
- 3.3 启动操作系统
-
- 实际模式和保护模式
- 系统BIOS
-
- **POST**
- 自举/加载系统OS
- 启动操作系统(滚雪球)
-
- 初始引导
- 核心初始化
- 系统初始化
- 启动实例
-
- DOS
- Windows
- MBR
- 安装操作系统
- 3.4 用户界面操作系统
-
- 操作界面
-
- shell
- 3.5 系统调用
- 3.5 Linux系统调用
- 第4章 进程管理
-
- 4.1 进程概念
- 4.2 进程的状态
- 4.3 进程控制块
- 4.4 进程控制
-
-
- 进程创建
- 进程撤销
- 进程阻塞
- 进程唤醒
-
- 4.5 Windows进程控制
-
- 进程创建
- 进程撤销
- 4.6 Linux进程控制
-
- 进程创建
-
- fork
- exec函数族
- 进程撤销
- 进程阻塞
- 4.7 线程
- 4.8 过程相互制约
- 4.9 进程同步
-
- 锁机制
- 信号灯与PV操作
-
- **P-V操作的应用**
- 以司机和售票员为例
- 生产者和消费者的问题
- 读者写者问题
- 4.10 Windows同步机制和应用
- 第5章 资源分配与调度
-
- 5.1 死锁
- 5.2 解决死锁
-
- 预防死锁
- 避免死锁
- 检测死锁,恢复死锁
- Windows,Linux:死锁解决
- 第6章 进程调度
-
- 6.1 过程调度的概念
- 6.2 进程调度算法
-
- 先服务调度
- 短作业优先调度算法
- 响应比高者优先调度算法
- 优先调度算法
- 循环旋转调度法
- 调度方式
- 6.3 Linux进程调度算法
- 第7章 主存管理
-
- 7.1 存储管理的功能
-
- 地址映射
-
- 固定地址映射
- 静态地址映射
- 动态地址映射
- 虚拟存储
- 内存分配
- 存储保护功能
- 7.2 物理内存管理
-
- **单一内存管理**
- 分区存储管理
-
- 固定分区
- 动态分区
- 内存拼接
- 覆盖Overlay
- image-20211230153141028对对换Swapping
- 总结
- 7.3 虚拟内存管理
-
- 虚拟存储管理页面
-
- 页面地址映射
- 防止页面越界访问
- 快表机制(Cache)
- 页共享
- 缺页中断
- 淘汰策略
- 二级页表
- 不足
- 段虚拟存储管理
-
- 段落地址映射
- 不足
- 页式VS段式
- 虚拟存储管理的段页
-
- 页面地址映射
- 7.4 Linux内存文件系统/proc
- 第8章 设备管理
-
- 8.1 设备管理概念
-
- 设备类型和特征
- 设备管理主要功能
-
- 状态跟踪
- 设备分配
- 设备映射
- 设备驱动
- I/O缓冲区管理
- 8.2 设备分配
-
- 虚拟分配详细内容
- 8.3 缓冲技术
-
- 缓冲作用
- 提前读和延后写
- 缓冲区构造
- 8.4 设备驱动程序
-
- Linux内核模块
- Linux驱动程序(LDD)
- 字符驱动程序示例
- 第9章 文件管理
-
- 9.1 文件系统概念
- 9.2 文件结构
-
- 文件的逻辑结构
- 文件的物理结构
- 9.3 文件存储和目录
-
- 文件存储空间管理
- 文件目录管理
- 9.2 文件结构
-
- 文件的逻辑结构
- 文件的物理结构
- 9.3 文件存储和目录
-
- 文件存储空间管理
- 文件目录管理
第1章 绪论
1.1 操作系统的定义和特性
:是一个大型的程序系统
- 它负责计算机系统软、硬件资源的分配
- 控制和协调并发活动
- 提供用户接口,使用户获得良好的工作环境
简而言之:
- 终端用户:界面和命令
- 应用程序员:编程接口API
- 系统程序员:管理和调度资源;提供接口
- 例
:
- 并发性:同时处理多个任务的能力
- 共享性:为多个并发任务提供资源共享
- 不确定性:具有处理随机事件的能力(中断处理能力,自动化能力…)
1.2 操作系统功能
- 进程控制:创建,暂停,唤醒,撤销
- 进程调度:调度策略,优先级
- 进程通信:进程间通信
:为应用程序运行高效提供内存空间;
- 内存分配
- 内存共享
- 内存保护
- 虚拟内存
:提供统一的设备使用接口,管理设备分配和使用
- 设备无关性
- 设备传输控制
- 设备驱动
:文件和目录管理,提供简便统一的信息存取和管理方法,并解决信息共享、数据的存取控制等问题
- 存储空间管理
- 文件操作
- 目录操作
- 文件和目录的存取权限管理
1.3 操作系统的性能
:在单位时间内处理信息的能力
:从接收数据到输出结果的时间间隔
:设备使用的频度
:改变硬件环境仍能正常工作的能力:代码修改量
:发现、诊断和恢复系统故障的能力
1.4 操作系统的发展历史
四个经典阶段
:
手工操作、单道批处理、多道批处理、分时操作系统
- 电子管时代
- 结构特点
- 硬件:电子管、接线面板(按钮/开关)
- 程序:二进制(卡片/纸带,打孔)
- 使用特点
- 上机:编程(打孔),预约,操作机器(开关/接线)
- 程序启动与结束:手工处理
- 缺点
- 效率低:CPU运行时间少 100min=50(装)+10(运行)+40(拆)
- 用户独占
- 缺少交互
- 晶体管时代
- 工作过程
- 多个作业输入到磁盘形成作业队列
- 监控程序依次自动处理磁盘中每个作业(装入-运行-撤出-装入-运行-撤出)
- 运行完毕,通知用户取结果
- 具体例子
- 将卡片装入1401机(读卡),将程序读入磁带
- 将磁带装入7094机(计算),完成计算
- 将磁带装入1401机,打印结果
- 工作特点
- 一批:作业队列
- 自动:识别作业
- 单道:串行
- 实现方式1:联机批处理
- 特点:主机控制输入输出
- 缺点:系统效率低
- 实现方式2:脱机批处理
- 特点:卫星机控制输入输出
- 优点:系统效率高
- 缺点:调度不灵活;保护问题
- CPU利用情况:
- 例:read(dev,x);y=f(x);
- 现象:外设工作时CPU休闲,CPU工作时外设休闲
- 结论:CPU和外设效率低
- 改进:增加启动和测试两个函数代替read():StartRead(dev,x),WhileReading();
- I/O,CPU交迭条件
- 程序设计合理:I/O发生时,程序可以做一些其他工作
- 系统提供工具:程序可以启动设备和测试设备
- 多道程序设计技术:,当某道程序因为某种原因(例如请求I/O时)不能继续运行时,监控程序便调度另一程序投入运行。这样可以使CPU尽量处于忙碌状态,提高系统效率。采用实现的处理系统称为多道批处理系统
- 设计目的:提高系统的利用率(或吞吐量)CPU与外设并行,外设之间也并行
- 例子:
- 设计思想
- 多个程序同时在计算机/虚拟机上运行
- 物理资源的共享
- 时分:分成多个时段:不同进程错开使用不同时段
- 空分:分成多个单元:不同进程同时使用不同单元
- 特点
- 多道:内存同时存放多道程序
- 宏观并行,微观串行
- 意义:操作系统形成
- 缺点
- 作业处理时间长
- 运行过程不确定
- 交互能力差
- 60年代硬件两个重大进展
- 中断技术:CPU收到外部信号(中断信号后,停止当前工作,转去处理该外部事件,处理完毕后回到原来工作的中断处(断点)继续原来的工作
- 通道技术:专门处理外设与内存之间的数据传输的处理机
- 背景
- 中断技术
- 大规模集成电路
- 事务性任务和程序涌现:要求交互性高,响应快速
- 要求:多任务多用户
- 多终端计算机:主机采用分时技术轮流为每个终端服务,每个终端都感觉到 是“独占”主机
- 分时技术:主机以很短的“时间片” 为单位,把CPU循环地轮流分配给每个作业(终端 /用户)使用,直到全部作业被运行完
- 特点:时间片:较短时间间隔;相应及时:独占主机
- 特点
- 多路调制性:多用户联机使用同一台计算机
- 独占性:用户感觉独占计算机
- 交互性:及时相应用户的请求
- 实例:Linux:50ms或可设置, Win:?
进一步发展
-
背景
- 实时要求:军事,工业控制,智能仪器等
- 要求:某些任务要优先紧急处理且系统安全可靠
-
特点
- 可靠性
- 安全性
- 强调作业完成的时限和可预测性
- 硬实时系统:必须限时完成,工业控制,制导系统
- 软实时系统:尽可能块完成,广播通讯
- 特点:良好的层次结构。BIOS+OS,可移植性好;适应性好,易学易用
- 苹果、Win
-
定义
-
并行系统;紧耦合系统
-
包含两个或多个功能相当的处理器
-
共享内存,共享I/O,共享外设
-
一个操作系统控制
-
-
特点:
- 并行处理能力
- 紧耦合、存在瓶颈、可扩展性差
- 不支持大规模并行计算;不支持分布处理
-
定义
-
独立自治的计算机相互连接形成一个集合
-
普通OS+网络通信+网络服务
-
Unix/Linux/Win
-
-
特点
- 多个处理部件
- 无公共内存
- 具备消息通信机制
-
局限性
- 不能支持透明的资源存取
- 不能对网络资源进行有效、统一的管理
- 不能支持合作计算
- 定义:分布的多个通用资源部件,经过网络互联,由操作系统对资源进行全局统一的管理和调度
- 特点
- 可扩展性、增加性能、高可靠性
- 特殊的计算机网络。
- 主机自治,又相互协调,运行分布式程序
- 与计算机网络的区别
- 分布式系统:虚拟为“单台”处理机
- 计算机网络:指明主机位置
:Minix OS
- 微内核架构
- 类Unix
:Linux
第2章 操作系统结构与硬件支持
2.1 操作系统的逻辑结构
OS的设计和实现思路
整体式结构(单体式结构,宏内核结构)
:模块化结构/单体内核结构/宏内核结构。操作系统由大量过程构成。每个过程都有明确参数列表、返回值类型。大多数过程是可以相互间调用。
基本单位构建:每个模块具有特定的功能
- 模块的设计、编码和调试独立
- 模块之间可以自由调用
- 错误容易扩散
- 开发和维护困难
- 可伸缩性差
-
UNIX:单体内核,对外提供一组系统调用,设备驱动与内核其他部分分开
-
Linux:单体内核,支持动态可安装模块,模块可以在内核运行时编译或安装
层次结构
:功能模块按调用次序排成若干层,各层单向依赖或单向调用
- ——最底层:硬件相关的功能放在最底层
- ——最外层:与用户策略或用户交互相关的功能放在最顶层
- ——调用次序或消息传递顺序:中间层各层按调用次序或消息传递顺序安排
- ——较低层:共性的和活跃的服务放在较低的层次
- 结构清晰,避免循环调用
- 整体问题局部化,系统的正确性容易保证
- 有利于操作系统的维护、扩充、移植
微内核结构(客户/服务器结构)
:应用程序
:操作系统
:足够小,提供OS最基本的核心功能和服务
- 实现与硬件紧密相关的处理
- 实现一些较基本的功能
- 负责客户和服务器间的通信
:完成OS的绝大部分功能,等待客户提出请求
- 由若干服务器或进程共同构成:例如线程/进程服务器,虚存服务器,设备管理服务器等,以进程形式运行在用户态
- 微内核 + 分层结构
- 可扩展、可移植、可靠、安全的操作系统
- 支持对称多处理机
- 面对不同硬件,编译时采用不同组件
- 内核采用可扩展核子软件模型 :仅实现基本功能
实质 | 优点 | 缺点 | 代表 | |
---|---|---|---|---|
宏内核 | 将图形、设备驱动及文件系统等功能 全部在内核中实现,和内核运行在同一地址空间 | 减少进程间通信和状态切换的系统开销,获得较高的运行效率 | 内核庞大,占用资源较多且不易剪裁;系统的稳定性和安全性不好。 | UNIX Linux |
微内核 | 只实现OS基本功能,将图形、文件系统、设备驱动及通信功能放在内核之外。 | 内核精练,便于剪裁和移植;系统服务程序运行在用户地址空间,系统的稳定性和安 全性较高 | 用户状态和内核状态 需要频繁切换,从而导致系统效率不如单体内核。 | Minix WinCE |
2.2 处理机的态
:CPU、内存、中断、时钟
- 防止进程的信息被非法访问
- 防止进程随意存取系统资源
- 防止进程修改系统安全机制
- 软件被设置为与两类
- 保护机制能区分可信软件和不可信软件
- 可信软件权限高:可以修改安全保护机制、可以存取系统资源
- 不可信软件功能受限
- CPU能区分当前软件的类型并设置不同的
- 保护机制能区分可信软件和不可信软件
- 设置访问屏障
- CPU根据当前,限定可使用的指令集
- 设置可信软件和不可信软件之间的访问屏障
CPU
:即CPU的工作状态。是对资源和使用权限的描述
- :能够访问所有资源和执行所有指令(管理程序/OS内核)
- :仅能访问部分资源,其它资源受限(用户程序)
- :介于核态和用户态之间
- 在处理器中包含有一个模式位,表明当前的权限状态。
- 指令执行前增加“权限状态是否满足”的条件判断。
- Intel CPU:PE位,PG位,地址映射机制,权限核验
- 涉及外部设备的指令:IN/OUT
- 的指令: LGDT/LIDT/CLTS(装载特殊寄存器)
- 的指令:HALT(停止CPU工作),STI/CTI(允许/禁止中断)
- 硬件按“态”来区分CPU的状态
- OS按“进程”来区分CPU的状态
A | B | C | D | ||
---|---|---|---|---|---|
硬件→ | 核心态 | K | K | ||
硬件→ | 用户态 | U | U |
Interl CPU的态
- Ring0~Ring3(内→外)
- PL(Privilege Level) = 00, 01, 10, 11
- 段:一段连续内存
- 段描述符:描述段的属性,8字节
- 段基址
- 段界限
- 段属性:段类型、…
字节7 | 字节6 字节5 | 字节4 字节3 字节2 | 字节1 字节0 |
---|---|---|---|
段基址1 | 段属性+一部分段限长 | 段基址2 | 段限制长2 |
字节6字节5
7 | 6 | 5 | 4 | 3210 | 7 | 65 | 4 | 3210 |
---|---|---|---|---|---|---|---|---|
G | D | 0 | AVL | 段限长1 | P | DPL | S | TYPE |
:JMP B, CALL B
:Current Privilege Level
:Requested Privilege Level
:Descriptor Privilege Level
- 程序A CPL=0/1/2/3 RPL=0123
- 程序B DPL=0/1/2/3
- 合法访问
- 一致代码段: CPL >= DPL
- 非一致代码段 CPL = DPL && RPL <= DPL
特权级(低→高) | 特权级(高→低) | 相同特权级 | |
---|---|---|---|
一致代码段 | Y | N | Y |
非一致代码段 | N | N | Y |
数据段 | N | Y | Y |
Unix/Linux OS:仅支持Ring0,Ring1和Ring3
- Ring0:特权指令,OS内核或驱动程序
- Ring1:管态
- Ring3:应用程序
Windows:仅支持Ring0和Ring3
- Ring0:特权指令,OS内核或驱动程序
- Ring3:应用程序
- 用户请求OS提供服务
- 发生中断
- 用户进程产生错误(内部中断)
- 用户态企图执行特权指令
:一般是中断返回RET
内存
定义:存储程序和数据的部件
分类依据 | |||
---|---|---|---|
按与CPU的联系 | 主存:直接和CPU交换信息 | 辅存:不能直接和CPU交换信息 | |
按存储元的材料 | 半导体存储器:常作主存 | 磁存储器:磁带,磁盘 | 光存储器:光盘 |
按存储器读写工作方式 | RAM | ROM |
:速度快,容量大,成本低
:寄存器、高速缓存(CACHE)、主存、磁盘
- 访问缓存(命中,HIT)
- 访问内存(没有命中,MISS)
- 访问辅存(缺页,PAGE_FAULT)
中断
:指CPU对突发的外部事件的反应过程或机制。CPU收到外部信号(中断信号)后,停止当前工作,转去处理该外部事件,处理完毕后回到原来工作的 中断处(断点)继续原来的工作
-
实现并发活动
-
实现实时处理
-
故障自动处理
:引起系统中断的事件称为中断源
- 强迫中断和自愿中断
- 强迫中断:程序没有预期:例:I/O、外部中断
- 自愿中断:程序有预期。例:执行访管指令
- 外中断(中断)和内中断(俘获)
- 外中断:由CPU外部事件引起。例:I/O,外部事情。
- 内中断:由CPU内部事件引起。例:访管中断、程序中断
- 外中断:不可屏蔽中断和可屏蔽中断
- 不可屏蔽中断:中断的原因很紧要,CPU必须响应
- 可屏蔽中断:中断原因不很紧要,CPU可以不响应
:程序中断的地方,将要执行的下一指令的地址 CS:IP
:程序正确运行所依赖的信息集合。PSW(程序状态字)、PC、相关寄存器
:破坏主程序的现场
- 现场的保护:进入中断服务程序之前,栈
- 现场的恢复:退出中断服务程序之后,栈
- 识别中断源
- 保护断点和现场
- 装入中断服务程序CS:IP
- 进入中断服务程序
- 恢复现场和断点
- 中断返回:IRET
外部中断/INT指令:PUSH SS、PUSH SP、PUSHF、PUSH CS、PUSH IP
IRET:POP IP、POP CS 、POPF 、POP SP 、POP SS(通过IRET进入特定的代码段/任务)
- 交换指令执行地址
- 交换CPU的态
- 工作:现场保护和恢复;参数传递(通信)
时钟
:以固定间隔产生时钟信号,提供计算机所需的节拍
:时间片;提供绝对时间;提供预定的时间间隔;WatchDog
:绝对时钟;相对时钟
第3章 用户界面
3.1 用户环境和构造
:用户工作的软件环境,()
:按照用户要求和硬件特性安装和配置操作系统()
3.2 操作系统的生成
:根据硬件环境和用户需要,配置和构建操作系统。
- 操作系统由可拆装模块构成
- 有交互式配置工具
- 有映像构建(build)工具
-
获取Linux内核的源代码(最好是当前版本)
- http://www.kernel.org/
- cd /usr/src
- tar zxvf linux-2.6.38-12.tar.gz
-
选择和启动内核配置程序
- cd /usr/src/linux-2.6.38-12
- make xconfig(图形窗口模式)
- 或make menuconfig
-
根据需要配置内核模块和参数
-
重新编译新的内核
- make dep
- make clean
- make bzImage ./arch/i386/boot/bzImage
-
编译和安装模块
- make modules
- make modules_install 模块被编译且安装到/usr/lib/<内核版本号> 目录下
-
启动新内核
-
cp bzImage /boot/bzImage
-
GRUB(与发行版本有关):配置/boot/grub/grub.conf
title newLinux build by Zhang San Feb.28.2019 root (hd0,1) kernel /boot/bzImage ro root=/dev/hda2
-
LILO(早期版本):配置/etc/lilo.conf后lilo使之生效
image=/boot/bzImage label=newLinux build by Zhang San Feb.28, 2012
-
3.3 操作系统的启动
实模式和保护模式
:实地址模式,REAL MODE
- 程序按照8086寻址方法访问0~FFFFFh(1MB)空间
- 寻址方式:物理地址(20位)= 段地址:偏移地址
- CPU单任务运行
实模式1M空间 | |
---|---|
前640K[0000-9FFF] | 基本内存 |
中间128K[A000-BFFF] | 显卡内存 |
末尾256K[C000-FFFF] | BIOS |
:(内存保护模式,PROTECT MODE)
- 寻址方式:段( 16位)和偏移量( 32位),寻址4GB
- 段的属性:起始地址,存取属性,权限,…
- 段页式虚拟内存管理机制(段,页)
- 新增多个寄存器 GDR,LDR,CR0,CR1,CR2,…
- 虚拟地址,进程,封闭空间
- 应用程序和操作系统的运行环境都被
- CPU支持多任务
系统BIOS
:Basic I/O System,基本输入输出系统
BIOS256K空间 | |
---|---|
[C000-C7FF] | 显卡BIOS |
[C800-CBFF] | IDE控制器BIOS |
[F000-FFFF] | 系统BIOS |
- CMOS设置
- 基本IO设备中断服务
- POST上电自检
- 系统自举/加载OS
:当用户按下PowerOn或者Reset键加电,开始执行FFFF0单元的指令(JUMP POST),开始自检
- 初始化基本硬件:CPU、显卡、内存…
- 自检正常不ix提示,错误则通过喇叭提示
系统自举/加载OS
:开机时将OS载入内存并运行为用户建立用户环境
- 查找显卡BIOS,调用显卡BIOS
- 依次查找其它设备执行相应设备的BIOS
- 显示启动画面:BIOS信息,主板信息,芯片组型号
- 根据用户指定顺序从硬盘或光驱等媒介启动OS
- OS启动后,由OS接管计算机
:现场引导方式(OS文件存储在本都存储设备)、逐步引导方式(滚雪球方式)
操作系统的启动(滚雪球)
:从加电到用户工作环境准备好的过程
- 初始引导
- 核心初始化
- 系统初始化
初始引导
:把OS内核装入内存并使之开始工作接管计算机系统
- 加电自检,POST
- 跳入BIOS的启动程序
- 读取0面0道第1扇区的内容
- MBR:主启动记录:引导程序所在
- 运行引导程序
- 根据参数,读取硬盘指定位置的OS内核到内存
- 初始化基本参数
- OS内核:逐步加载OS剩余部分,知道最后完全控制计算机
核心初始化
:OS内核初始化系统的核心数据
:
- 各种寄存器的初始化
- 存储系统和页表初始化
- 核心进程构建
系统初始化
:为用户使用系统作准备,使系统处于待命状态。
- 初始化文件系统
- 初始化网络系统
- 初始化控制台
- 初始化图形界面
启动实例
DOS
- POST:加电后BIOS启动主机自检程序
-
- BIOS从MBR读入引导程序,装入内存的特定位置
- 引导程序运行将io.sys及msdos.sys读入内存
- DOS运行起来取代BIOS接管整个系统
- :操作系统读入config.sys配置系统核心
- :读入Command.com,执行autoexec.bat,系统待命
Windows
- POST:加电后BIOS启动主机自检程序
-
- BIOS从MBR读入引导程序,装入内存的特定位置
- 引导程序启动DOS7.0,调入操作系统核心
- WINDOWS开始接管系统
- :资源状态、核心数据等初始化
- GUI界面生成,系统处于待命/消息接受状态
Linux
- POST
- MBR
- KERNEL映像
- KERNEL映像自解压并执行
- 内核初始化
- 内核启动
MBR
主启动扇区MBR::BootLoader或更强功能的启动管理
- 提供菜单:可选择不同的启动项目
- 加载核心文件:直接指向可启动的程序区段加载OS操作系统
- 跳转其他Loader:跳转到其他PBR(分区引导记录)的boot loader加载OS
启动扇区:BootLoader,引导OS
- 初启过程:POST→CMOS设置(/硬盘/软盘/USB)→读取MBR→控制权交给MBR
- MBR工作
- MBR读取分区表
- 查找并确认唯一活动分区:确认其他的分区都不是活动分区
- MBR读取活动分区PBR,并加载到内存
- PBR控制后续引导过程:读OS内核
- MBR读取分区表
MBR的结构
MBR结构 | |
---|---|
446B[000-1BD] | boot loader |
64B[1BE-1FD] | 硬盘分区表 |
2B[1FE-1FF] | Magic number 55 AA |
Boot Loader:三部分
- Boot code
- Error message
- Disk signature
操作系统的安装
- 把OS映像拷贝到存储空间:拷贝/安装位置:硬盘
- 写启动相关的数据和代码(Boot Code)
- MBR扇区(Master Boot Record Sector)
- PBR扇区(Partition Boot Record)
- 512字节
:安装顺序;MBR重新或MBR追加
3.4 操作系统的用户界面
:OS提供给用户控制计算机的机制,又称用户接口
- 操作界面
- 系统调用(程序界面)
操作界面
- 图形用户界面(GUI):窗口,图标,菜单,按钮,鼠标(消息,事件)
- 键盘命令(CMD):在控制台环境下接收键盘输入的命令(普通命令、批处理、shell)
shell
:shell时操作系统与用户交互的界面
:Shell表现为通过控制台执行用户命令的方式;Shell本身不执行命令,仅仅是组织和管理命令
:Bsh Csh Ksh(Bsh+Csh) Bash(Bsh升级+Ksh)
-
命令行编辑功能
-
命令和文件名补全功能:tab键
-
命令历史功能
-
命令别名功能
-
提供作业控制功能
-
具有将命令序列定义为功能键的功能
-
管道与重定向
-
标志输入/输出
输入/输出文件 设备 文件编号 标准输入文件 键盘 0 标准输出文件 显示器 1 标准错误输出文件 显示器 2 -
重定向
- 输入重定向 < 将命令输入由默认的键盘更改/重定向为指定的文件
- 输出重定向
- > 将命令输出由默认的显示器更改/重定向为指定的文件
- >> 将命令输出重定向并追加到指定文件的
- 错误重定向
- 2> 将命令的错误输出重定向指定文件(先清空)
- 2>> 将命令的错误输出重定向指定文件(追加到末尾)
- 输出与错误组合重定向:&> 将命令的正常输出和错误输出重定向指定文件
-
管道操作
- |用于连接左右两个命令,将|左边命令的输出作为右边命令的输入
-
-
Shell Script脚本编程
:脚本(Script)通过类似程序的方式执行具有一定逻辑顺序的命令序列完成较复杂的功能和人机交互
- 脚本程序保存在文本文件中
- 脚本程序是Shell命令语句的集合
- 所有命令逐行执行(按逻辑)
- 凡能shell中直接执行的命令,都可以在脚本中使用
- 脚本中还可以使用一些不能在shell下直接执行的语句
- 直接运行(用缺省版本的shell运行脚本程序)
- 使用某个特定版本的Shell执行脚本 Bsh xx.sh
- 在脚本文件首行指定Shell
- 在脚本开头增加一行: #!/bin/bash
- 可从/etc/shell获知所有可用shell及其绝对路径
3.5 系统调用
:操作系统内核为应用程序提供的一系列服务/函数
:printf、exit、fopen、fgetc、21H(09)
- 一般涉及核心资源或硬件的操作 printf涉及显卡操作,fopen涉及文件磁盘
- 系统调用运行于核态
- 每个系统调用具有唯一的编号:ID
- 系统调用过程会产生中断:自愿中断
- 访管指令是硬件指令,该指令引起OS内某个具有特定服务功能的内核代码执行(不是一段微指令)。
- 访管指令执行时先设置模式位,再转入内核空间某个固定的位置(自陷中断处理)。然后由该位置代码负责转入相应的OS服务程序执行。执行完后返回用户空间。
- 类似硬件中断,称为访管中断
- 调用N号系统调用,使用指令:SVC N
- N:系统调用的编号 SVC: SuperVisor Call,访管指令
- SVC是中断指令
DOS:INT 21H
Linux:INT 80H
- 设置模式位
- 转入内核某固定位置(自陷中断处理)
- 跳转到相应OS服务例程,执行
- 返回用户空间
- 类似API函数
- 在高级语言中使用(printf exit)
- 包含INT 80h中断指令/系统调用
3.5 Linux系统调用
- 系统调用是Linux内核的出口
- 系统调用通过软中断(INT 80H)向内核发出服务请求
- 系统调用采用API方式向用户提供,遵循 POSIX标准
- 应用程序使用隐式方式调用系统调用xyz()
- xyz()在Libc中编译为含有INT 0x80指令的代码
- system_call时0x80号中断服务的一部分,指定各系统调用的入口。例如sys_xyz()
- 具体实现各个系统调用。例如:sys_xyz()
系统调用封装在unistd.h中
第4章 进程管理
4.1 进程概念
:进程是程序在某个数据集合上的一次运行活动
:软/硬件环境,多个进程共存/共享的环境
:
- 动态性:进程是程序的一次执行过程,动态产生/消亡
- 并发性:进程可以同其他进程一起向前推进;
- 异步性:进程按各自速度向前推进
- 独立性:进程是系统分配资源和调度CPU的单位
程序 | 进程 | |
---|---|---|
动静 | 程序是静态的:一组指令的有序集合 | 进程是动态的:程序的一次执行过程 |
持久 | 程序是长存的:在介质上长期保存 | 进程是暂存的:在内存驻留 |
对应 | 一个程序可能有多个进程 | 一个程序可能有多个进程 |
- 按使用资源的权限
- :指系统内核相关的进程
- :运行于用户态的进程
- 按对CPU的依赖性
- :计算型进程
- :侧重于I/O的进程
4.2 进程的状态
- 运行状态(Running):进程已经占有CPU,在CPU上运行。
- 就绪状态(Ready):具备运行条件但由于无CPU,暂时不能运行
- 阻塞状态(Block)【等待(Wait)】:因为等待某项服务完成或信号来到而不能运行的状态
- 例如等待:系统调用,I/O操作,合作进程的服务或信号
变化 | 服务:系统调用/IO操作,信号:事件 |
---|---|
就绪→运行 | 进程调度 |
运行→就绪 | 时间片到;被抢占 |
运行→阻塞 | 服务请求;等待信号 |
阻塞→就绪 | 服务完成;信号来到 |
活动阻塞(正常阻塞)静止阻塞(阻塞时挂起)
活动就绪(正常就绪)静止就绪(就绪时挂起)
变化 | 服务:系统调用/IO操作,信号:事件 |
---|---|
活动就绪→运行 | 进程调度 |
运行→活动就绪 | 时间片到;被抢占 |
运行→活动阻塞 | 服务请求;等待信号 |
活动阻塞→活动就绪 | 服务完成;信号来到 |
活动就绪→静止就绪 | 挂起 |
静止就绪→活动就绪 | 解挂 |
运行→静止就绪 | 挂起 |
静止阻塞→活动阻塞 | 解挂 |
活动阻塞→静止阻塞 | 挂起 |
静止阻塞→静止就绪 | 信号来到 |
Linux的进程状态
- 可运行态
- 就绪:TASK_RUNNING,在就绪队列中等待调度
- 运行:
- 睡眠态/阻塞态/等待态
- 深度睡眠:TASK_UNINTERRUPTIBLE(不可中断):不能被其他进程通过信号和时钟中断唤醒
- 浅度睡眠:TASK_INTERRUPTIBLE(可中断):可被其他进程的信号或时钟中断唤醒
- 僵死态:TASK_ZOMBIE,进程终止执行,释放大部分资源
- 挂起态:TASK_STOPPED,进程被挂起
ps aux查看STAT R=TASK_RUNNING S=TASK_UNINTERRUPTIBLE I=空闲 Z=TASK_ZOMBIE
4.3 进程控制块
:描述进程的状态、资源、和相关进程的关系的一种数据结构;PCB是进程的标志,随进程创建和撤销
Linux的进程控制块结构体 task_struct
Linux进程标识
- pid:进程ID,getpid()
- ppid:父进程ID,getppid()
- pgid:组进程ID
- uid:用户ID
- gid:用户组ID
- Context,进程运行环境≈PCB
- 分时系统的进程切换
- 进程的上下文在CPU中交换
- 换入进程的上下文进入CPU(从栈+PCB上来)
- 换出进程的上下文离开CPU(到栈+PCB上去)
进程A | OS | 进程B |
---|---|---|
执行 | 空闲 | |
执行→空闲 | 保存PCB(A) | 空闲 |
空闲 | 空闲 | |