目录
第一章:计算机系统概述
1.1操作系统基本概念
本结思维导图:
1.1.1操作系统的概念
①定义:操作系统 是指控制和管理整个计算机系统的硬件和软件资源,并合理的地组织调度计算机工作和资源的分配;以提供给用户和其他软件方便的接口和环境;它是计算机系统中最基本的系统软件。
②a:操作系统是系统资源的管理者;
b.操作系统向上层提供方便易用的服务;
c.操作系统是最接近硬件的一层软件。
1.1.2 操作系统的功能
(1)操作系统作为系统资源的管理者:
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
目标:安全、高效
(2)操作系统作为用户与计算机硬件系统之间的接口
①命令接口:用户使用的命令
- 联机命令接口(交互式命令接口):用户说一句,系统跟着做一句
- 脱机命令接口(批处理命令接口):用户说一堆,系统跟着做一堆
②程序接口:可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。
1.1.3操作系统四个特征
1.1.4操作系统的发展和分类
1.2操作系统的体系结构
(1)内核:操作系统最基本、最核心功能;
操作系统内核运行在内核态
操作系统的内核又可分为“大内核”和“微内核”:
大内核和微内核区别和优缺点:
补充:
- 源程序不是操作系统应该管理的;
- 系统调用是操作系统为应用程序使用内核功能所提供的接口;
- 操作系统不允许用户直接操作各种硬件资源,因此用户程序只能通过系统调用的方式来请求内核为其服务,间接使用各种资源;
- 在单CPU系统中,同一时刻只能有一个进程占用CPU,因此进程之间不能并发执行。
- 库函数属于用户程序而非系统调用,是系统调用的上层。
1.3操作系统的运行环境
1.3.1 操作系统运行机制
(1)内核程序vs应用程序
应用程序:普通程序员写的程序,应用程序只能使用“非特权指令”
内核程序:负责实现操作系统的人
(2)特权指令vs非特权指令
(3)内核态vs用户态(内核态=核心态=管态;用户态=目态)
1️⃣用户态和内核态只是不同权限的资源范围:
内核态可以执行一切特权指令,在用户态只能执行受限级别的指令,如果需要调用特权指令需要进行内核态切换,这样做的目的防止人人都改操作系统。
2️⃣用户态和内核态的切换
1)用户态——>内核态 三种方式:由“中断”引发,硬件自动完成变态的过程,触发中断信号意味着操作系统将强行夺回CPU使用权。
- 系统调用(内中断):这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作
:
- 异常(内中断):当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如程序的非法操作码、地址越界、运算溢出、虚拟系统缺页以及专门的陷入指令等引起的事件,异常不能被屏蔽。
- 外围设备中断(外中断):当外围设备完成用户请求操作后,会向CPU发出相应的中断信号,这时cpu会暂停执行下一条要执行的指令转而去执行与中断信号对应的处理程序;外中断包括时钟中断、I/O中断请求。
2)内核态——>用户态:执行一条特权指令--修改PSW的标志位为“用户态”,这个动作意味着操作系统将主动让出CPU使用权。
【注】:
- 用户程序在用户态下要使用特权指令引起的中断属于“陷入中断”;
- 用户态到核心态的转换是由硬件(硬件中断机制)完成的;
- 屏蔽中断指令、设置时钟指令、停机指令都是特权指令,修改内存单元的值属于非特权指令;
- 寄存器清零和寄存器清“0”都是在用户态执行;
- 系统调用的调用可能发生在用户态,调用系统调用的那条指令不一定是特权指令,但系统调用的执行一定在内核态。
- CPU处于核心态时,它可以执行除“访管”指令的全部指令。
- 外部中断处理过程中,PC值由中断隐指令自动保存,而通用寄存器内容由操作系统保存,快表(TLB)和Cache内容则由硬件机构保存;
- 与中断相关的操作中,由操作系统完成的有:提供中断服务,初始化中断向量表,保存中断屏蔽字。
1.4操作系统引导
1.5虚拟机
虚拟机:使用虚拟化技术,将一台物理机器虚化成多台虚拟机机器,每台虚拟机都可以独立运行一个操作系统。
第二章:进程与线程
2.1进程的概念、组成和特征
2.1.1进程的概念
在多道程序环境下,允许多个进程并发执行,此时它们失去了封闭性,并具有间断性及不可再现的特性,引入进程,以便更好描述和控制程序的并发执行,实现操作系统的并发性和共享性。
传统操作系统中进程定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个基本单位。
进程与程序的区别:
参考:程序与进程区别
1、程序是指令的有序集合,是一个静态的概念;而进程是程序在CPU上的一次执行过程,是动态的。
2、程序作为软件资源可以长期保存,而进程有生命周期,因创建而诞生,因调度而执行,因得不到资源而暂停执行,因撤销而消亡。
3、进程是一个独立运行的基本单位,也是系统进行资源分配和调度的基本单位,而程序作为静态文本既不运行也不分配和调度。
4、进程与程序之间无一一对应关系。进程是程序的一次执行,而程序的执行可以产生多个进程,不同的进程可以包含同一个程序。
5、程序是记录在介质上指令的有序集合,而进程由程序段、数据段和PCB这三个部分组成。
2.1.2进程的组成
进程实体=程序段+相关数据段+PCB
进程由三部分组成,其中最核心的是进程控制块(PCB):
PCB是给操作系统用的,程序段、数据段是给进程自己用的。
- 进程控制块PCB:
2.1.3进程的特征
2.2 进程的状态与转换
本节思维导图:
1)进程状态与转换:
五种状态之间的转换:
2)进程的组织:
2.3进程控制
- 进程控制就是实现进程状态的转换
- 用“原语”实现进程控制(原语是一种特殊的程序,它的执行具有原子性,这段程序的运行必须一气呵成、不可中断。)
- 进程控制相关的原语包括:进程的创建、进程的终止、进程的阻塞、进程的唤醒、进程的切换
1)进程的创建(创建态——>就绪态)
2)进程的终止(就绪态/阻塞态/运行态——>终止态)
3)进程的阻塞和唤醒(阻塞:运行态——>阻塞态;唤醒:阻塞态——>就绪态)
4)进程的切换(运行态——>就绪态——>运行态)
2.4进程的通信(IPC)
进程是分配系统资源的单位(包括地址空间)因此各进程拥有的内存地址空间相互独立。
为了保证安全,一个进程不能直接访问另一个进程的地址空间。
但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。
1)共享存储:设置一个共享内存空间,并映射到进程的虚拟地址空间,要互斥地访问共享空间(由通信方式自己负责实现互斥)
- 基于数据结构的共享:适用于数据量少,低级通信方式
- 基于存储区的共享:数据量大,高级通信方式,效率高;
2)消息传递:进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
- 直接通信方式:信息发送进程要指明接受进程ID
- 间接通信方式:通过“信箱”间接通信,因此又称“信箱通信方式”;(可以多个进程往同一个信箱发送消息,也可以多个进程从同一个信箱接收消息)
3)管道通信:本质在内存中开辟一个大小固定的内存缓冲区,连接一个读进程和一个写进程以实现它们之间通信的一个共享文件。
【注】共享存储和管道通信都是"开辟一个内存空间",它们的区别是什么?
参考文章:深度剖析管道与共享内存_共享内存和管道的区别-CSDN博客
管道通信,共享内存_线程管道和共享内存的优缺点,使用场景有哪些-CSDN博客
管道本质上就是一个文件,采用半双工通信,即只能实现单向通信,管道就是通过文件系统来实现通信的,由于文件的特性,不可以两个进程同时写入,也就注定了管道只能实现单向通信,写端只负责写入,读端只负责读取,要实现两个进程同时具有读写功能就只有创建两个管道。
管道是通过内核进行数据传输的,需要进行多次的用户态和内核态之间的切换,而且管道的数据传输必须要经过内核的缓冲区,这些额外的步骤都会带来一定的开销。
相对来说,共享内存在进程间通信时直接映射到各进程的地址空间中,无需进行内核态与用户态的频繁切换,而且也不需要经过内核缓冲区,因此在数据传输的效率上更高。
2.5 线程
2.5.1线程的概念
- 没引入进程之前,系统中的各个程序只能串行执行;
- 引入进程之后,更好地使多道程序并发执行,提高资源利用率和系统吞吐量;
- 没引入线程之前,有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序;
- 引入线程之后,线程成了程序执行流的最小单位,减少程序在并发执行过程中所付出的时空开销,提高操作系统并发能力。
1)进程与线程的比较
进程和线程的区别和联系_线程和进程的关系和区别-CSDN博客
原文链接:https://blog.csdn.net/xiaoyubuhuiqiche/article/details/129629234
进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
(4)处理机分给线程,即真正在处理机上运行的是线程。
(5)线程是指进程内的一个执行单元,也是进程内的可调度实体。
进程和线程的区别:
①本质区别: 进程是操作系统进行资源分配的基本单位,线程是独立调度和分派的基本单位。
②包含关系: 如果一个进程内有多个线程,则执行过程并不是一条直线,而是多条线(线程)共同完成的.线程是进程的一部分,所以线程也被称为轻量级进程或轻权进程.
③资源开销: 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销:线程可以看作轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小.
④进程和线程的创建和销毁: 假如我要创建一个进程,我先要遍历我的内存资源找到一块合适的内存再分配给它,当我要销毁一个进程时,还是要先遍历我的内存资源,找到我的进程才能对其进行销毁.但是如果是创建一个线程,我们可以认为该进程是一个酒店,当我想创建一个线程时,直接开一个房间就好了,销毁线程时直接退房,此时可以看出,进程的创建和销毁在资源分配上浪费了很多时间,但是线程的创建和销毁则不需要那么麻烦.
⑤内存分配: 同一个进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的.
⑥影响关系: 一个进程崩溃后,在保护模式下并不会对其他进程产生影响,但是一个线程崩溃,可能会导致包含该线程的整个进程都直接死掉.所以多进程要比多线程健壮.
⑦操纵者不同:进程的操纵者一般是操作系统,线程的操纵者一般是编程人员。
⑧执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行.
2)线程的属性:
线程切换时,进程不一定切换,平均看来每次切换的开销就变小了。
3)线程的状态和转换
线程的五大状态:创建状态、就绪状态、运行状态、阻塞状态、死亡状态
(图片来源:https://blog.csdn.net/qq_49005459/article/details/121181211)
4)线程的组织和控制
与进程类似,系统为每个线程配置了一个线程控制块(TCB),用于记录控制和管理线程的信息。
- 线程控制块通常包括:①线程标志符②一组寄存器:包括程序计数器、状态寄存器、通用寄存器;③线程运行状态;④优先级;⑤线程专有存储区,线程切换用于保护现场;堆栈指针;
- 线程也具有生命周期,由创建而产生,由调度而执行,由终止而消亡;
- 线程的终止:当一个线程完成自己任务后,或线程在运行过程中出现异常而被要求强制终止时,由终止线程调用相应函数执行终止操作。但有些线程(系统线程)一旦被建立,便一直运行而不会被终止。通常,线程被终止后并不立即释放它所占有的资源,只有当进程中其他线程执行了分离函数后,被终止线程才与资源分离,此时的线程仍可以被其他线程调用,以使被终止线程重新恢复运行。
2.5.2线程的实现方式 多线程模型
1)线程的实现方式:用户级线程和内核级线程
❥用户级线程:
❥内核级线程:
2)多线程模型:分为一对一模型、多对一模型、多对多模型
- 一对一模型:
- 多对一模型:
- 多对多模型:
本小结思维导图:
2.6 处理机调度
2.6.1调度的基本概念![](https://i-blog.csdnimg.cn/blog_migrate/56a86777ca1eb00803627c293f8922f9.jpeg)
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理,这就需要某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
调度的三个层次:高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)
- 作业调度:按一定要原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入会创建PCB,调出时才撤销PCB。
- 中级调度(内存调度)按照某种策略决定将哪个处于挂起状态的进程重新调入内存。一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
- 进程调度/处理机调度(低级调度):按照某种策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都必须配备进程调度。进程调度的频率很高,一般几十毫秒一次。
三种调度比较:
进程的挂起态与七状态模型
2.6.2进程调度的时机、调度方式
1)需要进行进程调度与切换的情况:
①当前运行的进程“主动放弃”:
- 进程正常终止
- 运行过程中发生异常而终止
- 进程主动请求阻塞
②当前运行的进程“被动放弃”:
- 分给进程的时间片用完
- 有更紧急的事需要处理(如I/O中断)
- 有更高优先级的进程进入就绪队列
2)不能进行进程调度和切换的情况:
- 中断过程复杂,抽不开身;
- 进程在操作系统内核程序临界区中;【区分:普通临界区可以处理机调度】
- 在原子操作中。
进程调度的方式:
- 非剥夺调度方式,又称非抢占方式(不会被抢占,除非进程自己主动放弃)特点:实现简单,系统开销小,但是无法处理紧急任务,适用于早期的批处理系统。
- 剥夺调度方式,又称抢占式。(有更重要的“人”出现,让位置)特点:可以优先处理更紧急的进程,也可以让各进程按照时间片轮流执行功能(通过时钟中断),适用于分时操作系统,实时操作系统。
2.6.3调度器、闲逛进程
2.6.4调度的目标
调度算法的评价指标包括:
- CPU利用率=某个作业占用CPU的时间/CPU总时间
- 系统吞吐量:单位时间内完成的作业数量;系统吞吐量=总共完成的作业数量/总共花了多长时间
- 周转时间(周转时间、平均周转时间、带权周转时间、平均带权周转时间)
- 等待时间:进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低。因此,调度算法只会影响作业/进程的等待时间。
- 响应时间:从用户提交请求到首次产生响应所用的时间。
- 周转时间=作业完成时间-作业提交时间(用户关心)(越小越好)
- 平均周转时间=各作业周转时间之和/作业数(操作系统关心)
- 带权周转时间:作业周转时间/作业实际运行的时间=(作业完成时间-作业提交时间)/作业实际运行时间(>=1,越小越好)
- 平均带权周转时间=各作业带权周转时间之和/作业数
【注】
- 对于周转时间相同的两个作业,实际运行时间长的作业在相同时间内被服务时间更多,带权周转时间更小,用户满意度高。
- 对于实际运行时间相同的两个作业,周转时间短的带权周转时间更小,用户满意度更高
2.6.5调度算法
对于早期批处理系统,主要的调度算法有:
- FCFS(先来先服务算法):在0时刻谁先到,先把该进程执行完,然后再看谁第二个来,主要看到达时间小的,这种算法公平,在一个进程执行中,不会被抢占,但是对短作业不利,只考虑等待时间,这种算法不会导致饥饿。有利于CPU繁忙型作业,不利于I/O繁忙型。
- SJF(SPF)(短作业优先):又分为非抢占式短作业优先(默认)和抢占式短作业优先(最短剩余时间优先算法);周转时间=完成时间-到达时间;带权周转时间=周转时间/运行时间;对短作业有利,对长作业不利。只考虑运行时间,“可能会产生饥饿”
- HRRN(高响应比优先):既考虑了各个作业的等待时间,又能兼顾运行时间。在每次调度时,先计算各个作业/进程的响应比,选择响应比高的为其服务。响应比=(等待时间+执行时间)/执行时间;显然响应比大于等于1;非抢占式算法
(以上三种均适用于作业调度和进程调度)
交互式操作系统(包括分时操作系统、实时操作系统),主要调度算法:
- RR(时间片轮转):让每个进程在一定时间间隔内都可以得到响应,用于进程调度;抢占式;优点是:公平,响应快,适用于分时操作系统;缺点就是不能根据任务紧急优先进行;进程切换频率高,相比会有更多的开销。“不会饥饿”)(时间片给的太大,就成了FCFS算法,时间片太小,频繁切换进程,开销必然增大)
- 优先级调度算法:适用于作业调度和进程调度。根据作业/进程优先级选择优先级高的作业/进程。既有抢占式优先调度也有非抢占式优先调度。优点是可以用优先级区分紧急程度、重要程度,适用于实时操作系统,可以灵活调整各种作业/进程的偏好程度。缺点是:如果源源不断有高优先级进程到来,会导致“饥饿”。
- 多级反馈队列调度算法:用于进程调度,抢占式算法,可能会导致“饥饿”
2.7同步与互斥
2.7.1进程同步与互斥的概念
进程本身具有异步性,就是每个进程各自执行自己的,互不影响,并发执行的进程以各自独立的、不可预估的速度向前推进。
操作系统提供“进程同步”是为了干什么呢?
进程同步的意思就是让各个执行的进程之间产生了联系,进程之间相互配合这着工作,比如进程A必须在进程B执行完了之后才能运行,这样的话,操作系统就可以控制进程执行的顺序,可以预估进程的速度,解决了进程异步性问题。
那什么是进程互斥呢?
操作系统四大基本特征中的“并发”需要“共享”的支持,那么各个并发执行的进程不可避免的需要共享一些系统资源(比如内存,打印机,摄像头等)
资源共享又可分为两种:
- 互斥共享方式:进程互斥就是在一个时间段内,只允许一个进程访问该资源;
- 同时共享方式:系统中的资源,同一时间内允许多个进程“同时”对它们进行访问;
在互斥共享这种方式下,我们把一个时间段内只允许一个进程使用的资源叫做“临界资源”(像许多变量,数据,内存缓冲区),对于临界区的访问,必须互斥地进行。(临界区:进程中访问临界资源的代码段)
这样我们就能给出“进程互斥”的概念:当一个进程A访问某临界区资源时,另一个进程B也想访问,但是互斥共享的资源让B必须等待,当A结束访问,并释放了资源,B才能去访问临界资源。
实现互斥的四个逻辑部分:
为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:
2.7.2进程互斥—软件实现方法
- 单标志法:
2.8死锁
第四章:文件系统
4.1文件管理相关概念
文件是一组有意义的信息/数据集合
文件属性:
- 文件名 (同一目录下不允许有重名文件标识符)
- 类型:指明文件类型
- 位置:文件存放路径、在外存中的地址(操作系统使用,对用户不可见)
- 创建时间、上次修改时间
- 文件所有者信息
- 保护信息
文件内部数据的组织形式分为两种:
- 无结构文件:由一系列二进制或者字符流组成
- 有结构文件:涉及“文件逻辑结构”
目录(文件夹)是一种特殊的有结构文件;
操作系统向上提供哪些功能?
太混乱了这章 我要静静。。。