操作系统
Ctrl+F搜索关键字
1.计算机系统概述
1.1计算机基本构成
Processor (处理器):只有一个时指cpu
Main memory (内存):有易失性,计算机关机,内容丢失
I/O modules (输入/输出模块):包括硬盘等
System bus (系统总线):在处理器,内存,输入/输出模块间提供通信
1.2寄存器
Registers:Memory inside CPU(处理内部的存储单元)
Registers function:Enable CPU to minimize main-memory references(减少 CPU 读取内存的次数)
分类为:
1.User-Visible Register(用户程序可见寄存器)
2.Control and Status Register(控制和状态寄存器)
寄存器相关考点:(参考的原文链接)
User-Visible Register
How to use: May be referenced (访问/存取) by machine/assemble language (机器或汇编指令).
User-visible registers are typically accessible to system programs but are not typically available to all programs.
Registers that are used by system programs to minimize main memory references by optimizing register use are called user-visible registers.
Control and Status Register
Function: are used to control the operation of the processor.
Some may be accessibly by machine instruction in control or system mode.
A Control/Status register that contains the address of the next instruction to be fetched is called the Program Counter (PC).
Instruction Register(IR,指令寄存器)
Contains the instruction most recently fetched. (包含最近获取的指令)
A fetched instruction is normally loaded into the Instruction Register (IR).
The Instruction Register (IR) contains the most recently fetched instruction.
A fetched instruction is normally loaded into the instruction register (IR).
Program Status Word(PSW,程序状态字)
Condition codes
The Program Status Word contains status information in the form of condition codes, which are bits typically set by the processor hardware as a result of program operation.
Data Register
Data registers are general purpose (通用) in nature, but may be restricted to specific tasks such as performing floating-point operations.
Address Register
Address registers may contain Memory addresses of data, Memory addresses of instructions, Partial memory addresses.
A special type of address register, required by a system that implements user-visible stack addressing, is called a stack pointer.
1.3指令的执行
指令格式及整数格式
取指阶段及执行阶段为一个指令周期(理想机器)
执行阶段PC会自动加一,最后AC的内容储存到地址为941的储存单元中。
1.4中断处理
计算机使用中断来提供处理器效率。
处理器中断程序前,需要保存从中断点恢复当前程序所需的信息,包括PSW(程序状态字)和PC(程序计数器)中的指令地址等。
处理多个中断时,需要判断它们的优先级来决定用顺序中断或嵌套中断。
1.5高速缓存
Cache Memory原理:当处理器试图读取存储器的一个字节时,先检查该字是否在高速缓存中,若在,则传递给处理器;若不在,则将包含该字的固定数量的字节组成的内存数据读入高速缓存,再从高速缓存传给处理器。
1.可编程 I/O:I/O设备直接更改寄存器的状态
2.中断驱动 I/O:发出中断信号给予CPU
3.DMA直接内存访问:在CPU之外多出了DMA控制器,CPU将拷贝数据的工作交给DMA,让DMA直接从内存读取
1.6重要术语
PC:program counter程序计数器(保存下一次取的指令地址)
IR:instruction register指令寄存器(储存cpu里的指令)
MAR:内存地址寄存器
MBR:内存缓存寄存器
I/O AR:输入/输出地址寄存器
I/O BR:输入/输出缓存寄存器
AC:累加器(cpu临时存储地址)
PSW:程序状态字(反应处理器状态)
ISR:中断服务例程(符合中断要求的程序)
DMA:直接内存存取(需要移动大量数据时使用)
单词:instruction指令 execution执行 buffer缓存 stage阶段 cache memory高速缓存 module模块
2.操作系统概述
2.1操作系统目标
Convenience 方便
Efficiency 有效
Ability to evolve 易扩展
2.2操作系统的发展
操作系统不断发展因为:
硬件升级:Hardware upgrades plus new types of hardware
新的服务:New services
纠正错误:Fixes
操作系统提供的服务:
<程序开发 Program development <程序运行 Program excutions
<I/O设备访问 Access to I/O <文件访问 Access to files <系统访问
<错误检测和响应 Error detection and response <记账 Accounting
<指令系统体系结构ISA
<应用程序二进制接口ABI
<应用程序编程接口API
2.2.1串行处理
serial processing
用户顺序访问计算器,且需要大量前期准备时间。
早期问题:
调度 Scheduling:完成分配的工作后计算机闲置,或没完成的工作被强制停止
准备时间 Setup time:程序运行前需要大量准备时间
2.2.2简单批处理
simple batch systems
将作业按顺序组织成批,每个程序处理完后监控程序自动加载下一个程序。
硬件功能包括:
内存保护Memory protecetions,定时器Timer,
特权指令Privileged instructions,中断Interrupts
2.2.3多道批处理
multiprogramming batch systems
当一个作业需要等待I/O时,处理器可以切换到另一个不在等待I/O的作业。
对多道批处理有用的硬件:
I/O中断和直接内存访问DMA
2.2.4分时系统
time sharing systems
多个用户可以同时访问系统,操作系统控制每个用户程序在很短的时间内交替执行。
2.3主要成就
The Processes 进程
Memory Management 内存管理
Information Protection and Security 信息保护和安全
Scheduling and Resource Management 调度和资源管理
System Structure 系统结构
2.4概念区分:线程,进程,多线程,并发,并行
Thread 线程:可分派的工作单元,包括处理器环境,自身数据,顺序执行且可以中断。
Process 进程:一个或多个线程和相关资源的集合,是一个可执行的程序。
multithreading 多线程:把一个应用程序的进程划分为可以同时运行(并发)的线程。(逻辑上的同时发生)
进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位,可以将进程看作程序,线程是其中的函数。
concurrency 并发:一个处理器同时处理多个任务。
parallel 并行:多个处理器或者是多核的处理器同时处理多个不同的任务。
并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。
3.进程
3.1进程的表征
Identifier 标识符
State 状态
Priority 优先级
PC 程序计数器
Memory pointers 内存指针
Context data 上下文数据
I/O status information 输入/输出状态信息
Accounting information 记账信息
上述内容存放在PCB: process control block 进程控制块中,由操作系统创建和管理。
3.2进程的状态
进程轨迹 trace可描述单个进程的行为
各个进程轨迹交替方式可描述处理器行为
3.2.1两状态进程模型
运行态和非运行态
3.2.2进程的创建和终止
Process Creation进程创建
原因:(1)新的批处理作业 (2)交互登录 (3)提供服务 (4)现有进程派生spawn
操作系统创建步骤:
(1)为新进程分配唯一的进程标识符
(2)为进程分配空间
(3)初始化进程控制块
(4)设置正确的链接
(5)创建或扩充其他数据结构(如记账文件)
Process Termination进程终止
原因:(1)正常完成 (2)超过时限 (3)无可用内存 (4)进程进行错误行动 (5)父进程终止或请求
3.2.3五状态进程模型
Running 运行态
Ready 就绪态
Blocked 阻塞/等待态
New 新建态
Exit 退出态
在大型操作系统中,可以一个事件对应一个队列,或是每个优先级一个队列以提高效率。
3.2.4添加挂起状态的模型
当内存中所有进程都处于阻塞态时,操作系统可把其中的进程置为Suspended Processes挂起态,并且将它转移到磁盘,释放内存空间。
挂起态包括:Blocked/Suspend Ready/Suspend(都在外存中)
挂起进程的特点:
(1)进程不能立即执行
(2)为阻止进程发生,可通过代理使其挂起,代理包括进程本身,父进程或操作系统
(3)需要代理显式地命令系统进行状态转换才能取消挂起
3.3进程描述
操作系统构造并维护4种表:
(1)Memory Tables 内存表
包含分配给进程的内存,外存,进程访问权限,管理虚存的信息(第三部分)
(2)I/O Tables I/O表
包含I/O状态,I/O传送的源与目标等(第11章)
(3)File Tables 文件表
包含文件是否存在,文件位置等(第12章)
(4)Process Tables 进程表
进程表描述了一个Process image 进程映像
进程映像是程序,数据,栈和属性的集合。
其中包括元素:
user data 用户数据:用户空间的可修改部分
user program 用户程序:待执行程序
system stack 栈:LIFO栈
process control block 进程控制块
PCB 进程控制块为属性集,其中的元素有:
进程标识信息,进程状态信息,进程控制信息
3.4进程控制
3.4.1执行模式
执行模式分为 user mode 用户模式 (非特权模式) 和 system mode 系统模式,control mode 控制模式 或 kernel mode 内核模式(特权模式)
级别0是最高特权级别,3是最低特权级别
内核模式的功能包括:
(1)进程管理:进程的创建和终止,进程的分派,切换等
(2)内存管理:为进程分配空间,交换
(3)I/O管理:为进程分配I/O通道和设备
(4)功能:中断,记账等
3.4.2进程切换
Interrupt 中断:对外部事件的反应
Trap 陷阱:处理错误或异常
Supervisor call 系统调用:调用系统函数
4.线程
4.1进程和线程
单线程和多线程进程模型
独立进程间的通信需要内核介入,提供保护和机制,但同一进程中的多个线程共享内存和文件。
相比进程,线程的优点:1.创建快 2.结束快 3.切换快 4.通信快
4.2线程的状态
和进程一样,线程的主要状态有运行态,就绪态,阻塞态,有一些操作可以改变线程状态:
1.Spawn派生:在派生一个新进程时,会为该进程派生一个线程,线程可在同一进程中继续派生线程
2.Block阻塞:线程需要等待一个事件时会被阻塞
3.Unblock解除阻塞
4.Finish结束:线程完成,释放寄存器上下文和栈
当进程被挂起时,其所有线程都被挂起;进程终止时,其所有线程也都终止。
4.3线程的分类
线程分为User-Level Thead用户级线程 和 Kernel-Level Thead内核级线程。
User-Level Thead用户级线程 :线程由应用程序管理;内核透明,调度基于进程。
优点:线程切换开销小,可进行对应用程序的量身定做的调度,可用在任何操作系统
缺点:不能有效利用多处理器(并行),一个进程中只有一个线程可以执行
Kernel-Level Thead内核级线程:内核维护进程和线程的上下文信息,调度基于线程。
优点:线程能同时在多处理器上运行;内核自身也是多线程的
缺点:把控制权从线程传到同进程的另一个线程时,需要切换内核模式
Combined Approaches混合方法:克服两种方法的缺点
5.并发:互斥和同步
5.1并发相关术语
atomic operation 原子操作:一个函数或动作不能被中断
critical section 临界区:一段访问共享资源的代码,只允许一个进程在其中运行
coroutine 协同程序:能够实现程序之间控制权的传递
deadlock 死锁:多个进程都在等待其它进程而不能继续执行(互相等待)
livelock 活锁:多个进程为响应其它进程而持续改变自己的状态却不做有用工作(互相改变而抵消)
mutual exclusion 互斥:一个进程访问临界区而其它进程不能进入
race condition 竞争条件:多个进程在读写一个共享数据 (私有变量不会产生竞争)
starvation 饥饿:一个进程可以执行但没有被调度执行
5.2并发的原理
5.2.1进程交互
1.Processes unaware of each other 进程之间互相不知道对方的存在
2.Processess indirectly aware of each other 进程间接知道对方的存在
3.Processes directly aware of each other 进程直接知道对方的存在
5.2.2互斥的要求
1.一次只允许一个进程进入临界区,忙则等待
2.阻塞于临界区外的进程不能干扰其它进程
3.不会发生饥饿或死锁
3.闲则让进
4.对进程的执行速度和处理器数目无要求
5.进程在临界区内占用时间有限
5.2.3互斥常用机制(本章内)
1.信号量 1.5.二元信号量 2.管程 3.信息传递
5.3机器指令实现互斥
实现互斥的硬件方法:中断禁用,机器指令
机器指令方法示例
/* program mutualexclusion */
const int n=/*进程个数*/;
int bolt;
void p(int i)
{
while (true){
while (compare_and_swap(bolt,0,1) == 1);/* bolt=0时,把1赋给bolt,返回原bolt的值,该循环没有循环语句,能不让其它进程干扰临界区 */
/*临界区*/
bolt = 0;/* 只有在前一个进程执行完临界区的程序,使bolt=0后,后面的进程才能结束上面的while循环 */
}
}
void main(){
bolt = 0;
parbegin(p(1),p(2),'''',p(n));
}
机器指令方法
优点:适用于任意数量的进程;简单易证;支持多个临界区
缺点:进程等待时会消耗处理器时间;可能发生饥饿;可能发生死锁
5.4信号量实现互斥
将信号量视为值为整数的变量,定义以下操作:
1.信号量初始化为非负数
2.semWait (P ):操作使信号量减一,若值变为负数,则阻塞执行它的进程。
3.semSignal (V):操作使信号量加一,若值为负数,则被semWait阻塞的进程解除阻塞。
代码如下:
struct semaphore{
int count;
queueType queue;
};
void semWait(semaphore s) //semWait和semSignal都不允许中断,可以使用上述机器指令实现
{
s.count--;
if(s.count < 0){
/* 把当前进程插入队列,且阻塞该进程 */
}
}
void semSignal(semaphore s)
{
s.count++;
if(s.count <= 0){
/* 把进程P移出队列,解除阻塞 */
}
}
5.4.1信号量术语
binary semaphore 二元信号量:值只能是0或1,进程等待时为0,执行时为1。
counting semaphore 计数信号量/general semaphore 一般信号量:非二元信号量。
mutex 互斥锁:与二元信号量区别于必须是同一个进程为互斥锁加锁或减锁。
strong semaphore:采用先进先出,等待最久的最先释放。你
weak semaphore:没有采用先进先出。