操作系统

操作系统的特征:

并发
  • 宏观上是同时发生,微观上交替发生(操作系统和程序并发是一起诞生的)
共享
  • 互斥共享方式(一个时间段内只允许一个进程访问资源)
  • 同时共享方式(允许一个时间段内多个进程“同时”对他们进行访问)

同时往往是指宏观上

== 并发性和共享性互为存在条件 ==

虚拟技术
  1. 空分复用技术(如虚拟存储技术)
  2. 时分复用技术(如虚拟处理器)

只有系统拥有并发性,才能导致异步性。

发展与分类

手工操作阶段

缺点:人机速度导致资源利用率低。

批处理阶段

单道批处理系统

操作系统的雏形(监督程序)
优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。
缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序,CPU有大量的时间是在空闲等待I/O完成。资源利用率很低。

多道批处理系统

每次往内存输入多道程序,在多道批处理系统阶段,操作系统才诞生了,并且引入了中断技术,由操作系统负责管理这些程序的运行,各个程序并发执行。
优点:多道程序并发执行,共享计算机资源,资源利用率大幅度提高,系统吞吐量增大。

缺点:没有人机交互功能(运行过程中),响应时间长。

分时操作系统:

计算机以时间片为单位轮流为各个用户/作业服务。
优点:解决了人机交互问题,允许多个用户同时使用一台计算机。
缺点:不能优先处理一些紧急任务。

实时操作系统:

优点:能够优先响应一些紧急任务,不需要时间片排队。
特点:及时性和可靠性。
分类:硬实时系统和软实时系统。

注* 硬实时系统指必须在绝对严格的规定时间内完成处理(如:导弹控制系统)

注* 软实时系统指能接受偶尔违反时间规定。

OS的运行机制和体系结构

什么是指令?

答:就是处理器(CPU)能识别、执行的最基本命令。指令又分为:特权指令和非特权指令。

CPU如何判断当前是否可以执行特权指令?

答:CPU有两种处理器(寄存器)状态:分为用户态(目态)和核心态(管态)。这时我们又把程序分为内核程序和应用程序。

大内核和微内核:

大内核:高性能,代码多,结构乱,难维护;
微内核:功能少,结构明确,易维护,性能低。

注* 特权指令指不允许用户程序使用

注* 目态指CPU只能执行非特权指令。

注* 管态指特权和非特权都可执行。

注* 内核程序指管理者,可执行特权和非特权指令,运行在核心态,实现操作系统内核功能的程序;应用程序又称用户程序,运行在用户态,只能执行非特权指令。

注* 内核包括时钟管理、中断管理、进程管理、原语等(设备驱动、CPU切换)。

中断和异常

中断机制诞生:

为了解决资源利用率低的问题,引入了中断机制,从而实现了并发执行(多道批处理阶段)
本质:发生中断就是意味着需要操作系统介入,开发管理工作。

中断特点:

1、发生时,CPU立即进入核心态
2、发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理。
3、不同的中断信号会进行不同的处理。

注* 中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。

中断分类:

内中断(异常)和外中断。

注* 内中断指信号来源CPU内部,与当前执行的指令有关。外中断指信号来源于CPU外部,与当前执行的指令无关。

系统调用(特殊函数)

注*

1、陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态。
2、发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。
3、陷入指令是唯一一个只能在用户态执行,而不可再核心态执行的指令。

进程(动态性)…

特征:

动态性、并发性、独立性、异步性、结构性

程序就是一个指令序列

为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念。

程序段、数据段、PCB组成了进程实体(又称进程映像,简称进程),所谓创建、撤销进程就是创建、撤销PCB(它是进程存在的唯一标志)

注* 进程实体是静态的;进程是动态的,一般要指明才去这样区分。

PCB(进程控制块):

1、进程描述信息
2、进程控制和管理信息
3、资源分配清单
4、处理机相关信息
只要是进程管理的数据都是在里面。

进程的组织方式:

链接方式
索引方式
两个相似

进程的三种状态:

运行态:
占有CPU,并在CPU上运行。
就绪态:
已经具备运行条件,但由于没有空闲CPU,而暂时不能运行。
阻塞态(等待态):
因等待某一件事暂时不能运行。

另外两种状态:创建态和终止态。


进程状态转换:
运行态到阻塞态是主动行为,阻塞态到就绪态是被动行为。

注* 不能由阻塞态直接转换为运行态。也不能由就绪态直接转换为阻塞态。

如何实现进程控制?

用原语实现进程控制,原语的特点是执行期间不允许中断,这种操作叫做原子操作。原语采用是“关中断指令”和“开中断指令”。

无论哪个原语,要做的无非就是三件事:

1、更新PCB中的信息。
2、将PCB插入到合适的队列中。
3、分配 / 回收资源。

进程的创建包括创建原语和引起进程创建的事件:

创建原语:
申请空白PCB、为新进程分配所需资源、初始化PCB、将PCB插入就绪队列中
引起进程创建的事件:
用户登录、作业调度、提供服务、应用请求

进程的终止包括撤销原语和引起进程撤销的事件:

撤销原语:
从PCB集合中找到终止进程的PCB、若进程正在进行,立即剥夺CPU、终止子进程、删除PCB、将该进程拥有的所有资源归还父进程或操作系统
引起进程终止的事件:
正常结束、异常结束、外界干扰

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立,为了保证安全,一个进程不能直接访问另一个进程的地址空间。

基于数据结构的共享是一种低级通信的方式,基于存储区的贡献是一种高级通信方式。

管道只能采用半双工通信。要实现双向同时通信,则需要设置两个管道。各进程互斥访问。当管道写满时,写程序被阻塞,管道变空,读程序(最多只有一个)被阻塞。只有写满才可以读,不能边写边读,反之亦然。

进程间的数据交换以格式化的消息。
一个管道只能实现半双工通信。


传统的进程只能串行执行,为了保证执行更多,我们引入了线程。每个进程包含多个线程(可以并发执行),执行流的最小单位和基本的CPU执行单元,属于“轻量级进程”。
引入线程后,进程只作为除CPU之外的系统资源的分配单元。而线程成为调度的基本单位。
同一线程的切换在进程中完成,不需要切换环境。

线程的属性:

是处理机调度的单位
多CPU计算机中,线程可占用多个CPU
每一个线程都有ID、线程控制块(TCB)
有就绪、阻塞、运行三状态
几乎不拥有系统资源
同一进程的不同线程间共享进程资源
线程间通信无需系统干扰
同一进程中的线程切换,不引起进程切换
切换同进程内的线程,系统开销很小
切换进程,系统开销大

用户级线程:

通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换),线程切换可以在用户态下即可完成,无需操作系统干预。从用户视角看线程。

内核级线程:

由操作系统内核完成,切换需在核心态下完成。从操作系统内核视角看线程。

重点:只有内核级线程才是处理机分配的单位

处理机调度:

确定某种规则来决定处理任务的顺序。按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。

高级调度(作业调度):

频率低。建立相应的进程(建立PCB),获得竞争处理机的权利。是辅存(外存)和内存之间。作业调入时会建立相应的PCB,作业调出时才撤销PCB。调入时机需操作系统决定(所指)(外存 —》内存)面向作业。

中级调度(内存调度):

暂时调到外存等待的进程的状态为挂起状态,这时PCB不会一起调到外存,会常驻内存,被挂起的进程PCB会被放到挂起队列中。发送频率高于高级调度。(外存 — 》内存)面向进程。

挂起态包括就绪挂起、阻塞挂起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【内容简介】 汇编语言是各种CPU所提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如:数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的方式精心创作了这本书。本书具有如下特点:采用全新的结构对课程的内容进行了组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在深入本质的层面上对汇编语言进行讲解;对关键环节进行深入的剖析。 本书可用作大学计算机专业本科生的汇编教材及希望深入学习计算机科学的读者的自学教材。 【目录信息】 第1章基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址空间(概述) 1.12 主板 1.13 接口卡 1.14 各类存储器芯片 1.15 内存地址空间 第2章寄存器(CPU工作原理) 2.1 通用寄存器 2.2 字在寄存器中的存储 2.3 几条汇编指令 2.4 物理地址 2.5 16位结构的CPU 2.6 8086CPU给出物理地址的方法 2.7 "段地址x16+偏移地址=物理地址"的本质含义 2.8 段的概念 2.9 段寄存器 2.10 CS和IP 2.11 修改CS.IP的指令 2.12 代码段 实验1 查看CPU和内存,用机器指令和汇编指令编程 第3章寄存器(内存访问) 3.1 内存中字的存储 3.2 DS和[address] 3.3 字的传送 3.4 mov.add.sub指令 3.5 数据段 3.6 栈 3.7 CPU提供的栈机制 3.8 栈顶超界的问题 3.9 push.pop指令 3.10 栈段 实验2 用机器指令和汇编指令编程 第4章第1个程序 4.1 一个源程序从写出到执行的过程 4.2 源程序 4.3 编辑源程序 4.4 编译 4.5 连接 4.6 以简化的方式进行编译和连接 4.7 1.exe的执行 4.8 可执行文件中的程序装入内存并运行的原理 4.9 程序执行过程的跟踪 实验3 编程.编译.连接.跟踪 第5章[bx]和loop指令 5.1 [bx] 5.2 Loop指令 5.3 在Debug中跟踪用loop指令实现的循环程序 5.4 Debug和汇编编译器Masm对指令的不同处理 5.5 loop和[bx]的联合应用 5.6 段前缀 5.7 一段安全的空间 5.8 段前缀的使用 实验4 [bx]和loop的使用 第6章包含多个段的程序 6.1 在代码段中使用数据 6.2 在代码段中使用栈 6.3 将数据.c代码.c栈放入不同的段 实验5 编写,调试具有多个段的程序 第7章更灵活的定位内存地址的方法 7.1 and和or指令 7.2 关于ASCII码 7.3 以字符形式给出的数据 7.4 大小写转换的问题 7.5 [bx+idata] 7.6 用[bx+idata]的方式进行数组的处理 7.7 SI和DI 7.8 [bx+si]和[bx+di] 7.9 [bx+si+idata]和[bx+di+idata] 7.10 不同的寻址方式的灵活应用 实验6 实践课程中的程序 第8章数据处理的两个基本问题 8.1 bx,si,di,bp 8.2 机器指令处理的数据所在位置 8.3 汇编语言中数据位置的表达 8.4 寻址方式 8.5 指令要处理的数据有多长? 8.6 寻址方式的综合应用 8.7 div指令 8.8 伪指令dd 8.9 dup 实验7寻址方式在结构化数据访问中的应用 第9章转移指令的原理 9.1 操作符offset 9.2 jmp指令 9.3 依据位移进行转移的jmp指令 9.4 转移的目的地址在指令中的jmp指令 9.5 转移地址在寄存器中的jmp指令 9.6 转移地址在内存中的jmp指令 9.7 jcxz指令 9.8 loop指令 9.9 根据位移进行转移的意义 9.10 编译器对转移位移超界的检测 实验8 分析一个奇怪的程序 实验9 根据材料编程 第10章call和ret指令 10.1 ret和retf 10.2 call指令 10.3 依据位移进行转移的call指令 10.4 转移的目的地址在指令中的call指令 10.5 转移地址在寄存器中的call指令 10.6 转移地址在内存中的call指令 10.7 all和ret的配合使用 10.8 mul指令 10.9 模块化程序设计 10.10 参数和结果传递的问题 10.11 批量数据的传递 10.12 寄存器冲突的问题 实验10 编写子程序 课程设计1 第11章标志寄存器 11.1 ZF标志 11.2 PF标志 11.3 SF标志 11.4 CF标志 11.5 OF标志 11.6 adc指令 11.7 sbb指令 11.8 cmp指令 11.9 检测比较结果的条件转移指令 11.10 DF标志和串传送指令 11.11 pushf和popf 11.12 标志寄存器在Debug中的表示 实验11 编写子程序 第12章内中断 12.1 内中断的产生 12.2 中断处理程序 12.3 中断向量表 12.4 中断过程 12.5 中断处理程序 12.6 除法错误中断的处理 12.7 编程处理0号中断 12.8 安装 12.9 do0 12.10 设置中断向量 12.11 单步中断 12.12 响应中断的特殊情况 实验12 编写0号中断的处理程序 第13章int指令 13.1 int指令 13.2 编写供应用程序调用的中断例程 13.3 对int iret和栈的深入理解 13.4 BIOS和DOS所提供的中断例程 13.5 BIOS和DOS中断例程的安装过程 13.6 BIOS中断例程应用 13.7 DOS中断例程应用 实验13 编写应用中断例程 第14章端口 14.1 端口的读写 14.2 CMOS RAM芯片 14.3 shl和shr指令 14.4 CMOS RAM中存储的时间信息 实验14访问CMOS 第15章外中断 15.1 接口芯片和端口 15.2 外中断信息 15.3 PC机键盘的处理过程 15.4 编写int 9中断例程 15.5 安装新的int 9中断例程 实验15 安装新的int 9中断例程指令系统总结 第16章直接定址表 16.1 描述了单元长度的标号 16.2 在其他段中使用数据标号 16.3 直接定址表 16.4 程序入口地址的直接定址表 实验16 编写包含多个功能子程序的中断例程 第17章使用BIOS进行键盘输入和磁盘读写 17.1 int 9中断例程对键盘输入的处理 17.2 使用int 16h中断例程读取键盘缓冲区 17.3 字符串的输入 17.4 应用int 13h中断例程对磁盘进行读写 实验17 编写包含多个功能子程序的中断例程 课程设计2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值