读书笔记 -- 《计算机是怎样跑起来的》_计算机是怎么跑起来的-程序员宅基地

技术标签: 读书笔记  好书推荐  计算机是怎样跑起来的  资源推荐  

推荐语

这本书用通俗的语言讲解计算机相关组成,内容比较浅显易懂,适合初级程序员学习,中级程序员查漏补缺,不适合高级程序员。
给个四星级推荐(满分五星)。

关注公众号《嵌入式小散修》,回复 计算机是怎样跑起来的

在这里插入图片描述

一、计算机的三大原则

计算机的三大原则:

  • 计算机是执行输入、运算、输出的机器

  • 程序是指令和数据的集合

  • 计算机的处理方式有时与人们的思维习惯不同

    对计算机来说什么都是数字,理解新技术要用计算机思维,当然为了贴近人类,计算机在不断地进化,开发方式也在进步,也会越来越方便,机器的交互方式更趋向于人类的方式。

二、计算机的组成(构造一个微型计算机)
  • 最重要的三个部分:CPU、内存和 I/O
  • 使用 DMA 往内存里写入数据(此时要隔离 CPU 和内存之间的联系),可以减少 CPU 的使用量,增加系统的执行能力。
  • 这一章实现的东西很原始,不过描述的很清楚,就是各个模块之间要执行的操作。
  • 实现一次组装微机还是很有用的,无论是实物还是模拟软件模拟或者纸上画。
三、手工汇编
  • CPU 的种类不同,能够识别的汇编语言也不相同。
  • 每个 CPU 在复位之后都会从某个固定位置开始执行代码(一般是位置0)。
  • 为了方便查看程序,使用助记符来实现的汇编语言其实等效于机器语言,语句是一一对应的。
  • 汇编语言的组成:“标签”、“操作码(指令)”和“操作数(指令的对象)”。
  • 计算机中各个模块遵循这各种预定义的协议,保证着系统能够有序运行。
  • CPU 一般只能运算寄存器的值,所以数据在内存、IO、寄存器之间的传输很重要。
  • 同样是汇编语言中的 1 条指令,有的指令对应着 1 个字节的机器语言,有的指令则对应着多个字节的机器语言。
  • 机器语言其实就是一种用二进制数字串来表示数据或者指令,一串数据可能就是一个指令,这都是在 CPU 设计的时候定义好的。
  • 无论是底层的汇编,还是各种高级语言,最终都会变成机器语言才能够被 CPU 执行。
  • PC 寄存器会随着程序的运行自动往下更新。
四、程序像河水一样流动
  • 程序的执行过程就像水流动一样,顺序流动、产生分支流动或者形成旋涡(循环),脑中要有这种场景,一种意境。

  • 结构化编程不推荐使用跳转指令,跳转指令(goto 语句)使程序陷入“意大利面条”的状态,因为他可以随意跳转执行地址。

  • 写程序建议先画个粗略的流程图,然后完善细节,最后写代码。

  • 根据辗转相除法求解最大公约数的方法(又称欧几里得算法),可以直接使用减法即可实现。

    image-20220124230533166

  • 要掌握的几种算法

    (判定素数有许多优化方法,比如要是从 2 开始依次除下去,只需要从 2 除到待判定数的平方根就足够了)

    image-20220124230646997

  • 求解最小公倍数:用两个整数的乘积除以这两个整数的最大公约数。

  • 在思考算法时需要时刻记着,解决问题时是可以利用计算机的处理速度的(这也是暴力破解方法的来源)。

  • 题目中的哨兵作用很巧妙。

  • 思考问题是否存在一些规律,有时可以方便解决问题。

  • 想好再写代码,比如在纸上画流程图。

五、数据结构
  • 数据结构就是为了更方便处理数据。
  • 数组、链表是基础的数据结构,栈、队列、二叉树、图等都是从这两者变化而来。
六、面向对象编程
  • 面向对象编程是一种基于以下思路的程序设计方法:将关注点置于对象(Object)本身,对象的构成要素包含对象的行为及操作,以此为基础进行编程。这种方法使程序易于复用,软件的生产效率因而得以提升。其中所使用的主要编程技巧有继承、封装、多态三种。
  • 面向对象的知识比较庞大,还是需要去实践才能体会。
十、加密
  • 对于文本加密,无非是对字符进行某个形式的偏移,解密的时候偏移回来即可。

  • 加上 3 就是加密,减去 3 就是解密。因此通常把像 3这样用于加密和解密的数字称为“密钥”。

  • XOR 运算的有趣之处在于,用 XOR 运算加密后的密文,可以通过相同的 XOR 运算解密。也就是说,一个程序既可用于加密又可用于解密,很方便(两个相同的数异或为0,任何数异或0等于其自身)

  • 在互联网等环境中,会有很多不固定的人群相互收发经过加密处理的数据。一般情况下,会将所使用的加密方式公开,而只对密钥的值保密。但是令人感到遗憾的是,这个世界上还是有坏人的。有些人会盗取那些并不是发送给他们的加密数据,企图破解后用于不可告人的目的。尽管这些人并不知道密钥的值,但是他们会利用计算机强大的计算能力,用密钥所有可能的取值去试着破解。

  • 可以通过增加秘钥长度和复杂度的方式增加被破解的难度。

  • 前文的秘钥需要双方都知道且不能泄露,但是对于互联网场景根本行不通。

  • 公开密钥加密技术解决了这个问题,在公开密钥加密技术中,用于加密的密钥可以公开给全世界,因此称为“公钥”,而用于解密的密钥是只有自己才知道的秘密,因此称为“私钥”。

  • 可用于实现公开密钥加密技术的算法有若干种,目前广泛应用于互联网中的 RSA 算法。

    使用 RSA 创建公钥和私钥的步骤如图 10.8 所示。无论是公钥还是私钥都包含着两个数值,两个数值组成的数对儿才是一个完整的密钥(210)

    image-20220124230841472

  • 该算法之所以成功的原因:乍一看会以为只要了解了 RSA 算法,就可以通过公钥 c = 323、e = 11 推算出私钥 c = 323,f = 131 了。但是为了求解私钥中的 f,就不得不对 c 进行因子分解,分解为两个素数 a、b。在本例中 c 的位数很短,而在实际应用公开密钥加密时,建议将 c 的位数(用二进制数表示211时)扩充为 1024 位(相当于 128 字节)。要把这样的天文数字分解为两
    个素数,就算计算机的速度再快,也还是要花费不可估量的时间,时间可能长到不得不放弃解密的程度。

  • 实际中计算数字签名时,使用的是通过更加复杂的公式计算得出的、被称作 MD5(Message Digest5)的信息摘要。由于 MD5 经过了精心的设计,所以使得两段明文即使只有略微的差
    异,计算后也能得出不同的信息摘要。

  • 合理的密钥应该满足如下条件:长短适中、可以反复使用、可以通过某种通信手段交给接收者,并且通信双方以外的其他人难以用它来解密。公开密钥加密技术就完全满足上述条件。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37697335/article/details/122676622

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签