《计算机是怎样跑起来的》读书笔记

目录

  • 1 计算机组成
      • 1 CPU(Central Processing Unit,中央处理器)
      • 2 硬盘(Hard Disk Drive)
      • 3 内存(Memory)
      • 4 输入与输出设备(I/0设备)
  • 2 软件是什么
  • 3 编程语言
    • 3.1 机器语言
    • 3.2 汇编语言
    • 3.3 高级语言
    • 3. 4 高级语言和低级语言的分类
    • 3. 5 解释型语言
  • 4 程序开发使用的工具
    • 4.1 程序开发需要哪些工具
    • 4.2 什么是集成开发工具
  • 5 程序的流程
    • 5.1 程序流程分类
    • 5.2 流程图画法含义
    • 5.3 结构化程序设计
    • 5.4 特殊的流程处理——中断处理
    • 5.5 特殊的流程处理——事件驱动
  • 6 面向对象编程
    • 6.1 面向过程和面向对象的概念
    • 6.2 面向对象编程的几个重要观点
  • 7 数据库的基本概念
    • 7.1 数据库是数据的基地
    • 7.2 数据文件、DBMS和数据库应用程序
      • 7.2.1 三者关系
      • 7.2.2 数据库系统的构成要素

 本文内容主要来源于《计算机是怎样跑起来的》([日] 矢泽久雄),另外借鉴引用了尚硅谷-宋红康老师《Java从入门到精通》的部分内容。

1 计算机组成

 从硬件来看,计算机可以说是执行输入、运算、输出三种操作的机器。计算机的硬件由大量的IC(Integrated Circuit,集成电路)组成。每块IC上都带有很多引脚,这些引脚有的用于输入,有的用于输出。IC会在其内部对外部输入的信息进行运算,并把运算结果输出到外部。
在这里插入图片描述

1 CPU(Central Processing Unit,中央处理器)

 CPU是计算机的大脑,负责解释、执行程序。
CPU主频的概念
 主频即CPU的时钟频率,单位是Hz(赫兹),表示驱动CPU运转的时钟信号的频率,1秒发出1次时钟信号就是1Hz,比我我的笔记本电脑是2.40 GHz,表示每秒钟向CPU发出2.4×109次时钟信号。
 计算机的操作在时钟信号的控制下分步执行,每个时钟信号周期完成一步操作,时钟频率的高低在很大程度上反映了CPU速度的快慢。 主频和实际的运算速度存在一定的关系,但并不是一个简单的线性关系。主频表示在CPU内数字脉冲信号震荡的速度,CPU的运算速度还要看CPU的流水线、总线等各方面的性能指标。也就是说,主频仅仅是CPU性能表现的一个方面,而不代表CPU的整体性能。

2 硬盘(Hard Disk Drive)

 计算机最主要的存储设备,容量大,断电数据不丢失。
 正常分类:机械硬盘(HDD)、固态硬盘(SSD)以及混合硬盘(SSHD)
 固态硬盘在开机速度和程序加载速度远远高于机械硬盘,缺点就是贵,所有无法完全取代机械硬盘。

3 内存(Memory)

 负责硬盘上的数据与CPU之间数据交换处理
 具体的:保存从硬盘读取的数据,提供给CPU使用;保存CPU的一些临时执行结果,以便CPU下次使用或保存到硬盘。
 断电后数据丢失。

在这里插入图片描述

4 输入与输出设备(I/0设备)

 输入设备常见的包括鼠标、键盘,常见的输出设备比如显示器和打印机。

2 软件是什么

 软件,即一系列按照特定顺序组织的计算机数据和指令的集合。
 所谓指令,就是控制计算机进行输入、运算、输出的命令。把向计算机发出的指令一条条罗列出来,就得到了程序。
 Pascal之父Nicklaus Wirth: “Programs = Data Structures + Algorithms”(程序=数据结构+算法)
 软件有系统软件和应用软件之分。
 系统软件包括:
在这里插入图片描述
 应用软件:
在这里插入图片描述

3 编程语言

3.1 机器语言

 机器语言就是处理器可以直接理解(与生俱来就能理解)的编程语言。机器语言有时也叫做原生代码(Native Code)。
 比如下面一段代码就是典型的机器码。
在这里插入图片描述

3.2 汇编语言

 在机器语言程序中,虽然到处都是0和1的组合,但是每个组合都是有特定含义的指令或数据。可是对人来说,如果只看0和1的话,恐怕很难判断各个组合都表示什么。
 于是就有人发明出了一种编程方法,根据表示指令功能的英语单词起了一个相似的昵称,并将这个昵称赋予给0和1的组合。这种类似英语单词的昵称叫做“助记符”,使用助记符的编程语言叫做“汇编语言”。无论是使用机器语言还是汇编语言,所实现的功能都是一样的,区别只在于程序是用数字表示,还是用助记符表示。
 比如上一节机器代码可以转换为下图中的汇编语言。汇编语言的语法十分简单,以至于语法只有一个,即把“标签”“操作码(指令)”和“操作数(指令的对象)”并排写在一行上,仅此而已。
在这里插入图片描述
 那么计算机只能识别0101之类的机器码,汇编语言怎么识别呢?答案是不能识别,我们需要使用编译器将汇编语言转为机器码,计算机才能运行。

在这里插入图片描述

3.3 高级语言

 高级语言发展于20世纪50年代中叶到70年代,是一种接近于人们使用习惯的程序设计语言。它允许程序员使用接近日常英语的指令来编写程序,程序中的符号和算式也与日常用的数学式子差不多,接近于自然语言和数学语言,容易为人们掌握。比如:
在这里插入图片描述
 高级语言独立于机器,有一定的通用性;计算机不能直接识别和执行用高级语言编写的程序,需要将高级语言转换为机器语言才能被识别和执行。在转换过程中需要使用编译器和汇编器。
那么编译器和汇编器到底是什么呢?我们看看

  • 编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码(source code) →预处理器(preprocessor) → 编译器 (compiler) →目标代码(object code)→链接器(Linker) → 可执行程序 (executables)
  • 汇编器是将汇编语言翻译为机器语言的程序。一般而言,汇编生成的是目标代码,需要经链接器(Linker)生成可执行代码才可以执行

可以简单理解为:

  • 汇编器是将汇编语言翻译为二进制代码(机器可以直接执行二进制程序)
  • 编译器是将一种高级语言翻译为另一种低级语言的程序(不一定是二进制代码)
  • 但是现在很多编译器可以直接将程序转化成二进制, 是因为编译器中已经包含了汇编器

 综上,高级语言可以通过编译器将代码编译为汇编语言,然后再通过汇编器将代码转换为机器语言。如下图所示。
在这里插入图片描述
 一个典型的C语言程序编译过程
在这里插入图片描述

3. 4 高级语言和低级语言的分类

 通过上面学习,我们知道编程语言分为机器语言、汇编语言和高级语言,其实他们可以分类为:低级语言和高级语言。

  • 常见的低级语言:机器语言,汇编语言等。
  • 常见的高级语言:C、Java、C++、Pascal、Python等。

 低级语言:因其是接近底层的编程,没有编译解析等过程,所以执行效率高,响应速度快;但由于学习和编程以及调试难度较高,故编程比较费时费力,项目周期一般较长。
 反观高级语言虽比较依赖编译解析,但其可读性更高,开发效率更高,学习起来相对容易;当然高级语言也有不如低级语言的地方,譬如:执行效率。此外,高级语言的执行依赖于运行环境,如果环境配置不完善或者环境版本不一致,则可能导致程序无法执行。

3. 5 解释型语言

 随着时间的推移,一种新的编程方式兴起了。一种被称为“解释器”的特殊程序可以直接读取一个程序将其转换成计算机指令以立即执行。和编译器差不多,解释器读取程序并将它转换成一个中间形态。但和编译器不同的是,解释器直接执行程序的这个中间形态。解释型语言在每一次执行的时候都要经历这个过程;而编译程序只需要编译一次,之后计算机每次只需要执行编译好的机器指令就可以了。
 顺便说一句,这个特性就是导致人们感觉解释型程序运行得比较慢的原因。不过现代计算机的性能出奇地强大,以至于大多数人无法区分编译型程序和解释型程序。
解释型程序(有时也被成为“脚本”)甚至更容易被移植到不同的硬件平台上。因为脚本并不包含任何机器特有的指令,同一个版本的程序可以不经过任何修改就直接在很多不同的计算机上运行。不过当然了,解释器必须得先移植到新的机器上才行。
 一个很流行的解释型语言是 perl。用 perl 完整地表达我们的加法问题会是这样的:

$x = 1 + 2

 虽然这个程序看起来和 C 语言的版本差不多,运行上也没有太大区别,但却缺少了初始化变量的语句。其实还有一些其它的区别(超出这篇文章的范围了),但你应该已经注意到,我们写计算机程序的方式已经和数学家用纸笔手写数学表达式非常接近了。

4 程序开发使用的工具

4.1 程序开发需要哪些工具

 在上节中,我们知道了编译器是程序开发的必要工具,但除了编译器是必须的工具,我们往往还需要很多其他辅助软件,例如:

  • 编辑器:用来编写代码,并且给代码着色,以方便阅读;
  • 代码提示器:输入部分代码,即可提示全部代码,加速代码的编写过程
  • 调试器:观察程序的每一个运行步骤,发现程序的逻辑错误;
  • 项目管理工具:对程序涉及到的所有资源进行管理,包括源文件、图片、视频、第三方库等;
  • 漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。

4.2 什么是集成开发工具

 这些工具通常被打包在一起,统一发布和安装,例如 Visual Studio、Dev C++、Xcode、Visual C++ 6.0、C-Free、Code::Blocks 等,它们统称为集成开发环境(IDE,Integrated Development Environment)。
 集成开发环境就是一系列开发工具的组合套装。这就好比台式机,一个台式机的核心部件是主机,有了主机就能独立工作了,但是我们在购买台式机时,往往还要附带上显示器、键盘、鼠标、U盘、摄像头等外围设备,因为只有主机太不方便了,必须有外设才能玩的爽。
 集成开发环境也是这个道理,只有编译器不方便,所以还要增加其他的辅助工具。

5 程序的流程

5.1 程序流程分类

 程序的流程分为顺序执行、条件分支和循环。

在这里插入图片描述

5.2 流程图画法含义

 所谓流程图,正如其名,就是表示程序流程(Flow)的图(Chart)。
在这里插入图片描述
 流程图中各个符号含义
在这里插入图片描述
 用流程图表示的顺序执行、条件分支、循环三种流程。
在这里插入图片描述

5.3 结构化程序设计

 所谓结构化程序设计就是“为了把程序编写的具备结构性,仅使用顺序执行、条件分支和循环表示程序的流程即可,而不再使用跳转指令”。
 在程序设计的世界中,如果看到了以“结构化”开头的术语,就可以这样认为:程序的流程是由程序块表示的,而不是用GoTo 语句等跳转指令实现的。

5.4 特殊的流程处理——中断处理

 中断处理是指计算机使程序的流程突然跳转到程序中的特定地方,这样的地方被称为中断处理例程(Routine)或是中断处理程序(Handler),而这种跳转是通过CPU 所具备的硬件功能实现的。人们通常把中断处理比作是接听电话。假设诸位都正坐在书桌前处理文件,这时突然来电话了,诸位就不得不停下手头的工作去接电话,接完电话再回到之前的工作。像这样由于外部的原因使正常的流程中断,中断后再返回到之前流程的过程就是中断处理流程。
 在CPU中,有INT 和NMI 两个引脚,它们可以接收从I/O 设备发出的中断请求信号A。以硬件形式连接到CPU 上的I/O 模块会发出中断请求信号,CPU根据该信号执行相应的中断处理程序。在诸位使用的个人计算机上,中断请求信号是由连接到周边设备上的I/O 模块发出的。例如每当用户按下键盘上的按键,键盘上的I/O 模块就会把中断请求信号发送给CPU。CPU 通过这种方式就可以知道有按键被按下,于是就会从I/O设备读入数据。CPU 并不会时刻监控键盘是否有按键被按下。
 中断处理以从硬件发出的请求为条件,使程序的流程产生分支,因此可以说它是一种特殊的条件分支。可是,在诸位编写的程序中并不需要编写有关中断处理的代码。因为处理中断请求的程序,或是内置于被烧录在计算机ROM 中的BIOS 系统(Basic Input Output System,基本输入输出系统)中,或是内置于Windows 等操作系统中。诸位只需要先记住以下两点即可:计算机具有硬件上处理中断的能力;中断一词的英文是Interrupt。

5.5 特殊的流程处理——事件驱动

 通常把用户在应用程序中点击鼠标或者敲击键盘这样的操作称作“事件”(Event)。负责检测事件的是Windows。Windows 通过调用应用程序的WndProc() 函数通知应用程序事件的发生。而应用程序则根据事件的类型做出相应的处理。这种机制就是事件驱动。
 可以说事件驱动也是一种特殊的条件分支,它以从Windows 送来的通知为条件,根据通知的内容决定程序下一步的流程。要实现事件驱动,就必须把应用程序中的WndProc() 函数(称为窗口过程,Window Procedure)的起始内存地址告诉Windows。这一步将在应用程序WinMain() 中作为初始化处理被执行。

6 面向对象编程

6.1 面向过程和面向对象的概念

 编写程序的基本方法可以划分为面向过程和面向对象两种。

  • 面向过程(Procedure Oriented 简称PO :如C语言):
    从名字可以看出它是注重过程的。当解决一个问题的时候,面向过程会把事情拆分成: 一个个函数和数据(用于方法的参数) 。然后按照一定的顺序,执行完这些方法(每个方法看作一个过程),等方法执行完了,事情就搞定了。

  • 面向对象(Object Oriented简称OO :如C++,JAVA等语言):
    看名字它是注重对象的。当解决一个问题的时候,面向对象会把事物抽象成对象的概念,就是说这个问题里面有哪些对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法,问题得到解决。

 面向对象编程(OOP,Object Oriented Programming)是一种编写程序的方法,旨在提升开发大型程序的效率,使程序易于维护。

6.2 面向对象编程的几个重要观点

  • 面向对象编程就是在为现实世界建模
    程序可以在计算机上实现现实世界中的业务和娱乐活动。计算机本身并没有特定的用途,而是程序赋予了计算机各种各样的用途。在面向对象编程中,可以通过“这个是由什么样的对象构成的呢?”这样的观点来分析即将转换成程序的现实世界。这种分析过程叫作“建模”。可以说建模对于开发者而言,反映的是他们的世界观,也就是在他们的眼中现实世界看起来是什么样子的。
  • 面向对象编程可以借助UML设计程序
    可以说建模就是在为面向对象编程做设计。为了把对现实世界建模的结果以图形的形式表示出来,还经常使用被称作UML(Unified Modeling Language,统一建模语言)的表记方法。UML 是通过统一历史上曾经出现的各种各样的表记方法而发明出来的,事实上UML 已经成为了建模表记方法中的世界标准。
  • 面向对象编程中使用继承、封装和多态
    “继承”( Inheritance)、“封装”( Encapsulation)和“多态”(Polymorphism,也称为多样性或多义性)被称为面向对象编程的三个基本特性。在作为面向对象编程语言的C++、Java、C# 等语言中,都已具备了能够用程序实现以上三个特性的语法结构。继承指的是通过继承已存在的类所拥有的成员而生成新的类。封装指的是在类所拥有的成员中,隐藏掉那些没有必要展现给该类调用者的成员。多态指的是针对同一种消息,不同的对象可以进行不同的操作。
  • 面向对象编程通过在对象间传递消息驱动程序
    用C++ 等面向对象编程语言编写程序的话,程序可以通过由一个对象去调用另一个对象所拥有的函数这种方式运行起来。这种调用方式被称为对象间的“消息传递”。在面向对象语言中所说的消息传递指的就是调用某个对象所拥有的函数。即便是在现实世界中,我们也是通过对象间的消息传递来开展业务或度过余暇的。在面向对象编程中还可以对对象间的消息传递建立模型。
    如果未使用面向对象编程语言,那么可以用流程图表示程序的运行过程。流程图表示的是处理过程的流程,因此通常把非面向对象语言称为“过程型语言”。而且可以把面向对象编程语言和面向过程型语言,面向对象编程和面向过程编程分别作为一对反义词来使用。
    如果使用的是面向对象编程语言,那么可以使用UML 中的“时序图”和“协作图”表示程序的运行过程。在下图中对比了流程图和时序图。关于流程图已经没有必要再进行介绍了吧。在时序图中,把用矩形表示的对象横向排列,从上往下表示时间的流逝,用箭头表示对象间的消息传递(即程序上的函数调用)。诸位在这里只需要抓住图中的大意即可。
    在这里插入图片描述
  • 类和对象的区别
    类是对象的定义,而对象是类的实例。

7 数据库的基本概念

7.1 数据库是数据的基地

 所谓数据库(Database)就是数据(Data)的基地(Base)。在实施企业的商业战略时,如果企业内的数据散布在各个地方,在更新和检索时就要花费大量时间,分析起来就会很麻烦。但是只要把企业内的数据预先汇集到一个“基地”中并加以整理,各个部门中充满干劲的员工就可以根据需要灵活地使用这些数据。这个数据的基地就是数据库。虽然使用纸质文件整理出来的数据也可以称为数据库,但是利用善于处理数据的计算机整理会更加方便。因为计算机是提高手工工作效率的工具,所以就成为了数据的基地。
 适合存储大规模数据的是关系型数据库(Relational Database)。

7.2 数据文件、DBMS和数据库应用程序

7.2.1 三者关系

 为了编写数据库应用程序(即为了便于操作数据库而编写的程序),诸位可以从零开始埋头编写所有代码,但是一般情况下,还是会借助称作DBMS (数据库管理系统 – database management system, DBMS )的软件。Microsoft Access、Oracle、SQL Server、DB2 等诸位都有所耳闻吧,这些都是DBMS 的实例。数据库的实质虽然是某种数据文件,但是诸位编写的应用程序并不是直接去读写这些数据文件,而是以DBMS 作为中介间接地读写(如下图所示)。DBMS 不但可以使应用程序轻松地读写数据文件,而且还具有一致并且安全地存储数据的功能。
在这里插入图片描述

7.2.2 数据库系统的构成要素

 数据库系统的构成要素包括“数据文件”“DBMS”“应用程序”三部分。在小型系统中,把三个要素全部部署在一台计算机上,称作“独立型系统”。在中型系统中,把数据文件部署在一台计算机上,并且使数据文件被部署了DBMS 和应用程序的多台计算机共享,这样的系统被称为“文件共享型系统”。在大型系统中,把数据文件和DBMS 部署在一台(或者多台)计算机上,然后用户从另外一些部署着应用程序的计算机上访问,这样的系统被称作“客户端/服务器型系统”。其中部署着数据文件和DBMS 的计算机是服务器(Server),即服务的提供者;部署着应用程序的计算机是客户端(Client),即服务的使用者。如果把服务器和客户端之间用互联网联结起来,就形成了Web 系统。在Web 系统中,一般情况下应用程序也是部署在服务器中的,在客户端只部署Web 浏览器。
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285646.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

一、本文介绍 本文给大家带来的教程是利用YOLOv5训练自己的数据集,以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程,同时通过示例的方式让大家来了解具体的操作流程,过程中还分享给大家一些好用的资源…

石器时代H5小游戏架设教程

本文讲解石器时代 H5 之恐龙宝贝架设教程,想研究 H5 游戏如何实现,那请跟着此次教程学习在拥有小游戏源码的情况下该如何搭建起来 开始架设 1. 架设条件 石器时代架设需要准备: 一台linux 服务器,建议 CentOs 7.6 版本&#xf…

vscode如何开发微信小程序?(保姆级教学)

1.安装“微信小程序开发工具”扩展 2.安装“vscode weapp api”扩展 3.安装“vscode wxml”扩展 4.安装“vscode-wechat”扩展 5.在终端执行命令: vue create -p dcloudio/uni-preset-vue uniapp-test uniapp-test就是我这里的项目名称了 6.如果遇到了这个错误&a…

构建高效持久层:深度解析 MyBatis-Plus(02)

目录 引言1. 逻辑删除1.1 概述1.2 逻辑删除的优势1.3.为什么使用逻辑删除1.4 综合案例 2. 乐观锁和悲观锁2.1.什么是乐观锁和悲观锁2.2.乐观锁和悲观锁的区别2.3.综合案例 3. 分页插件总结 引言 在现代软件开发中,数据库操作是不可或缺的一环。为了提高系统的性能、…

idea过往各版本下载

idea过往各版本下载 https://www.jetbrains.com/zh-cn/idea/download/other.html

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法

针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法 文章目录 针对基于nohup后台运行PyTorch多卡并行程序中断问题的一种新方法Abstractscreen和tmux介绍tmux常用命令以及快捷键Byobu简单操作步骤集锦参考文献 Abstract PyTorch多卡并行运行程序is one of the mos…

13. 从零用Rust编写正反向代理, HTTP中的压缩gzip,deflate,brotli算法

wmproxy wmproxy是由Rust编写,已实现http/https代理,socks5代理, 反向代理,静态文件服务器,内网穿透,配置热更新等, 后续将实现websocket代理等,同时会将实现过程分享出来&#xff…

预测性维护在汽车制造行业中的应用

汽车制造行业是一个高度复杂和精细化的领域,依赖于各种设备来完成生产流程。这些设备包括机械装配线、焊接机器人、喷涂设备、传送带等。然而,这些设备在长时间运行中不可避免地会遇到各种故障,给生产进程带来延误和成本增加。为了应对这一挑…

记录下系统异常到数据库中,方便查找定位,省去翻日志的麻烦。

将异常消息,产生时间,帧信息,操作信息等存入表中,方便查阅修改。适合小系统。大系统没试过。 在异常通知对象HandlerExceptionResolver解析完异常后,构建一个异常相关信息实体。存入表中。代码如下: publ…

Redis-内存模型

参考资料: 极客时间 Redis 亚风 内存管理 从两个问题入手: 1 Redis是如何知道⼀个key是否过期呢? 2 是不是TTL到期就⽴即删除了呢? Redis是K-V内存数据库,所有的K、V都保存在Dict中。不过在其db结构体中有5个Dict,我…

Neural Network——神经网络

1.feature reusing——特征复用 1.1 什么是特征复用 回顾我们之前所学习的模型,本质上都是基于线性回归,但却都可以运用于非线性相关的数据,包括使用了如下方法 增加更多的特征产生新的特征(多项式回归)核函数 在本身…

C#深拷贝效率对比

对于浅拷贝和深拷贝,前面的文章已经说明了。 C#浅拷贝和深拷贝数据-CSDN博客 本篇说一下,深拷贝的效率问题,效率一直是程序追求的,效率越高肯定越好,有时候功能是实现了,但是运行以及处理数据的效率非常低…