[TOC]

计算机科学导论学习笔记

前言:当前作为一名IT互联网从业者,计算机技术日新月异,每天都有新概念、新技术的出现,而像我这样的万金油来说,越学到后面就越吃力,遇到瓶颈问题也随之增多,因为本身非科班出身,加之半路出家,针对于计算机基础知识掌握不牢或者说是不完整,所以我痛定思痛,下定决心重新学习计算机相关基础知识,从计算机科学导论,到计算机组成原理,到计算机网络、到操作系统,到数据结构,到程序算法、到应用开发、到安全运维开发。

今天 (2022年9月1日) 便从大神之路-起始篇,我们要站在巨人们的肩膀上,进行计算机科学导论的 学习,我将总结学习成果笔记,帮助后续入门学习的朋友。

随着现代计算机的发明,带来了新的学科,即计算机科学(简称计科)一词上一个非常广泛的概念,在此处我没将其定义为计算机相关的问题,现在计算机科学被划分成几个领域,总结归纳为两大类系统领域应用领域.

  • 系统领域:涵盖那些与硬件和软件构成直接有关的领域,例如计算机体系结构、计算机网络、安全问题、操作系统、算法、程序设计语言以及软件工程。
  • 应用领域:涵盖了与计算机使用有关的领域,例如数据库、云物联和人工智能。

参考书籍:【计算机科学导论-第三版 (Foundations Of Computer Science - Third Edition) 】作者: [美] 贝赫鲁兹.佛罗赞 (Behrouz Forouzan) PS: 当下已经第四版了、

参考视频:【计算机导论】计算机科学导论(大神之路-起始篇)

原文地址: https://mp.weixin.qq.com/s/ddQ-Quk1uFqtjX6ycl8Rzg


第 1 章 基础绪论

1.1 图灵模型

什么是图灵机?

1937年 由 Alan Turing (阿兰•图灵)首次提出了一个通用计算设备的设想, 即所有的计算都可能在一种特殊的机器上执行,这就是现在所说的图灵机。

实际上图灵机对这样一种机器进行了数学上的描述,而不是建造一台真实的机器。

什么是通用图灵机?

通用图灵机是对现代计算机的首次描述,该机器只要提供了合适的程序就能做任何运算。

图灵奖(Turing Award):全称A.M.图灵奖(ACM A.M Turing Award),是由美国计算机协会(ACM)于1966年设立的计算机奖项,名称取自艾伦·麦席森·图灵(Alan M. Turing),旨在奖励对计算机事业作出重要贡献的个人 。

(1) 数据处理器

在讨论图灵模型之前,此处将计算机定义为数据处理器 ,此时暂且把计算机可以被看作一种接收数据输入、处理数据并产生数据输出的黑盒

WeiyiGeek.单任务计算机器

WeiyiGeek.单任务计算机器

该模型产生的问题,是没有确定计算机能处理的数据是什么.

(2) 可编程数据处理器

图灵模型是一个适用于通用计算机的更好模型,该模型添加了一个额外的元素—程序 到不同的计算机器中。

程序:是用来告诉计算机对数据进行处理的指令集合。

WeiyiGeek.可编程数据处理器

在这个图灵模型中,输出数据是依赖两方面因素的结合作用:输入数据和程序,其关系如下。

  • 相同的程序,不同的输入数据,输出结果根据输入的不同而不同。
  • 相同的输入数据,不同的程序,输出结果根据程序的不同而不同。
  • 相同的输入数据,相同的程序,原则理论上其输出结果应该是一致的
WeiyiGeek.输出数据的依赖因素

WeiyiGeek.输出数据的依赖因素


1.2 冯·诺依曼模型

1944 - 1945年期间,冯•诺依曼指出,鉴于程序和数据在逻辑上是相同的,因此程序也能存储在计算机的存储器中。所以实际上该模型也基于图灵模型(通用图灵机)建造。

(1) 四个子系统

基于冯•诺依曼模型建造的计算机分为4个子系统:存储器、算术逻辑单元 ALU、控制单元 CU 和输入/输出单元, 现在系统通常是分为五个组成部分,只是将输入/输出单元分别独立出来。

  • 存储器 : 用来存储数据和程序的区域

  • 算术逻辑单元( ALU ) : 用来进行算数运算和逻辑运算的地方

  • 控制单元(CU):对存储器、 算术逻辑单元、 输入 / 输出等子系统进行统筹控制操作 。

  • 输入 / 输出单元:输入子系统负责从计算机外部接收输入数据,输出子系统负责从计算机处理结果输出到计算机外部。

WeiyiGeek.冯•诺依曼模型建造

温馨提示:输入/输出子系统的定义相当广泛,它们还包含辅助存储设备,例如,用来存储处理所需的程序和数据的磁盘和磁带等。当一个磁盘用于存储处理后的输出结果,我们一般就可以认为它是输出设备,如果从该磁盘上读取数据,则该磁盘就被认为是输入设备。

(2) 存储程序概念

在冯•诺依曼模型中要求程序必须存储在存储器(内存)中。

现代计算机的存储单元用来存储程序和数据,这意味着程序和数据应该有相同的格式,实际上它们都是以位模式( 0 和 1 序列) 存储在存储器(内存)中。

(3) 指令顺序执行

在冯•诺依曼模型中规定了一段程序是由一组数量有限指令组成。

通过控制单元(CU)从内存中提取一条指令,解释指令,接着执行指令,也就是说指令是一条接着一条顺序执行的,所以指令的顺序执行是基于冯•诺依曼模型的计算机的初始条件。

温馨提示:有时一条指令可能会请求控制单元以便跳转到其前面或者后面的指令去执行,但是这并不意味着指令没有按照顺序来执行。


1.3 计算机简单组成

通常我们可以认为计算机由三大部分组成:计算机硬件、计算机数据、计算机软件

(1) 计算机硬件

描述:当今的计算机硬件基于冯•诺依曼模型,且包含四部分,尽管可以有不同类型的存储单元,不同类型的输入/输出子系统等。

例如,我们的个人台式计算机,通常由CPU、内存、主板、硬盘、显卡、机箱电源、机箱、输入设备(鼠标、键盘)、输出设备(显示器)等硬件组装而成。

(2) 计算机数据

在冯•诺依曼模型中清楚地将一台计算机定义为一台数据处理机,它可以接收输入数据,处理并输出相应的结果。

此处不得不提到存储数据组织数据

  • 存储数据:计算机本身是一台电子设备,最好的数据存储方式应该是电子信号,以电子信号的出现和消失 ( 位模式)来存储数据,即以(1、0)两种状态之一来存储数据。 但是日常生活中的数据(文本、 图像、 声音 、 视频等)不是以位模式存储的,不能直接存储到计算机中,除非将这类数据转换为位模式。

  • 组织数据:尽管数据只能以一种形式(位模式)存储在计算机内部,但在计算机外部却可以表现为不同的形式,所以在数据存储到计算机之前,需要合理有序的组织成不同的格式。

为什么使用位模式?

因为电子设备对位模式的实现简单(通电或不通电,高电压和低电压 )

如何有效地将数据组织成不同的实体和格式?

如今,数据并不是按照杂乱无章的次序来组织信息的。数据被组织成许多小的单元,再由这些小的单元组成更大的单元等等。

温馨提示:计算机(以及数据处理表示法)开创了一门新兴的研究领域即数据组织

(3) 计算机软件

在图灵或冯•诺依曼模型的主要特征是程序的概念,下面简单了解一下程序相关的概念:

程序存储与指令序列

  • 在冯•诺依曼模型中,这些程序被存储在计算机的存储器中,所以存储器中不但要存储数据,而且还要存储程序

  • 在冯•诺依曼模型中, 要求程序必须是有序的指令集,每一条指令操作一个或者多个数据项。

为什么程序必须由不同的指令集组成?

答案:当然为了重用性(复用),图灵模型和冯•诺依曼模型通过仔细地定义 计算机可以使用的不同指令集,从而使得编程变得相对简单,程序员通过组合这些不同的指令来创建任意数量的程序。(例如,高级语言中函数也是为了代码重用)

即同一个指令可以与其他功能指令相互组合从而实现不同的程序功能。

程序算法

定义:程序按一系列的指令执行使得编程成为可能,程序员通过指令集中的指令组合完成特定的运算任务,按照有序指令解决问题的的方法就是算法

程序语言

  • 机器语言:早期时代,程序员编写位模式( 0 和 1 的组合)的指令来完成任务

  • 符号语言:随着任务的复杂性越来越高,科学家研究使用符号来表示位模式指令,这样计算机编程语言就诞生了,例如,汇编语言

软件工程

定义:软件工程是指结构化程序的设计和编写, 为高效的程序开发而诞生的一门理论体系

操作系统

定义:计算机操作系统最初是为程序访问计算机部件提供方便的一种管理程序

今天操作系统所完成的工作远不止这些,例如,我们使用的Windows操作系统,可以让我们在系统中运行各类应用软件,作为用户我们并不需要了解这个软件到底是怎样加载到内存,以及被CPU调用执行的,我们只关心其展示或者说输出的结果,这便是操作系统的功劳。(后续课程会深入讲解,此处简单了解即可)


1.4 计算机发展历史

了解一下计算机的发展历史还是非常有必要的,因为在考试中常常会涉及到一部分,并且了解其发展历史更能够看到让我们体会到站在巨人的肩膀上,此处我们将其计算机的历史分为三个阶段,即机械计算机器阶段(1930年以前)、电子计算机阶段(1930〜1950年)、现代计算机阶段(1950年至今)

(1) 机械计算机器

此阶段时间在1930年以前,人们发明了一些用来进行计算的机器,它们与计算机的现代概念几乎没有相似之处。

  • 17 世纪,法国著名的数学家和物理学家布莱斯•帕斯卡(Blaise Pascal)发明了Pascsline`, 它是一个用来进行加减运算的计算器。
  • 17世纪后期,德国数学家戈特弗里德•莱布尼茨(Gottfried Leibnitz)发明了莱布尼茨之轮(Leibnitz's Wheel),它是一个既能够做乘除运算又能做加减运算的一台更加复杂的计算机器。
  • 19世纪初期,由约瑟夫-玛丽•雅卡尔(Joseph-Marie Jacquard)发明了雅卡尔提花织机(Jacquard loom),它是第一台利用存储和编程概念的机器,这种织布机是利用穿孔卡(类似于存储程序)来控制在织布过程中经线的提升。
  • 1823年,由査尔斯•巴比奇(Charles Babbage)发明了一种差分引擎,它不仅能够很容易地进行数学运算,还可以解多项式方程,后来随之发明了一种叫做分析引擎的机器,在某种程度上和现代计算机的概念类似。
  • 1890年,由美国赫尔曼•何勒里斯(Herman Hollerith)设计发明并制造出具有编程能力的机器,该机器可以自动阅读、计数和排列存储在穿孔卡上的数据。

温馨提示:到了20世纪,尼克劳斯•沃思 (Niklaus Wirth)发明了一种结构化的程序设计语言,他将其命名为Pascal语言,用来纪念这位发明首台机械计算器的科学家。

(2) 电子计算机诞生

此阶段在 1930~1950 年之间百花共鸣,由电子计算机工业先驱的科学家们发明了一些计算机,大致分为两类即早期的电子计算机基于冯•诺依曼模型的计算机.

早期的电子计算机
早期计算机并不是将程序存储到存储器中,所有的计算机都是在外部进行编程的。有以下5种比较杰出的计算机:

  • 1939年,由 约翰•阿塔纳索夫(John V. Atanasoff)及其助手克利福德•贝里(Clifford Berry)发明的 ABC ( AtanasofF Berry Computer),它主要用于实现解线性方程的系统,也是第一台用来完成特定任务的计算机是通过将信息进行电子编码来实现其功能的。

  • 1939年左右,由德国数学家康拉德•朱斯(Konrad Zuse)设计出通用计算机,并命名为“Z1”。

  • 20世纪30年代,美国海军和IBM公司在哈佛大学发起创建了一项工程,在霍华德•艾肯(Howard Aiken)的直接领导下发明建造了一台名为Mark I的巨型计算机,它即使用了电子部件,也使用了机械部件。

  • 1943 年,阿兰•图灵发明了一台名为巨人(Colossus computer),它是世界上最早的电子数字机器,是为破译德国Enigma密码而设计的。

  • 1946 年,由约翰•莫奇勒(John Mauchly)和普雷斯波•埃克特(J. Presper Eckert)发明了第一台通用的、完全电子的计算机ENIAC (Electronic Numerical Integrator and Calculator,电子数字集成器和计算器), 它利用了将近18 000个集成块,有100英尺长,10米英尺高,重达30吨。

温馨提示:上述5种计算机的存储单元仅仅用来存放数据,它们利用配线或开关进行外部编程。


基于冯•诺依曼模型的计算机
前面提到冯•诺依曼提出了程序和数据应该存储在存储器中,这样做的好处是当需要进行一项新的任务,你只需要改变程序,而不用重新布线或者调节成百上千的开关。

  • 1950年,在宾夕法尼亚大学诞生了,第一台基于冯氏思想的计算机 EDVAC - 离散变量自动电子计算机(Electronic Discrete variable Automatic Computer),它明确奠定了新机器由五个部分组成,是近现代通用计算机的雏形。
  • 1949年,由英国剑桥大学的莫里斯•威尔克斯(Maurice Wilkes)受到 冯•诺依曼提出的EDVAC报告发明制造了 EDSAC - 电子延迟存储自动计算器 ( Electronic delay storage automatic calculator ),它是第二台存储程序电子计算机。

(3) 现代计算机诞生

此阶段为 1950年至今,至此之后出现的计算机都差不多都是基于冯•诺依曼模型,它们变得更快、更小、更便 宜,但原理几乎是相同的。

  • 第一代计算机(大约1950〜1959年)以商用计算机的出现为主要特征,计算机体积庞大,且使用真空管作为电子开关,价格昂贵。
  • 第二代计算机(大约1959〜1965年)使用晶体管代替真空管,减小了计算机的体积同时也节省了开支。
  • 第三代计算机(大约1965〜1975年)使用集成电路(晶体管、导线以及其他部件做在一块单芯片上)的发明更加减少了计算机的成本和大小。
  • 第四代计算机(大约1975〜1985年)出现了微型计算机,并且在1975年发布了第一个桌面计算器(Altair 8800)
  • 第五代计算机(大约1985〜至今) 出现了掌上计算机、台式计算机、笔记本计算机的诞生、第二代存储媒体(CD-ROM、DVD等)的改进、多媒体的应用以及虚拟现实现象。

1.5 社会问题和道德问题

计算机科学引发了一些周遭的问题,其中最为普遍的可以归类为社会问题道德问题

社会问题

  • 产生依赖 :对计算机的过渡依赖 , 离开计算机什么事也做不了
  • 社会公正:计算机最开始出现时,并不是所有人都能付得起能使用的,意味着计算机已经构成仅为中高收入人群的服务,而低收入人群被剥夺了权利,但是随着计算机科学的 发展 , 计算机越来越便宜 , 计算机使用的公正 问题正在减小
  • 数字分列化 : 导致的信息分裂 ,作者把使用计算机和不使用计算机分为两类 人群 , 一部 分 人 通计算机进行通信,一部分使用 传 统通信方式。

道德问题

  • 隐私 :为了保护隐私我们需要通信的私密性。
  • 版权 :因特网已经为思想共享创造了机会,电子版权遭遇挑战。
  • 计算机犯罪 :非法利用计算机进行攻击、盗取、诈骗、勒索等问题突出。