###
操作系统
定义
操作系统是指控制和管理整个计算机网络系统的硬件和软件资源,并合理地组织调度计算机工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。

功能和目标
进程:是一个程序的执行过程,执行前需要将该程序放在内存中,才能被CPU处理。

举个例子,第一步对应文件管理,第二步对应存储器管理,第三步对应处理机管理,第四不定义设备管理


联机命令接口:

脱机命令接口:我的理解,就是脚本语言

操作系统的四个特征
###

并发:
重点关注并发和并行的区别
一个单核处理机(CPU)同一时刻只能执行一个程序,因此操作系统会负责协调多个程序交替执行(这些程序微观上是交替执行的,但是宏观上来看是在同时执行,只不过交替执行的切换时间很快!!!
共享:
共享和并发的关系:
可以看出来,如果没有共享的话,并发也不可能也没有意义。比如程序A和程序B要并发,都是去读取文件C,如果没有共享,那么A和B是不可能并发的;同时,共享就是为了多个程序去同时对一个文件(数据)操作!!!。
虚拟:
时分复用:处理机将一个大的时间段,分为了多个很小的时间段!!!
虚拟和并发的关系:
异步:
异步是指,在多道程序环境下,允许多个程序并发执行,但是由于资源有限,进程的执行不是一贯到底的,而是走走停停。
例子:
虚拟和并发的关系:
如果失去了并发性,则系统只能串行地处理各个进程,每个进程的执行会一贯到底。只有系统拥有并发性,才有可能导致异步性。
重点:
理解并发和并行的区别。
并发和共享互为存在条件、没有并发和共享,就谈不上虚拟和异步,因此并发和共享是操作系统的两个最基本的特征。
操作系统的运行机制和体系结构
指令
指令就是处理器CPU能识别、执行的最基本的命令。
根据指令的权限高低,可以分为特权指令和非特权指令
两种CPU状态:用户态和和心态,根据程序状态寄存器(PSW)中的某些标志位来表示当前处理器处于什么状态。不同状态只能执行相应的指令。
程序分为两类:内核程序和应用程序。
总结
计算机系统层次结构:
时钟管理:用于实现计算机的计时功能,所有的进程切换和进程调度,都需要基于计时。
原子性:只某些程序要么不执行,要么就必须执行到底。
中断
中断机制的概念
本质:发生中断就意味着需要操作系统介入,开展管理CPU的工作。用户态和核心态不断切换。
1.中断发生时,CPU立即进入核心态。
2.中断发生时,当前运行的进程暂停运行,并有操作系统内核对中断进行处理
3.对于不同的中断信号,会进行不同的处理。
发生了中断,就意味着需要操作系统介入,开展管理工作。
由于操作系统的管理工作(比如进程切换、分配IO设备等)需要使用特权指令,因此CPU从用户态切换为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。
有了中断,才能实现多道程序并发执行。
就是在程序运行的时候,多个进程需要来回切换,然后比如进程A运行时,只有用户态,但是想要做IO等特权指令时,需要切换到核心态,只能通过中断来切换,操作系统切换到核心态,此时开始做进程A的IO,然后进程B获得CPU执行权,开始执行(这里是我自己的理解)
用户态到核心态的切换,是通过中断实现,并且中断是唯一 的方式。
核心态到用户态的切换,需要通过执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”
中断分类
方式一:
本质:中断信号的来源是CPU外部还是CPU内部即可!!!
方式二:
外中断处理过程
第一步:每个指令结束后,都需要去检查是否有中断信号
第二步:有中断信号来了,先把一些状态保存下,以便中断结束之后恢复
第三步:切换到核心态,进行中断处理
第四步:恢复之前保存的环境,然后返回原程序,继续往下执行。
总结
系统调用
什么是系统调用
应用程序通过系统调用系统调用请求操作系统的服务。
系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(存储分配、I/O分配、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样就可以保证系统的稳定性和安全性,防止用户进行非法操作。
系统调用的分类
系统调用的相关处理需要在核心态下进行!!!
系统调用背后的过程
传递系统调用参数 —> 执行陷入指令(用户态) —> 执行系统调用相应服务程序(核心态) —-> 返回用户程序
注意:
1.陷入指令时在用户态执行的,执行陷入指令之后立即引发一个内中断,从而CPU进入核心态。
2.发出系统调用请求是在用户态,而对系统调用的相应处理是在核心态下进行。
3.陷入指令是唯一一个只能在用户态执行,不能在核心态执行的指令
总结
进程
进程的定义
程序:就是一个指令序列,早期的计算机,都是只支持单道程序。
后来,就发展为多道技术!!!内存中同时放入多道程序,各个程序的代码、运算数据存放的位置不同。操作系统要怎么样才能找到各个程序的存放位置呢?
为了方便操作系统管理,完成各程序并发执行,引入了进程、进程实体的概念!!!
系统为每个运行的程序配置了一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放的位置)
PCB、程序段、数据段三部分构成了进程实体(进程映像),一般来说,就是进程就是进程实体。
所谓的创建进程,实质就是创建进程实体中的PCB;撤销进程,其实是撤销进程实体中的PCB。PCB是进程存在的唯一标识!!!
引入进程实体的概念之后,可以把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
注意:严格来说,进程实体和进程并不一样,进程实体是静态的,是我们程序运行过程中的程序段,数据段,PCB三部分组成的实际的静态数据,然而进程却是动态的。不过除非特别强调,否则也可以说,进程由程序段、数据段、PCB三部分组成。
进程的组成
进程(进程实体)是由程序段、数据段、PCB三部分组成。
程序段:存放的是程序的代码本身(指令序列)
数据段:程序运行过程中的数据,如全局变量、局部类变量等等。
PCB:操作系统通过PCB来管理进程,PCB中应包含操作系统对其进行管理所需要的各种信息。
PCB的组成:
进程的组织
在一个系统中,通常有很多PCB。为了能对它们加以有效的管理,应该用适当的方式将这些PCB组织起来。
链接方式
指针指向的是队列,按照程序的优先级或者其他, 把多个进程放入队列中
索引方式
指针指向的是索引表
进程的特征
进程和程序是两个截然不同的概念,相比于程序,进程拥有以下特征:
总结
进程的状态与转换
进程状态 —- 三种基本状态
进程是程序的一次执行。有时进程正在被CPU处理,有时有需要等待CPU服务,可见,进程的状态是有各种变化的,为了方便对各个进程的管理,操作系统需要将进程合理地划分为几个状态。
其实,进程还有两个状态:创建态(准备进程所需要的PCB等资源)和终止态(撤销PCB)等
小结
进程状态的转换
总结
进程控制
进程控制的主要功能就是对系统中的所有进程实施有效的管理,具有创建新的进程,撤销已有进程,实现进程状态转换等功能。
原语操作
用原语实现进程控制。
原语的特点是执行期间不允许中断,只能一气呵成。
这种不可以被中断的操作即为原子操作。
原语采用关中断指令和开中断指令实现。
关/开中断的权限非常大,必然是只允许在核心态下执行的特权指令!!!
进程相关的原语
进程控制会导致进程状态的转换,无论哪个原语,无非要做的就是以下三类事情:
更新PCB的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
a. 所有的进程控制原语一定都会修改进程状态标志。
b. 剥夺当前进程的CPU使用权必然需要保存其运行环境
c. 某进程开始运行前必然要恢复其运行环境
将PCB插入到合适的队列
分配/回收资源
四类原语:
总结
进程通信
什么是进程通信
进程通信就是指各个进程之间的信息交换
进程是分配系统资源的单位(包括内存地址空间),各个进程拥有的内存地址空间是相互独立的。
为了保证进程的安全,一个进程是不能直接访问一个进程的地址空间。
但是进程之间的信息交换又是必须实现的的。
共享存储
两个进程是无法直接访问到对方的地址空间,所以搞了个共享空间。
两个进程对共享空间的访问必须是互质的!!!
操作系统只负责提供共享空间和同步互斥工具(如P、V操作)
共享数据分为两种:基于数据结构,基于存储区。
基于数据结构:比如共享空间里只能放一个长度为10 的数组。这种共享方式速度慢,限制多,低级通信方式。
基于存储区:在内存中画出一块共存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,速度快,高级通信方式。
管道通信
消息传递
进程间的数据交换以格式化的消息为单位。
进程通过操作系统提供的“发送消息/接收消息“两个原语进行数据交换。
格式化消息的组成:消息头,消息体
消息的传递有两种方式:
直接通信方式和间接通信方式
直接通信方式:
1.进程一创建格式化消息
2.通过发送原语发送给进程2,消息会被挂到目标进程(2)的消息缓冲队列的队尾,然后进程2通过接受原语接受
间接通信方式
1.进程1创建格式化消息
2.进程1通过发送原语将消息发给信箱中
3.进程2通过接受原语从信箱中取走相应的消息
总结
线程的概念
有的进程可能需要”同时“处理很多事情,然而传统的进程只能串行地执行一系列程序。为此,引入了”线程“,来增加并发度!!!
传统的进程中,CPU轮流为多个进程服务,传统的进程是程序执行流的最小单位:
引入线程之后,线程称了程序执行流的最小单位(将QQ视频聊天和QQ发送文件放在多个线程中,实现真的并发)
线程和进程的关系
线程可以理解为轻量级的进程。
线程是一个基本CPU执行调度单位,也是程序执行流的最小单位。
进程只是作为除CPU以外的系统资源分配单元(打印机,内存地址空间等都是分配给进程的)!!!
引入线程机制后,带来的变化
线程的属性
线程的实现方式
两种:用户级线程和内核级线程
多线程模型
多对一模型
一对一模型
多对多模型
总结
处理机调度概念、层次
调度基本概念
当有一堆任务要处理,但是由于资源有限,这些事情无法同时处理,需要确定某种规则来决定处理这些任务的顺序,这就是调度。
在多道程序系统中,进程的数量往往比处理机的个数多,不太可能同时并行处理各个进程。
处理机调度,就是从就绪对了中按照一定的算法选择一个进程并将处理机分配给它运行, 以实现进程的并发执行!!
高级调度
由于内存有限,有时无法将用户提交的作业全部放入内存,因此需要确定某种规则来决定将作业放入内存的顺序。
高级调度:按照一定的原则从外存上处于后备队列的作业中挑一个或者多个作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),以使他们获得竞争CPU的权利。
高级调用时外存与内存之间的调度。
每个作业只能被调入一次,调出移除。
中级调度
有了虚拟存储技术之后,可以将暂时不能运行的进程调至外存等待。等它重新具备了运行条件且内存又有空闲时,在重新调入内存。
这么做的目的是为了提高内存利用率和系统吞吐量。
暂时调到外存等待的进程状态称为挂起状态。值得注意的是,PCB并不会一起调到外存,而是会常驻内存。PCB中会记录进程数据在外存中存放的位置,进程状态等信息,操作系统通过内存中的PCB来保存对各个进程的监控、管理。被挂起的PCB会被放到挂起队列中。
中级调度,就是要决定将那个处于挂起状态的进程重新调入内存。
一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度高。
进程挂起与七状态模型
暂时掉到外存等待的进程状态为挂起状态(挂起态)
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
注意挂起和阻塞的区别
低级调度(进程调度)
主要任务:按照某种算法和策略,从就绪队列中选取一个进程,将CPU分配给它。
进程调度是操作系统中最基本的调度,在一般的操作系统中都必须配置进程调度。
进程的调度的频率非常高,一般几十毫秒一次。
三种调度的联系和对比
高级调度和中级调度都是发生在外存和内存中,不过高级调度面向的是作业,中级调度面向的是进程。