操作系统基础篇

一、概览

1.What&Why

  • 操作系统是管理计算机硬件和软件资源计算机程序
  • 管理配置内存、决定资源供需顺序、控制输入输出
  • 提供让用户和系统交互的操作界面

2.操作系统的基本功能

  1. 统一管理计算机资源(处理器、IO设备、存储器、文件)
  2. 实现了对计算机资源的抽象,用户无需面向硬件接口编程。
  3. 提供了用户与计算机之间的接口(图形界面、命令行、系统调用)。

3.操作系统相关概念

  1. 并发性:两个或多个事件可以在同一时间间隔发生(和并行区分)
    在这里插入图片描述
  2. 共享性:操作系统中的资源可供多个并发的程序共同使用
    共享形式:互斥共享(打印机)、同时访问(写入磁盘)
  3. 虚拟性:把一个物理实体转变为若干个逻辑实体
    虚拟技术有:时分复用技术、空分复用技术
  4. 异步性:进程不可预知的速度向前推进。内存中的每个进程何时执行,何时暂停,何时完成等,都是不可预知的。

二、进程管理

1.进程实体

(1)为什么需要进程

没有操作系统的时候,资源只属于当前运行的程序。引入OS、多道程序设计的概念后,进程就出现了。
进程的作用是:合理的隔离资源、运行环境、提升资源利用率。

  1. 进程是资源分配的基本单位
  2. 进程作为程序独立运行的载体保障程序正常执行。
  3. 进程的存在使得操作系统资源的利用率大幅提升
(2)进程的实体

进程(进程实体)由程序段、数据段和PCB三部分组成。

①PCB(进程控制块)

组成:

  • 标识符:唯一标识一个进程
  • 状态:表示状态,运行态、阻塞状态等
  • 程序计数器:执行下一条要执行指令的地址
  • 内存指针:程序代码、进程数据相关指针
  • 上下文数据:进程执行时处理5器存储的数据
  • IO状态信息:被进程IO操作所占用的文件列表
  • 记账信息:使用处理器时间、时钟数总和等

定义:

  • 用于描述和控制进程运行的通用数据结构
  • 作用是记录进程当前状态控制进程运行的全部信息;
  • PCB使得进程是能够独立运行的基本单位

PCB常驻内存,存放在系统专门开辟的PCB区域内。

②进程与线程

一个进程中可以有多个线程,线程是操作系统进行运行调度的最小单位。线程是进程中实际运行工作的单位。
在这里插入图片描述

2.五个状态

在这里插入图片描述

(1)就绪状态

当进程被分配到除CPU以外所有必要的资源后,就会进入就绪状态。只要再获得CPU的使用权,就可以立即运行。

就绪队列:一个系统中多个处于就绪状态的进程排成一个队列。
在这里插入图片描述

(2)执行状态

就绪状态的进程获得CPU后就进入执行状态

(3)阻塞状态

进程因某种原因从而放弃CPU的状态称为阻塞状态。(比如由于提出系统服务请求(如I/O操作),但因为某种原因未得到操作系统的立即响应)

阻塞的进程也会形成一个阻塞队列。

(4)创建状态

在这里插入图片描述
创建进程时拥有PCB但其他资源尚未就绪的状态。

(5)终止状态

在这里插入图片描述
进程结束由系统清理或归还PCB的状态。

3.进程同步

(1)进程不同步的问题

生产者消费者问题、哲学家进餐问题。
以上问题出现的根源是:进程彼此之间没有相互通信

(2)概念

竞争资源在多进程间进行使用次序的协调,使得并发执行的多个线程之间可以有效使用资源和相互合作。

(3)进程同步的原则
  1. 空闲让进:资源无占用,允许使用
  2. 忙则等待:资源有占用,请求进程等待
  3. 有限等待:保证有限等待时间能够使用资源
  4. 让权等待:等待时进程让出CPU
(4)进程同步的方法
  • 消息队列
  • 共享内存
  • 信号量
  • 管道
(5)线程同步的方法
  • 互斥量
  • 读写锁
  • 自旋锁
  • 条件变量

4.Linux的进程管理

(1)Linux进程类型
  • 前台进程:具有终端,可以和用户交互的进程·
  • 后台进程:没有占用终端
  • 守护进程:特殊的后台进程,比如:crond,httpd,sshd,mysqld
(2)进程的标记
进程ID

进程ID:是进程的唯一标记,表现为一个非负整数,最大值由系统确定。

fork()函数可创建进程,被创建的称为子进程,创建者称为父进程。
进程的父子关系可以通过pstree命令来查看。

特殊进程

  • ID为0:idel进程,是系统创建的第一个进程
  • ID为1:init进程,是0号进程的子进程,完成系统初始化,是所有用户进程的祖先进程
进程的状态标记

在这里插入图片描述

(3)操作进程相关命令
  • ps:列出进程。 -aux打印进程详细信息,-u查看指定用户进程,使用| grep查询指定进程。
  • top:查看系统中进程状态
  • kill:用于删除执行中的程序或工作,-9强制结束进程。

三、作业管理

1.进程调度

(1)概述

进程调度就是指计算机通过决策决定哪个就绪进程可以获得CPU使用权

(2)机制
  • 就绪队列的排队机制
  • 选择运行进程的委派机制
  • 新老进程的上下文切换机制:保存当前进程上下文信息,装入被委派执行进程的运行上下文。
(3)进程调度算法
  1. 先来先服务
  2. 短进程优先
  3. 高优先权优先
  4. 时间片轮转调度算法

2.死锁

(1)定义

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

(2)死锁的产生

产生死锁的四个必要条件:

  1. 互斥条件:一个资源每次只能被一个进程使用。
  2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  3. 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
(3)死锁的处理
预防死锁
  1. 破坏请求与保持条件:规定进程运行之前,一次性申请所有需要的资源
  2. 破坏不剥夺条件:当一个进程请求新的资源得不到满足时,要释放占有的资源
  3. 将可用资源线性排序,申请时必须按照需要递增申请。
银行家算法

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还

银行家算法具体实现,详见:银行家算法 -Hello_狂奔的蜗牛

四、内存管理

内存管理主要是为了解决三个问题:

  1. 确保计算机有足够的内存处理数据
  2. 确保程序可以从可用内存中获取一部分内存使用
  3. 确保程序可以归还使用后的内存以供其他程序使用。

1.内存分配与回收

内存分配
(1)单一连续分配

只能在单用户、单进程的操作系统中使用。
在这里插入图片描述

(2)固定分区分配

是支持多道程序设计的最简单存储分配方式。
内存空间被划分为若干个固定大小的区域,每个分区只给一个程序使用,互不干扰。

(3)动态分区分配

根据进程实际需要分配。

数据结构
  • 动态分区空闲表(数组)
  • 动态分区空闲链(双向链表)
算法
  • 首次适应算法(FF):从开始(低地址)顺序查找,直到找到能容纳的区域。
    【缺点:低地址内存产生大量碎片;每次都从头开始查找,开销大】
  • 循环适应算法:每次从上一次分配的内存开始查找。分配的更均匀。
    【缺点:缺少大块内存空闲区间,使得大作业无法分配内存】
  • 最佳适应算法:将空闲区链表按照容量大小排序,遍历空闲区链表找到最佳合适空闲区。
    【缺点:产生大量碎片】
  • 快速适应算法:有多个空闲区链表,每个空闲区链表存储一种容量的空闲区
内存回收

回收时可能会有以下四种情况:
在这里插入图片描述

  1. 将空闲区1的容量增大为新的空闲区即可。
  2. 将回收区与空闲区合并,新的空闲区使用回收区的地址
  3. 将空闲区1、2、回收区合并,新的空闲区使用空闲区1的地址
  4. 为回收区创建新的空闲节点,插入到相应的空闲区链表中。

2.段页式存储管理

页式存储管理
(1)页面划分

字块是相对物理设备的定义,页面则是相对逻辑空间的定义。

将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小相等的物理块。以页面为单位把进程空间装进物理内存中分散的物理块。

页面大小应该适中,过大难以分配,过小内存碎片过多。页面大小通常是512B~8K。

(2)页表

页表记录进程逻辑空间与物理空间的映射
在这里插入图片描述
现代计算机可支持非常大的寻址空间,所以会有很多表项,页面就会占用很大空间。因此诞生了多级页表
在这里插入图片描述
使用多级页表后,只需要将一级页表加载进内存即可,二级页表到磁盘中读取。

段式存储管理

页式存储管理的缺点:如果有一段连续的逻辑分布在多个页面中,将大大降低执行效率。

(1)划分

将进程逻辑空间划分成若干段(非等分)。段的长度由连续逻辑的长度决定

(2)段表

段表记录着段和物理地址的映射。
在这里插入图片描述

段式、页式对比
  • 相同点是都离散地管理了进程的逻辑空间
  • 页是物理单位,段是逻辑单位
  • 分页是为了合理利用空间,分段是满足用户需求
  • 页大小由硬件固定,段长度可动态变化
  • 页表信息是一维的,段表信息是二维的
段页式存储管理

结合了两者的优点。

(1)划分

先将逻辑空间按段式管理分成若干段,再把段内空间按页式管理等分成若干页。
在这里插入图片描述

(2)获取指令

在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据

显然,这使访问内存的次数增加了近两倍。为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。

3.虚拟内存

(1)概述

为什么使用?有些进程实际需要的内存很大,超过物理内存的容量。多道程序设计,使得每个进程可用物理内存更加稀缺。

虚拟内存:把程序使用内存划分,将部分暂时不使用的内存放置在辅存。

(2)程序的局部性原理

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中

由于这个原理,程序运行时无需全部装入内存,装载部分即可。如果访问页不在内存,则发出缺页中断,发起页面置换。从用户层面看,程序拥有很大空间,这便是虚拟内存。

(3)页面置换算法
  • 先进先出算法 FIFO
  • 最不经常使用算法 LFU
  • 最近最少使用算法 LRU

4.Linux的存储管理

(1)Buddy内存管理算法

Buddy内存管理算法基于计算机处理二进制的优势具有极高的效率。算法主要是为了解决内存外碎片的问题。

  • 页内碎片:已经被分配出去的内存空间大于请求所需的内存空间,不能被利用的内存空间就i是内部碎片。
  • 页外碎片:还没有分配出去,但是由于大小而无法分配给申请内存空间的新进程的内存空闲块。
算法内存分配原则
  • 向上取整为2的幂大小,比如:申请70k分配128k。
伙伴

满足以下三个条件的称为伙伴:

  • 两个块大小相同;
  • 两个块地址连续;
  • 两个块必须是同一个大块中分离出来的;
Buddy算法的分配原理

假如系统需要4(22)个页面大小的内存块,该算法就到free_area[2]中查找,如果链表中有空闲块,就直接从中摘下并分配出去。
如果没有,算法将顺着数组向上查找free_area[3],如果free_area[3]中有空闲块,则将其从链表中摘下,分成等大小的两部分,前四个页面作为一个块插入free_area[2],后4个页面分配出去。
free_area[3]中也没有,就再向上查找,如果free_area[4]中有,就将这16(2
222)个页面等分成两份,前一半挂如free_area[3]的链表头部,后一半的8个页等分成两等分,前一半挂free_area[2]的链表中,后一半分配出去。假如free_area[4]也没有,则重复上面的过程,知道到达free_area数组的最后,如果还没有则放弃分配。

释放时类似。

优缺点
  1. 优点是分配和释放内存迅速。
  2. 缺点是:一个小内存块可能会导致两边的大内存块无法合并;会造成页内碎片;涉及到链表操作开销较大。

五、 文件管理

1.文件的逻辑结构

(1)逻辑结构的文件类型

在这里插入图片描述

有结构文件

文件内容由定长记录可变长记录组成。

  • 定长记录存储文件格式、文件描述等结构化数据项。
  • 可变长记录存储文件具体内容
无结构文件

也称为流式文件,文件内容长度以字节为单位
比如exe、dll、so。

(2)顺序文件

顺序文件是指按顺序存放在存储介质中的文件。(磁带就只能存储顺序文件)

查询速度快,增删改慢。

(3)索引文件

可变长文件不适合使用顺序文件格式存储。索引文件是为了解决可变长文件存储而发明的一种文件格式。
需要一张索引表
在这里插入图片描述

2.辅存(磁盘)的存储空间分配

(1)辅存分配方式

在这里插入图片描述

连续分配

在这里插入图片描述
读取文件内容非常容易,速度快。对存储要求高,要求满足容量的连续存储空间。

链接分配

链接分配可以将文件存储在离散的盘块中,需要额外的存储空间存储文件的盘块链接顺序
在这里插入图片描述

  • 隐式链接:隐式分配的下一个链接指向存储在当前盘块内
    隐式分配适合顺序访问,随机访问效率低。可靠性差,任何一个连接出现问题都影响整个文件。
  • 显示链接:使用FAT表(文件配置表)来存储每一个盘块的下一个盘块。
    不支持高效的直接存储,检索时FAT表占用较大内存空间。
索引分配

把文件所有盘块集中存储(索引)。读取某个文件时,将文件索引读取进内存即可。
在这里插入图片描述
每个文件都拥有一个索引块,记录所有盘块信息。索引分配方式支持直接访问盘块。文件较大时,索引分配方式具有明显优势。

(2)辅存的存储空间管理

在这里插入图片描述

空闲表

在这里插入图片描述
空闲盘区分配与内存分配类似。

空闲链表

将所有空闲盘区组成一个空闲链表,每个链表节点存储空闲盘块空闲的数目

位示图

在这里插入图片描述
0表示未使用,1表示已分配。
优点:

  • 位示图维护成本很低
  • 位示图可以非常容易找到空闲盘块
  • 位示图使用0/1比特位,占用空间很小

3.目录管理

目录树

在这里插入图片描述
目录树使得任何文件或目录都只有唯一路径

六、Linux文件

1.Linux目录

在这里插入图片描述

2.Linux文件类型

在这里插入图片描述

3.Linux文件系统概览

  • FAT(File Allocation Table)文件配置表:微软Dos/Windows使用的文件系统
  • NTFS(New Technology File System):windowsNT使用
  • EXT(Extended file system):Linux使用

六、设备管理

1.广义的IO设备

对CPU而言,凡是对CPU进行数据输入的都是输入设备,凡是对CPU进行数据输出的都是输出设备。

(1)按使用特性分类

在这里插入图片描述

(2)按信息交换的单位分类

在这里插入图片描述

(3)按设备的共享属性分类

在这里插入图片描述

(4)按传输速率分类

在这里插入图片描述

2.IO设备的缓冲区

由于CPU与IO设备的速率不匹配,设立缓冲区。其减少CPU处理IO请求的频率,提高CPU和IO设备之间的并行性

3.SPOOLing技术

是关于慢速字符设备如何与计算机主机交换信息一种技术,通常称为“假脱机技术”。
利用高速共享设备将低速的独享设备模拟为高速的共享设备。逻辑上,系统为每一个用户都分配了一台独立的高速独享设备。

工作原理

假设有三个设备都需要使用打印机。若有进程要求对它打印输出时,SPOOLing系统并不是将这台打印机直接分配给进程,而是在共享设备(磁盘或磁鼓)上的输出SPOOLing存储区中为其分配一块存储空间,进程的输出数据以文件形式存放于此
各进程的数据输出文件形成了一个输出队列,由输出SPOOLing系统控制这台打印机进程,依次将队列中的输出文件实际打印输出。在SPOOLing 系统中,实际上并没有为任何进程分配,而只是在输入井和输出井中,为进程分配一存储区和建立一张I/O请求表。这样,便把独占设备改造为共享设备。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值