• 计算机操作系统笔记总结:Part1 计算机系统概述


    在这里插入图片描述

    写在前面

     hello,大家好,我是黄小黄。今天开始将进行计算机操作系统的学习啦,文章内容主要参考王道考研408的书籍与课程,与操作系统相关的笔记都会记录在计算机操作系统的专栏中,欢迎点击订阅专栏:点击订阅
    在这里插入图片描述
    话不多说,正文开始!



    1 操作系统的概念与功能

    我们先来看一下电脑是如何诞生的吧:

    1. 厂商会把CPU、内存等硬件组装成一台裸机;
    2. 而在裸机出售前,一般厂商都会安装一个操作系统;
    3. 我们购买电脑后,可以在操作系统上安装应用程序(软件);
    4. 作为用户的我们,可以使用这些应用程序。

    于是我们得到计算机系统的层次结构如下:
    在这里插入图片描述
    王道书上给出的操作系统的定义如下:

    操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境,它是计算机最基本的系统软件。

    说明:

    1. 操作系统作为软件和硬件中的一个层次,是系统资源的管理者;
      在这里插入图片描述

    2. 操作系统需要向上层(应用程序和用户)提供方便易用的服务;

    3. 操作系统是最接近硬件的一种的软件。

    操作系统的功能和目标–作为系统资源的管理者
    有如下功能:

    1. 处理机管理
    2. 存储器管理
    3. 文件管理
    4. 设备管理

    在这里插入图片描述

    操作系统的功能和目标–向上层提供方便易用的服务
    操作系统把一些丑陋的硬件功能封装成简单易用的服务,使用户能够更加方便地使用计算机,用户无需关心底层硬件的原理,只要对操作系统发出命令即可。具体见下图:
    在这里插入图片描述
    操作系统使用举例:
    直接给用户使用的

    • GUI:很多操作系统提供了图形化用户接口,用户可以使用形象的图形界面进行操作,而不需要记忆复杂的命令;
    • 联机命令接口:又叫交互式命令接口,用户需要在命令行与计算机系统进行交互,用户说一句,系统跟着做一句,比如win系统我们常常使用的cmd;
    • 脱机命令接口:又叫批处理命令接口,如win系统的搜索功能,搜索某个盘的某个文件。用户说一堆,系统跟着做一堆。

    给软件/程序员使用的

    • 程序接口:用户通过程序间接使用,或者通过代码,例如"hello,world"程序中调用的printf函数,底层就是调用了系统提供的服务,使得字符在显示屏上打印。

    操作系统的功能和目标–作为最接近硬件的层次
    需要实现对硬件机器的扩展。 没有任何软件支持的计算机称为裸机。在裸机上安装的操作系统,可以提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强、更方便的机器。
    通常把覆盖了软件的机器称为扩充机器,又称为虚拟机。

    操作系统对硬件的扩展主要体现在:将CPU、内存、磁盘、显示器等硬件合理组织起来,让各种硬件能够相互协调配合,实现更多更复杂的功能。


    2 操作系统的特征

    在这里插入图片描述
    并发: 指两个或多个事件在同一时间间隔内发生,这些事件在宏观上是同时发生的,但是在微观上是交替发生的。
    并行: 指两个或多个事件同一时刻同时发生。(易混淆)

    考点

    单核CPU 同一时刻只能执行 一个程序, 各个程序只能 并发 地执行;
    多核CPU 同一时刻可以同时执行 多个程序, 多个程序可以 并行 地执行。

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

    而共享有两种资源共享方式:

    1. 互斥共享方式: 系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源,例如:使用QQ和微信视频,同一时间段只能将摄像头分配给其中一个进程;
    2. 同时共享方式: 系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问,例如:同时使用QQ和微信发送文件,宏观上,两边都是在同时读取并发送文件,说明两个进程都在访问硬盘资源,微观上看,两个进程交替着访问硬盘。

    为什么说并发性与共享性互为存在条件?该如何理解?
    答:以QQ微信同时发送文件为例,两个进程正在并发执行,需要共享地访问硬盘资源。如果失去了并发性,则系统只有一个程序正在运行,那么共享性就失去了存在的意义。如果失去共享性,则QQ微信不能同时访问硬盘资源,就无法实现同时发送文件,无法实现并发。

    虚拟: 指把物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的,而逻辑对应物是用户感受到的。

    如何理解呢? 我们知道,一个程序需要放入内存并给它分配CPU才能执行。而一个GTA5游戏需要4G运行内存,QQ需要256MB的内存,微信也要256MB内存,而假设电脑只有4GB内存,而这些程序运行需要的内存远远大于4GB,为什么可以同时运行呢?
    答:这是虚拟存储器技术。实际只有4GB内存,但是在用户看来似乎远远大于4GB。

    异步: 指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进。只有系统拥有并发性,才有可能导致异步性!


    3 操作系统的发展与分类

    在这里插入图片描述

    手工操作阶段
    手工操作阶段计算过程如下图,可见有明显缺点: 用户独占全机、人机速度矛盾导致资源利用率基地!!!
    在这里插入图片描述

    批处理阶段:单/多道批处理系统
    单道批处理: 引入脱机输入/输出技术(用外围机+磁带完成),并由监督程序负责控制作业的输入、输出。缓解了一定程度的人机速度矛盾,资源利用率有一定提升。 但是依然存在明显缺点: 内存中仅能有一道程序运行, 只有该程序运行结束后才能调入下一道程序。CPU有大量的时间是在等待I/O完成,资源利用率仍然低。
    在这里插入图片描述
    为了解决上述问题,采用了多道批处理系统: 每次往内存中读入多道程序,多道程序可以并发执行,共享计算机资源,资源利用率大幅提升, CPU和其他资源能保持忙碌状态,系统吞吐量增大。
    在这里插入图片描述
    但是无论是单道还是多道批处理,都没有实现人机交互,用户是无法调试程序的, 为了解决该问题,就有了分时操作系统。

    分时操作系统
    计算机以时间片为单位轮流为各个用户/作业服务, 各个用户可以通过终端与计算机进行交互。

    主要优点: 用户的请求可以被及时响应,解决了人机交互的问题。 允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
    主要缺点: 不能优先处理一些紧急任务。 不区分任务的紧急性。于是就有了实时操作系统。

    实时操作系统
    在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。实时操作系统的 主要特点是及时性和可靠性。

    主要优点: 能够优先响应紧急任务,某些紧急任务不需时间片排队。

    在这里插入图片描述

    网络操作系统
    是伴随着计算机网络发展诞生的,能把网络中各个计算机有机结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。

    分布式操作系统
    主要特点是 分布性和并行性。 系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由它们并行、协同完成任务。

    个人计算机操作系统:
    如Window XP、MacOS等,方便个人使用。


    4 操作系统的运行机制

    在这里插入图片描述

    4.1 特权指令与非特权指令

    这里需要与cmd等命令行的指令进行区分。这里的指令指的是CPU能够看得懂的机器指令(一串二进制序列)

    在CPU设计和生产时候,就划分了特权指令和非特权指令,即CPU执行一条指令前就能判断出其类型。

    对于应用程序,只能使用“非特权指令”,例如加法指令,减法指令等。
    而对于内核程序,操作系统内核作为“管理者”,有时会让CPU执行一些“特权指令”,如:内存清零指令。这些指令影响重大,只允许管理者,即操作系统内核来使用。

    4.2 内核态与用户态

    CPU能判断出指令类型,但是,它是如何区分正在运行的程序是内核程序还是应用程序的呢?

    其实,CPU有两种状态,“内核态”和“用户态”。
    当CPU处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令。
    当CPU处于应用态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。

    CPU中有一个寄存器叫做 程序状态字寄存器(PSW), 其中有个二进制位,1表示内核态,0表示应用态。

    用户态和内核态是如何进行转化的?
    内核态->用户态: 执行一条特权指令–修改PSW标志位为“用户态”,这个动作意味着操作系统主动让出CPU使用权;
    用户态->内核态: 由“中断”引发,硬件自动完成变态过程, 触发中断信号意味着操作系统将强行夺回CPU的使用权。


    5 中断和异常

    在这里插入图片描述
    中断的作用
    CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序。在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序。
    “中断”是让操作系统内核夺回CPU使用权的唯一途径。
    如果没有“中断”机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序,就没有并发的一席之地了。

    中断的类型

    1. 内中断:与当前执行的指令有关,中断信号来源于CPU内部;
    2. 外中断:与当前执行的指令无关,中断信号来源于CPU外部。

    内中断的实例: 试图在用户态下执行特权指令、执行除法指令时发现除数为0。即:若当前执行的指令是非法的,则会引发一个中断信号。
    当然,有时候应用程序想要请求操作系统内核的服务,此时就会执行一条特殊的指令:陷入指令, 该指令会引发一个内部中断信号。
    执行陷入指令意味着应用程序主动将CPU控制权还给操作系统内核。系统调用就是通过陷入指令完成的。

    外中断的实例: 时钟中断–由时钟部件发来的中断信号。每一条指令执行结束时,CPU都会例行检查是否有外中断信号。
    在这里插入图片描述

    内中断也称异常
    分为如下三种:

    1. 陷阱、陷入(trap): 由陷入指令引发,是应用程序故意引发的;
    2. 故障(fault): 由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把CPU的使用权交还给应用程序,让它继续执行下去,如缺页故障;
    3. 终止(abort): 由致命错误引起,内核程序无法修复该错误,因此一般不再将CPU使用权还给引发终止的应用程序,而是直接终止该应用程序。如整数除以0、非法使用特权指令。

    中断机制的基本原理
    不同的中断信号,需要用不同的中断处理程序来处理。 当CPU检测到中断信号后,会根据中断信号的类型去 查询“中断向量表”, 以此来找到相应的中断处理程序在内存中的存放位置。具体硬件上的实现,将在计算机组成原理中探讨。


    6 系统调用

    6.1 什么是系统调用

    “系统调用” 是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。

    系统调用与库函数的区别?
    答:系统调用应该是比高级语言的库函数更为底层的接口。不过,并不是所有库函数都涉及到系统调用,比如:取绝对值的函数… …
    系统调用与库函数的区别见下图:
    在这里插入图片描述

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

    例子见下图:
    在这里插入图片描述
    那么什么功能需要用到系统调用呢? 王道书给出了如下分类:

    • 设备管理: 完成设备的 请求/释放/启动 等功能
    • 文件管理: 完成文件的 读/写/创建/删除 等功能
    • 进程控制: 完成进程的 创建/撤销/阻塞/唤醒 等功能
    • 进程通信: 完成进程之间的 消息传递/信号传递 等功能
    • 内存管理: 完成内存的 分配/回收 等功能

    系统调用相关功能涉及系统资源管理,进程管理等操作,需要特权指令,所以系统调用处理需要由操作系统欸和程序负责完成运行在核心态。用户程序可以执行trap命令发起系统调用,请求OS服务,相当于把CPU使用权交给OS内核程序。用户程序不能直接执行对系统影响很大的操作,必须通过系统调用的方式请求OS执行,以便保证系统稳定性和安全性,防止用户程序随意更改/访问重要的系统资源,影响其他进程执行。

    6.3 系统调用的过程

    传递系统调用参数->执行陷入指令(用户态)->执行相应的内请求核程序处理系统调用(核心态)->返回应用程序。

    OS运行环境理解为:用户通过OS上层程序,而这个程序依赖OS底层管理程序提供服务支持,当需要管理程序服务时,系统则通过硬件中断机制进入核心态,运行管理程序,也可能是程序运行出现异常情况,被动需要管理程序服务,通过异常处理来进入核心态,管理程序运行结束时,用户程序需要继续运行,此时通过响应的保存的程序现场退出中断处理程序/异常处理程序,返回断点处继续执行。

    在这里插入图片描述
    需要注意以下两点:

    1. 陷入指令是在用户态执行的,执行陷入指令后立即引发一个内中断,使CPU进入核心态;
    2. 发出系统调用请求是在用户态,而 对系统调用的相应处理是在核心态完成的。

    7 操作系统的体系结构

    在这里插入图片描述

    操作系统的内核
    内核是操作系统最基本、最核心的部分。实现操作系统内核功能的那些程序就是内核程序。

    • 操作系统内核需要运行在内核态;
    • 操作系统的非内核功能运行在用户态。

    内核分为大内核和微内核,具体图示如下:
    在这里插入图片描述
    大内核: 将操作系统的主要功能模块都作为系统内核,运行在核心态。
    优点:高性能;缺点:内核代码量大,结构混乱,难以维护。

    微内核: 只把最基本的功能保留在内核。
    优点:内核功能少,结构清晰,方便维护;
    缺点:需要频繁地在核心态和用户态之间切换,性能低。

    大内核与微内核的区别?
    在这里插入图片描述
    如果应用程序想要请求操作系统的服务,这个服务同时涉及到进程管理、存储管理、设备管理。
    如果采用的是大内核的方式,则只需要进行两次变态
    如果采用的是微内核的方式,则需要进行六次变态。

    需要注意的是,变态的过程是有成本的,要消耗不少的时间,频繁地变态会降低系统性能。

    变态是为了方便描述,实际表述的时候:CPU状态的转换

    分层结构
    内核分为多层,每层可单向调用更低一层提供的接口。注意,只能调用相邻的,不可以跨层。
    这种分级的思想,便于调试和验证,每层都相对独立,可以逐层调试,更加方便。另外,层与层之间的调用接口固定不变,我们可以在层与层之间新加一层,只需要保证原来定义的接口不变。
    但是,难以定义边界。比如,进程有时候需要使用到内存管理相关的功能,而内存管理有时候也需要使用进程相关的资源。这种分层的模式,导致有一些不灵活。

    模块化
    模块化是将操作系统按功能划分为若干个具有一定独立性的模块。每个模块具有某方面的管理功能,并规定好各模块间的接口,使各模块之间能通过接口进行通信。还可以进一步将各模块细分为若干个具有一定功能的子模块,同样也规定好各子模块之间的接口。把这种设计方法称为模块-接口法。
    在这里插入图片描述

    模块化即将内核划分为多个模块,各个模块之间相互协作。
    内核 = 主模块 + 可加载内核模块
    主模块:只负责核心功能,如进程调度、内存管理等。
    可加载内核模块:可以动态的加载新模块到内核,而无需重新编译整个内核。
    优点: 模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发。支持动态加载新的内核模块,比如安装驱动程序等,增加了OS的适应性。任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高。
    缺点: 模块间的接口定义未必合理实用;模块间相互依赖,更难调试和验证。

    外核
    内核负责进程调度、进程通信等功能,外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全。
    外核可以直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活的使用硬件资源,减少了硬件资源的“映射层”,提升了效率。
    在这里插入图片描述

    计算机操作系统–体系结构小结
    在这里插入图片描述


    8 操作系统的引导

    什么是操作系统的引导?
    简单来说,开机的时候,怎么让操作系统运行起来,就是操作系统的引导。
    解答这个问题前,我们需要知道,磁盘中存储了什么内容。

    在一块磁盘安装完操作系统后,其分布如下图所示:
    在这里插入图片描述

    除了我们能看到的磁盘分区以外,还包含了个主引导记录(MBR),包含了磁盘引导程序和分区表。

    C盘: 是这个磁盘的活动分区,安装了操作系统。

    操作系统要启动的话,操作系统的数据需要被放到主存中。这里需要补充一个知识点:计算机的主存由RAM和ROM两部分组成。而RAM芯片里的数据,只要关机,就会被清空。而ROM里的数据不会因为断点而消失。

    而CPU开机通电后,则会找到引导程序,执行该程序里的指令。指示CPU去把磁盘的主引导记录读入到内存。

    重点来啦!主引导记录中有磁盘引导程序和分区表。磁盘引导程序会根据分区表去判断C盘所处的位置,读入C盘的PBR引导程序。PBR引导记录里的程序 ,会找到启动管理程序,通常存储在根目录的某个位置。

    操作系统引导的过程:

    1. CPU从一个特定主存地址开始,取指令,执行ROM中的引导程序(先进行硬件自检,再开机);
    2. 将磁盘的第一块–主引导记录 读入内存,执行硬盘引导程序,扫描分区表;
    3. 从活动分区(又称主分区,即安装了操作系统的分区)读入分区引导记录,执行其中的程序;
    4. 从根目录下找到完整的操作系统初始化程序(即 启动管理器)并执行,完成“开机”的一系列动作。

    在这里插入图片描述


    9 虚拟机

    传统计算机
    一台物理机器上只能运行一个操作系统,带来了很多应用上的限制。

    虚拟机
    使用虚拟化技术,将一台物理机器虚拟化多台机器(Virtual Machine,VM),每个虚拟机器都可以独立运行一个操作系统。
    同义术语: 虚拟机管理程序/虚拟机监控程序/Virtual Machine Monitor/Hypervisor

    • 第一类VMM:直接运行在硬件上;
    • 第二类VMM:运行在宿主操作系统上。

    在这里插入图片描述

    两类虚拟机管理程序(VMM)的对比
    在这里插入图片描述

  • 相关阅读:
    larave使用sanctum进行API鉴权
    代理IP与Socks5代理:跨界电商智能爬虫与出海之道
    1.3媒介视角的语言观
    Win11如何给应用换图标?Win11给应用换图标的方法
    CMake 在工程管理中的使用 Window/MacOS
    (附源码)计算机毕业设计SSM酒店入住管理系统
    Springboot实战:redisson分布式缓存、分布式锁详细教程(附git源码)
    考虑可再生能源消纳的建筑综合能源系统日前经济调度模型(Matlab代码实现)
    RabbitMQ怎么保证可靠性
    DenseNet 和 FractalNet学习笔记
  • 原文地址:https://blog.csdn.net/m0_60353039/article/details/126935139