手写操作系统(2)——代码是怎么运行的?(上)

简介: 手写操作系统(2)——代码是怎么运行的?

从0和1到代码

现在可以开始一个问题了:一个代码到底是怎么执行起来的?CPU内部到底是怎么工作的?

我们先来看看计算机内部的基本元素“0”和“1”。电影片段里黑客出场时一般都少不了如下图所示的“数字雨”特效:


0和1

那么,计算机中的“0”和“1”到底是什么

简单,就是低电平和高电平的意思

啥意思?

0其实就代表低电平,1代表高电平。这里所说的电平,意指电压的大小(单位,福特,用符号V表示),而高低其实是一种对比。

比如0.2V是低电平的话,那么5V可能就是高电平了。注意,我说的是“可能”,难道单凭电压大小还不能确定是不是高电平了?

是的,没错。高低电平的数值是由具体的电路来确定的一般两者都有一个阈值,当电压大于某个阈值时,即是高电平;当电平小于某个阈值时,即是低电平。

计算机中的0和1是人类为了理解方便,给低/高电平取的别名。其实两种称呼分别代表了数字电路和模拟电路。

数字电路是电路是以“0”和“1”即相应的逻辑符号来表示的,如下图:

模拟电路是电路中以电压高低和电流等参数来表示的,如下图所示:

那么数字电路和模拟电路有啥联系?

唔···其实可以看做建筑施工图和建筑实物图的关系:数字电路主要是表现其逻辑和功能,模拟电路是搞定采用什么材料什么方式来实现数字电路想要达到的结果!

现在可以开始考虑:高低电平如何实现的?

二极管

二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件,具有单向导电性。

什么是单向导电性?先看下图,左图是一个二极管的实物图,右图是逻辑电路图(即抽象的):


注:二极管还可以分为整流二极管、稳压二极管、发光二极管等等,这里只介绍普通二极管。

电流可以从正(+)极流向负(-)极,此时处于导通状态;但反过来却不行,此时处于截止状态。这就是所谓的单向导电性

附一张二极管的伏安特性图,看不懂也没关系,眼熟就好:

由于单向导电性,二极管就像是一个开关:

当处于导通状态时,开关打开,两边的电压大小一致。

如正极(+)电压为5.2V,那么负极(-)也为5.2V。

注:这里并不准确,因为还涉及正负极的电压大小、阈值电压等等,只考虑理想情况下,其他的可自行百度探索。

如果我们进一步把5.2V定义为高电平,那么此时正负极都是“1”!

当处于截止状态时,开关关闭,两边电压大小不一致

如果正极只有0.2V,那么此时正负极可能都是低电平,也就是“0”!

逻辑运算与门电路

我们通过二极管可以获得“0”和“1”,但是光有“0”和“1”还不够,计算机怎么进行亿万级别的运算的?

这得慢慢来,要进行运算离不开逻辑运算也就是门电路,常见的逻辑运算有与、或、非、异或、同或。它们的真值表与逻辑符号如下。

不用管逻辑符号,重点是真值表。

先以“与”来讲解

“与”,即当且仅当所有的输入都为“1”时,输出才为“1”,否则输出为“0”。现在看真值表,是不是这个意思?

等等,好像我们是从二极管过渡到这的吧?这个与门可以用二极管实现?

当然啦!下图就是一个利用二极管和电阻(不用管)实现的简单与门!

其中,A、B为输入,Y为输出。

我们来分析一下

若A为高电平“1”,B为低电平“0”,此时,D1截止状态,D2处于导通状态,Y就和B电压一致,也为低电平“0”,所以输出为“0”;


若A为低电平“0”,B为高电平“1”,此时,D1处于导通状态,D2截止状态,Y就和A电压一致,也为低电平“0”,所以输出为“0”;

若A为高电平“1”,B为高电平“1”,此时,D1和D2都处于截止状态,Y就和VCC电压基本一致,即是高电平“1”,所以输出为“1”;

注:判断电压的大小涉及电路中电流和电压的关系,简单来说,在一个电路中,电阻越大,那么该电阻所占据的电压也就越大,当二极管处于截止状态时,电阻可以看做超级大,所以R1分的电压就很小,输出Y和电源VCC基本一致。若想进一步了解请百度探索或留言,我继续更新。


与门在数字电路中还可以表示为“&”:

再来分析一个或门:当输入中至少有一个“1”时,输出为“1”,若全为“0”,则输出“0”。

刚刚的与门展示的是两个输入,现在来看看四个输入!

简单分析一下,当ABCD四个都是输入低电平“0”时,四个二极管都处于截止状态,此时输出即为低电平“0”。

只有当其中任意一个不为低电平时,若A为高电平“1”,此时D1二极管导通,输出即为A的电平,即高电平“1”。

或门在数字电路中还可以表示为:

后面的非门之类的,单靠二极管就不太行了,就需要请出它的老哥——“三极管”,这里暂时不介绍,我们只需要知道:我们可以利用这些元器件构成如上表所展示的那些门电路,现在我们要做的就是思考如何利用这些门电路来进行代码的执行!

手写操作系统(2)——代码是怎么运行的?(中):https://developer.aliyun.com/article/1508452

相关文章
|
4天前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
9天前
|
存储 算法 安全
深入理解操作系统:从基础概念到代码实践
【9月更文挑战第23天】本文将带领读者深入探索操作系统的奥秘,从基础概念出发,逐步揭示操作系统的工作原理和设计哲学。我们将通过实际代码示例,展示操作系统如何与硬件交互、管理资源以及提供用户界面。无论你是计算机专业的学生还是对操作系统感兴趣的开发者,这篇文章都将为你打开一扇通往操作系统世界的大门。
46 16
|
5月前
|
算法 搜索推荐 开发工具
探索代码的奥秘:技术感悟与实践探索操作系统的心脏:内核
【5月更文挑战第31天】在数字世界的编织中,每一行代码都承载着创造者的智慧和汗水。本文将带你深入编程的核心,揭示那些隐藏在日常开发实践中的技术真谛。从算法的精妙到系统的架构,我们将一同探讨如何通过技术提升效率,解决问题,并在这个过程中获得个人成长。 【5月更文挑战第31天】本文深入剖析了操作系统的核心组件——内核,探讨了其设计哲学、功能职责以及在现代计算环境中的重要性。通过分析内核的工作原理和它如何与硬件、软件交互,我们将揭示这个隐藏在用户界面背后的力量之源。
|
29天前
|
存储 算法 Unix
探索操作系统:从理论到代码
【9月更文挑战第3天】操作系统是计算机的核心,它管理着硬件和软件之间的交互。本文将从理论出发,深入探讨操作系统的基本原理和功能,然后通过代码示例,展示操作系统是如何在实际中运作的。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深度理解。
|
2月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析的新手指南深入浅出操作系统:从理论到代码实践
【8月更文挑战第30天】在数据驱动的世界中,掌握数据分析技能变得越来越重要。本文将引导你通过Python这门强大的编程语言来探索数据分析的世界。我们将从安装必要的软件包开始,逐步学习如何导入和清洗数据,以及如何使用Pandas库进行数据操作。文章最后会介绍如何使用Matplotlib和Seaborn库来绘制数据图表,帮助你以视觉方式理解数据。无论你是编程新手还是有经验的开发者,这篇文章都将为你打开数据分析的大门。
|
2月前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化代码,增强功能深入理解操作系统:从用户空间到内核空间的旅程
【8月更文挑战第29天】本文将引导你深入理解Python装饰器的核心概念、应用场景及其对代码的优化作用。我们将从基础使用到高级应用逐步展开,通过实例展示如何利用装饰器提升代码的可读性和复用性,同时避免常见的陷阱。
|
4月前
|
IDE Oracle Java
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
Java 是一种跨平台的编程语言,可以在各种操作系统上运行。
|
3月前
|
开发工具
环境变量,环境变量就是在操作系统中记录的一些关键性信息,以辅助系统运行,env,echo $PATH可以取出环境变量,全局变量的使用方法是定义,什么时候用,什么时候取,export MYNAME=it
环境变量,环境变量就是在操作系统中记录的一些关键性信息,以辅助系统运行,env,echo $PATH可以取出环境变量,全局变量的使用方法是定义,什么时候用,什么时候取,export MYNAME=it
|
5月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
68 1
|
4月前
|
Linux Shell 程序员
【Linux操作系统】命令的运行原理
【Linux操作系统】命令的运行原理
下一篇
无影云桌面