操作系统(一)基础知识及操作系统启动

文章目录

    • 前言
    • 前置基础知识
      • 计算机组成
      • CPU
      • 磁盘
      • 内核
      • 中断、异常、系统调用
      • 局部性原理
    • 启动操作系统
      • 计算机加电是如何正常执行服务的?
      • 开机自检
      • BIOS(Basic Input/Output System)
      • BootLoader
    • 小结

前言

本文主要涉及操作系统的简介、硬件结构、内存管理、进程管理、文件系统、设备管理等内容,可以作为学习操作系统的辅助文本记录。撰写本文的目的主要是针对操作系统整体做一个相对完整的梳理,以便后续回顾之用。
本文是第一篇,讲述操作系统的基础知识和操作系统启动。

Q: 操作系统是什么?

A: 操作系统是计算机系统中最基本的部分之一,它管理和控制计算机硬件资源,并为应用软件提供服务。常见的操作系统包括Windows、macOS、Linux等。操作系统的主要功能包括管理计算机的内存和处理器、文件管理、设备管理、用户界面、网络通信等。不同的操作系统在用户界面、文件系统、软件兼容性等方面表现出各自特点,满足不同用户群体的需求。

前置基础知识

计算机组成

计算机组成是指计算机硬件系统中各个部件的结构、功能和相互之间的关系。一般来说,计算机组成包括以下几个方面:

  1. 中央处理器(CPU):负责执行程序指令和控制计算机的操作。CPU由运算器、控制器和寄存器等部件组成。
  2. 存储器:用于存储程序指令和数据。根据读写速度和容量大小,可以分为内存和外存(如硬盘、固态硬盘等)。
  3. 输入设备:用于将外部数据输入到计算机中,如键盘、鼠标、扫描仪等。
  4. 输出设备:用于将计算机处理后的结果输出到外部,如显示器、打印机、音箱等。
  5. 总线:用于传输数据和信号,是计算机中各部件之间的通信桥梁。
  6. 控制器:负责从存储器中读取指令,并将指令传输给CPU中的运算器进行相应的计算操作。
  7. 运算器:执行计算操作,包括算术、逻辑运算和移位等。
  8. 寄存器:用于暂时存储CPU中的数据和指令,如程序计数器、指令寄存器、通用寄存器等。
  9. 缓存:用于提高CPU访问存储器的速度,减少存取延迟和提高系统效率

冯诺依曼模型:运算器、控制器、存储器、输入设备、输出设备

CPU

64位CPU和32位CPU的位数指的是CPU的位宽

64位的CPU的地址总线一般是48位,而32位CPU的地址总线一般是32位;之所以64位的地址总线目前是48位的原因是,用不到这么多地址总线暂时,多了也会增加开销。

硬件的 64 位和 32 位指的是 CPU 的位宽,软件(包含操作系统,操作系统也算是软件)的 64 位和 32 位指的是指令的位宽。

CPU位宽是指一次可以计算数据的bit数。 有CPU在计算时,数据需要先保存在寄存器中,因此CPU位宽一般就是指寄存器的位数。 如32CPU一次可以计算32bit的数据,64位CPU一次可以计算64bit的数据。

  • 32位操作系统的内存寻址上限是4GB(即2^32个地址),这也意味着最大可寻址的内存空间为4GB。然而,实际可用的内存会小于4GB,因为其中一部分地址空间会被保留用于硬件映射,比如显卡内存、系统 BIOS 等。

  • 在实际应用中,32位操作系统能够有效管理的内存通常在3GB到3.5GB之间,具体取决于硬件和操作系统的配置。为了充分利用更多内存,现代计算机系统通常会采用 64 位操作系统。 64 位操作系统可以支持非常大的内存空间,通常上限是几TB甚至更高。

  • 1 k B = 2 10 B i t 1kB = 2^{10}Bit 1kB=210Bit, 4 G B = 2 32 B i t 4GB = 2^{32}Bit 4GB=232Bit

磁盘

CPU Cache用的是SRAM(Static Random-Acess Memory, 静态随机存储器)的芯片,一旦断电数据丢失。

内存使用的是DRAM(Dynamic Random-Acess Memory,动态随机存取存储器)的芯片。之所以叫做动态是因为是使用电容存储数据,电容会随时间不断漏电,因此要定时刷新电容,从而称之为动态存储。

寄存器、CPU Cache、内存在断电后数据都会丢失。而SSD/HDD则不会。

SSD(Soild-state Disk)固态硬盘,结构和内存类似,但是内存读写速度大概是SSD的10~1000倍;

HDD(Hard Disk Drive)机械硬盘,物理读写,比内存慢10w倍左右;

内核

**内核(Kernel)**是操作系统最核心的部分,它是操作系统的核心模块,负责管理计算机系统的硬件和软件资源,并提供给其他应用程序访问硬件的接口。内核可以看作是操作系统与硬件之间的桥梁,它处理中断、调度任务、内存管理、设备驱动等底层操作,为上层应用程序提供稳定、高效的运行环境。

内核产生的原因主要有以下几点:

  1. 硬件资源管理:计算机系统的硬件资源(例如处理器、内存、磁盘、网络等)需要统一管理和分配。内核负责协调和管理这些资源,确保每个应用程序能够合理、安全地使用硬件资源。
  2. 提供抽象接口:不同的硬件设备有不同的工作方式和指令集,为了让应用程序开发者更加方便地编写程序,内核提供了抽象接口,屏蔽了底层硬件的细节,使得应用程序不需要关注具体的硬件实现细节,只需要调用内核提供的接口就可以完成相应的操作。
  3. 多任务处理:现代操作系统支持多任务处理,即在同一时间片内可以并行运行多个程序。内核负责任务的调度和切换,确保每个任务都能在适当的时间获得执行,从而实现了多任务的效果。
  4. 安全和稳定性:内核具备对系统资源进行保护和隔离的能力,可以防止不同应用程序之间的相互干扰,同时也能够保护系统免受恶意软件的攻击。内核还负责处理和恢复一些系统错误和异常,提高系统的稳定性和可靠性。

内核更像是一个中间人来对接应用和硬件设备,是应用连接硬件设备的桥梁。

Q: 内核是怎么工作的?

A: 内核具有很高的权限,可以控制 cpu、内存、硬盘等硬件,而应用程序具有的权限很小,因此大多数操作系统,把内存分成了两个区域:

  • 内核空间,这个内存空间只有内核程序可以访问;
  • 用户空间,这个内存空间专门给应用程序使用;

用户空间的代码只能访问一个局部的内存空间,而内核空间的代码可以访问所有内存空间。因此,当程序使用用户空间时,我们常说该程序在用户态执行,而当程序使内核空间时,程序则在内核态执行。

应用程序如果需要进入内核空间,就需要通过系统调用

中断、异常、系统调用

  1. 中断可以分为多种类型,包括外部中断(来自外设)、**内部中断(由处理器内部发出)**以及软件中断。外部中断是指来自计算机外部设备的信号,如键盘、鼠标、硬盘控制器等设备发出的请求,需要处理器立即暂停当前的工作,转而处理来自外部设备的任务。内部中断是指处理器内部的事件引起的中断,例如除法错误、地址错误等。而软件中断是由执行指令产生的中断,通常用于系统调用或异常处理。

  2. 异常也来源于应用程序,但来源于不良的应用程序,是由于非法指令或者其他坏的处理状态(如:内存出错等);

  3. 系统调用来源于应用程序,是应用程序主动向操作系统发出服务请求,系统调用是操作系统与应用程序的接口

  • 响应:

    • 中断:操作系统会持续运行,对用户程序是透明的,我们感受不到,就像在打字的时候不断发生着中断;
    • 异常:操作系统会杀死进程或重新执行
    • 系统调用:操作系统会等待或持续进行各种操作。
  • 处理时间

    • 中断:异步
    • 异常:同步
    • 系统调用:异步或同步

    **什么意思啊?**我看别人的解释是“处理时间是否同步,要看应用程序是否需要等待即时反馈,如果需要就是同步,不需要就是异步”

Q:系统调用与函数调用的区别?

A: 系统调用涉及到切换用户态和内核态,因为操作系统内核运行在特权模式下,而应用程序通常运行在用户态。

为了内核和用户态的区别,系统调用会有堆栈的切换和特权级的转换;

函数调用时没有堆栈切换;

因此,系统调用比一般常规函数调用的执行开销大。

局部性原理

局部性原理: 程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址分别局限在一定区域。

  1. 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内;

  2. 空间局部性:当前指令和邻近的几条指令,当前访问的数据和临近的几个数据都集中在一个较小区域内;

  3. 分支局部性:一条跳转指令的两次执行,很有可能跳转到相同的内存位置;

启动操作系统

计算机加电是如何正常执行服务的?

  1. 加电自检(Power-On Self-Test, POST):当你打开电脑电源后,计算机会进行自检程序。这个过程检查计算机硬件设备是否正常运作,包括内存、CPU、硬盘、显卡等。
  2. 启动BIOS:自检完成后,计算机将启动基本输入输出系统(Basic Input Output System, BIOS)。BIOS是存储在计算机主板上的固件,它负责初始化和配置硬件设备,并提供基本的操作系统启动功能。
  3. POST显示和系统配置界面:BIOS会将特定信息显示在屏幕上,比如计算机型号、硬件信息等。同时,你还可以通过按下指定键(通常是Del、F2或F10)进入BIOS设置界面,对计算机进行配置,如设置启动顺序、调整时钟频率等。
  4. 启动引导加载程序(Boot Loader):在BIOS完成系统硬件初始化和配置后,它会从硬盘中读取引导加载程序。引导加载程序是一个小型程序,负责加载磁盘中的操作系统的核心文件到内存中。
  5. 操作系统启动:引导加载程序会读取操作系统的核心文件,如Windows的NTLDR或GRUB(GNU GRand Unified Bootloader)等。这些核心文件负责初始化操作系统的各个模块,并将控制权交给操作系统。
  6. 操作系统初始化:操作系统开始启动并加载系统服务、设备驱动程序等。在这个阶段,计算机会完成一系列初始化和配置工作,为用户提供操作系统的功能和界面。
  7. 用户登录:一旦操作系统初始化完成,系统会显示用户登录界面。用户可以输入用户名和密码来登录操作系统,并开始使用计算机的各种功能。

开机自检

开机自检(Power-On Self-Test,POST)是计算机启动过程中的一个重要步骤,用于检测和初始化计算机的硬件设备。下面是大致的开机自检流程:

  1. 电源供电:当计算机通电时,电源会向主板和其他硬件设备提供电力。
  2. 初始化CPU:主板会对CPU进行初始化,包括设置工作频率、缓存等参数,并验证CPU的正常运行状态。
  3. 检查系统内存:主板会检查安装的内存模块,确保它们的类型、容量和速度等参数正确,并执行一些内存控制器的测试。
  4. 初始化基本硬件:主板将逐个检测和初始化连接到主板上的各种硬件设备,例如硬盘、光驱、显卡、网卡等。它会验证设备是否存在、设置设备的初始状态,并确保与设备的通信正常。
  5. 显示引导信息和错误:在开机自检期间,如果发现任何硬件问题或错误,主板会尝试通过报警声音、在显示屏上显示错误信息或使用指示灯等方式来提示用户。
  6. 执行BIOS和POST扩展:BIOS(Basic Input/Output System)会被加载到内存中执行,并执行更高级别的自检操作,例如检测和初始化其他外部设备。

BIOS(Basic Input/Output System)

BIOS(Basic Input/Output System)是一种固件,通常存放在计算机的主板上的闪存芯片中,并且在计算机启动时被加载到内存中执行。

具体来说,计算机启动时会首先运行BIOS程序。BIOS会完成硬件自检和初始化,然后查找可引导设备(如硬盘、光驱、USB存储等)的引导记录(boot record),并将控制权传递给引导记录中的引导加载程序。引导加载程序进一步的操作系统加载过程,并最终将控制权交给操作系统。

在计算机启动过程中,BIOS程序是在计算机内存中运行的,而不是从磁盘中运行的。一旦BIOS程序完成了它的初始化工作和引导控制权的交接,它就会从内存中退出。

需要注意的是,由于BIOS程序是固化在ROM中的,因此在正常情况下是不会改变的。但是,可以通过刷新(Flash)BIOS来更新或更改BIOS程序。在这种情况下,BIOS程序会从磁盘中读取一个镜像文件到内存中,并用此文件覆盖原始的BIOS程序。

BootLoader

Q: 引导加载程序BootLoader一般存放在哪里?

A: 引导加载程序(Boot Loader)的存放位置取决于操作系统和计算机的配置。以下是常见的几种存放位置:

  1. 主启动记录(Master Boot Record, MBR):在大多数传统的BIOS系统中,MBR位于硬盘的第一个物理扇区(磁道0、扇区1)。MBR中包含引导加载程序的代码,以及分区表和硬盘签名等信息。
  2. UEFI系统分区(Unified Extensible Firmware Interface System Partition, ESP):在使用UEFI固件的计算机上,引导加载程序通常存储在ESP分区中。ESP分区是一个FAT文件系统分区,包含了引导加载程序、操作系统文件以及其他相关配置文件。
  3. 分区引导扇区(Partition Boot Sector):在某些情况下,引导加载程序可能会存储在每个分区的引导扇区中。这种情况下,每个分区都有自己的引导加载程序。

引导加载程序(Boot Loader)在正常情况下是存放在计算机的硬盘中。

具体来说,在传统的BIOS系统中,引导加载程序通常存储在硬盘的主启动记录(Master Boot Record, MBR)中,也就是硬盘的第一个物理扇区。该扇区的容量很小,通常为512字节,足够存放引导加载程序的代码和必要的信息。

当计算机上电启动时,BIOS会读取硬盘的MBR,并将控制权交给MBR中的引导加载程序。引导加载程序进程进一步的操作系统加载过程,负责加载操作系统核心文件并将控制权交给操作系统。

然而,在某些情况下,为了实现更灵活的引导方式,可以使用其他方式将引导加载程序存放在其他位置,例如UEFI系统分区(ESP)或者各个分区的引导扇区。这种情况下,引导加载程序可能不仅仅存放在硬盘中,还可能存储在固件芯片中或其他可写入存储设备中。

需要注意的是,引导加载程序在启动时会被加载到计算机的内存中执行,而不是直接从硬盘中运行。一旦引导加载程序将控制权交给操作系统,操作系统将会继续从硬盘或其他存储设备中加载更多的文件和程序到内存中。

小结

本节主要操作系统的基础知识以及启动操作系统的一些问题。文中部分图片来自“小林coding”。

如果您觉得我写的不错,麻烦给我一个免费的赞!如果内容中有错误,也欢迎向我反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133750.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Proteus仿真--基于数码管设计的可调式电子钟

本文主要介绍基于51单片机的数码管设计的可调式电子钟实验(完整仿真源文件及代码见文末链接) 仿真图如下 其中数码管主要显示电子钟时间信息,按键用于调节时间 仿真运行视频 Proteus仿真--数码管设计的可调式电子钟(仿真文件程…

WMS配送中心主要业务流程

业务流程图 入库 波次出库 按门店和门店所属送货路线确定出库波次 入库 出库 移库、封仓 门店欠货能要点 1. 日常补货:分拣仓位商品小于当前商品在该位置的补货下限的时候;生成对此进行补货任务;补货完成后确认任务,系统变更库存…

YOLOv8-Seg改进:分割注意力系列篇 | 高效多尺度注意力 EMA | ICASSP2023

🚀🚀🚀本文改进:EMA跨空间学习高效多尺度注意力引入到YOLOv8中进行二次创新,改进方法1)head层输出层结合;2)加入backbone; 🚀🚀🚀EMAAttention 亲测在多个数据集能够实现涨点,同样适用于小目标分割 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/…

探索内存函数的奥秘【memcpy、memmove、memset、memcmp】

目录 一,memcpy函数 1,memcpy函数简介 2,memcpy函数的原理 3,memcpy函数的用法 4,注意事项 5,memcpy函数模拟实现 二,memmove函数 1,memmove函数简介 2,memmove函…

实验室(检验科)信息系统源码,医学检验LIS系统源码,云LIS源码

实验室(检验科)信息系统源码,LIS源码,基于云计算技术的LIS系统源码,云LIS源码 LIS系统(LaboratoryInformationSystem) 即 实验室(检验科)信息系统,它是医院信息管理的重要组成部分之…

Vue3 源码解读系列(三)——组件渲染

组件渲染 vnode 本质是用来描述 DOM 的 JavaScript 对象,它在 Vue 中可以描述不同类型的节点,比如:普通元素节点、组件节点等。 vnode 的优点: 抽象:引入 vnode,可以把渲染过程抽象化,从而使得组…

用 winget 在 Windows 上安装 kubectl

目录 kubectl 是什么? 安装 kubectl 以管理员身份打开 PowerShell 使用 winget 安装 kubectl 测试一下,确保安装的是最新版本 导航到你的 home 目录: 验证 kubectl 配置 kubectl 是什么? kubectl 是 Kubernetes 的命令行工…

38 路由的过滤器配置

3.3.断言工厂 我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件 例如Path/user/**是按照路径匹配,这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoute…

计算机毕业设计:水果识别检测系统 python 深度学习 YOLOv5

[毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 。 1、项目介绍 本文介绍了一种基于深度学习的水果检测与识别系统…

移动端模型部署框架

移动端模型部署框架 1. MNN整体特点轻量性通用性高性能易用性架构设计主体工具致谢移动端模型部署框架 1. MNN https://www.yuque.com/mnn/cn/about MNN是全平台轻量级高性能深度学习引擎,广泛支持了阿里巴巴在计算机视觉、语音识别技术、自然语言处理等领域的70多个AI应用…

【Java 进阶篇】Java中的 JSP(JavaServer Pages)

JavaServer Pages(JSP)是一种用于开发动态Web页面的Java技术。它是在静态Web页面中嵌入Java代码的一种方式,使得开发者可以借助Java的强大功能来创建动态、交互性强的Web应用程序。在本文中,我们将深入探讨JSP的概念、原理和基本用…

MYSQL内容补充:

一)联合索引: 1)定义:是给一张表上面的多个列增加索引,也就是说给表上面的多个列增加索引,供快速查询使用,当两个列的组合是唯一值时,联合索引是个不错的选择 联合索引和单个索引对比来讲,联合索引的所有索引项都会出现…

重温数据结构与算法之前缀和

文章目录 前言一、基础1.1 定义1.2 时间复杂度 二、扩展2.1 二维前缀和2.2 差分数组2.3 前缀积 三、LeetCode 实战3.1 长度最小的子数组3.2 二维区域和检索 - 矩阵不可变 参考 前言 前缀和(Prefix Sum),也被称为累计和,是一种在计…

SQL必知会(二)-SQL查询篇(5)-用通配符进行过滤

第6课、用通配符进行过滤 LIKE:匹配文本 LIKE:针对未知值进行过滤。通配符搜索只能用于文本字段。 1)百分号%通配符 %表示任何字符出现任意次数。 需求:找出所有以词 Fish 起头的产品 SELECT prod_id, prod_name FROM Product…

浅谈高并发以及三大利器:缓存、限流和降级

引言 高并发背景 互联网行业迅速发展,用户量剧增,系统面临巨大的并发请求压力。 软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,全面讨论需要三天三夜&#…

Aria2 任意文件写入漏洞复现

漏洞描述 Aria2 是一款轻量级、多协议、多源下载工具(支持 HTTP/HTTPS、FTP、BitTorrent、Metalink),内置 XML-RPC 和 JSON-RPC 接口。 我们可以使用 RPC 接口来操作 aria2 并将文件下载到任意目录,从而造成任意文件写入漏洞。 …

Nginx常用配置与命令,nginx代理转发配置

Nginx特点 高并发、高性能; 模块化架构使得它的扩展性非常好; 异步非阻塞的事件驱动模型这点和 Node.js 相似; 相对于其它服务器来说它可以连续几个月甚至更长而不需要重启服务器使得它具有高可靠性; 热部署、平滑升级; 完全开源,生态繁荣; Nginx作用 Nginx 的最重要的…

【Excel】补全单元格值变成固定长度

我们知道股票代码都为6位数字,但深圳中小板代码前面以0开头,数字格式时前面的0会自动省略,现在需要在Excel表格补全它。如下图: 这时我们需要用到特殊的函数:TEXT或者RIGHT TEXT函数是Excel中一个非常有用的函数。TEX…

SpringBoot项目调用openCV报错:nested exception is java.lang.UnsatisfiedLinkError

今天在通过web项目调用openCV的时候提示如下错误: nested exception is java.lang.UnsatisfiedLinkError:org.opencv.imgcodecs.Imgcodecs.imread_0(Ljava/la如下图所示: 但是通过直接启动java main函数确正常,初步诊断和SpringBoot热加载…

dart packages 版本问题解决 和 对 pubspenc.lock 的深入了解

先讲讲我遇到的问题 在进行写项目的时候,我需要用到一个依赖 这个依赖是 3.0.0 版本的,但是实际上我本地的上存在多个版本 虽然我修改了 pubspenc.yaml 文件中需要的依赖,但是每次使用的还是 3.4.0 版本的依赖,但是我需要的是 3…