“Basic Theory Of Computer Science”的版本间差异

来自osdev
跳到导航 跳到搜索
 
(未显示2个用户的3个中间版本)
第1行: 第1行:
{{In_Progress}}
{{In_Progress}}


本文旨在向不熟悉计算机理论,计算的基本概念以及计算机系统的组织和结构的新用户解释。
本文旨在向不熟悉计算机理论的新用户解释计算和计算机系统的基本概念和组织结构。


创建本文的想法是受到OSDev.org上此类理论文章和页面的普遍混乱的启发。
创建本文的想法是受到OSDev.org上此类理论文章和页面普遍混乱的启发。
而且只要理论对初学者来说 '非常' 重要 '(并且只要他们通常从未读过严肃的 [[books]])',这种理论材料的混乱结构就会引起全面研究OS开发的问题。 但是这篇文章是为了解决这个问题
理论对初学者来说一直'''非常'''重要''(并且初学者通常从未读过严肃的 [[books|计算机书籍]])'',这种理论材料的混乱结构会引起后续研究OS开发的问题。 这篇文章正是为了解决这个问题


不可能在一篇文章中研究物理学,电路和计算机科学的所有主题。 相反,所有这些主题都将被简短地触及。
不可能在一篇文章中研究物理学,集成电路和计算机科学的所有主题。 相反,在这里所有这些主题都将被简短地触及。
要按有组织的顺序这样做,我们必须将系统划分为各个层次,每个层次都有自己的规则和目标。 为此,我们必须 “管理系统的复杂性”
要按有组织的顺序这样做,我们必须将系统划分为各个层次,每个层次都有自己的规则和目标。 为此,我们必须 '''掌握系统的复杂性 '''


== 管理电子系统的复杂性 ==
== 掌握电子系统的复杂性 ==
[[File:Abstraction_Layers.png|thumb|300px|right|抽象级别]]
[[File:Abstraction_Layers.png|thumb|300px|right|抽象级别]]
你用来阅读本文 (让我猜这是一台个人计算机)的系统是人类有史以来最复杂的系统之一。 试想几个单独的集成电路上的数千亿个晶体管联合在一起,以千兆赫的速率运行,一眨眼就运行了数亿行代码 -- 数十万计算机科学家、工程师和程序员团结一致,在不到80年的时间里让这一奇迹成真……
你用来阅读本文''(我猜这是一台个人计算机)''的系统是人类有史以来最复杂的系统之一。 试想几个单独的集成电路上的数千亿个晶体管联合在一起,以千兆赫的速率运行,一眨眼就运行了数亿行代码 -- 数十万计算机科学家、工程师和程序员团结一致,在不到80年的时间里让这一奇迹成真……


但是,我敢打赌,使用这样的 “奇迹” 不会遇到任何麻烦。 它的主要原因是,尽管你没有真正意识到这一点,但你正在 “管理系统的复杂性”。 它让你只需点击几下鼠标就能打开这篇文章,而不必记住细节,例如,你的浏览器用来从网站上获取这篇文章的HTML协议。
但是,我敢打赌,你使用这样的 “奇迹” 不会遇到任何麻烦。 能实现这一奇迹的主要原因是,尽管你没有真正意识到这一点,但你正在 “掌握系统的复杂性”。 它让你只需点击几下鼠标就能打开这篇文章,而不必记住细节,例如,HTML协议:你的浏览器用来从网站上获取这篇文章的协议。
相反,你将此任务委托给你的 “web浏览器”- 这是一个 ''' 应用软件 ''' [[File:Application_Software.png | 20px]],它使用 ''' 操作系统 ''' [[File:Operating_System.png | 20px]] 的能力来运行,它使用 ''' 架构 ''' [[File:Architecture.png | 20px]] 层的定义和规则,依此类推
相反,你将此任务委托给你的 “web浏览器”- Web浏览器是一个 ''' 应用软件 ''' [[File:Application_Software.png | 20px]],它使用 ''' 操作系统 ''' [[File:Operating_System.png | 20px]] 的能力来运行,而操作系统又使用 '''指令架构''' [[File:Architecture.png | 20px]] 层的定义和规则,依此类推


通常开发者为一个一般的电子计算系统定义9层抽象:
通常开发者为一个一般的电子计算系统定义9层抽象:
# ''应用软件'' [[File:Application_Software.png|20px]]
# '''应用软件''' [[File:Application_Software.png|20px]]
#: 使用操作系统功能解决用户问题的程序
#: 使用操作系统的功能,并帮助用户解决问题的程序
# ''操作系统 ''' [[File:Operating_System.png|20px]]
# '''操作系统 ''' [[File:Operating_System.png|20px]]
#: 操作计算机硬件,管理系统资源并为应用软件提供API和驱动程序
#: 操作计算机硬件,管理系统资源并为应用软件提供API和驱动程序
# '''指令架构 Architecture''' [[File:Architecture.png|20px]] (也称为 [[Instruction Set Architecture |指令集体系架构 ISA]])
# '''指令架构 Architecture''' [[File:Architecture.png|20px]] (也称为 [[Instruction Set Architecture |指令集体系架构 ISA]])
#: 从程序员的角度描述电子系统。定义指令集,可见寄存器。由微架构实现
#: 从程序员的角度描述电子系统。定义指令集,可见寄存器。由微架构实现
# '''微架构 Microarchitecture''' [[File:Microarchitecture.png| 20px]]
# '''微架构 Microarchitecture''' [[File:Microarchitecture.png| 20px]]
#: 使用逻辑元素实现体系结构
#: 微架构使用逻辑元素实现体系结构
# '''逻辑门 Logic''' [[File:Logic.png | 20px]]
# '''逻辑门 Logic''' [[File:Logic.png | 20px]]
#: 各类组合数字电路以创建功能块,例如加法器,多路复用器等。
#: 逻辑门指各类数字电路的组合,以创建功能块,例如加法器,multiplexers多路复用器等。
# '''数字电路 Digital Circuits''' [[文件: Digital_Circuits.png | 20px]]
# '''数字电路 Digital Circuits''' [[文件: Digital_Circuits.png | 20px]]
#: 使用模拟电路创建数字电路模型,可用于数字设计
#: 数字电路层使用模拟电路创建数字电路模型,可用于数字设计
# '''模拟电路' '[[File:Analog_Circuits.png|20px]]
# '''模拟电路' '[[File:Analog_Circuits.png|20px]]
#: 组合设备以创建具有所需属性的电路
#: 模拟电路层组合设备以创建具有所需属性的电路
# '''设备器件 Devices''' [[File:Devices.png|20px]]
# '''设备器件 Devices''' [[File:Devices.png|20px]]
#: 使用物理模型来创建可用于电路的设备,例如晶体管和二极管
#: 设备器件层使用物理模型来创建可用于电路的设备,例如晶体管和二极管
# ''' [[#Physics layer| 物理]]''' [[File:Physics.png | 20px]]
# ''' [[#Physics layer| 物理]]''' [[File:Physics.png | 20px]]
#: 探索世界并将获得的知识系统化到相互关联的规则和理论中 <abbr title = “意味着其他人不必自己获得该知识”> 轻松地 </abbr> 由其他人研究
#: 物理层探索世界并将获得的知识系统化到相互关联的规则和理论中 <abbr title = “意味着其他人不必自己获得该知识”> 轻松地 </abbr> 由其他人研究
----
----
如你所见,每个抽象级别都使用底层级别的模型和功能 (例如,“逻辑”层 使用 “数字电路”层,就像 “应用软件”层 使用 “操作系统”层 一样)
如你所见,每个抽象级别都使用底层级别的模型和功能 (例如,'''逻辑'''层 使用 '''数字电路''' 层,就像 '''应用软件''' 层 使用 '''操作系统''' 层一样)
此外,每个级别都隐藏了上面级别的实现细节 (例如,用户不必费心用 “计算机”层的形式表示他们的请求,只需要 “应用软件”层 提供了人类可理解的GUI)
此外,每个级别都隐藏了上面级别的实现细节 (例如,用户不必费心用 “计算机”的形式表示他们的请求,只需要 '''应用软件''' 层 提供了人类可理解的GUI)


这意味着每一层都完成了两个任务:
这意味着每一层都完成了两个任务:
* ''' 为上层提供简化的接口 '''
* '''为上层提供简化的接口'''
*: 例如,你的PC硬盘上没有 “文件”-仅能按指定顺序写入了一些字节。 “文件” 只是在物理驱动器上存储文件的抽象模型,由 “文件系统” 实现- 文件是你的 “操作系统” 的一部分。因此,“文件系统” 通过 “实现简单的文件I/o” 为应用软件提供了非常方便的 “界面接口”。
*: 例如,其实你的PC硬盘上没有''文件''这个实体-它仅能按指定顺序写入了一些字节罢了。 ''文件''只是在物理驱动器上存储文件的抽象模型,由 '''文件系统''' 实现- 文件是你的 “操作系统” 的一部分。因此,“文件系统” 通过 “实现简单的文件I/O” 为应用软件提供了非常方便的 “界面接口”。
* ''' 隐藏本层的实现细节并对其进行管理 '''
* '''隐藏本层的实现细节并对其进行管理'''
*: 例如,“文件系统” 还包含用于不同类型的存储设备的驱动程序,例如硬盘驱动器,光盘驱动器等。 每个都有自己的接口要处理。 但是,作为用户,你并不需要牢记这些细节。 因此,'''filesystem''' 负责处理它,'''details''' 向用户隐藏此类详细信息 ''','''管理''' 所有这些低级事物
*: 例如,“文件系统” 还包含用于不同类型存储设备的驱动程序,例如硬盘驱动器,光盘驱动器等。 每个都有自己的接口要处理。 但是,作为用户,你并不需要牢记这些细节。 这里'''文件系统''' 负责向用户'''隐藏这些细节''','''管理''' 所有这些低级事物


''由于本教程是为操作系统和应用程序开发人员编写的,因此将跳过对三个较低层次结构的仅描述以下内容''
''由于本教程是为操作系统和应用程序开发人员编写的,因此将跳过对三个较低层次结构的描述,仅简述以下内容''


=== 数字电路 ===
=== 数字电路 ===
[[File:Analog_Digital_Compare.png|thumb|300px|right|复杂的模拟信号和数字信号之间是有差异的。 虽然模拟信号被表面上似乎是完全混乱的,但数字信号仍然是可以理解的]]
[[File:Analog_Digital_Compare.png|thumb|300px|right|复杂的模拟信号和数字信号之间是需要做差异理解的。 虽然有时从表面上看模拟信号似乎是完全混乱的,但其中的数字信号仍然是可以理解的]]
如你所知,所有的现代计算机都是使用数字逻辑实现的,但是为什么呢?
如你所知,所有的现代计算机都是使用数字逻辑实现的,但是为什么呢?


以下是几个主要原因:
以下是几个主要原因:
# 数字信号比模拟信号更 “稳定” 和 “可靠”,因为它们不太容易产生失真,噪声和干扰。
# 数字信号比模拟信号更 “稳定” 和 “可靠”,因为它们不太容易产生失真,噪声和干扰。
# 数字电路使用不同的技术在硬件中设计和实现相对“容易” 和 “便宜”
# 使用不同的技术在硬件中设计和实现数字电路相对“容易” 和 “便宜”
# 不同的数字电路可以 “轻松组合”,创建更复杂的电路。
# 不同的数字电路可以 “轻松组合”,创建更复杂的电路。



2022年1月29日 (六) 00:42的最新版本

这个页面正在建设中! 此页面或部分内容仍在改进中,因此可能还不完整。 其内容可能会在不久的将来更改。

本文旨在向不熟悉计算机理论的新用户解释计算和计算机系统的基本概念和组织结构。

创建本文的想法是受到OSDev.org上此类理论文章和页面普遍混乱的启发。 理论对初学者来说一直非常重要(并且初学者通常从未读过严肃的 计算机书籍),这种理论材料的混乱结构会引起后续研究OS开发的问题。 这篇文章正是为了解决这个问题

不可能在一篇文章中研究物理学,集成电路和计算机科学的所有主题。 相反,在这里所有这些主题都将被简短地触及。 要按有组织的顺序这样做,我们必须将系统划分为各个层次,每个层次都有自己的规则和目标。 为此,我们必须 掌握系统的复杂性

掌握电子系统的复杂性

抽象级别

你用来阅读本文(我猜这是一台个人计算机)的系统是人类有史以来最复杂的系统之一。 试想几个单独的集成电路上的数千亿个晶体管联合在一起,以千兆赫的速率运行,一眨眼就运行了数亿行代码 -- 数十万计算机科学家、工程师和程序员团结一致,在不到80年的时间里让这一奇迹成真……

但是,我敢打赌,你使用这样的 “奇迹” 不会遇到任何麻烦。 能实现这一奇迹的主要原因是,尽管你没有真正意识到这一点,但你正在 “掌握系统的复杂性”。 它让你只需点击几下鼠标就能打开这篇文章,而不必记住细节,例如,HTML协议:你的浏览器用来从网站上获取这篇文章的协议。 相反,你将此任务委托给你的 “web浏览器”- Web浏览器是一个 应用软件 Application Software.png,它使用 操作系统 Operating System.png 的能力来运行,而操作系统又使用 指令架构 Architecture.png 层的定义和规则,依此类推

通常开发者为一个一般的电子计算系统定义9层抽象:

  1. 应用软件 Application Software.png
    使用操作系统的功能,并帮助用户解决问题的程序
  2. 操作系统 Operating System.png
    操作计算机硬件,管理系统资源并为应用软件提供API和驱动程序
  3. 指令架构 Architecture Architecture.png (也称为 指令集体系架构 ISA)
    从程序员的角度描述电子系统。定义指令集,可见寄存器。由微架构实现
  4. 微架构 Microarchitecture Microarchitecture.png
    微架构使用逻辑元素实现体系结构
  5. 逻辑门 Logic Logic.png
    逻辑门指各类数字电路的组合,以创建功能块,例如加法器,multiplexers多路复用器等。
  6. 数字电路 Digital Circuits Digital Circuits.png
    数字电路层使用模拟电路创建数字电路模型,可用于数字设计
  7. 模拟电路' 'Analog Circuits.png
    模拟电路层组合设备以创建具有所需属性的电路
  8. 设备器件 Devices Devices.png
    设备器件层使用物理模型来创建可用于电路的设备,例如晶体管和二极管
  9. 物理 Physics.png
    物理层探索世界并将获得的知识系统化到相互关联的规则和理论中 轻松地 由其他人研究

如你所见,每个抽象级别都使用底层级别的模型和功能 (例如,逻辑层 使用 数字电路 层,就像 应用软件 层 使用 操作系统 层一样) 此外,每个级别都隐藏了上面级别的实现细节 (例如,用户不必费心用 “计算机”的形式表示他们的请求,只需要 应用软件 层 提供了人类可理解的GUI)

这意味着每一层都完成了两个任务:

  • 为上层提供简化的接口
    例如,其实你的PC硬盘上没有文件这个实体-它仅能按指定顺序写入了一些字节罢了。 文件只是在物理驱动器上存储文件的抽象模型,由 文件系统 实现- 文件是你的 “操作系统” 的一部分。因此,“文件系统” 通过 “实现简单的文件I/O” 为应用软件提供了非常方便的 “界面接口”。
  • 隐藏本层的实现细节并对其进行管理
    例如,“文件系统” 还包含用于不同类型存储设备的驱动程序,例如硬盘驱动器,光盘驱动器等。 每个都有自己的接口要处理。 但是,作为用户,你并不需要牢记这些细节。 这里文件系统 负责向用户隐藏这些细节管理 所有这些低级事物

由于本教程是为操作系统和应用程序开发人员编写的,因此将跳过对三个较低层次结构的描述,仅简述以下内容

数字电路

复杂的模拟信号和数字信号之间是需要做差异理解的。 虽然有时从表面上看模拟信号似乎是完全混乱的,但其中的数字信号仍然是可以理解的

如你所知,所有的现代计算机都是使用数字逻辑实现的,但是为什么呢?

以下是几个主要原因:

  1. 数字信号比模拟信号更 “稳定” 和 “可靠”,因为它们不太容易产生失真,噪声和干扰。
  2. 使用不同的技术在硬件中设计和实现数字电路相对“容易” 和 “便宜”
  3. 不同的数字电路可以 “轻松组合”,创建更复杂的电路。

这些事实是当今数字逻辑控制建立在模拟电路上的主要原因。

那么,是什么帮助数字逻辑获得如此吸引人的属性呢? 它仅运行于两个信号状态-低和高,而不考虑像模拟电路那样宽的电压频谱范围。