操作系统笔记

文章目录

操作系统

第一章 操作系统的概念

1.1 操作系统的概念,功能和目标

1. 概念

操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源分配(连接硬件和用户/其他应用软件的桥梁),以提供给用户和其他软件方便的接口和环境(向上为用户和其他软件提供服务),他是计算机系统中最基本的系统软件(向下管理硬件设备)。

2. 功能和目标
  1. 作为系统资源的管理者,操作系统需要进行

    • 处理机管理

    • 存储器管理

    • 文件管理

    • 设备管理

    操作系统需要保证资源管理的安全高效。

  2. 作为联系用户和计算机硬件之间的桥梁,操作系统需要提供各种各样的接口

    • 命令接口:允许用户直接使用,包括联机命令接口(用户说一句,操作系统执行一句,比如cmd),脱机命令接口(用户说一堆,操作系统执行一堆,比如.bat批处理文件)
    • 程序接口:允许用户通过程序间接使用,由一组系统调用(即程序接口)组成
    • GUI(图形用户界面)

    操作系统需要方便用户的使用

  3. 作为最接近硬件的层次,操作系统需要实现对硬件机器的拓展。

1.2 操作系统的特征

操作系统四个基本特征:并发,共享,虚拟,异步;其中,并发和共享是OS最基本的特征。

  1. 并发

    • 并发:事件在同一时间间隔内发生,宏观上同时发生,微观上交替发生
    • 并行:事件在同一时刻发生
  2. 共享
    即资源共享,指系统中的资源可供内存中多个并发执行的进程共同使用

    • 互斥共享:一个时间段只允许一个进程访问资源
    • 同时共享:一个时间段允许多个进程访问资源

    并发性指计算机中同时运行着多个程序,共享性指系统中的资源可供内存中多个并发执行的程序共同使用,并发性和共享性互为存在条件。

  3. 虚拟

    • 空分复用技术(如虚拟存储技术)
    • 时分复用技术(如虚拟处理器技术)
  4. 异步

    多道程序环境下,允许多个程序并发执行,但由于资源有限,进程执行不是一贯到底,而是走走停停,以不可预知的速度向前推进。

1.3 操作系统的发展与分类

  1. 手工操作系统

    缺点:用户独占全集,人机速度矛盾导致资源利用率极低

  2. 批处理阶段

    • 单道批处理系统
      优点:一定程度上缓解了人机速度矛盾,资源利用率提升
      缺点:内存中仅能有一道程序运行,CPU大量时间在等待IO,资源利用率仍然很低

    • 多道批处理系统
      优点:程序并发执行,共享计算机资源,资源利用率进一步提升
      缺点:用户响应时间长,不能进行人机交互

  3. 分时操作系统

    计算机以时间片为单位轮流为各个用户/作用服务

    优点:解决了人机交互的问题,用户的请求可以被即时响应

    缺点:不能优先处理一些紧急任务,每个任务的优先级相同

  4. 实时操作系统

    优点:可以优点响应紧急任务,保证系统的及时性和可靠性

    实时操作系统分为硬实时系统和软实时系统

计算机系统还包括网络操作系统,分布式操作系统,个人计算机操作系统

1.4 操作系统的运行机制与体系结构

1. 运行机制
  1. 两种指令:
    • 特权指令:只能在核心态下执行
    • 非特权指令
  2. 两种处理器状态
    • 用户态
    • 核心态
  3. 两种程序
    • 内核程序:是系统的管理者,运行在核心态,既可以运行特权指令也可以运行非特权指令
    • 应用程序:运行在用户态,只能使用非特权指令
2. 操作系统内核

内核是计算机上配置的底层软件,是操作系统最基本,最核心的部分。实现操作系统内核功能的程序就是内核程序。

  1. 时钟管理:计时功能
  2. 中断管理:负责实现中断机制
  3. 原语:具有原子性,运行时间短,调用频繁
  4. 对系统资源进行管理:进程管理,存储器管理,设备管理
3. 操作系统体系结构
  1. 大内核:将操作系统的主要功能模块都作为系统内核,运行在核心态

    优点:高性能

    缺点:内核代码庞大,结构混乱,难以维护

  2. 微内核:只把最基本的功能保留在内核

    优点:内核功能少,结构清晰,方便维护

    缺点:需要平凡的在核心态和用户态之间切换,性能低

1.5 中断和异常

1. 中断的概念和作用

中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。

2. 中断的分类

分类依据中断信号来源是否来自CPU内部

  1. 内中断(异常):包括自愿中断(指令中断),强迫中断(硬件故障,软件中断)
  2. 外中断(中断):包括外设请求(I/O操作完成发出的中断信号)和人工干预(用户强制终止进程)

1.6 系统调用

应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源由操作系统统一管理,因此在用户程序中,凡是与资源有关的操作,都必须通过系统调用的方式向操作系统提出服务请求。这样可以保证操作系统的稳定性安全性,防止用户进行非法操作。

系统调用可分为:设备管理,文件管理,进程管理,进程通信,内存管理

系统调用的过程:1.传递系统调用参数 2.执行陷入指令(用户态)3.执行系统调用相应的服务程序(核心态)4.返回用户程序

注意:

  • 陷入指令在用户态执行,执行之后引发一个内中断,接着CPU进入核心态
  • 发出系统调用请求的是用户态,而对系统调用相应的处理核心态下进行
  • 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令。

第二章 进程管理

1.1 进程与线程

1. 进程的定义,组成,状态与转换

进程是进程实体的运动过程,是系统进行资源分配和调度的一个独立单位,是动态的

进程由程序段数据段PCB三部分组成

  1. 程序段:存放要执行的代码
  2. 数据段:存放程序运行过程中处理的各种数据
  3. PCB:包括进程描述信息,进程控制和管理信息,资源分配清单,处理机相关信息

进程状态转换

image-20220214164234226

2. 进程控制

进程控制就是要实现进程状态的转换

https://www.bilibili.com/video/BV1YE411D7nH?p=10

3. 进程通信

进程是分配系统资源的基本单位(包括内存地址空间),因此各进程拥有独立的内存地址空间。为了保证安全,一个进程不能访问另一个进程的地址空间,因此操作系统提供了如下进程通信方法:

  1. 共享存储

    为了传输大量数据,在存储器中划出一块共享存储区,多个进程可以通过对共享存储区进行读写来实现通信。

    1. 基于数据结构的共享
    2. 基于存储区的共享
  2. 消息传递

    进程间的数据交换以Message为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。消息传递可以分为以下两类

    • 直接通信:消息直接挂到接收进程的消息缓冲队列上
    • 间接通信:消息先发送到中间实体(信箱),接收进程从中获取消息。
  3. 管道通信

    管道是指用于连接读写进程的一个共享文件,其实就是在内存中开辟的一个大小固定的缓冲区。

    注意:

    • 管道只能采用半双工通信,某一时间段内只能实现单向传输,如果要实现双向同时通信,则需要设置两个短道
    • 各进程要互斥的访问管道
    • 数据以字符流的形式写入管道,当管道写满时,写进程的write系统调用将被阻塞,当读进程将数据全部取走后,读进程的read系统调用将被阻塞
    • 如果没写满,就不允许读,如果未读完,则不允许写
4. 线程的定义

线程是一个基本的CPU执行单元,也是程序执行流的最小单位,而进程只是资源分配的基本单位。引入线程后,不仅进程之间可以并发,而且进程内各线程也可以并发,从而进一步提升了系统的并发度,使得一个进程那也可以并发处理各种任务。

image-20220215144846163

线程分为用户级线程和内核级线程,只有内核级线程才是处理机分配的单位

5. 多线程模型
  1. 多对一模型:多个用户线程映射到一个内核级线程,每个用户线程只对应一个内核级线程

    • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。
    • 缺点:当一个用户级线程被阻塞之后,整个进程都会被阻塞,并发度不高,多个线程不可以在多核处理级上执行。
  2. 一对一模型

    • 优点:并发能力强
    • 缺点:一个用户进程会占用多个内核级线程,线程的切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
  3. 多对多模型

    克服了多对一模型并发度不高的缺点,又客服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

2.2 处理机的调度

1. 调度的三个层次
  1. 高级调度(作业调度)

    由于内存空间有限,有时无法将用户提及的作业全部放入内存,因此就需要确定某种规则来决定将作业掉入内存的顺序。

    按一定的规则从外存上处于后备队列的作业中挑选一个或多个作业,为其分配内存等必要资源,并建立PCB,让他们获得竞争处理机的权利。

    高级调度是辅存与内存之间的调度。每个作业只掉入一次,调出一次。作业掉入时会建立相应的PCB,作业调出时才撤销PCB。

    进程从创建态就绪态

  2. 中级调度(内存调度)

    引入虚拟存储技术之后,可以将暂时不能运行的进程调至外存等待(挂起状态,进程调出内存,PCB则会常驻内存)。

    可以提高内存利用率和系统吞吐量。

    进程从挂起态就绪态

    image-20220227153829257

  3. 低级调度(进程调度)

    按照某种策略从就绪队列中选取一个进程,将处理机分配给他。进程调度是操作系统中最基本的一种调度。

    进程从就绪态运行态

2. 调度算法的评价指标
  1. CPU利用率

  2. 系统吞吐量:单位时间内完成的作业数

  3. 周转时间:作业从提交到完成所需要的时间

    带权周转时间=周转时间/实际运行时间

  4. 等待时间:作业处于等待处理机的状态时间之和

  5. 响应时间:用户从提出请求到首次产生相应所需要的时间

3. 调度算法
  1. 先来先服务(FCFS)

    • 非抢占式算法

    • 优点:公平,算法实现简单

    • 缺点:对长作业有利,短作业不利

    • 不会导致饥饿

  2. 短作业优先(SJF)

    • SJF非抢占,SRTN(最短剩余时间优先算法)为抢占式
    • 优点:最短平均等待时间最短平均周转时间
    • 缺点:对短作业有利,对长作业不利
    • 可能导致饥饿现象
  3. 高响应比优先(HRRN)

    • 响 应 比 = 等 待 时 间 + 服 务 时 间 服 务 时 间 响应比=\frac{等待时间+服务时间}{服务时间} =+
    • 非抢占式
    • 综合考虑了等待时间和运行时间,等待时间相同时,服务时间短的作业优先(SJF的优点);服务时间相同时,等待时间长的作业优先(FCFS的优点)
    • 不会导致饥饿
  4. 时间片轮转算法(RR)

    • 抢占式
    • 如果时间片过大,则RR退化为FCFS,会增大进程的响应时间;如果时间片过小,则进程切换频繁,增大系统开销
    • 优点:公平,响应快,适用于分时操作系统
    • 缺点:高频率的进程切换会带来一定的开销,并且不会区分任务的紧急程度
    • 不会导致饥饿
  5. 优先级调度算法

    • 优先级分为静态优先级(进程创建时确定优先级)和动态优先级(进程运行时动态调整优先级)
    • 优点:用优先级区分紧急程度,适用于实时操作系统,可以灵活的调整对各种作业/进程的偏好程度。
    • 会导致饥饿
  6. 多级反馈队列调度算法

    • 抢占式算法
    • 优点:对各类型进程相对公平(FCFS),每个新到达的进程可以很快就得到响应(RR),短进程只用较少时间就可以完成(SJF),可以灵活的调整对各类进程的偏好程度,
    • 会导致饥饿

2.3 进程同步与互斥(待补充)

进程异步性:各并发执行的进程以各自独立的,不可预知的速度向前推进。

进程同步:进程之间的工作需要遵循一定的先后顺序,进程同步可以用来解决并发性所带来的异步性

进程互斥:对临界资源的访问需要互斥的进行。

一个时间段内只允许一个进程使用的资源称为临界资源

为了实现对临界资源的互斥访问,需要遵循以下原则:

  1. 空闲让进
  2. 忙则等待
  3. 有限等待
  4. 让权等待
1. 进程互斥的软件实现方法(待补充)
  1. 单标志法
  2. 双标志先检查法
  3. 双标志后检查法
  4. Peterson算法
2. 进程互斥的硬件实现方法(待补充)
  1. 中断屏蔽
  2. TestAndSet
  3. Swap
3. 信号量(待补充)
4. 生产者-消费者问题(待补充)
5. 读者-写者问题(待补充)
6. 哲学家进餐问题(待补充)
7. 吃苹果???(待补充)
8. 管程(待补充)

2.4 死锁

1. 死锁的概念

死锁:在并发环境下,各进程因竞争资源而造成的一种互相等待对方的资源,导致各进程都阻塞,无法向前推进的现象。

饥饿:由于长期得不到想要的资源,导致进程无法向前推进的现象。

死锁产生的必要条件

  • **互斥条件:**对互斥资源的抢夺
  • **不可剥夺条件:**进程所获的的资源在未用完之前,不能由其他进程强行夺走,只能主动释放
  • **请求和保持条件:**进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源被其他进程占有
  • **循环等待:**存在进程资源的循环等待链(循环等待是死锁的必要不充分条件)
2. 死锁的处理策略
  1. **预防死锁:**破坏死锁产生的四个必要条件中的一个或多个。

    • 破坏互斥条件:将只能互斥适用的资源改成共享适用(SPOOLing技术),这种方法的缺点是:并不是所有的资源都可以改造成可共享使用的资源,可行性不高
    • 破坏不可剥夺条件
      image-20220228151326178
    • 破坏请求和保持条件:采用静态分配法,即进程在运行前一次申请完所有内存。但缺点也很明显:有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费,资源利用率极低。并且,该策略也有可能导致某些进程饥饿
    • 破坏循环等待条件:采用顺序资源分配法。
  2. 避免死锁:

    安全序列:如果系统按照某种序列分配资源可以使每个进程都能顺利完成,那么这种序列就是安全序列,系统就是安全状态

    如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,则有可能发成死锁,因此可以在资源为分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求(银行家算法)。

  3. 死锁的检测(资源分配图)和解除(资源剥夺法,撤销进程法,进程回退法)

第三章 内存

3.1 内存的基本概念(待补充)

1. 操作系统对内存的管理
  1. 内存空间的分配与回收
    • 连续分配管理方式
    • 非连续分配管理方式
  2. 从逻辑上对内存空间进行扩充(虚拟)
  3. 提供地址转换功能,负责程序的逻辑地址与物理地址的转换(重定位)
  4. 内存保护
    • 设置上下限寄存器,存放进程的上下限地址(物理地址)
    • 设置重定位寄存器(基地址寄存器)界地址寄存器(限长寄存器)进行越界检查。重定位寄存器中存放进程的起始物理地址,界地址寄存器中存放的是进程的最大逻辑地址
2. 覆盖于交换(待补充)
  1. 覆盖

  2. 交换

    内存空间紧张时,系统将内存中某些进程暂时换出内存,把外存中某些已经具备运行条件的进程换入内存。(即中级调度)

3. 连续分配管理方式
3.1 单一连续分配

内存被分为系统区和用户区,系统区位于内存的低地址部分,用于存放操作系统相关的数据;用户区用于存放用户进程相关的数据。内存中只能有一道用户程序,用户程序占整个用户空间。

优点:无外部碎片

**缺点:**只能用于单用户,单任务的操作系统中;有内部碎片;存储器利用率低。

3.2 固定分区分配

将整个用户区划分若干个固定大小的分区,每个分区只装入一道作业。分为分区大小相等(缺乏灵活性,造成内存空间的浪费)和分区大小不相等(增加了灵活性,可以满足不同大小进程的要求)两种方式。

优点:实现简单,无外部碎片

缺点:会产生内部碎片,内存利用率低

3.3 动态分区分配
  1. 动态分区分配中的数据结构:

    空闲分区表,空闲分区链

  2. 分区的分配与回收

    考虑四种情况:回收区之后,之前,前后有相邻的空闲分区,回收区前后都没有相邻分区。若有相邻的空闲分区,则要合并成更大的分区。

  3. 动态分区分配

    动态分区分配没有内部碎片,但是有外部碎片。如果内存中空闲空间的总和本来可以满足某些进程的要求,但是由于碎片内存无法满足进程的需求,因此可以通过==紧凑==技术来解决外部碎片对内存空间的浪费。

  4. 分区分配算法

    • 首次适应算法(First Fit)

      优点:算法开销小,回收分区后一半不需要对空闲分区队列重新排列。

    • 下次(邻近)适应算法(Next Fit)

      优点:不用每次都从低地址的小分区开始检索,减少查找空闲分区的开销

      缺点:会导致缺乏大的空闲分区

    • 最佳适应算法(Best Fit)

      优点:会有更多的大分区被保留,更能满足大进程的需求

      缺点:会产生许多小的,难以利用的碎片。

    • 最差适应算法(Worst Fit)

      优点:可以减少难以利用的碎片

      缺点:大分区容易被用完,不利于大进程。

4. 非连续分配管理方式

支持多道程序的两种连续分配均有其缺点

  • 固定分区分配:缺乏灵活性,会产生大量的内部碎片,内存的利用率很低
  • 动态分区分配:会产生很多外部碎片,虽然可以利用紧凑技术来处理,但是紧凑的时间代价更高
4.1 分页存储

将内存空间分为一个个大小相等的分区,每个分区是一个页框。分页存储中,逻辑地址到物理地址的转化分为以下四步:

  1. 计算出逻辑地址对应的页号
  2. 找到该页在内存中的起始地址(每个进程有一张页表,记录页面和实际存放的内存块之间的对应关系)
  3. 算出逻辑地址的页内偏移量
  4. 物理地址=页面起始地址+页内偏移地址

局部性原理

  1. 时间局部性:如果执行了某条指令或访问了某个数据变量,那么不久之后很可能再次访问(因为程序中存在大量循环)
  2. 空间局部性:如果访问了某个存储单元,那么不久之后也很可能访问其附近的存储单元(因为很多数据在内存中是连续存放的)

快表(TLB)

快表是一种访问速度远高于内存的高速缓冲存储器,用来存放当前访问的若干页表项。

两级页表

单级页表存在以下问题:

  1. 页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
  2. 没必要让整个页表常驻内存,因为进程在一段时间内只可能访问某些特定页面。

两级页表就是在页表的基础上建立页目录表。

4.2 分段存储

进程按照程序自身的逻辑关系划分为若干段,每段从0开始编址。内存分配时,以段为单位进行分配,每个段在内存中占据连续的空间。

分段系统的逻辑地址结构由段号段内偏移量组成的。

image-20220302165208770

4.3 段页存储(待补充)

一个进程对应一个段表,每个段表项对应一个页表。

3.2 虚拟内存

1. 虚拟内存基本概念

传统存储管理方式包括连续分配非连续分配,作业必须一次性全部装入内存后才能开始运行。这种方式有以下缺点:

  • 作业很大时,不能全部装入内存
  • 大量作业要求运行时,内存无法容纳所有作业,因此只有少量作业运行,导致多道程序并发度下降。

并且一旦作业被装入内存,就会一直驻留在内存中,直到作业运行结束,这就导致了内存中驻留了大量的用不到的数据。

基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存。当所访问的信息不再内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存。在操作系统的管理下,在用户看来似乎有一个比实际内存大的多的内存,这就是虚拟内存(从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量)。

虚拟内存的最大容量由CPU的寻址范围确定,实际容量为 min(内外存容量之和,CPU寻址范围)

虚拟内存技术,允许一个作业多次掉入内存。如果采用连续分配方式,不方便实现。因此虚拟内存的实现建立在分连续分配的内存管理方式的基础上

2. 请求分页管理方式(待补充)

在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存。若内存空间不够,由操作系统将内存中暂时用不到的信息换出到外存。

页表机制

image-20220303145007352

image-20220303145151634

image-20220303145338127

3. 页面置换算法

请求分页存储管理中,若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存,这是需要用到页面置换算法决定应该换出那个页面。

3.1 最佳置换算法(OPT)

每次选择淘汰的页面是未来最长时间内不再被访问的页面

3.2 先进先出置换算法(FIFO)

每次选择淘汰的页面是最早进入内存的页面

只有FIFO算法会产生Belady异常(当为进程分配的物理块数增大时,缺页次数不减反增的现象)。由于该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最先被访问,因此,算法性能差

3.3 最近最久未使用置换算法(LRU)

每次淘汰的页面是最近最久未使用的页面。

3.4 时钟置换算法(CLOCK)
  • OPT:性能最好,但无法实现
  • FIFO:实现简单,但算法性能差(Belady异常)
  • LRU:性能好,是最接近OPT算法性能的,但实现起来需要专门的硬件支持,算法开销大。

CLOCK算法又叫最近未用算法(NRU)

image-20220303150956706

image-20220303151507848

4. 页面分配策略(待补充)

驻留集,工作集

image-20220303153353789

抖动:刚刚换出的页面马上就要换入内存,刚刚换入的页面马上就要换出外存,这种频繁的页面调度行为称为抖动。产生抖动的主要原因是进程频繁访问的页面数高于可用的物理块数(分配给进程的物理块不够)

参考文献

王道计算机考研 操作系统
《王道考研操作系统》
《天勤操作系统》

  • 4
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值