操作系统--复习知识点整理(散装自用)

 操作系统--复习知识点整理(散装自用)

声明:本博客为自己为复习操作系统整理的一些知识点(又一次错过了考试重点),引用了多篇博客内容(原文见本人os收藏夹😊)。仅作为学习记录,无意侵权~

操作系统

操作系统是用于实现计算机硬件与软件资源控制与管理,对各个进程实现合理调度 便于用户使用的程序的集合。

主要功能:处理机管理 存储器管理 设备管理 文件管理等等。

操作系统四个基本特征:并发、共享、虚拟、异步。

OS作为用户与计算机硬件系统之间的接口,操作系统提供给程序员的接口是系统调用。

系统调用(system call): 指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态运行。如设备 IO 操作或者进程间通信。

通用操作系统的调度算法的主要目标是低延迟,高吞吐量,公平,负载均衡。

在操作系统中,不可中断执行的操作称为原语。

管道是操作系统的进程间通信手段。

通道(I/0处理器)用于实现CPU和外设之间的信息传输。

按设备数据传输的单位是数据块还是字节,设备分为块设备和字符设备。

地址映射:将虚地址转换成实地址。

 

同步与异步的概念:

一组进程,为协调其推进速度,在某些关键点处需要相互等待与相互唤醒,进程之间这种相互制约的关系称为进程同步,所有的进程都运行完,才返回给用户,可能造成“卡顿”现象。进程之间相互影响、相互制约。

当这些任务异步执行,它们之间没有制约关系,当一个进程正在运行时其他进程不需要等待,可以随时响应用户操作,随机运行。

 

引入缓冲的主要原因是什么?

缓和CPU与I/0设备之间速度不匹配的矛盾;减少对CPU的中断频率;放宽对中断响应时间的限制;解决数据力度不匹配的问题:提高CPU和I/0设备之间的并行性。

信号量

信号量 : 信号量的值与相应资源的使用情况有关。

当它的值大于0时,表示当前可用资源的数量;

当它的值小于0时,其绝对值表示等待使用该资源的进程个数。

 

pv操作又称wait,signal原语。主要是操作进程中对进程控制的信息量的加减控制。

wait用法:

wait(num),num是目标参数,wait的作用是使其(信息量)减一。

如果信息量>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。

signal用法:

signal(num),num是目标参数,signal的作用是使其(信息量)加一。

如果信息量>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

 

M个进程共享一个临界资源,信号量值的变化范围是【1-m,1】。

进程与线程

进程的互斥:是指当有若干个进程都要使用某一共享资源时,任何时刻最多只允许一个进程去使用该资源,其他要使用它的进程必须等待,直到该资源的占用着释放了该资源。

进程的同步:是指在并发进程之间存在这一种制约关系,一个进程依赖另一个进程的消息,当一个进程没有得到另一个进程的消息时应等待,直到消息到达才被唤醒。

进程(Process):程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。若进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或异步的方式独立运行。

 

进程和程序的一个本质区别:进程为动态的,程序为静态的。

 

进程表(process table):进程表是操作系统维护的数据结构,该表中的每个条目(通常称为上下文块)均包含有关进程的信息,例如进程名称和状态,优先级,寄存器以及它可能正在等待的信号灯。

 

进程三基态:就绪 执行 阻塞(等待)

 

如果系统中有n个进程,则在CPU的就绪队列中进程的个数最多为 n-1。

 

每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。

实时系统与分时系统

分时系统

两个关键问题:及时响应、及时处理

交互性 多终端多用户 共享主机 用户能与自己的作业进行交互。

 

实时系统

能及时响应外部事件的请求,在规定的时间内完成对该事件的处理。

周期性实时系统 非周期性实时系统

硬实时系统 软实时系统

PBC

PCB是进程组成中最关键的部分。每个进程有唯一的进程控制块;操作系统根据PCB对进程实施控制和管理,进程的动态、并发等特征是利用PCB表现出来的;PCB是进程存在的唯一标志。

PCB中有表明进程状态的信息:进程的状态是运行态、就绪态还是阻塞态,利用状态信息来描述进程的动态性质。

进程实体是由PCB、 程序、数据集合这三部分组成。

驱动程序

驱动程序(device driver):设备驱动程序,简称驱动程序(driver),是一个允许高级别电脑软件与硬件交互的程序,这种程序创建了一个硬件与硬件,或硬件与软件沟通的接口,经由主板上的总线或其它沟通子系统与硬件形成连接的机制,这样使得硬件设备上的数据交换成为可能。

spooling

虚拟设备采用的核心技术是SPOOLing技术。

SPOOling技术便可将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备(生活中最常见的就是多台电脑共享同一个打印机),是操作系统中釆 用的一项将独占设备改造成共享设备的技术。

特点:

  1. 提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾;
  2. 将独占设备改造为共享设备;
  3. 实现了虚拟设备功能,多个进程同时使用一独享设备。

将计算所需要的程序和数据从输入设备预输入到输入井,对于输出结果,从输出井

独占设备是让一个应用程序在整个运行期间独占使用的设备。

linux

linux文件分为 普通文件 特殊文件 目录文件。

存放配置文件和子目录的目录是/etc

存放基本命令的目录是/bin

缺省的文件系统ext

外设文件/dev

死锁

死锁的四个必要条件是互斥、不剥夺、环路等待、请求与保持。

 

资源的按序分配策略能防止死锁是因为:

资源按序分配策略把系统中所有资源类给一个不同的编号,系统中的任何一个进程申请两个以上的资源时,必须先申请编号小的再申请编号大的...

这样破坏了死锁的必要条件—循环等待,就防止了死锁的发生。

 

系统中有m个进程的,若出现死锁时死锁进程的个数为k,则 2≤k≤m。

 

不让死锁发生的策略可以分为静态和动态两种,死锁避免(银行家算法)属于动态策略。

快表TLB

  • 快表是一个高速、具有并行查询能力的联想存储器,用于存放正运行进程当前页号和块号,或者段号和段起始地址。
  • 加入快表后,在地址转换时,首先在快表中查找,若找到就直接进行地址转换;
  • 未找到,则在主存页表继续查找,并把查到的页号和块号放入联想存储器中。
  • 快表的命中率很高,有效地提高了地址转换的速度。

多核CPU

多核是指一个CPU有多个核心处理器,处理器之间通过CPU内部总线进行通讯。而多CPU是指简单的多个CPU工作在同一个系统上,多个CPU之间的通讯是通过主板上的总线进行的。从以上原理可知,N个核的CPU,要比N个CPU在一起的工作效率要高(单核性能一致的情况下)。

 

CPU有两个状态,分别是管态和目态。当CPU处理系统程序的时候,CPU会转为管态,CPU在管态下可以执行指令系统的全集。

 

从目态转换为管态的唯一途径是中断。

 

管态又称系统态,核心态或特权状态;目态又称为用户态或常态。

磁盘与内存

内存又叫主存,与cpu的寄存器链接,用于将数据以及指令输入到寄存器中;同时也可以接受寄存器的输出。本质是作为磁盘与寄存器的中间件,起到缓冲作用。断电后会丢失所有数据。

内存和磁盘的关系:由于磁盘的读写速度与cpu相差太大,如果cpu直接从磁盘中读取数据,会造成cpu计算能力极大的浪费。为了解决这个问题,在磁盘与cpu之间加一个内存,将磁盘存储的程序以及数据线读入内存中,cpu直接与内存打交道。此外,由于内存的空间比磁盘小很多,会出现内存不够用的情况,此时,会将一部分磁盘当做内存来使用,也就是虚拟内存。

 

磁盘访问的时间分为寻道时间、旋转延迟时间、传输时间。

磁头在移动臂的带动下移动到指定柱面的时间:寻道时间。

指定扇区旋转到磁头位置的时间称旋转延迟时间。

总柱面数为扫过的范围,平均寻道长度为 总柱面数/目的柱面数

 

注意页和块的对象的不同:对程序进行分页存储,对内存进行分块存储。

 

在虚拟存储器中,需要动态重定位机构的支持。

紧凑技术把分散的主存空闲区集中起来。

RAM((Random Access Memory):随机存取存储器,也叫主存,是与 CPU 直接交换数据的内部存储器。

MMU (Memory Management Unit):内存管理单元,有时称作分页内存管理单元。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制等。

文件权限

字符表示文件权限Rex r=4 w=2 x=1

r 读取权限,数字代号为“4”;

w 写入权限,数字代号为“2”;

x 执行或切换权限,数字代号为“1”;

- 不具任何权限,数字代号为“0”;

🌰:644 rw-r—r—

inode

一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

信息包含:

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个inode
  • 文件数据block的位置

 

用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。

 

但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

除了硬链接以外,还有一种特殊情况:

件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

 

符号连接与硬连接区别:

符号连接可以建立文件和目录的连接,可以跨文件系统、磁盘分区

硬连接建立对文件的连接,不可以跨文件系统

文件系统

按性质和用途分类:系统文件、库文件、用户文件。

  • 按用户观点分类( UNIX系统文件分类):普通文件 目录文件 特殊文件
  • 按文件的逻辑结构分为:流式文件(无结构操作系统文件)、记录式文件(有结构的数据库文件)。
  • 按文件的物理结构分类: 顺序文件(也叫串联文件,连续文件)、链接文件、索引文件

物理结构即文件在外存上的实际的组织形式。

 

文件存取方式:顺序存取 随机存取 索引存取

①顺序文件:是由一系列记录按某种顺序排列所形成的文件。 

②索引文件:当记录为可变长度时,通常为之建立一张索引表。  

③索引顺序文件:它为文件建立一张索引表,为每一组记录中的第一个记录设置一个表项。 

 

  磁带是顺序存取 磁盘是随机存取。

动态分区分配算法

1.首次适应算法

  • 算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
  • 如何实现:空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

2.最优适应算法

  • 算法思想:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。
  • 如何实现:空闲分区按容量递增次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
  • 缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片。

3.最坏适应算法

  • 算法思想:为了解决最佳适应算法的问题——即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
  • 如何实现:空闲分区按容量递减次序链接。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。
  • 缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。

4.邻近适应算法

  • 算法思想:首次适应算法每次都从链头开始查找的。这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次都从上次查找结束的位置开始检索,就能解决上述问题。
  • 如何实现:空闲分区以地址递增的顺序排列(可排成一个循环链表)。每次分配内存时从上次查找结束的位置开始查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。

shell

shell本质上是命令行解释程序,提供用户与操作系统之间基于命令行的交互界面。

用户输入命令,shell对它们做出解释,送往操作系统去执行。

Belay与抖动

Belay指在FIFO中随着分配给进程的物理块数的增多,缺页率反而增大的现象。

在请求分页存储管理中,可能出现这种情况,即对刚被替换出去的页,立即又要被访问。需要将它调入,因无空闲内存又要替换另一页,而后者又是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重导致系统瘫痪,这种现象称为抖动现象

抖动现象发生在FIFO页面置换算法中,FIFO并不是一个好的置换算法。

局部性原理

局部性原理

  • 时间局部性

如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。

所以时间局部性是通过将进来使用的指令和数据保存到高速缓存存储器中。

  • 空间局部性

一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。

页面调度算法

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

非抢占式调度,选择就绪队列中等待最长时间的进程。

评价:简单;系统开销小;对长进程有优势;更利于多CPU处理的进程。

2.RR 时间片轮转法(Round-Robin)

这是对FIFO算法的改进,目的是改善短程序(运行时间短)的响应时间,其方法是周期性地进行进程切换。这个算法的关键点在于时间片的选择,时间片过大,那么轮选就越接近于FIFO;如果太小,进程切换的开销大于执行程序的开销,从而降低系统效率,因此选择合适的时间片就非常重要。选择时间片的两个需要考虑的因素:一次进程切换所使用的系统消耗,以及我们能接受的整个系统消耗、系统运行的进程数。

时间片轮选法看上去十分公平,并且响应时间非常好,然而时间片轮转并不能保证系统的响应时间比FIFO短,这很大程度上取决于时间片大小的选择,以及这个大小,与进程运行时间的相互关系。

3.最短作业优先(SJF)算法

  这种算法的核心是所有的程序都有一个优先级,短任务的优先级比长任务的高,而OS总是安排优先级高的进程运行。

 STCF又分为非抢占式和抢占式两类。非抢占式就是让已经运行的程序执行到结束或者阻塞,然后在所有的就绪进程中选择执行时间最短的来执行;而抢占式就不是这样,在每一个新的进程时,就对所有进程(包括正在CPU上执行的进程)进行检查,谁的执行时间短,就运行谁。

 STCF总是能提供最优的响应时间,然而它也有缺点:第一,可能造成长任务的程序无法得到CPU时间而饥饿,因为OS总是优先执行短任务;其次,关键问题在于我们怎么知道程序的运行时间,通常有两个方法,使用启发式方法估算(如根据程序大小估算),或者将程序执行一遍后记录其所用的CPU时间,在以后的执行过程中就可以根据这个测量数据来进行STFC调度。

4.优先级调度算法

非抢占式/抢占式

每个进程有一个优先级,优先级由优先数来表示。

优先级不同时调度优先权最高的进程,优先级相同时按照FCFS顺序调度。

  STCF遇到的问题是长任务的程序可能饥饿,那么优先级调度算法可以通过给长任务的进程更高的优先级来解决这个问题;优先级调度遇到的问题可能是短任务的进程饥饿,这个可以通过动态调整优先级来解决。实际上动态调整优先级(权值)+时间片轮转的策略正是Linux的进程调度策略之一的SCHED_OTHER分时调度策略,它的调度过程如下。

(1)创建任务指定采用分时调度策略,并指定优先级nice值(-20~19)。

(2)将根据每个任务的nice 值确定在CPU上的执行时间(counter)。

(3)如果没有等待资源,则将该任务加到就绪队列中。

(4)调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算结果,选择计算结果最大的一个去运行。当这个时间片用完后或者主动放弃CPU时,该任务将被放在就绪队列末尾或等待队列中。

(5)此时调度程序重复上面计算过程,转到第(4)步。

(6)当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第(2)步。

 

计算公式:

周转时间=作业完成时刻—作业到达时刻

带权周转时间=周转时间/服务时间

平均周转时间=作业周转总时间/作业个数

平均带权周转时间=带权周转总时间/作业个数

响应比=(等待时间+要求服务时间)/要求服务时间

磁盘调度算法

1.FCFS

优点:这个策略是公平的,每个请求都会得到处理。

缺点:该算法本身出发点未考虑寻道优化,性能接近于随机调度,因此性能很差。

2.SSTF

选择寻找时间最短的访问者调度。

策略:选择使磁头臂从当前位置开始移动距离最短的IO访问者,即最短寻道时间的请求者。

问题:每次选择距离最短者同时,忽略了可能由于不断的有新的IO请求进程加入队列中,且与当前磁头位置较近,会使得原请求队列中的距离远的访问者总得不到调度,产生"饥饿现象"。

3.SCAN电梯调度算法

SCAN电梯调度算法,SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性。

4.CSCAN对电梯调度算法的优化

为了减少这种延迟,规定磁头单向读 为了减少这种延迟,规定磁头单向读/写运动 写运动 (如只能由内向外),完成读写后 ,立即返到最小/大磁道号的位置 (构成循环 ),再进行扫描。即 CSCAN算法。

物理地址与逻辑地址

逻辑地址:由两部分组成,即页号 + 页内地址

  • 页号 = 逻辑地址/页长(商)
  • 页内地址 = 逻辑地址%页长(余数)

物理地址

物理地址 = 块号 * 块长 + 块内地址 +(用户基址)

物理地址 = 块号 * 页长 + 页内地址 +(用户基址)

一些🌰:

1.已知某文件采用串联结构,它由10个逻辑记录组成,每个逻辑记录刚好存放于一个磁盘块上,都为1024字节,并依次存放在10、61、32、75、87、98、46、37、33和11号磁盘块上。若要存取文件相对于文件头偏移7654字节处的信息,则要访问的磁盘块块号为_______,块内的偏移量是_______

37  486

7654-7*1024=486

 

2.考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问:(共3分)

逻辑地址需要多少位表示?绝对地址需要多少位表示?

逻辑地址

1024=2^10 8=2^3 10+3=13

绝对地址

32=2^5

10+5=15

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chococolate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值