操作系统笔记

https://www.bilibili.com/video/BV1YE411D7nH

操作系统
操作系统笔记_第1张图片
定义:控制和管理整个计算机系统的硬件和软件资源,并合理组织调度计算机工作和资源分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。

功能和目标
作为系统资源的管理者(处理机cpu管理、存储器管理、文件管理、设备管理),安全高效
作为用户和计算机硬件之间的接口(命令接口(联机命令接口、脱机命令接口),程序接口,GUI),方便用户使用
作为最接近硬件的层次

特征
并发:指两个或多个事件同一时间间隔内发生,不同于并行,并行是同一时间两个事件同时发生 。微观上交替执行,但宏观看起来就像同时执行。
多核CPU,同一时刻可以并行的执行多个程序,但是操作系统的并发性依然必不可少,当代人使用计算机绝对有4个以上的程序需要同时工作

共享:即资源共享,指系统中的资源可供内存中多个并发执行的进程共同使用。两种共享的方式:互斥共享和同时共享。

虚拟:指物理上的实体变为若干个逻辑上的对应物。空分复用技术和时分复用技术

异步:指多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进。
操作系统笔记_第2张图片
操作系统笔记_第3张图片

计算机发展阶段
手工操作阶段–>批处理阶段–单道批处理系统->多道批处理系统->分时操作系统->实时操作系统

人机速度矛盾–资源利用率低–人机交互功能–优先处理紧急任务–硬实时/软实时
操作系统笔记_第4张图片
操作系统笔记_第5张图片
操作系统笔记_第6张图片
操作系统笔记_第7张图片
操作系统笔记_第8张图片
操作系统笔记_第9张图片
操作系统笔记_第10张图片
操作系统笔记_第11张图片

OS的运行机制和体系结构

运行机制:两种指令(特权指令和非特权指令)、两种处理状态(核心态和用户态)、两种程序(内核程序和用户程序)

操作系统内核:时钟管理、中断处理、原语(设备驱动、CPU切换等)、对系统资源进行管理的功能(进程管理、存储器管理、设备管理)

操作系统体系结构:大内核、微内核

指令:CPU能够识别、执行的最基本命令。二进制

特权指令:很高权限的指令,如内存清零指令

CPU通过程序状态字寄存器(PSW)的某个标志位来识别当前处理器处于什么状态,从而判断当前程序能否执行特权指令

操作系统笔记_第12张图片
操作系统笔记_第13张图片

中断和异常
中断的诞生
中断的概念和作用
中断的分类:内中断(异常)、外中断
外中断的处理过程

多个程序在内存,但同一时间片段只能有一个程序执行,每个时间片段结束CPU收到计时部件发出的中断信号,切换到核心态,对中断进行处理;
CPU切换到核心态,对中断信号进行处理,进程1的时间片已用户,换进程2运行。
CPU切换到用户态,进程2运行,进程2发出系统调用(内中断信号),请求输出。Cpu切换到核心态,对中断进行处理。
CPU切换到核心态,对中断信号进行处理,打印机开始工作,进程2暂停运行等待I/O完成,发出等待信号,换进程3运行。
I/O完成,设备向CPU发出中断信号,CPU切换到核心态,进程3暂停运行,对中断信号进行处理,进程2的I/O完成,让进程2恢复运行。

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

由于操作系统的管理工作(进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态。
有了中断,才能实现多道程序并发执行。
用户态、核心态切换通过中断实现的,并且是唯一途径。

内中断(信号来源CPU内部,与当前执行的指令有关):自愿中断–指令中断(系统调用,陷阱,陷入trap)、强迫中断(硬件故障(缺页)、软件故障(整数除0))

外中断:外设请求、人工干预(用户强行终止一个进程)

step1:执行完每个指令之后,CPU都要检查当前是否有外部中断信号
step2:如果检查到外中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW,程序计数器,各种通用寄存器)
step3:根据中断信号类型转入想要的中断处理程序
step4:恢复原进程的CPU环境并退出中断,返回原进程继续往下执行。

什么是系统调用,有何作用?
操作系统笔记_第14张图片
应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都有操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如内存分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

操作系统笔记_第15张图片

不同的操作系统都会向上提供系统调用,编程语言如C语言向上提供库函数,有时将系统函数封装成库函数,以隐藏一些细节,使上层进行系统调用更加方便。
普通应用程序可直接系统调用,也可使用库函数。
一般库函数都可以做到不同平台运行。

操作系统笔记_第16张图片

进程的定义、组成、组织方式、特征
程序:就是一个指令序列
系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序段、数据段的存放位置)
程序段、数据段、PCB三部分组成了进程实体。一般情况下进程实体简称为进程。
例如创建进程实际上就是创建进程实体中的PCB;撤销进程就是撤销进程实体中的PCB。
引入进程实体概念后,可把进程定义为
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

PCB:进程描述符(进程标识符PID,用户标识符UID);进程控制和管理信息(进程当前状态、进程优先级);资源分配清单(程序段指针、数据段指针、键盘、鼠标);处理机相关信息(各种寄存器)

进程的组织:链接方式(按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针)、索引方式(根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表的指针)
执行指针、就绪队列指针、阻塞队列指针

进程的特征:动态性、并发性、独立性、异步性、结构性

进程的状态和转换
运行态
就绪态:已经具备运行条件,只缺CPU资源
阻塞态

创建态:操作系统为进程分配资源、初始化PCB
终止态:操作系统为进程回收资源、撤销PCB

操作系统笔记_第17张图片
操作系统笔记_第18张图片
进程的状态转换不允许中断,需要原子操作,这就需要用到原语。
原语采样“关中断指令"和”开中断指令“实现

进程的状态转换
1、更新PCB中的信息(如修改进程状态标识,将运行环境保存到PCB、从PCB恢复运行环境)
2、将PCB插入到合适的队列
3、分配/回收资源

进程通信:共享存储(基于数据结构的共享、基于存储区的共享)、消息传递(直接通信方式、间接通信方式)、管道通信

两个进程对共享存储的空间访问必须是互斥的(互斥访问通过操作系统提供的工具实现)
操作系统只负责提供共享空间和同步互斥工具(如P、V操作)
操作系统笔记_第19张图片
操作系统笔记_第20张图片
操作系统笔记_第21张图片

线程和多线程模型
什么是线程,为什么引入线程?
引入线程机制后有什么变化?
线程有哪些重要的属性
线程的实现方式(用户级线程、内核级线程)
多线程模型(多对一、一对一、多对多)

引入线程后,线程成为了基本CPU执行单元,程序执行流的最小单位

操作系统笔记_第22张图片
操作系统笔记_第23张图片

处理机调度
基本概念
三个层次:高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)
三个层次的联系、对比
补充知识:进程的”挂起态“,七状态模型

操作系统笔记_第24张图片
操作系统笔记_第25张图片
操作系统笔记_第26张图片
高级调度:外存->内存 面向作业
中级调度:外存->内存 面向进程
低级调度:内存->CPU

进程调度时机、切换与过程、调度方式
进程调度:安装某种算法从就绪队列中选择一个进程为其分配处理机
当前进程主动放弃CPU:进程正常终止、运行过程中发生异常而终止、进程主动请求阻塞
当前进程被动放弃CPU:分给进程的时间片用完了、有更紧急的事情需要处理(如I/O中断)、有更高优先级的进程进入就绪队列

不能进行进程调度与切换的情况:
1、在中断处理过程中
2、进程在操作系统内核的程序临界区中
3、在原子操作中

进程同步 进程互斥

操作系统笔记_第27张图片

信号量机制
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而方便的实现进程互斥、进程同步。
信号量其实是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用信号量表示系统中某种资源的数量。
一对原语:wait(S)和signal(S)原语。简称P、V操作。P(S)、V(S)。

整形信号量
int S = 1; //初始化整形信号量s,表示当前系统 中可用打印机资源数

void wait(int S) //wait原语,相当于“进入区”
{
while(S <= 0); //资源不够,一直循环等待
S=S-1;
}

void signal(int S) //signal原语,相当于“退出区”
{
S=S+1; //使用完资源后,在退出区释放资源
}

整形信号量存在“忙等”,不满足“让权等待”原则

记录型信号量
typedef struct{
int value; //剩余资源数
struct process *L; //等待队列
}semaphore;

void wait(semaphore S){
S.value–;
if (S.value < 0){
block(S.L); //使用block原语使进程进入阻塞态,并把挂到信号量S的等待队列中
}
}

void signal(semaphore S)
{
s.value++;
if (S.value <= 0){
wakeup(S.L);
}
}

锁解决的是异步同时访问同一资源的问题
同步问题是“一前一后问题”

在“前操作”之后执行V(S)
在“后操作”之前执行P(S)
如代码4要在代码1代码2之后执行
操作系统笔记_第28张图片

操作系统笔记_第29张图片

生产消费模式
系统中一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入到缓冲区,消费者进程每次从缓冲区取出一个产品并使用。
生产者消费者共享一个初始化为空,大小为n的缓存区
只有缓冲区没满时,生产者才能把产品放入缓冲区,否则等待。 //同步关系
只有缓冲区不空时,消费者才能取出产品,否则必须等待。 //同步关系
缓冲区是临界资源,各进程必须互斥的访问。 //互斥关系

信号量机制可以实现互斥、同步、对一类资源的申请和释放
互斥:设置初值为1的互斥信号量
同步:设置初值为0的同步信号量
对一类资源的申请和释放:设置初值为资源数量的信号量

semaphore mutex = 1; //互斥信号量
semaphore empty = n; //同步信号量
semaphore full = 0; //同步信号量

producer (){
while(1){
生产一个产品;
P(empty) //消耗一个缓存区
P(mutex) //实现互斥是同一进程中进行一对PV操作
把产品放入缓存区
V(mutex)
V(full) //增加一个产品
}
}

comsuer (){
while(1){
P(full) //消耗一个产品
P(mutex)
从缓存区取出一个产品
V(mutex)
V(empty)
}
}

读者-写者问题
1、允许多个读者同时对文件执行读操作
2、只允许一个写者往文件中写信息
3、任一写者在完成写操作之前不允许其它读者或写者工作
4、写者执行写操作之前,应让已有读者和写着全部退出

写 读
缓冲区
写 读

写互斥
写-读互斥

操作系统笔记_第30张图片

操作系统笔记_第31张图片

管程
为什么引入管程
管程的定义和基本特征
使用管程解决生产消费问题
java中类似于管程的机制

操作系统笔记_第32张图片

什么是死锁
进程死锁、饥饿、死循环的区别
死锁产生的必要条件
什么时候会产生死锁
避免死锁策略
死锁的检查和解除

操作系统笔记_第33张图片
操作系统笔记_第34张图片

操作系统笔记_第35张图片

内存
编译:有编译程序将源代码编译成若干个目标模块
链接:由链接程序将编译后形成的一组模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入:由装入程序将装入模块装入内存运行

操作系统笔记_第36张图片
操作系统笔记_第37张图片
操作系统笔记_第38张图片

操作系统对内存管理需要实现以下功能
内存空间的分配与回收(连续分配管理方式(单一连续分配、固定分区分配、动态分区分配)、非连续分配管理方式)
内存空间的扩充(覆盖技术、交换技术、虚拟存储技术)
内存保护

操作系统笔记_第39张图片
交换技术:7状态模型
操作系统笔记_第40张图片
操作系统笔记_第41张图片
操作系统笔记_第42张图片
动态分区分配算法
操作系统笔记_第43张图片
操作系统笔记_第44张图片
操作系统笔记_第45张图片
操作系统笔记_第46张图片
操作系统笔记_第47张图片
操作系统笔记_第48张图片
操作系统笔记_第49张图片
操作系统笔记_第50张图片

IO设备分类
按使用特性:人机交互类、存储设备、网络通信设备
传输速率:低速、中速、高速
按信息交换的单位分类:块设备(传输速率高,可寻址)、字符设备(在输入输出常采用中断驱动方式)

I/O控制器功能:接受和识别CPU发出的命令、向CPU报告设备的状态、数据交换、地址识别

操作系统笔记_第51张图片
在这里插入图片描述
操作系统笔记_第52张图片
操作系统笔记_第53张图片
操作系统笔记_第54张图片
操作系统笔记_第55张图片
操作系统笔记_第56张图片
操作系统笔记_第57张图片
操作系统笔记_第58张图片

你可能感兴趣的:(操作系统)