1、操作系统引论

一、操作系统

会使用linux系统
建议大家先学会linux的基础指令,可以看菜鸟教程网站进行学习。

1、各种定义

  • 操作系统定义
    • 管理计算机的 硬件软件资源, 能对各类作业进行调度,方便用户使用计算机的程序集合
    • 操作系统运行在内核态(也叫管态,核心态)。在这个状态,操作系统可以对所有的硬件访问。

注意:操作系统是最基础的软件

  • 用户接口程序定义
    • 用户接口程序有shell和GUI
      • shell:用户与操作系统交互的程序,基于文本的是shell。
      • GUI:用户与操作系统交互的程序,基于图标的是GUI。

注意:用户接口程序并不属于操作系统。

  • 信息
    • 位(bit)+ 上下文(context)= 信息
      • 位(Bit) 是计算机中最小的数据单位,表示一个二进制的 0 或 1
      • 上下文 是数据所处的环境或规则,决定了如何解释这些位
    • ASCII码构成的文件就是文本文件
    • 其余是二进制文件
  • 内核态和用户态
    • 内核态:
      • 操作系统的“核心大脑”,权限高但需谨慎操作。
    • 用户态:
      • 普通程序的“沙箱”,权限受限但安全
        • 所以操作系统会把一部分代码放在内核态另一部分放在用户态保证安全
  • 程序接口
    • 普通用户无法直接使用程序接口,而是使用系统调用来用程序接口。

在这里插入图片描述

2、程序被其他程序翻译成不同格式

在linux的gcc编译器下。我们有一些对文件的操作。操作系统和编译器是辅助关系

这些操作是【巧妙记忆:ESc iso】
①预处理阶段:

  • 使用gcc -E xxx.c -o xxx.i命令
  • 作用:处理 #include、#define、#ifdef 等预处理指令。

②编译阶段:

  • 使用gcc -S xxx.i -o xxx.s命令
  • 作用:将预处理后的代码转换为汇编代码。

③汇编阶段:

  • 使用gcc -c xxx.s -o xxx.o命令
  • 作用:将汇编代码转换为机器码(二进制目标文件)。

④链接阶段:

  • 使用gcc xxx.o -o xxxx命令
  • 作用:将目标文件与库文件(如 libc.so)链接,生成可执行文件。

如果我们使用world.c文件进行以上操作。那这4个阶段将构成编译系统(compilation system)。那么命令的执行过程如下图:
在这里插入图片描述

3、面临的问题

当一个代码输入到操作系统上,我们的硬盘【不同的用户,硬盘的来源是不同的,材质会不同等等】该如何读取呢?等等。
所以我们就需要用到操作系统的4个重大部分,也是未来学习的过程中重点知识。

  • 运行任务的管理:进程和线程、调度和同步机制
  • 运行任务的存储管理:内存管理
  • 运行任务的外设管理:I/O设备
  • 存储数据设备的管理:文件管理

二、硬件

在这里插入图片描述
上面这张就是一个硬件分布图【看看就行了,不要死记硬背】。

1、CPU

中央处理单元(CPU),简称处理器

  • CPU作用:处理和执行指令。
  • CPU的寄存器:存储下一条要执行的指令。
    • 通用寄存器
    • 程序计数器PC
      • 作用:存储下一条要执行的指令的内存地址
    • 堆栈指针SP
      • 作用:指向当前堆栈的顶部地址,管理函数调用时的栈操作。能保护信息和恢复信息
    • 指令寄存器(IR)
      • 作用:存放当前执行指令
    • 状态寄存器(FLAGS)
      • 作用:记录运算结果状态(如零标志ZF、进位标志CF)。
      • PSW:并不是一直需要保存,而是运行状态才需要。在记录状态【已经没有运行了】不用。
  • CPU的算术逻辑单元ALU
    • 作用:执行算术和逻辑运算。
  • 指令集架构
    • 处理器想要处理一条指令,也需要通过一定的规则,这个规则就是指令集架构。
    • 指令类型如下:
      • 加载指令:用于将数据从内存加载到寄存器中。
      • 存储指令:用于将数据从寄存器存回到内存中。
      • 运算指令:用于对来自寄存器和内存的操作数进行运算,例如 add 指令将两个操作数相加并将结果保存在寄存器或内存中。
  • CPU的流水线
    • 当CPU正在执行第N条指令时,它可以同时解码第N+1条指令,并读取第N+2条指令,这种形式就叫流水线
    • 在这里插入图片描述
  • CPU的超标量
    • CPU中可以有多个执行单元,例如一个做加法运算,一个做乘法运算。在它们做运算的时候,把许多取指单元和解码单元放入缓存区(cache)中,等到某一个执行单元有空了,就把缓存区中的它们拿一个出来执行。虽然看起来指令乱序了,实际上工作人员肯定设计方法来有序进行。
    • 在这里插入图片描述

2、内存

理想情况下,内存应该是非常快速的(比执行一条指令还要快,以避免拖慢CPU的执行效率),同时容量足够大且成本低廉。然而,当前的技术手段无法同时满足这三个要求。因此,存储系统采用了一种分层次的结构来解决这个问题
在这里插入图片描述

2.1、 寄存器

  • 寄存器与CPU同样的材质,跟CPU一样快

2.2、 高速缓存(Cache)

  • 位于CPU与主存(内存)之间的超高速临时存储器,由SRAM构成,用于减少CPU访问数据的延迟
  • 局部性原理
    • 是指:CPU访问存储器的时候,无论是读指令还是存取数据,所访问的存储单元都被区域聚集到一个连续区域中了。也就是说程序具有访问局部区域里的数据和代码的趋势

2.3、主存

  • 主存是指计算机中用于临时存储正在运行的程序和数据的硬件部件,属于RAM(随机存取存储器)。断电后数据丢失(易失性)。
  • ROM只读存储器) 断电后不数据丢失,一旦ROM存储了数据,那么数据就不能被修改了。
  • EEPROM(电可擦可编程只读存储器)和 闪存(Flash Memory)与ROM不同,支持数据的擦除和重新写入重写数据来修正程序错误】。
  • CMOS(Complementary Metal-Oxide Semiconductor,互补金属氧化物半导体) 存储器
    • 作用:存储BIOS/UEFI设置(如启动顺序、日期时间、硬件参数)。确保即使在电源关闭后也能持续追踪这些关键数据
    • 特性:易失性存储器,依赖**纽扣电池(CR2032)**维持数据(断电后不丢失)。

2.4、磁盘

市面上的磁盘有2类,我们先看机械磁盘,然后看固态磁盘
推荐观看这个视频,用的《CSAPP》书讲解

2.4.1、机械磁盘(HDD)
主体结构介绍

在这里插入图片描述

  • 盘片(platter):上图中的圆盘就是盘片。上面有磁性的记录材料,可以记录数据
    • 盘面(surface):每个盘片有2个面 ,这个面就是盘面。
  • 主轴(spindle):可以旋转。主轴带动盘片以固定的速率高速旋转。
  • 读/写头:来读写盘面表面存储的数据。上下盘面都有一个读/写头.
    • 所有的读写头都是一起运动的,垂直并列
  • 磁盘臂:通过磁盘臂的运动就可以运行读写数据的行为了。如果需要读取目标文件,盘面就会旋转起来。
    • 寻找位置的这个过程【不包括旋转】叫寻道
    • 在这里插入图片描述
细节分析

先是磁道

  • 磁道:盘面的表面划分了一圈圈的磁道
    • 扇区:磁道里面有许多扇区。
      • 扇区与扇区之间有一些小间隙存储的不是 数据 而是 标识信息
        在这里插入图片描述

然后单位

  • byte是字节单位,不要理解成比特bit了。
  • 在I/O设备里的单位是不同的。如下图
    在这里插入图片描述
    在这里插入图片描述

然后对扇区的访问时间主要分布为3个部分

扇区访问时间 = 寻道时间+旋转时间+传送时间

  • 寻道时间:磁盘臂寻道过程的时间。
  • 旋转时间:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间
  • 传送时间:完成传输所请求的数据所需要的时间。

单位

  • 扇区: 硬盘的最小读写单元
  • 块/簇: 是操作系统针对硬盘读写的最小单元
  • page: 是内存与操作系统之间操作的最小单元。
2.4.2、固态硬盘(SSD)

在现在的电脑几乎都是固态硬盘了。固态硬盘的缺陷就是容易磨损。推荐看这个视频了解
在这里插入图片描述

  • 固态硬盘由一个或多个闪存芯片构成的。
    • 使用闪存芯片 取代了 传统的机械臂转动和盘片旋转方式。
  • 闪存转换站(FTL)
    • 功能与磁盘控制器类似:都是将操作系统对逻辑块的请求 翻译成 对底层物理设备的访问
  • 固态硬盘的擦除操作
    • 固态硬盘除了读/写操作,还多了擦除操作。
    • 但是擦除只能把1 变成 0 ,而不能把0 变成1 。 所以每一个page在放入数据前都是 1 。
    • 在这里插入图片描述

3、I/O设备

3.1、定义

I/O设备就是可以将数据输入到计算机 或者 可以接收计算机输出数据的外部设备 , 属于计算机的硬件部分。

3.2、分类

3.2.1、按使用特性分类
  • 人机交互类 外部设备:数据传输慢---->用于人机交互
  • 存储设备:数据传输快---->用于数据存储
  • 网络通信设备:数据传输介于2者之间---->用于网络通信
3.2.2、按传输速率分类
  • 低速设备:每秒几个到几百字节
  • 中速设备:每秒千到万字节
  • 高速设备:每秒可以到千兆字节
3.2.3、按信息交换的单位
  • 块设备:传输速率较高,可寻址,即对它可随机地读/写任一块。
  • 字符设备:传输速率较慢,不可寻址。在输入/输出时,常采用中断驱动方式。

4、设备控制器和设备驱动器

设备控制器【硬件】:负责直接控制物理设备能够接收并执行来自操作系统的指令
设备驱动器【软件】:设备控制器通过设备驱动器利用中断与操作系统通信

5、实现输入和输出的方式有三种

  • 忙等待:一直循环直到需要的条件满足。会一直占据CPU,CPU一直轮询I/O设备直到I/O操作完成。
  • 设备驱动程序启动设备并且让该设备在操作完成时发生中断,设备驱动程序在这个时刻返回。操作系统接着在需要时阻塞调用者并安排其他工作进行。当设备驱动程序检测到该设备操作完成时,它发出一个 中断 通知操作完成。
    • 在这里插入图片描述
  • 引入DMA控制器,代替CPU直接管理I/O设备与内存之间的数据传输。【直接存储器访问(Direct Memory Access, DMA) 芯片】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

KVM安全模块生产环境配置与优化指南

KVM安全模块生产环境配置与优化指南 一、引言 在当今复杂多变的网络安全环境下,生产环境中KVM(Kernel-based Virtual Machine)的安全配置显得尤为重要。本指南旨在详细阐述KVM安全模块的配置方法,结合强制访问控制(M…

深入解析工厂模式及其C#实现

工厂模式(Factory Pattern)是设计模式中的一种创建型模式,它通过工厂方法来创建对象,而不是让客户端代码直接实例化对象。这样可以避免客户端与具体类的紧密耦合,从而提高代码的灵活性、可维护性和扩展性。工厂模式能够…

【愚公系列】《高效使用DeepSeek》009-PPT大纲自动生成

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

SpringCloud系列教程(十四):Sentinel持久化

Sentinel之前已经搭建和应用成功了,但是它有一个很大的缺点就是官方没有提供持久化的方案,从项目源码上看感觉这款工具也没有完成的太好,所以需要我们去对它进行二次开发。要补充的功能大概如下: 1、将Sentinel接入nacos中&#…

AGI大模型(3):大模型生成内容

1 大模型是怎么生成内容的 简单来说就是靠"猜"! 虽然⾮常不可思议,但事实就是这样,现阶段所有的 NLP 任务,都不意味着机器真正理解这个世界,它只是在玩⽂字游戏,进⾏⼀次⼜⼀次的概率解谜,本质上和我们玩报纸上的填字游戏是⼀个逻辑。只是我们靠知识和智慧,…

Go语言环境搭建并执行第一个Go程序

目录 一、Windows环境搭建 二、vscode安装插件 三、运行第一个go程序 一、Windows环境搭建 下载Go:All releases - The Go Programming Language 这里是Windows搭建,选择的是windows-amd64.msi,也可以选择zip直接解压缩到指定目录 选择msi…

Java数据结构第二十三期:Map与Set的高效应用之道(二)

专栏:Java数据结构秘籍 个人主页:手握风云 目录 一、哈希表 1.1. 概念 1.2. 冲突 1.3. 避免冲突 1.4. 解决冲突 1.5. 实现 二、OJ练习 2.1. 只出现一次的数字 2.2. 随机链表的复制 2.3. 宝石与石头 一、哈希表 1.1. 概念 顺序结构以及平衡树中…

OpenHarmony子系统开发 - Rust编译构建指导

OpenHarmony子系统开发 - Rust编译构建指导 一、Rust模块配置规则和指导 概述 Rust是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust官方也使用Cargo工具来专门为Rust代码创建工程和构建编译。 OpenHarmony为了集成C…

【SpringMVC】常用注解:@ModelAttribute

1.作用 该注解是在SpringMVC4.3版本后新加入的。它可以修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法之前执行。它可以修饰 没有返回值的方法,也可以修饰没有返回值的方法。它修饰参数,获取指定 的数据给参数赋值。 当表单提…

人工智能之数学基础:如何将线性变换转换为矩阵?

本文重点 在机器学习中,常用的理论就是线性变换,线性变化一定有对应的矩阵表示,非线性变换是不具备这个性质的,那么现在如果有一个线性变换T那么如何知道它对应的矩阵呢? 线性变换的本质 我们知道线性变换相当于一个函数,而矩阵也是一个函数,所以线性变换一定存在一个…

STM32驱动代码规范化编写指南(嵌入式C语言方向)

点击下面图片,为您提供全新的嵌入式学习路线 文章目录 一、命名规范体系1.1 变量/函数命名1.2 宏定义规范1.3 类型定义 二、代码结构组织2.1 文件组织结构2.2 头文件规范模板 三、注释体系构建3.1 Doxygen风格示例3.2 复杂逻辑注释 四、硬件抽象层设计4.1 寄存器封…

C++Primer学习(7.1 定义抽象数据类型)

类的基本思想是数据抽象(data abstraction)和封装(encapsulation)。数据抽象是种依赖于接口(interface)和实现(implementation)分离的编程(以及设计)技术。类的接口包括用户所能执行的操作:类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。 封…

【人工智能】大语言模型学习大纲

大语言模型学习大纲 大语言模型学习知识点大纲一、基础知识准备二、机器学习入门三、自然语言处理(NLP)基础四、Transformer架构与实践五、高级主题六、前沿研究与实战项目 学习步骤第一步:打牢基础第二步:掌握机器学习与深度学习基础第三步:…

Trae与Builder模式初体验

说明 下载的国际版:https://www.trae.ai/ 建议 要选新模型 效果 还是挺不错的,遇到问题反馈一下,AI就帮忙解决了,真是动动嘴(打打字就行了),做些小的原型效果或演示Demo很方便呀&#xff…

基于VM的CentOS 7.4系统安装与配置说明系统环境主机系统

系统环境 主机系统:Windows 11虚拟机版本:VMware Workstation 17 ProDVD镜像版本:CentOS-7-x86_64-DVD-1908 虚拟机配置 内存:1G处理器:1核硬盘:80G 安装步骤 1. 准备镜像文件 下载并获取CentOS 7.4的…

【设计模式】《设计模式:可复用面向对象软件的基础》:设计模式怎样解决设计问题?

文章目录 ⭐前言⭐一、设计模式怎样解决设计问题?🌟1、寻找合适的对象🌟2、决定对象的粒度🌟3、指定对象接口🌟4、描述对象的实现🌟5、运用复用机制✨(1)针对接口编程,而不是针对实现编程。✨(2…

【SpringMVC】常用注解:@MatrixVariable

1.作用 接收矩阵变量传送的值 或许有人听都没听过矩阵变量是什么,下面来介绍一下 矩阵变量是一种在URL路径中传递多个键值对参数的方式,它是在 Servlet 规范之外的一种扩展机制,可用于更灵活地传递参数。 例如:/cars;colorred…

【项目管理git】git学习

ps:所有东西都是个人理解 文章目录 一、git是什么,它用来做什么?二、相关知识库2.1 简单的linux指令2.2 git配置指令2.3 git常见的指令2.3.1 Git的上传原理2.3.2 版本回退相关内容 2.4 设置远程地址,本地上传到github2.4.1 ssh相…

【性能优化】MySQL 生产环境 SQL 性能优化实战案例

🚀 MySQL 生产环境 SQL 性能优化实战案例 🏗️ 背景介绍 最近在处理一个项目时,发现在生产环境的工作流相关接口中,某些查询的执行时间异常缓慢,尽管数据量仅为 2 万条。经过分析,发现以下 SQL 语句执行非…

python速通小笔记-------1.容器

1.字符串的标识 字符串需要用“”标识。 与c不同,python 写变量时 不需要标明数据类型每一行最后不需要加; 2.print函数的使用 与c中的printf函数一致 3.运算符 4.字符串str操作 1. 实现字符串拼接 2.% 实现字符串初始化 %s占位会把变量强制转变为…