1、操作系统引论

news2025/3/16 6:34:26

一、操作系统

会使用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.coloradmin.cn/o/2315857.html

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

相关文章

HarmonyOS NEXT - 网络请求问题(http)

HTTP(HyperText Transfer Protocal,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,它是客户端和服务器之间通信的基础;无论是获取数据、提交表单、上传文件,HTTP都扮…

告别旧版本,功能全面升级!

小伙伴们,今天来给大家唠唠一款超经典的软件——格式工厂!相信很多人都不陌生吧?它可是早期超多人用的视频格式转换工具呢!但随着软件行业的发展,它慢慢被其他工具代替了,像万兴、小丸、AME这些新宠儿一出现…

Obsidian Copilot:打造你的专属 AI 笔记助手

Obsidian Copilot作为一款非常受欢迎的Obsidian插件,不仅极大地提升了用户的笔记管理和信息检索效率,还通过其多样化的AI功能为用户带来了前所未有的便捷体验。本文将详细介绍Obsidian Copilot的核心特点、使用方法及个人体验分享。 核心特点 Obsidian…

VPC4-通达oa-docker逃逸-shiro反序列化-hash传递-CrackMapExec喷射-历史ptt攻击-进程注入

由于本人是菜鸡,不会免杀,所有免杀的部分就直接跳过了 (hhh) 靶场地址: 链接: https://pan.baidu.com/s/1Fh1Zg79n1yjCPe6rrQ2apA 提取码: qiag 第一台ubuntu(docker逃逸,shiro反序列化) fscan扫到一…

C++类与对象——拷贝构造与运算符重载

拷贝构造函数和赋值运算符重载就是C类默认六个函数之二。 拷贝构造函数: 如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数 也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数…

疗养院管理系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装疗养院管理系统软件来发挥其高效地信息处理的作用&#xf…

2024年12月CCF-GESP编程能力等级认证C++编程四级真题解析

四级真题的难度: 一、总体难度评价 CCF-GESP编程能力等级认证C++四级真题的难度通常被认为相对较高。它不仅要求考生具备扎实的C++编程基础,还需要考生掌握一定的算法和数据结构知识,以及良好的问题解决能力。 二、具体难度分析 ‌理论知识考察‌: 单选题和判断题中,会涉…

MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景1.1.1 MySQL的发展历程与市场地位1.1.2 MySQL的核心特性与技术优势1.1.2…

使用GitHub Actions实现Git推送自动部署到服务器

将网站一键部署到服务器的方案很多,比如纯Shell脚本结合SSH、Jenkins等工具。本文将介绍如何利用GitHub Actions这一免费且轻量的CI/CD工具,实现代码推送后自动部署到云服务器。 之前一直在使用github的工作流,确实是一个比较好用的工具。 我…

PyTorch 系列教程:探索自然语言处理应用

本文旨在介绍如何使用PyTorch进行自然语言处理(NLP)的基础知识,包括必要的库、概念以及实际代码示例。通过阅读本文,您将能够开始您的NLP之旅。 1. 理解PyTorch PyTorch是一个开源的机器学习库,基于Torch库&#xff0…

3.14-1列表

列表 一.列表的介绍和定义 1 .列表 类型: <class list> 2.符号:[] 3.定义列表: 方式1:[] 通过[] 来定义 list[1,2,3,4,6] print(type(list)) #<class list> 方式2: 通过list 转换 str2"12345" print(type(str2)) #<class str> list2lis…

pyroSAR:开源的SAR数据处理与分析工具

今天为大家介绍的软件是pyroSAR&#xff1a;一款开源的SAR数据处理与分析工具。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 pyroSAR官网网址为&#xff1a;https://pyrosar.readthedocs.io/en/latest/。 pyroSAR是一个开源Pytho…

Visual Studio里的调试(debugging)功能介绍

参考 1- Introduction to Debugging | Basic Visual Studio Debugging&#xff08;这是一位印度博主视频&#xff0c;我下面做到笔记也主要参考她的视频&#xff0c;但不得不说口音太重了&#xff0c;一股咖喱味&#xff09; 目录 个人对调试浅显的认识和对调试的介绍逐行调…

图论part4|827. 最大人工岛、127. 单词接龙、463. 岛屿的周长

827. 最大人工岛 &#x1f517;&#xff1a;827. 最大人工岛 - 力扣&#xff08;LeetCode&#xff09;827. 最大人工岛 - 给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。返回执行此操作后&#xff0c;grid 中最大的岛屿面积是多少&#xff1f;岛屿 由一…

Java高级-05.反射的作用、应用场景

一.反射的作用 二.案例 Student.class package com.njau.d2_reflect;public class Student {private String name;private int age;private char sex;private double height;private String hobby;public Student(String name, int age, char sex, double height, String …

cherry-studio - 多模型支持的跨平台 AI 桌面助手

GitHub&#xff1a;https://github.com/CherryHQ/cherry-studio 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 一款支持多种大语言模型服务的跨平台桌面客户端&#xff0c;兼容 Windows、Linux 和 macOS 系统。它支持主流云端模型&am…

Uniapp 开发 App 端上架用户隐私协议实现指南

文章目录 引言一、为什么需要用户隐私协议&#xff1f;二、Uniapp 中实现用户隐私协议的步骤2.1 编写隐私协议内容2.2 在 Uniapp 中集成隐私协议2.3 DCloud数据采集说明2.4 配置方式3.1 Apple App Store3.2 Google Play Store 四、常见问题与解决方案4.1 隐私协议内容不完整4.2…

LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?

快慢指针 为什么相遇后让快指针回到起点&#xff0c;再让快指针和慢指针都一步一步地走&#xff0c;它们就会在环的入口相遇&#xff1f; 复杂度 时间复杂度: O(n) 空间复杂度: O(1) public ListNode detectCycle(ListNode head) {ListNode slow head, fast head;ListNode …

如何处理PHP中的编码问题

如何处理PHP中的编码问题 在PHP开发过程中&#xff0c;编码问题是一个常见且棘手的问题。无论是处理用户输入、数据库交互&#xff0c;还是与外部API通信&#xff0c;编码问题都可能导致数据乱码、解析错误甚至安全漏洞。本文将深入探讨PHP中的编码问题&#xff0c;并提供一些…

【动手学强化学习】part8-PPO(Proximal Policy Optimization)近端策略优化算法

阐述、总结【动手学强化学习】章节内容的学习情况&#xff0c;复现并理解代码。 文章目录 一、算法背景1.1 算法目标1.2 存在问题1.3 解决方法 二、PPO-截断算法2.1 必要说明2.2 伪代码算法流程简述 2.3 算法代码2.4 运行结果2.5 算法流程说明 三、疑问四、总结 一、算法背景 …