胡言乱语计算机一
操作系统是连接硬件和应用软件之间的纽带。至少目前是这样的。而操作系统这门课也是计算机专业的必修课之一。无奈当时混沌。并没有真正的上好这一门课之所以叫胡言乱语。是因为这里面的水对我来说实在是太深了。任何一个小的问题背后都是一个深渊。所以第一篇从最初的大学课程最初开始讲起。8086应该是学计算机最开始的地方。可以说是我们现在x86系列的最简单最基础的实现。里面的设计都或多或少的影响到了后面系列的实现。所以学校从这里开始的确是非常明智的虽然当时我不这么认为。但是想要了解或是明白8086的设计那么也就要带出另外的那些更为底层的计算机指令集机器语言引脚门电压等等。当然我不是说这些不重要但是如果有这些基础的确可以加快加深8086以及其他系列的一些知识的理解。这里就略过这些东西。一是自己能力不足二是我觉得现在谈这个真的不是很重要。想想这2个原因其实也就一个 )。存储器是计算机的核心部件。现在的计算机围绕存储器来构建所以必须从存储器开始。在CPU眼中存储器保存的东东。只有2种指令和数据。当然退而求其次存储器中没有指令和数据之分只有0和1。这个世界的确是非常的和谐简单。那么CPU是如何分别这2种东东呢。这完全取决于CPU自己。当遇到二进制信息如1000100111011000时CPU可以把他看成大小为89D8H的数据处理也可以看做是指令mov ax bx来执行。存储器被划分为若干个存储单元一般来说一个存储单元大小为一个Byte。一个拥有128个存储单元的存储器。容量为128个字节。那么存储器被划分为了多个存储单元从0开始排序。CPU从内存中读取数据首先需要的就是存储单元的地址也就是CPU需要知道读取哪一个存储单元中数据。当然CPU不仅仅需要知道地址还需要告诉存储器要做什么操作是读还是写而且在计算机中也不仅仅只有一个存储器也不仅仅只有一种设备需要去操作。还需要指明对哪一个设备操作。所以。CPU对数据的读写需要以下的基本信息。存储单元地址地址设备选择读写命令控制读写的数据数据那么CPU通过什么来将这些信息传递给设备呢CPU计算机中的这些设备处理传输信息都是电信号,连接这些设备的导线为总线。总线根据传送信息不同分为地址总线控制总线数据总线。CPU从3号单元中读取数据过程CPU通过地址线将地址信息3发出CPU通过控制线发出读命令选中存储器通知到读数据将3号单元中的数据8通过数据线交给CPU既然知道了CPU读取数据的流程那么CPU能够找到多少个这样的地址是我们遇到的下面的问题。显然地址总线上能传递多少种不同的地址那么CPU就可以找到多少个存储单元的地址。如果CPU有10根地址总线1根能够提供2种信号1、0。那么10根就能提供2^10个也就是1024种。那么我们就说CPU的寻址大小为1K。或这个CPU的地址空间为1K。CPU与各个设备之间传递数据是通过数据总线进行。所以数据总线的宽度决定了CPU和外界数据传递的速度。我们很容易想到16根数据线可以一次传递2个字节。同样类似的。控制总线的宽度也决定了CPU对外部的控制种类。所以决定了CPU对外部的控制能力。当我们买电脑的时候。除了考虑CPU以外还需要搞定一个好的主板。当我们打开电脑之后看到的首先也是这个大家伙。而且如果你的电脑主板被烧坏的话那么基本上这个电脑主机也就完蛋了。可见主板在现在计算机中的地位。主板最基本的作用就是通过它把计算机的核心部分通过总线地址、控制、数据总线相连并且还需要为扩展预留接口。当我们买到一个主板时会看到有非常多的接口卡槽而事实上CPU控制这些设备就是通过总线去控制这些接口卡来进行的。上面的那些东东不管是显卡声卡网卡。都有两点相同。都和CPU总线相连CPU进行读写操作是都是通过控制线发出内存读写命令。也就是说CPU操作他们的时候都把他们当做内存来对待。把这些不同的设备组成一个大的逻辑存储器。这个逻辑存储器就是我们的地址空间。在上面这个图中所有的物理存储器都被看作一个由许多存储单元构成的逻辑存储器每一个都有一个地址段也就是一段地址空间。CPU往这段空间中读写数据其实就是读写了物理存储器。那么我们可以看出。CPU的地址总线宽度是在是太重要了。在我们的8086中地址总线宽度为20也就是可以搞定2^20个不同的地址。也就是说8086的地址空间大小为1MB。不同的计算机系统的地址空间分配是不同的。如下是8086的看到这幅图那么我们就可以从容的写一个HelloWorld程序输出到我们的屏幕上。因为我们可以直接在A0000~BFFFF中写数据而这些数据会跑到显卡中最后跑到屏幕上。那么我们现在明白了。CPU访问内存单元时需要给出这个内存单元的地址所有的内存单元构成存储空间是一个一维线性空间。每一个内存单元在这个空间中都有唯一地址这个唯一的地址就是物理地址。CPU通过地址总线送入存储器的。必须是一个内存单元的物理地址。同样这个地址在CPU内部中必须搞定这个地址再发送到地址总线之前。不同的CPU形成物理地址的方式也不同。而我们现在所考虑的就是8086是如何搞定这个物理地址的。那么我们又必须要了解些其他知识。8086是16位结构的CPU。那么他的意思是运算器一次最多处理16为数据寄存器最大宽度16位寄存器和运算器之间的内部线为16位。也就是说8086一次只能处理传输存储寄存器16位的地址。从我们大多数人的思维一个地址也就是一个指针最好和一个整数的长度一致。但是我们知道8086的地址总线为20位。达到了1MB的寻址。为什么会是这样的呢在很久很久以前当CPU的技术从8位发展到16位的时候地址总线本来也应该是16位也就是64K。但是大家发现这个太小了。然后intel决定采用1M。这个在当时的确是非常的大而盖茨甚至还有“无论对谁来说,640K内存都足够了”的言论。当然。这里并没有不敬在里面。只能说计算机的发展实在是太迅速了。所以地址总线的宽度为20位。但是这个带来了一个问题。面对16位的ALU如何来填补这个呢Intel设计了一种在当时看来一个非常巧妙的方法。也就有了我们现在看到的8086地址翻译。16位段地址16位偏移来形成这个20位的地址。随着计算机的发展我们越来越的希望计算机能够处理更多的事情伴随着CPU运算能力的提升。整个计算机的性能主要是卡在了CPU利用率上。面对“优秀”的CPU我们并没有充分的利用它实在是暴殄天物。所以我们希望我们的CPU能够给我们做更多的事情最好不要停。就像老早的资本家总是希望工人天天干活一样。不幸的是在当时的DOS操作系统下面。是单任务的。并不支持多任务。我们不能在听音乐的时候打开文本文档编辑。那么构造计算机的那些老前辈们想到的一个招数是时间片。每个程序都有机会获得这些时间片通过不断的轮询只要这个时间足够短那么人类是无法觉察出来。我们会有这个错觉好多的程序再一起执行。虽然我们在DOS可以利用内存驻留的技术实现类似的体验但是这个却并不是安全的。因为我们往往是通过修改中断向量表来做。我们无法保证其他程序是否正确修改中断向量表。而且如果我们的程序通过这里修改并成为我们程序的一部分时也就意味着其他的程序也能这么做。那么我们很难保证计算机中的各个程序能够互不影响。同样包括操作系统。这也就意味着我们无法构建一个安全的环境让我们的操作系统以及各个程序不互相影响制约。同样当我们将CPU时间片分给那些程序的时候。在一开始的初期并不是我们这样的多任务。而是一种叫做协作式多任务。操作系统控制CPU的时间片而每个程序形成一个队列。每个程序在获得CPU时间后必须归还CPU。注意这里的归还是程序本身的事情而不是操作系统的事情。也就是说如果有一个程序不想归还时间片或是他不小心陷入一个死循环那么别的程序也就无法执行甚至包括操作系统自己本身。因为他自己也在那个队列里面傻等。那么这整个世界也就变得混沌不堪了。因为操作系统并不能识别哪一个程序是不良的程序。造成这些问题的根本原因在于我们并没有等级的概念。也就是说整个硬件资源对我们的每一个程序都是平等的。事实上8086下我们看到了任何一个程序都可以通过段偏移来实现访问整个地址空间。甚至是中断向量表还有硬件。所以在这个原始社会下。我们达到了真正意义上的公平但是也验证了低下生产力的现实。所以为了实现这些功能。必须有硬件的支持。那么80386也就跳入了我们的视野。事实上他就是为了支持我们的想法实现多任务实现各个任务互不影响而诞生的。在开始介绍80386之前。我们好好思考一下我们需要实现的功能。实现等级观念有些程序需要有特权。执行一些系统的核心部分而一些程序必须在一些限制上运行。具体的讲则是有些地址空间不能访问有些寄存器不能读取或是修改。需要提供一个复杂的内存管理来帮助我们实现各个任务的独立的地址空间。这样可以保证一个任务不会随意修改另一个任务的数据。其实让我们说到根上。其实我们需要实现针对地址空间的保护。只有实现了这种保护机制我们才能保护操作系统的代码维护操作系统的特权。而有了操作系统的支持下我们才能继续去谈内存管理和保护操作系统之上的各种程序之间不互相影响。搞定了这些之后我们就不难理解8086的缺陷以及80386为什么要实现这些功能了。当然。这个过程肯定不会像8086那样平滑。因为这完全是一个不同的设计思路思想。即使他披着一张似乎有着段加偏移量的一层皮。好吧让我扯的远一点。随着生产力的发展有一个超牛B的程序他想做其他程序的老大。让他们乖乖听话。而这个程序就是操作系统。可惜啊在原始社会生产力不足。并不能让所有的人都听话。让我们暂时告别原始社会我们来到了奴隶社会。其实计算机发展也和人类社会一样。我们出现了阶级让我们仔细看看这个维持统治阶级工具的核心——80386体系结构。80386以后CPU历经多种改进虽然速度提高了几个量级功能上也有很多改进。但并没有重大的质的改变。所以统称为i386结构如果除去大量的3D密集型图形图像运算并行等之后。其实只是相当于一个更更快速80386而已。80386是32位的CPU。也就是ALU数据总线是32位。这里我们终于在地址总线和数据总线一致了。都是32位。当面对地址总线的宽度达到32位。也就是CPU的寻址能力达到了2^32 4G。这的确是一个相当大的空间。为了保证这个空间的和谐。80386增加了一个叫做保护模式的一个名词。但是为了和之前的8086体系兼容又有了实模式和虚拟86模式。这里只是简单的介绍。实模式没有什么其他的意义。只是比原来的8086寄存器大了。CPU快了。一些指令和操作更加方便容易了。保护模式则是重点。事实上没有保护模式现代操作系统是无法构建的在x86下。既然我们有了这么大的一个空间那么该如何分配呢很容易的想法是我们可以把地址空间平均分给各个任务。那么他们都有了各自的地址他们只要在各自地方做就好了。但是这个同样假设这各个程序都是善良的。而且对于各种各样的硬件又该如何做呢他们所映射的CPU地址空间该如何保护而且当我们真正的运行着相当多的任务的时候我们的内存是否还能经得住呢而这些问题归根到底是因为CPU的地址空间每一个任务都是可见的那么就想通过各种各样的渠道来搞破坏。所以为了构建操作系统的核心地位以及各个任务之间的互不干涉。操作系统中最重要的概念登场了——虚拟存储技术。其实这是一个很简单的道理。统治阶级操作系统为了维持他的权威他把珍贵的核心资源CPU地址空间和被统治阶级用户程序之间加了一个中间层从而核心资源CPU地址空间对被统治阶级用户程序是透明的而统治阶级操作系统所独占。然后他又对所有的被统治阶级用户程序整了一个弥天大谎:“你们有整个4G的CPU地址空间。而且你们在跑的时候程序运行是独占所有资源的”。然后被统治阶级用户程序就在这个统治阶级操作系统下勾画的这个美丽的世界下安分的生活下去了至少是绝大多数。这里的表达不准确这里的用户程序其实我的意思是任务或是说在普通程序我们可以写这么一个地址在高地址空间上只是如果我们去操作他操作系统不让我们这么做。但是我们还是能“看”到的。感觉还是不合适这段可以去掉)OK。操作系统给这个世界整个一个这么大的谎言。现在计算机的核心资源都在他的掌握下了他的目的终于达到了。但是就和再苛刻的资本家也得给工人发工资一样。如果没有了被统治阶级统治阶级还有什么存在意义呢所以操作系统也必须给用户程序一个高效的获得CPU资源的方式。也就是要给用户

相关新闻

机器学习生产化:从模型部署到系统级稳定性实战指南

机器学习生产化:从模型部署到系统级稳定性实战指南

1. 项目概述:当模型走出笔记本,真正开始“呼吸”现实空气你有没有经历过这样的时刻?花了三个月时间调参、优化、交叉验证,AUC冲到0.92,特征重要性图漂亮得能当屏保,团队在周会上集体鼓掌,PM当场…

2026/7/4 17:55:14阅读更多 →
DayZ单机离线模式终极指南:5分钟开启完整免费生存体验

DayZ单机离线模式终极指南:5分钟开启完整免费生存体验

DayZ单机离线模式终极指南:5分钟开启完整免费生存体验 【免费下载链接】DayZCommunityOfflineMode A community made offline mod for DayZ Standalone 项目地址: https://gitcode.com/gh_mirrors/da/DayZCommunityOfflineMode 想要在DayZ中享受无网络延迟、…

2026/7/4 17:55:14阅读更多 →
彻底告别网络依赖:DBeaver驱动包一键配置终极指南

彻底告别网络依赖:DBeaver驱动包一键配置终极指南

彻底告别网络依赖:DBeaver驱动包一键配置终极指南 【免费下载链接】dbeaver-driver-all dbeaver所有jdbc驱动都在这,dbeaver all jdbc drivers ,come and download with me , one package come with all jdbc drivers. 项目地址: https://gitcode.com/…

2026/7/4 17:55:14阅读更多 →
虚幻引擎蓝图调试与跨设备迁移实战指南

虚幻引擎蓝图调试与跨设备迁移实战指南

1. 蓝图拷贝与打印信息基础在虚幻引擎(UE)开发中,蓝图系统作为可视化脚本工具,其复用性和调试能力直接影响开发效率。很多开发者常遇到两个核心问题:蓝图资源能否跨设备复用?如何有效输出调试信息&#xff…

2026/7/4 19:10:22阅读更多 →
UnityHDRP数字人开发全流程与AI集成实战

UnityHDRP数字人开发全流程与AI集成实战

1. 数字人技术现状与UnityHDRP的定位 当前数字人技术已经形成三大主流技术路线:Unity轻量化方案、UE高精度方案和视频推理方案。作为一名在实时渲染领域工作多年的开发者,我认为Unity方案在快速迭代和跨平台适配方面具有不可替代的优势,特别是…

2026/7/4 19:10:22阅读更多 →
Godot引擎2D游戏开发:角色控制与场景切换实战

Godot引擎2D游戏开发:角色控制与场景切换实战

1. 项目概述 作为一名独立游戏开发者,我最近用Godot引擎完成了一个2D平台跳跃游戏的开发。这个系列教程将完整还原我的开发过程,从零开始带你掌握Godot 2D游戏开发的核心技能。第四部分我们将重点解决游戏中最关键的几个功能:角色移动控制、碰…

2026/7/4 19:10:22阅读更多 →
UE5 C++ 射线检测多物体:LineTraceMultiByObjectType详解

UE5 C++ 射线检测多物体:LineTraceMultiByObjectType详解

1. UE5 C 射线检测多物体的按通道与按对象类型 LineTraceMultiByObjectType 详解在虚幻引擎5(UE5)开发中,射线检测(Line Trace)是最常用的物理检测手段之一。今天我要分享的是如何通过C实现多物体射线检测,…

2026/7/4 19:10:22阅读更多 →
Unity中TextMeshPro Button文本动态修改指南

Unity中TextMeshPro Button文本动态修改指南

1. 项目概述在Unity游戏开发中,TextMeshPro(简称TMP)作为新一代文本渲染方案,已经逐渐取代传统的UI Text组件。Button作为最常用的交互控件之一,其文本内容经常需要在运行时动态修改。这个看似简单的需求,在…

2026/7/4 19:10:22阅读更多 →
C#集成YOLOv8目标检测:基于ONNX Runtime的工业应用实践

C#集成YOLOv8目标检测:基于ONNX Runtime的工业应用实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你是一名C#开发者,想在自己的WinForm或WPF项目中加入目标检测能力,比如识别生产线上的零件瑕疵、统计仓库…

2026/7/4 19:05:22阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/4 14:25:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/4 14:57:00阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →