操作系统

操作系统概述

1、操作系统的概念和定义

image-20240420202405591

定义:是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,他是计算机系统中最基本的系统软件

1、操作系统是系统资源的管理者

2、向上提供方便易用的服务

3、是最接近硬件的一层软件

2、操作系统的功能和目标 —–作为系统资源的管理者

1、处理机管理(CPU)

2、存储器管理

3、文件管理

4、设备管理

image-20240420202941054

3、操作系统的功能和目标—–向上提供方便易用的服务

image-20240420203330379

提供了哪些服务?

GUI:图形化用户接口

联机命令接口也称为交互式命令接口也就是cmd

脱机命令接口也称为批处理命令接口类似于windows的搜索功能,一次搜一堆

程序接口通过程序代码间接使用就比如打印helloworld,printf函数就是使用了操作系统提供的功能。系统调用也称之为广义命令。

image-20240420203908257

4、操作系统的功能和目标—最接近硬件的软件

需要实现对硬件机器的拓展

我们把覆盖了软件的机器成为扩充机器,又称为虚拟机

将裸机改造成为功能更强,使用更方便的机器。

操作系统的四个特征

1、并发

并发是指两个或者多个事件在同一时间间隔发生。这件事情在宏观上实同时发生的,但是在微观上是交替发生的

容易混淆的概念并行:并行是指两个或者多个事件在同一时刻同时发生

操作系统的并发性是指计算机系统中“同时”运行多个程序,这些程序在宏观上看是同时运行的,而微观上看是交替运行的。

操作系统就是伴随着“多道程序技术”而出现的。因此,操作系统和程序并发是一起诞生的。

重要考点:

单核CPU同一时刻只能执行一个程序,各个程序只能并发的执行

多核CPU统一时刻可以同时执行多个程序,多个程序可以并行的执行

2、共享

共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。

image-20240420205548627

所谓的“同时”往往是宏观上的,而在微观上这些进程可能是交替的对该资源进行访问的(也就是分时共享)。

例子:

互斥共享:就是用QQ和微信视频聊天。同一个摄像头只能分配给其中一个进程

同时共享:用QQ发送文件A,微信发送文件B,虽说是宏观上是同时读取并发送文件,但微观上两个进程是交替访问硬盘的。

总结:并发和共享的关系

image-20240420210054287

所以说并发和共享是互为存在条件

3、虚拟

image-20240420210257691

image-20240420210347856

一个是空分复用技术和时分复用技术

4、异步

image-20240420213125078

操作系统的发展和分类

1、手工阶段

image-20240420213828318

2、 批处理阶段

image-20240420214106041

单道批处理系统

image-20240420214312133

多道批处理系统

image-20240420214503005

3、分时操作系统

image-20240420214556481

缺点就是不能优先处理一些紧急的任务。

4、实时操作系统

image-20240420214808466

5、其他操作系统

image-20240420214834088

操作系统的运行机制

1、两种指令

预备知识:程序是如何运行的?

image-20240420230114061

2、两种程序

在这里要区分内核程序和应用程序

image-20240420230305357

image-20240420230357513

CPU设计和生产的时候就划分了特权指令和非特权指令。

image-20240420230536229

3、两种处理器状态

那么如何实现这两个状态的切换?

image-20240420231034351

中断和异常

1、中断的作用

image-20240420231748774

2、中断的类型

内中断

也称为异常(陷入(程序故意引发),故障(由错误条件引起有可能修复比如缺页故障),终止(致命的错误,比如整数除0))

与当前执行的指令有关 ,中断信号来源于CPU内部

内中断的例子

黑客的例子,在用户态的时候执行不了特权指令,然后CPU就会转换成内核态然后执行中断信号。

或者是除法指令的时候除数为0。

在用户态的时候想要请求操作系统内核的服务就会执行这条特殊的指令叫陷入指令,然后就会转换为内核态来执行内部的中断信号。

外中断

时钟中断、I/O中断请求

与当前执行的指令无关,中断信号来源于CPU外部

image-20240420232706742

3、中断机制的基本原理

image-20240420233134426

系统调用

什么是系统调用,有什么作用?

image-20240421101928750

系统调用与库函数的区别

image-20240421102116937

为什么系统调用是必须的?

image-20240421102331291

image-20240421102419197

系统调用的过程

首先先执行应用程序,然后一次执行,当他想要发出系统调用的时候需要想CPU的寄存器传送参数的指令,比如fork指令操作系统会根据参数来判断需要哪种服务,当他判断需要系统调用服务就会执行陷入指令,然后就会转换成内核态然后进入系统调用入口程序,然后会根据寄存器中的参数判断用户需要哪种系统调用服务然后会执行fork函数的处理程序处理完会后会返回用户态继续执行用户程序。

image-20240421103510005

操作系统的体系结构

image-20240421104019421

那么就出现了大内核和微内核对的两种体系结构

image-20240421104323759

注意:

操作系统内核需要运行在内核态

操作系统的非内核功能运行在用户态

image-20240421104418589

操作系统的体系结构下

image-20240421104536146

分层结构

操作系统的内核分多层,每层只能调用相邻那一层的接口

image-20240421104747451

这种结构的调试和验证非常方便只需要自底向上的测试但是效率低,不可以跨层调用。

模块化

image-20240421105136353

image-20240421105257974

优点:模块间逻辑清晰易于维护,确定模块间的接口后,可以多模块同时开发。

支持动态加载新的内核模块,增强OS的适应性,不需要消息发送

操作系统的引导

什么是操作系统引导

当你在开机的时候如何让操作系统运行起来就是操作系统引导做的事情。

磁盘里有哪些相关的数据

磁盘里内部一开始是空的,然后再磁盘里安装操作系统是安装在C盘里面的,然后再磁盘的开头会有主引导记录(MBR)(这里面包含磁盘引导程序和分区表)

操作系统引导的过程

image-20240422141217886

image-20240422141252808

虚拟机

传统的计算机

image-20240422141340298

虚拟机

image-20240422142259711

第一类的就是本身没有操作系统,第二类是本身就有操作系统

进程

进程的概念

image-20240422143848391

进程的组成

PCB进程控制块

当进程创建时系统会给进程一个唯一的PID

image-20240422144405696

image-20240422144444290

程序段和数据段

image-20240422144855851

image-20240422144916149

例子:

image-20240422145330527

总结

image-20240422145614717

进程的特征

image-20240422145658704

进程的状态与转换

进程的状态- - 创建态、就绪态

image-20240422145909367

运行态

image-20240422150032613

阻塞态

image-20240422150152184

当等待的事件空闲就会从阻塞态转换为就绪态,当一个进程执行完就会执行exit的系统调用,请求操作系统终止该进程。

image-20240422150350494

总结

image-20240422150942959

image-20240422151007566

进程的组织–链接方式

image-20240422151408313

进程的组织– 索引方式

image-20240422151441978

总结

image-20240422151458903

进程控制

什么是进程控制

image-20240422151646746

如何实现进程控制

用原语

image-20240422151723638

如何实现原语的“原子性”‘

利用到开中断指令和关中断指令

image-20240422152209528

进程控制相关的原语

image-20240422152520675

image-20240422152540917

image-20240422152559378

image-20240422152612335

程序是如何执行的

image-20240422152732903

寄存器不是独属于某一个进程的

所以需要跑存这个进程的运行环境

image-20240422152940983

进程通信

什么是进程通信

IPC是指两个进程之间产生数据交互

进程通信需要操作系统的支持?

image-20240422155721271

共享存储

image-20240422160049194

image-20240422160650700

消息传递

image-20240423142542411

直接通信方式

image-20240423143155829

间接通信方式

image-20240423143503425

管道通信

image-20240423144618190

线程

什么是线程,为什么要引入线程?

image-20240423145348183

image-20240423145532747

引入线程机制之后,有什么变化

image-20240423145606651

线程的属性

image-20240423145739787

线程的实现方式

用户级线程

image-20240423150411623

内核级线程

image-20240423150620517

多线程模型

一对一模型:就是上面那个例子

多对一模型:

image-20240423150901316

多对多模型:

image-20240423151207321

线程的状态与转换

image-20240423151309975

线程的组织与控制

image-20240423151426050

处理机调度

调度基本概念

image-20240423173342117

高级调度

image-20240423173601495

低级调度

image-20240423173755689

中级调度

image-20240423173914473

总结

image-20240423174044574

进程同步和互斥

什么是进程同步

image-20240423174513711

什么是进程互斥

image-20240423174732903

image-20240423183325817)、

image-20240423183440989

进程互斥的软件实现方法

单标志法

image-20240423184604896

image-20240423184858063

双标志先检查

image-20240423185449109

image-20240423185624639

双标志后检查

image-20240423185748142

image-20240423185802590

Peterson算法

image-20240423192613504

image-20240423193025824

进程互斥的硬件实现方法

中断屏蔽方法

image-20240423193448543

TestAndSet(TS指令、TSL指令)

image-20240423194038723

Swap指令(XCHG指令)

image-20240423194225084

image-20240423194240023

互斥锁

image-20240423194733669

信号量机制

总结上面的问题

image-20240423195130296

image-20240423195402877

整形信号量

image-20240423200001717

image-20240423200301479

记录型信号量

image-20240423200510706

image-20240423200845145

image-20240423201239962

用信号量机制实现的进程的同步和互斥

实现进程互斥

image-20240424111019547

实现进程同步

image-20240424113913782

实现进程的前驱

image-20240424114102070

总结

image-20240424114442810

生产者消费者问题

问题描述

image-20240424114618489

image-20240424114650033

如何实现

image-20240424115034824

能否交换相邻给PV操作顺序

image-20240424115205452

总结

image-20240424115401314

多生产者多消费者问题

问题描述

image-20240424115549052

问题分析

image-20240424115948586

如何实现

image-20240424120153363

如果没有设互斥量

image-20240424120523654

image-20240424120556065

总结

image-20240424120651285

吸烟者问题

问题描述

image-20240424155505091

问题分析

image-20240424160150574

具体实现

image-20240424160359626

读者-写者问题

问题描述

image-20240424160847210

问题分析

image-20240424174231927

具体实现

image-20240424182329615 问题描述 image-20240424182512708

问题分析

image-20240424182812424

如何实现

死锁

什么是死锁

image-20240424223458086

死锁产生的必要条件

image-20240424223841060

什么时候会发生死锁

image-20240424225723273

死锁的处理策略

image-20240424225820630

预防死锁

破坏互斥条件

image-20240424230106184

破坏不剥夺条件

image-20240424230134412

破坏请求和保持条件

image-20240424230336625

破坏循环等待条件

image-20240424230507349

避免死锁

什么是安全序列

image-20240424233636573

image-20240424233658012

安全序列、不安全状态、死锁的关系

image-20240424234011312

银行家算法

image-20240424234126273

image-20240424234251474

image-20240424234334909

死锁的监测

死锁的解除

内存的基础知识

image-20240514091320058

什么是内存

内存是存放数据,程序在执行之前需要放到内存中才能被CPU处理 – 缓和CPU和硬盘之间的速度矛盾

image-20240514091636286

image-20240514091908558

指令的工作原理

image-20240514092612513

image-20240514092800046

image-20240514092939749

装入的三种方式 绝对装入

image-20240514093111295

静态重定位 可重定位装入

image-20240514093227592

动态重定位 动态运行时装入

image-20240514093429626

image-20240514093631525

链接的三种方式

image-20240514093740069

内存管理的概念

image-20240514093927552

image-20240514094017905

image-20240514094048181

image-20240514094359332

image-20240514094505470

image-20240514094534401

覆盖技术

image-20240514094639621

image-20240514094823639

image-20240514094837287

交换技术

image-20240514095029259

image-20240514095115740

image-20240514095341049

image-20240514095451722

连续分配管理方式

image-20240515191339077

单一连续分配

image-20240515191533813

固定分区分配

image-20240515191928249

动态分区分配

image-20240515192114674

image-20240515192223613

image-20240515192306986

image-20240515192400260

image-20240515192437812

image-20240515212139031

image-20240515212204064

image-20240515212227369

image-20240515212616131

总结

image-20240515212653001

动态分区分配算法

首次适应算法

image-20240515213539715

最佳适应算法

第五章 设备管理