操作系统笔记

发布时间 2023-04-17 01:06:35作者: duuuuu17

本篇主要以《操作系统》相关黑皮书阅读笔记做主要内容,现在是看书的第一遍:

导论

操作系统的概念

本章用于介绍本书的内容大致,其中若有概念不清楚,需要自己去网上搜集资料弄明白。

信息和上下文

不管什么文件终究被翻译为二进制文件供计算机执行。

系统接口(也就是有时候常说的C标准库)(或者说是"系统调用")

编译系统

分四个阶段:预处理阶段 —— 编译阶段 ——汇编阶段 —— 链接阶段

预处理阶段

由预处理器主导,将代码中那些引用类型的代码替换为目标代码,在C语言中主要是将宏处理(比如将宏代码,用起目标文件或代码块插入源代码中的所需位置,完成后,会生成后缀名为“.i”的相比于源文件是一个扩展的文本文件

编译阶段

由编译器主导,将上一阶段的“.i”文本文件翻译成汇编程序(也是文本文件):后缀为".s"

汇编阶段

将上一阶段的汇编程序,翻译成对应的机器语言指令(二进制文件“.o”),并打包成“可重定位目标程序”格式,传递给下一个阶段。

链接阶段

将上一阶段传递的二进制文件,且将它所需的标准库的函数以及其他,所对应的提前预编译好的二进制文件,通过链接器进行合并,生成可执行文件“.exe"。

系统硬件组成

总线

传输定长的字节块(信息字节)并负责各部件之间的信息的传递。且传输信息的单位被称为

被设计为传输信息的定长字节块。

字中的二进制位数被称为字长。

通常来说就是处理器一次性能处理数据的长度,例如:64位计算机指CPU一次性能处理64位的数据,其机器字长为64位(二进制数),对应于8个字节。

I/O设备

系统与外部世界的联系通道。每个I/O设备都通过控制器或适配器与I/O总线相连。

控制器

用于控制和管理外部设备。

是I/O设备本身,或者是主板上的芯片组

作用

与处理器或主板的其他部分通过总线进行通信。设备控制器负责将处理器发出的指令翻译成外部设备能够理解的命令,并且在必要时将外部设备的数据转换为适合处理器使用的格式。此外,设备控制器还负责管理外部设备的状态、控制数据流以及处理各种错误和异常情况。

适配器

是插在主板插槽上的卡。

作用

提供一个系统与外部设备之间通信的接口

主存

用于临时存放程序和程序需要处理的数据。(内存通常指的是DRAM,CPU寻址的基本单位为字,最小单位为字节)

逻辑上

存储器是一个线性的字节数组,每个字节都由唯一的地址。

实际上

我们使用c语言时,查看一个变量所占内存空间。

其解释为:程序所组成的机器指令其对应的不同数量的字节,来构建在存储器上地址。

处理器

其核心是一个大小为一个字的存储设备(或寄存器)称为PC(程序计数器)。当然,还有ALU(算术/逻辑单元)。指令的执行,围绕以下设备:主存、寄存器文件、ALU。

每个寄存器有唯一的名字,通过ALU计算得到新的数据和地址值。

实际上CPU就是由许多的寄存器组成。

寄存器

由多个触发器或者锁存器组成的电路。N个触发器或者锁存器就可以组成一个N为的寄存器。保存N位的数据。

程序计数器(PC)

一块较小的内存空间,用于存贮下一条指令所在单元的地址

指令寄存器(IR)

存储当前正在执行指令

作用

有限存存贮容量的高速存贮部件。可用于暂存指令、数据和地址。

CPU操作
加载

从主存复制一个字节或字到寄存器,用于覆盖寄存器原来的内容。

存储

从寄存器中复制一个字节或字到主存的某个位置,用于覆盖主存对应位置的原来的内容。

操作

把两个寄存器的内容复制到ALU中,ALU并对其进行计算,其结果存放在一个寄存器中并覆盖原有内容。

跳转

从指令中抽取一个字,并将它复制到程序计数器中,用以覆盖PC中原有的值。

处理器的指令架构

处理器所支持的指令集合和指令的执行方式。它定义了处理器如何读取、解释和执行指令,以及支持哪些操作、数据类型和地址模式等。常见的指令架构有 x86、ARM、MIPS 等。不同的指令架构对应不同的硬件平台和操作系统,需要在编写程序时考虑指令集的兼容性和性能。

处理器的微体系结构

描述处理器的实际如何实现和内部结构。

微体系结构的设计对处理器的性能和功耗有着非常大的影响。一些关键的微体系结构特性,比如指令流水线、乱序执行、分支预测、多核处理等,对于处理器的性能和能耗都有着很大的影响。

image-20230415133442826

hello程序的执行

1.键盘上输入./hello

其信息通过I/O设备的输入经过I/O桥,到达于CPU内部的总线接口,传输给寄存器存,寄存器再存储到主存中

image-20230415132714631

2.回车,执行指令

指令解释器对我们输入的指令进行解释,并调用系统指令——加载hello的可执行文件于主存中。

image-20230415132802787

3.CPU处理可执行文件

当可执行文件被加载完成到主存后,CPU将对可执行文件的指令进行执行,并输出到默认的I/O设备中。

image-20230415133048551

cache(高速缓存器)

存放处理器常用指令或者信息,用于解决CPU与主存之间访问速度差异。

L1、L2高速缓存

是SRAM(静态随机访问存储器),L1被访问的速度最快。

存储器

有内存和外存所组成

内存就是主存、外存就是磁盘、固态硬盘等辅助存储器(适合数据存储、不适合频繁读写)。

存储器思想是层次结构:上一层的存储器为低一层存储器的高速缓存,即寄存器文件保存取自L1高速缓存存储器的字。

image-20230415133715168

操作系统

操作系统位于应用程序和底层资源的中间层。操作系统通过抽象的方式管理硬件

操作系统管理资源方式

通过文件的形式管理I/O设备:

管理I/O设备可以使用设备文件,设备文件是在文件系统中的一种特殊类型的文件,用于与I/O设备进行通信。操作系统通过标准的文件操作函数来进行I/O操作,使用设备驱动程序来控制硬件设备的访问。

在文件I/O中,设备驱动程序是实现文件与硬件设备之间转换的核心部分。设备驱动程序提供了操作系统和硬件设备之间的接口,将文件I/O操作转换为硬件I/O操作,并控制硬件设备的访问。每个设备都有自己的设备驱动程序,不同类型的设备有不同的设备驱动程序。

目的

将I/O设备与应用程序解耦,从而提高系统的灵活性和可维护性。此外,设备文件还可以被权限管理和访问控制所保护,从而增强了系统的安全性。

通过虚拟内存的形式管理主存和I/O设备:

操作系统通过虚拟内存技术可以将主存分成一系列大小相等的页(Page),将磁盘空间分成一系列大小相等的页框(Page Frame),并将它们之间进行映射。当进程需要访问主存中的某一页时,操作系统会将这一页从磁盘中加载到一个空闲的页框中,并建立页表中的映射关系。在进行内存访问时,操作系统会将逻辑地址转换为物理地址,这样进程就可以通过逻辑地址来访问物理内存了。

在访问I/O设备时,操作系统可以将I/O设备的地址空间映射到进程的虚拟地址空间中,这样进程就可以通过和访问主存一样的方式来访问I/O设备了。这种映射方式被称为内存映射I/O(Memory-Mapped I/O)。

通过进程来管理CPU、主存和I/O设备

操作系统通过进程来管理CPU、主存和I/O设备的方式通常称为进程管理。每个进程都是操作系统中的一个独立实体,拥有自己的虚拟地址空间、代码、数据和堆栈。进程管理的目标是为每个进程分配资源,确保进程能够执行,并在必要时提供资源的保护和共享。

在进程管理中,操作系统使用调度算法来决定哪个进程将获得CPU时间片。当一个进程需要访问主存或I/O设备时,它会向操作系统发送请求。操作系统通过相应的调用将请求传递给硬件设备,并在操作完成后将结果返回给进程。

操作系统使用虚拟内存管理机制来管理主存。虚拟内存允许操作系统将进程的虚拟地址空间映射到物理内存上,并根据需要将虚拟地址空间的部分换入或换出物理内存。这种方式使得每个进程都可以访问大于物理内存的地址空间,提高了系统的灵活性和效率。

通过虚拟机形式管理所有软硬件资源

操作系统通过虚拟机监控器(VMM)的形式来实现虚拟化技术,进而实现对所有软硬件资源的管理。VMM是一个在物理机器上运行的软件层,它允许在同一台物理机器上运行多个虚拟机。每个虚拟机拥有自己的操作系统和应用程序,它们之间相互独立,好像在不同的物理机器上运行一样。

在这种模式下,操作系统通过VMM来管理所有虚拟机的资源,包括CPU、主存和I/O设备。VMM会将物理机器的资源虚拟化为多个虚拟机可以使用的资源,并为每个虚拟机提供独立的虚拟环境,使它们可以独立运行,而不会相互影响。

通过虚拟机的形式,操作系统可以更好地管理和利用物理机器的资源,提高资源利用率和效率,同时也提高了系统的可靠性和安全性。

image-20230415214656574

操作系统的基本功能

1)防止硬件被失控的应用程序滥用

2)向应用程序提供简答一致的机制来控制低级硬件设备。

进程

对正在运行的程序的一个抽象。(或者说是一个程序的实例化)

并发运行:

一个进程的指令和另一个进程的指令交错执行。

上下文切换:

CPU交错执行进程的行为。
在现实中,操作系统把CPU控制权转给某个新进程是,就会进行上下文切换。

上下文:

进程运行所需要的状态信息。操作系统保持跟踪所有进程运行状态。

内核

管理进程的进行,它作为操作系统代码常驻主存的部分。是系统管理全部进程所用代码和数据结构的集合。

线程

作为进程的执行单元,比进程更容易共享资源。是程序代码或数据的一段连续片段。

特点

是现今重要的编程模型。

与进程的关系

由一个或多个线程构建成一个进程。

虚拟内存

以一个字来编码。

进程的虚拟地址空间,其模块从低向上为:

程序代码和数据

进程的代码都是同一固定地址开始,然后是存放全局变量。

代码和数据区有可执行目标文件的内容初始化。

动态地扩展和收缩。

共享库

存放共享的代码和数据的区域。

位于用户虚拟地址空间顶部,用于存放函数调用。

内核虚拟内存

只对内核开放的区域。

虚拟内存的基本思想:

将进程的虚拟内存的内容存放在磁盘上,然后主存作为磁盘的高速缓存。

image-20230415211104581

文件

字节序列

系统之间利用网络通信

通过网络,我们将单个电脑孤岛连接起来,从而达到更有用的功能(资源共享,数据通信。

远程登录执行指令:

image-20230415211954013

重要概念

并行和并发

并发:

指同一个时间内具有多个进程需要利用时间片进行交错执行。

并行:

指同一个时间内,有多个进程同时执行,(常用于多核处理器中)。

作用

利用并发使一个系统运行得更快。

线程级并发

构建在进程的基础之上,指多个线程同时执行,每个线程独立执行不同的任务,通过线程之间的协调和同步来实现多任务并发。

作用

在多核处理器上,线程级并发可以通过将线程映射到不同的处理器核心上来实现,从而进一步提高程序的执行效率。线程级并发也是并行计算的基础,通过并行计算可以加速很多计算密集型任务的执行。

问题

需要注意的是,线程级并发也带来了一些问题,如竞态条件、死锁、饥饿等,需要合理的线程调度和同步机制来避免这些问题的出现。

超线程技术:

通过在一个物理处理器内部虚拟出多个逻辑处理器,从而使得一个物理处理器可以同时运行多个线程,提高了处理器的并行度,提升了处理器的性能。

单核处理器系统:

同一个时间只能执行一个任务。

多核处理器系统:

同一个时间能够执行多个任务。

多核处理器结构

image-20230415213705543

指令级并发

使用,达到同时执行多条指令的属性。(标量:处理器一个周期执行一条指令)

技术举例

流水线技术

它可以将指令执行过程分为多个阶段,并且在每个时钟周期内执行一个阶段。超流水线通常包含取指、译码、执行、访存和写回等多个阶段。

超标量执行

它可以同时从指令流中选择多个指令并且并行执行这些指令。超标量执行通常使用多个指令调度单元(Instruction Dispatch Unit,IDU)来选择并行执行的指令,同时使用多个执行单元来执行这些指令。

动态执行

它可以根据程序的运行情况来选择和执行指令。动态执行通常使用分支预测器和数据相关性检测器来帮助选择和执行指令。

单指令、多数据并行(并行计算方法)

指一条指令可对多个数据执行相同的操作

信息的表示和处理

本章研究三种数字表示方式:无符号、补码、浮点数。

信息存储

字节

为最小的可寻址的内存单位。

地址

内存中的每一个字节都由唯一的数字标识。地址的集合称为虚拟地址空间。

程序对象

程序数据、指令和控制信息。

字数据大小

字长

指明指针数据的标称大小。其虚拟地址按一个字长编码(地址范围:$0 \sim 2^{w}-1$)。

32位字长机器、64位字长机器,都表示的是一个字长为:32位、64位。

一个字长为w位的机器,其程序最多可访问$2^w$个字节。CPU一次性可处理数据位数的大小