1、操作系统引论
一、操作系统
会使用linux系统
建议大家先学会linux的基础指令,可以看菜鸟教程网站进行学习。
1、各种定义
- 操作系统定义
- 管理计算机的 硬件 和软件资源, 能对各类作业进行调度,方便用户使用计算机的程序集合。
- 操作系统运行在内核态(也叫管态,核心态)。在这个状态,操作系统可以对所有的硬件访问。
注意:操作系统是最基础的软件。
- 用户接口程序定义
- 用户接口程序有
shell和GUI- shell:用户与操作系统交互的程序,基于文本的是shell。
- GUI:用户与操作系统交互的程序,基于图标的是GUI。
- 用户接口程序有
注意:用户接口程序并不属于操作系统。
- 信息
- 位(bit)+ 上下文(context)= 信息
- 位(Bit) 是计算机中最小的数据单位,表示一个二进制的 0 或 1。
- 上下文 是数据所处的环境或规则,决定了如何解释这些位。
- ASCII码构成的文件就是文本文件
- 其余是二进制文件
- 位(bit)+ 上下文(context)= 信息
- 内核态和用户态
- 内核态:
- 操作系统的“核心大脑”,权限高但需谨慎操作。
- 用户态:
- 普通程序的“沙箱”,权限受限但安全。
- 所以操作系统会把一部分代码放在内核态,另一部分放在用户态来保证安全。
- 普通程序的“沙箱”,权限受限但安全。
- 内核态:
- 程序接口
- 普通用户无法直接使用程序接口,而是使用
系统调用来用程序接口。
- 普通用户无法直接使用程序接口,而是使用

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正在执行第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) 芯片】
相关文章:
1、操作系统引论
一、操作系统 会使用linux系统 建议大家先学会linux的基础指令,可以看菜鸟教程网站进行学习。 1、各种定义 操作系统定义 管理计算机的 硬件 和软件资源, 能对各类作业进行调度,方便用户使用计算机的程序集合。操作系统运行在内核态…...
DeepSeek 本地化新篇章:Ollama 兼容 OpenAI API 的深度解析与部署实践
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的快速发展,开发者对本地化部署和 API 兼容性的需求日益增加。Ollama 作为一个轻量级开源框架,通过兼容 OpenAI AP…...
【PTA题目解答】7-4 数气球 (20分)
1.题目 天空上有n个气球,第i个气球的颜色为colori(为全由小写字母组成的字符串) 请你数出每种颜色的气球的数量,并按照颜色出现的先后顺序进行排序输出。 输入格式: 测试数据有T组(1≤T≤100)。 对于每组样例,第一…...
Swift 中 associatedtype 的用法详解
目录 前言 1.什么是associatedtype 2.associatedtype 的作用 1.让协议支持泛型 2.让协议支持不同的数据类型 3.结合 where 关键字限制类型 4.什么时候使用 associatedtype 5.总结 前言 在 Swift 语言中,泛型(Generics)是一个非常强大…...
java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性
在 Java 中,泛型通配符(?)用于表示未知类型,通常用于增强泛型的灵活性。通配符可以与上下限结合使用,以限制泛型的范围。以下是通配符及上下限的使用示例: 1. 无界通配符 (?) 无界通配符表示可以接受任意…...
HarmonyOS NEXT - 网络请求问题(http)
HTTP(HyperText Transfer Protocal,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,它是客户端和服务器之间通信的基础;无论是获取数据、提交表单、上传文件,HTTP都扮…...
告别旧版本,功能全面升级!
小伙伴们,今天来给大家唠唠一款超经典的软件——格式工厂!相信很多人都不陌生吧?它可是早期超多人用的视频格式转换工具呢!但随着软件行业的发展,它慢慢被其他工具代替了,像万兴、小丸、AME这些新宠儿一出现…...
WSL2 Ubuntu安装GCC不同版本
WSL2 Ubuntu安装GCC不同版本 介绍安装gcc 7.1方法 1:通过源码编译安装 GCC 7.1步骤 1:安装编译依赖步骤 2:下载 GCC 7.1 源码步骤 3:配置和编译步骤 4:配置环境变量步骤 5:验证安装 方法 2:通过…...
双目视觉小记
双目视觉及其数学原理 1. 双目视觉概述 双目视觉(Stereo Vision)是一种模仿人眼视觉系统的计算机视觉技术,利用两台摄像机从不同角度拍摄同一场景,通过图像处理和三维重建来获取场景的深度信息。双目视觉广泛应用于机器人、自动…...
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扫到一…...
稳定运行的以Oracle数据库为数据源和目标的ETL性能变差时提高性能方法和步骤
要提高以 Oracle 为数据源和目标的ETL性能,需要综合考虑数据库性能优化、ETL工具配置、查询优化、并行处理和资源管理等多个方面。优化过程中要根据具体的ETL场景和工具来选择适合的方案,同时建议进行逐步调优,测试不同方案的效果,…...
C++类与对象——拷贝构造与运算符重载
拷贝构造函数和赋值运算符重载就是C类默认六个函数之二。 拷贝构造函数: 如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数 也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数…...
疗养院管理系统设计与实现(代码+数据库+LW)
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装疗养院管理系统软件来发挥其高效地信息处理的作用…...
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库࿰…...
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…...
什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
文章目录 什么是pbkdf2使用场景 在线工具 什么是pbkdf2 维基百科:https://zh.wikipedia.org/zh-cn/PBKDF2 PBKDF2(Password-Based Key Derivation Function 2)是一种基于密码的密钥派生函数。它的主要作用是从密码和盐(salt&…...
<meta content=“no-siteapp“ data-n-head=“ssr“ http-equiv=“Cache-Control“/>什么作用?
<meta content"no-siteapp" data-n-head"ssr" http-equiv"Cache-Control"/> 这个标签的作用是禁止某些浏览器或工具将网页转换为“应用”形式,尤其是针对一些特定的浏览器(如早期的 UC 浏览器)或移动端工…...
pyroSAR:开源的SAR数据处理与分析工具
今天为大家介绍的软件是pyroSAR:一款开源的SAR数据处理与分析工具。下面,我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 pyroSAR官网网址为:https://pyrosar.readthedocs.io/en/latest/。 pyroSAR是一个开源Pytho…...
Visual Studio里的调试(debugging)功能介绍
参考 1- Introduction to Debugging | Basic Visual Studio Debugging(这是一位印度博主视频,我下面做到笔记也主要参考她的视频,但不得不说口音太重了,一股咖喱味) 目录 个人对调试浅显的认识和对调试的介绍逐行调…...
图论part4|827. 最大人工岛、127. 单词接龙、463. 岛屿的周长
827. 最大人工岛 🔗:827. 最大人工岛 - 力扣(LeetCode)827. 最大人工岛 - 给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。返回执行此操作后,grid 中最大的岛屿面积是多少?岛屿 由一…...
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 …...
CSS中粘性定位
1.如何设置为粘性定位? 给元素设置posttion:sticky 即可实现粘性定位. 可以使用left, right ,top, bottom 四个属性调整位置,不过最常用的是top 值. 2.粘性定位的参考点在哪里? 离他最近的一个拥有"滚动机制"的祖先元素,即便这个祖先不是最近的真实可滚动祖先. 3.粘…...
CockroachDB MCP -cursor适用
CockroachDB MCP 服务器 GitHub仓库置顶 这是一个用于 Cursor 的 CockroachDB MCP 服务器,基于 Model Context Protocol (MCP) 规范实现,可以让你在 Cursor 中直接与 CockroachDB 数据库交互。 功能 连接到 CockroachDB 数据库获取数据库中的所有表获…...
cherry-studio - 多模型支持的跨平台 AI 桌面助手
GitHub:https://github.com/CherryHQ/cherry-studio 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 一款支持多种大语言模型服务的跨平台桌面客户端,兼容 Windows、Linux 和 macOS 系统。它支持主流云端模型&am…...
docker composeyaml文件,什么是swap-space,内存不足硬盘来凑,--ipc=host,yaml文件、环境变量、容器报警健康检查
--swap-space 参数明确针对的是系统内存(RAM),与显存(GPU Memory)无关。以下是关键区分: 内存(RAM) vs 显存(GPU Memory) 类型内存(RAMÿ…...
Uniapp 开发 App 端上架用户隐私协议实现指南
文章目录 引言一、为什么需要用户隐私协议?二、Uniapp 中实现用户隐私协议的步骤2.1 编写隐私协议内容2.2 在 Uniapp 中集成隐私协议2.3 DCloud数据采集说明2.4 配置方式3.1 Apple App Store3.2 Google Play Store 四、常见问题与解决方案4.1 隐私协议内容不完整4.2…...
