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

来自osdev
跳到导航 跳到搜索
(创建页面,内容为“{{In_Progress}} This article is intend to explain to new users, who are unfamiliar with computer theory, basic concepts of computing and computer systems organization and structure. The idea of the creation of this article was inspired by the general disorganization of such kind of theoretic articles and pages at OSDev.org. And as long as theory is '''very''' important for beginners ''(and as long as they generally never ever read serious books)'', this c…”)
 
 
(未显示2个用户的4个中间版本)
第1行: 第1行:
{{In_Progress}}
{{In_Progress}}


This article is intend to explain to new users, who are unfamiliar with computer theory, basic concepts of computing and computer systems organization and structure.
本文旨在向不熟悉计算机理论的新用户解释计算和计算机系统的基本概念和组织结构。


The idea of the creation of this article was inspired by the general disorganization of such kind of theoretic articles and pages at OSDev.org.
创建本文的想法是受到OSDev.org上此类理论文章和页面普遍混乱的启发。
And as long as theory is '''very''' important for beginners ''(and as long as they generally never ever read serious [[books]])'', this chaotic structure of theoretic material will cause problems in comprehensive study of OS development. But this article is meant to fix the problem
理论对初学者来说一直'''非常'''重要''(并且初学者通常从未读过严肃的 [[books|计算机书籍]])'',这种理论材料的混乱结构会引起后续研究OS开发的问题。 这篇文章正是为了解决这个问题


It's impossible to study all the topics of physics, circuitry and computer science in within one article. Instead, all these subjects will be briefly touched.
不可能在一篇文章中研究物理学,集成电路和计算机科学的所有主题。 相反,在这里所有这些主题都将被简短地触及。
To do so in organized order, we must divide system into layers, each having its own rules and aims. To do so, we must '''manage complexity of the system'''
要按有组织的顺序这样做,我们必须将系统划分为各个层次,每个层次都有自己的规则和目标。 为此,我们必须  '''掌握系统的复杂性 '''


== Managing the complexity of electronic systems ==
== 掌握电子系统的复杂性 ==
[[File:Abstraction_Layers.png|thumb|300px|right|Levels of abstraction]]
[[File:Abstraction_Layers.png|thumb|300px|right|抽象级别]]
The system you are using to read this article ''(let me guess it's a personal computer)'' is one of most complex systems ever created by the mankind. Just imagine hundreds of billions transistors on several separate integrated circuits joint together and operating at gigahertz rates, running hundreds of millions lines of code in a blink of an eye - hundreds of thousands of computer scientists, engineers and programmers united their efforts to make this miracle come true in less than 80 years...
你用来阅读本文''(我猜这是一台个人计算机)''的系统是人类有史以来最复杂的系统之一。 试想几个单独的集成电路上的数千亿个晶体管联合在一起,以千兆赫的速率运行,一眨眼就运行了数亿行代码 -- 数十万计算机科学家、工程师和程序员团结一致,在不到80年的时间里让这一奇迹成真……


However, I bet you are not experiencing any kind of trouble with using such a "miracle". The main reason of it is that, despite you don't realize it really, you are '''managing complexity of your system'''. It have let you to open this article in few mouse clicks without having to keep in mind details of, for example, the HTML protocol your browser used to obtain this article from the website.
但是,我敢打赌,你使用这样的 “奇迹” 不会遇到任何麻烦。 能实现这一奇迹的主要原因是,尽管你没有真正意识到这一点,但你正在 “掌握系统的复杂性”。 它让你只需点击几下鼠标就能打开这篇文章,而不必记住细节,例如,HTML协议:你的浏览器用来从网站上获取这篇文章的协议。
Instead, you delegate this task to your ''web-browser'' - this is an '''application software'''[[File:Application_Software.png|20px]], which uses abilities of '''operating system'''[[File:Operating_System.png|20px]] to run, which uses definitions and rules of '''architecture''' [[File:Architecture.png|20px]] layers, and so on
相反,你将此任务委托给你的 “web浏览器”- Web浏览器是一个 ''' 应用软件 ''' [[File:Application_Software.png | 20px]],它使用 ''' 操作系统 ''' [[File:Operating_System.png | 20px]] 的能力来运行,而操作系统又使用 '''指令架构''' [[File:Architecture.png | 20px]] 层的定义和规则,依此类推


Usually developers define 9 layers of abstraction for an average electronic computing system:
通常开发者为一个一般的电子计算系统定义9层抽象:
#'''Application Software''' [[File:Application_Software.png|20px]]
# '''应用软件''' [[File:Application_Software.png|20px]]
#:Programs, which use operating system features to solve user problems
#: 使用操作系统的功能,并帮助用户解决问题的程序
#'''Operating System''' [[File:Operating_System.png|20px]]
# '''操作系统 ''' [[File:Operating_System.png|20px]]
#:Operates computer hardware, manage system resources and provide API and drivers for application software
#: 操作计算机硬件,管理系统资源并为应用软件提供API和驱动程序
#'''Architecture''' [[File:Architecture.png|20px]] (also known as [[Instruction Set Architecture|ISA]])
# '''指令架构 Architecture''' [[File:Architecture.png|20px]] (也称为 [[Instruction Set Architecture |指令集体系架构 ISA]])
#:Describes electronic system from programmer's perspective. Defines instruction set, visible registers. Is implemented by microarchitecture
#: 从程序员的角度描述电子系统。定义指令集,可见寄存器。由微架构实现
#'''Microarchitecture''' [[File:Microarchitecture.png|20px]]
# '''微架构 Microarchitecture''' [[File:Microarchitecture.png| 20px]]
#:Implements an architecture using logic elements
#: 微架构使用逻辑元素实现体系结构
#'''Logic''' [[File:Logic.png|20px]]
# '''逻辑门 Logic''' [[File:Logic.png | 20px]]
#:Combines digital circuits to create functional blocks, such as adders, multiplexers and so on.
#: 逻辑门指各类数字电路的组合,以创建功能块,例如加法器,multiplexers多路复用器等。
#'''Digital Circuits''' [[File:Digital_Circuits.png|20px]]
# '''数字电路 Digital Circuits''' [[文件: Digital_Circuits.png | 20px]]
#:Uses analog circuits to create models of the digital circuits, which can be used in digital design
#: 数字电路层使用模拟电路创建数字电路模型,可用于数字设计
#'''Analog Circuits''' [[File:Analog_Circuits.png|20px]]
# '''模拟电路' '[[File:Analog_Circuits.png|20px]]
#:Combines devices to create circuits with desired properties
#: 模拟电路层组合设备以创建具有所需属性的电路
#'''Devices''' [[File:Devices.png|20px]]
# '''设备器件 Devices''' [[File:Devices.png|20px]]
#:Uses physical models to create devices, such as transistors and diodes, usable in circuits
#: 设备器件层使用物理模型来创建可用于电路的设备,例如晶体管和二极管
#'''[[#Physics layer|Physics]]''' [[File:Physics.png|20px]]
# ''' [[#Physics layer| 物理]]''' [[File:Physics.png | 20px]]
#:Explores the world and systematizes obtained knowledge to laws and theories which can be relatively <abbr title="Meaning that they don't have to obtain that knowledge by themselves">easily</abbr> studied by other persons
#: 物理层探索世界并将获得的知识系统化到相互关联的规则和理论中 <abbr title = “意味着其他人不必自己获得该知识”> 轻松地 </abbr> 由其他人研究
----
----
As you can see, each abstraction level use models and features of underlying level (e.g. '''logic''' uses '''digital circuits''' as much as '''application software''' uses '''operating system''' features)
如你所见,每个抽象级别都使用底层级别的模型和功能 (例如,'''逻辑'''层 使用 '''数字电路''' 层,就像 '''应用软件''' 层 使用 '''操作系统''' 层一样)
Also, each level hides details of implementation from the overlying level (e.g. user do not have to bother about representing their requests in "computer" form as long as '''application software''' provides the human-understandable GUI)
此外,每个级别都隐藏了上面级别的实现细节 (例如,用户不必费心用 “计算机”的形式表示他们的请求,只需要 '''应用软件''' 层 提供了人类可理解的GUI)


And it means, that each layer accomplishes two tasks:
这意味着每一层都完成了两个任务:
*'''Provides simplified interfaces for overlying layers'''
* '''为上层提供简化的接口'''
*:For example, there are no ''files'' on the hard disk of your PC - only some bytes written to it in the specified order. ''File'' is just an abstract model of storing files on the physical drive, implemented by a ''filesystem'' - one of the parts of your '''operating system'''. So, ''filesystem'' provides a very convenient '''interface''' for application software, by '''implementing a simple file I/O'''
*: 例如,其实你的PC硬盘上没有''文件''这个实体-它仅能按指定顺序写入了一些字节罢了。 ''文件''只是在物理驱动器上存储文件的抽象模型,由 '''文件系统''' 实现- 文件是你的 “操作系统” 的一部分。因此,“文件系统” 通过 “实现简单的文件I/O” 为应用软件提供了非常方便的 “界面接口”。
*'''Hides implementation details from overlying layer and manages them'''
* '''隐藏本层的实现细节并对其进行管理'''
*:For example, ''filesystem'' also contains drivers for different types of storage devices, such as hard drives, optical drives and so on. Each one have its own interface to handle. However, you, as a user, don't want to keep these details in mind. So, '''filesystem''' takes care of it, '''hiding such a details''' from user, '''managing''' all that low-level things by itself
*: 例如,“文件系统” 还包含用于不同类型存储设备的驱动程序,例如硬盘驱动器,光盘驱动器等。 每个都有自己的接口要处理。 但是,作为用户,你并不需要牢记这些细节。 这里'''文件系统''' 负责向用户'''隐藏这些细节''''''管理''' 所有这些低级事物


''Since this tutorial was written for OS and applications developers, detailed description of three lower levels of hierarchy will be skipped''
''由于本教程是为操作系统和应用程序开发人员编写的,因此将跳过对三个较低层次结构的描述,仅简述以下内容''


=== Digital Circuits ===
=== 数字电路 ===
[[File:Analog_Digital_Compare.png|thumb|300px|right|Difference between analog and digital signals being interfered. While analog signal turns out to be totally messed up, digital one still remains understandable]]
[[File:Analog_Digital_Compare.png|thumb|300px|right|复杂的模拟信号和数字信号之间是需要做差异理解的。 虽然有时从表面上看模拟信号似乎是完全混乱的,但其中的数字信号仍然是可以理解的]]
As you surely know, all the modern computers are implemented using digital logic, but why?
如你所知,所有的现代计算机都是使用数字逻辑实现的,但是为什么呢?


There are few major reasons:
以下是几个主要原因:
#Digital signals are more ''stable'' and ''reliable'' than analog ones, because they are less prone for distortions, noises, and interferences.
# 数字信号比模拟信号更 “稳定” 和 “可靠”,因为它们不太容易产生失真,噪声和干扰。
#Digital circuits are ''easy'' and ''cheap'' to design and implement in hardware using different technologies
# 使用不同的技术在硬件中设计和实现数字电路相对“容易” 和 “便宜”
#Different digital circuits can be ''easily combined'', creating more complex circuits.
# 不同的数字电路可以 “轻松组合”,创建更复杂的电路。


These facts are the main reasons of domination of the digital logic over analog today.
这些事实是当今数字逻辑控制建立在模拟电路上的主要原因。


So, what helps digital logic to attain such appealing properties?
那么,是什么帮助数字逻辑获得如此吸引人的属性呢?
It operates only two signal states - LOW and HIGH, instead of wide spectrum of voltages as in analog circuits.
它仅运行于两个信号状态-低和高,而不考虑像模拟电路那样宽的电压频谱范围。
[[Category:In Progress|{{PAGENAME}}]]
[[Category:In Progress|{{PAGENAME}}]]
[[Category:Theory|{{PAGENAME}}]]
[[Category:Theory|{{PAGENAME}}]]

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. 不同的数字电路可以 “轻松组合”,创建更复杂的电路。

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

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