1 认识操作系统
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源,直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。
操作系统负责管理协调硬件、软件等计算机资源的工作,为上层用户、应用程序提供简单易用的服务的一种软件。
1.1 操作系统位置
从计算机系统的组成部分来看,操作系统处于硬件和应用程序以及用户之间。
应用程序:比如我们常用的QQ 、chrome浏览器等
硬件:如CPU 、 内存 、硬盘等。

1.2 操作系统的功能
1)系统资源的管理者

以 qq 视频为例来看操作系统都做了些什么
1.在各个文件夹中找到 QQ 安装的位置(如 D:/Tencent/QQ/Bin)
- 操作系统需要的做的是逐层打开文件夹,找到 QQ.exe 这个程序(可执行文件)的存放位置。
2.双击打开 QQ.exe
- 系统需要把该程序相关数据放入内存
3.QQ 程序正常运行
- 对应的进程被处理机(CPU)处理
4.开始和朋友视频聊天
- 需要将摄像头设备分配给进程
补充:进程是一个程序的执行过程。执行前需要将该程序放到内存中,才能被 CPU 处理。
2)用户和计算机硬件之间的接口,为用户提供服务

3)最接近硬件的层次,对硬件进行扩展

硬件就类似锤子、锯子、木头、钉子…操作系统就类似优秀的工匠。
操作系统对硬件的扩展:通过优秀工匠,这些简单的原料可以组织成房子、帆船等。普通用户可直接使用工匠提供的房子、帆船,而无需关心这些东西在底层是怎么组织起来工作。
操作系统的功能有:处理机管理、文件管理、存储管理、设备管理、作业管理。
处理机管理:也称进程管理。实质上是对处理机执行时间进行管理,采用多道程序等技术将CPU的时间真正合理地分配给每个任务。主要包括进程管理、进程同步、进程通信和进程调度。
文件管理:又称信息管理。主要包括文件存储空间管理、目录管理、文件的读写管理和存取管理。
存储管理:是对主存储器空间的管理。主要包括存储分配与回收、存储保护、地址映射(变换)和主存扩充。(即内存管理)
设备管理:实质上是对硬件设备进行管理,其中包括输入输出设备的分配、启动、完成和回收。
作业管理:包括人物、人机交互和用户界面管理等。
2 操作系统的特征
操作系统的4个特征:并发性、共享性、虚拟性、不确定性。
2.1 并发性
并发性:指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但微观上是交替发生的。
操作系统的并发性:指计算机系统同时存在多个运行着的系统。
一个单核处理机 ( CPU ) 同一时刻只能执行一个程序,因此操作系统会负责协调多个程序交替执行(这些程序微观上是交替执行的,但宏观上看起来就像在同时执行)。事实上,操作系统就是伴随着“多道程序技术”而出现的。因此,操作系统和程序并发是一起诞生的。
并发与并行的区别
1) 并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。
2) 并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
区别:并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。
2.2 共享性
共享即资源共享,指的是系统中的资源可供内存中多个并发执行的进程共同使用。
- 共享互斥方式就是:系统中的某些资源,虽然可以供给多个进程使用,但一个时间内只允许一个进程访问该资源。
- 同时共享方式:系统中的某些资源,允许一个时间段内由多个进程 “同时” 对他们进行访问。

所谓的 “同时” 往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问(即共识分享)
生活实例:互斥共享方式:使用 qq 和 微信视屏。同一时间段内摄像头只能分配给其中的一个进程。
2.3 虚拟性
虚拟是指把一个物理上的实体变成若干个逻辑的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。

显然,如果失去了并发性,则在一段时间内系统中只需运行移到程序,那么就失去实现虚拟化的意义,因此没有并发就谈不上虚拟性。
2.4 异步性
异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。是一种线性执行的方式,执行的流程不能跨越。一般用于流程性比较强的程序,比如用户登录,需要对用户验证完成后才能登录系统。
他们的区别就在于一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式,比如日志记录就可以使用异步方式进行保存
3 操作系统的分类
批处理操作系统、分时操作系统(Unix)、实时操作系统、网络操作系统、分布式操作系统、微机操作系统(Linux、Windows、IOS等)、嵌入式操作系统。
4 处理机管理
4.1 程序顺序执行的特征:
- 顺序性:每一操作必须在下一操作开始之前结束
- 封闭性:程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变,程序一旦执行,其结果不受外界影响
- 可再现性:程序执行环境和初始条件相同,重复执行时,结果相同
4.2 程序并发执行的特征:
- 间断性:程序并发运行时,共享系统资源,为完成同一任务相互合作,会形成相互制约关系,导致并发程序具有 “执行-暂停-执行” 这种间断性的活动规律
- 失去封闭性:程序并发执行时,资源状态由多个程序改变,某程序执行时,会受到其他程序影响,失去封闭性
- 不可再现性:失去封闭性,导致失去可再现性
4.3 进程的特征
- 结构特征:程序段、相关数据段和PCB三部分构成进程实体
- 动态性:进程实体的一次执行过程,具有生命期,而程序是有序指令集合,是静态的
- 并发性:多个进程同时存于内存,在一段时间内同时运行
- 独立性:进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位
- 异步性:进程按各自独立的、不可预知的速度向前推进
4.4 进程的状态:三态模型(左图)、五态模型(右图)
进程的三种基本状态
进程在运行中不断地改变其运行状态。通常,一个运行进程必须具有以下三种基本状态。
就绪(Ready)状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
执行(Running)状态:当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
阻塞(Blocked)状态:正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
进程三种状态间的转换
一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞状态。
4.5 进程间的通信(同步与互斥):
由于多个进程可以并发执行,所以进程间必然存在资源共享和相互合作的问题。进程通信是指各个进程交换信息的过程。
同步是合作进程间直接制约问题,互斥是申请临界资源进程间的间接制约问题。(临界资源(Critical Resource, CR):在同一时间只能供一个进程使用的资源)临界区管理4条原则:
- 有空即进:
- 无空则等:
- 有限等待:要求访问临界区的进程,保证有限时间内进入临界区,避免死等
- 让权等待:进程不能进入临界区时,应立即释放处理机,避免忙等
4.6 信号量机制:即利用PV操作来对信号量进行处理。
信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。
- 当它的值大于0时,表示当前可用资源的数量;
- 当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
- 注意,信号量的值仅能由PV操作来改变。
一般来说,信号量S >= 0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S < 0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S <= 0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
4.7 进程调度:如何分配CPU。
调度方法分为可剥夺和不可剥夺两种。即当有更高优先级的进程到来时,是否可以将正在运行进程的CPU分配给高优先级的进程,可以则为可剥夺,否则为不可剥夺的。
在某些操作系统中,一个作业从提交到完成需要经历高、中、低三级调度。
- 高级调度:又称长调度或作业调度。它决定处于输入池中的哪个后备作业可以调入主系统做好运行的准备,成为一个或一组就绪进程。系统中一个作业只需经过一次高级调度。
- 中级调度:又称短程调度或对换调度。它决定处于交换区中的就绪进程哪个可以调入内存,以便直接参与对CPU的竞争。在内存资源紧张时,为了将进程调入内存,必须将内存中处于阻塞状态的进程调出交换区,以便为调入进程腾出空间。
- 低级调度:又称短程调度或进程调度。它决定处于内存中的就绪进程中的哪个可以占用CPU。最活跃、最重要的调度程序,对系统影响也是最大的。
常见的进程调度算法:先来先服务(FCFS)、短作业优先、时间片轮转(固定时间片、可变时间片)、优先级调度(静态优先级、动态优先级)、多级反馈调度(时间片轮转+优先级调度)。
4.8 死锁:
死锁:两个以上的进程互相要求对方已经占有的资源导致无法继续运行下去的现象
- 产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
2 .产生死锁的四个必要条件:互斥条件、请求与保持条件、不剥夺条件、循环等待条件。
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
- 解决死锁的4种处理策略:鸵鸟策略(即不理睬策略)、预防策略、避免策略、检测与解除策略。
死锁预防:预先静态分配法(破坏不可剥夺条件)、资源有序分配法(将资源分类按顺序排列,保证不形成环路)。
死锁避免:银行家算法(对每个资源请求进行检测,确保安全。需要很大的系统开销)。
死锁解除:资源剥夺法、撤销进程法。
4.9 线程与进程
定义:
- 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
- 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。也有就绪、运行、阻塞三态。
关系
- 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.
- 相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
区别:
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
优缺点
线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
5 存储管理
- 地址重定位:指将逻辑地址变换成物理地址的过程。分为静态重定位和动态重定位。
- 存储管理方案:分区存储管理(固定分区、可变分区、可重定位分区)、分页存储管理(将一个进程的地址空间划分为若干个大小相等的区域,成为页,相应地,将主存空间划分成与页相同大小的若干个物理块,称为块。至少需要两次访问主存)、分段存储管理、段页式存储管理(地址结构:段号+段内页号+页内地址)、虚拟存储管理。
可变分区的请求和释放主要算法:最佳适应算法、最差适应算法、首次适应算法、循环首次适应算法。
快表:在页式存储管理中将当前最活跃的少数几页的物理块号保存在高速存储器中,用以提高页式存储管理的性能。(不用两次访问主存)
页面置换算法:最佳置换算法(最长时间内不再被访问的页面置换出去)、先进先出置换算法、最近最少未使用置换算法、最近未用置换算法。
6 设备管理
- 设备管理的目标是如何提高设备的利用率,为用户提供方便统一的界面。
- 设备管理采用的缓冲技术:通道技术、DMA技术、缓冲技术、Spooling技术。
- 磁盘调度算法:先来先服务(FCFS)、最短寻道时间(SSTF)、扫描算法(SCAN)(先由里向外,到达最外后由外向里)、单向扫描调度算法(CSCAN)(无法换向,只能由里向外)。
7 文件管理
- 文件的逻辑结构:有结构的记录式文件(由一个以上的记录构成。记录分为定长记录、不定长记录)、无结构的流式文件(由一串顺序的字符流构成的文件,不划分记录)。
- 文件的物理结构:顺序结构、链接结构、索引结构、多个物理块的索引表。
- Unix的三级索引结构:
- 文件的存取方法:顺序存取法、随机存取法。
- 文件的存储空间管理:外存空闲空间管理的数据结构通常称为磁盘分配表。常用的空闲空间的管理方法:位示图(用一个bit为的0、1表示一个物理块的空闲情况)、空闲区表、空闲块链、成组链接法(每100块为一组进行记录空闲的块号和大小)。
- 文件链接:硬链接(两个文件目录表目指向同一个索引节点,即指不同的文件名与同一个文件实体的链接)、符号链接(在建立的新文件或目录并与原来的文件或目录的路径名进行映射)。
- 硬连接:原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
- 符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。可以删除原有的文件而保存连接文件,没有防止误删除功能。
8 作业管理
- 作业状态分为4种:提交(通过输入设备送入计算机)、后备(通过Spooling系统将作业输入到计算机系统的后备存储器中,等待作业调度程序调度)、执行和完成。
- 常用的作业调度算法:先来先服务、短作业优先、响应比高优先、优先级调度算法、均衡调度算法。