闲里偷忙:计算机基础的一个小总结

293 阅读11分钟

1. 计算机原理

👧 我把计算机原理分为三个模块来解析:冯诺依曼结构、二进制和指令

1. 冯诺依曼结构

首先计算机之父是冯诺依曼大家都知道!计算机的五大组成部分是:

  • 运算器,CA:central arithmetical
  • 控制器,CC:central control
  • 存储器,M:memory
  • 输入设备,I:input
  • 输出设备,O:output

图1.png

早期的计算机是由各种门电路组成的,这些门电路通过组装出一个固定的电路板,来执行一个特定的程序,一旦需要修改程序功能,就要重新组装电路板,所以早期计算机程序是硬件化的。
冯诺依曼结构消除了原始计算机体系中只能依靠硬件控制程序的状况,将程序编码存储在存储器中,实现了可编程的计算机功能,实现了硬件设计和程序设计的分离,大大促进计算机的发展。
灵魂就是将程序从硬件实现转换为软件实现,这就是计算机的基本工作原理:存储程序控制原理

图2.png

现在看来运算器和控制器单元集成在CPU中实现,存储器的容量不断扩大,输入输出设备不断更新,这些部件构成了当代计算机硬件系统的基本组成。

图3.png

1. 运算器

首先计算机要有运算处理数据的能力,所以要一个处理单元来完成各种算术运算和逻辑运算。计算机运算时,运算器的操作对象和操作种类由控制器决定。运算器操作的数据从内存中读取,处理的结果再写入内存(或者暂时存放在内部寄存器中),而且运算器对内存数据的读写是由控制器进行的。

2. 控制器

控制器又称为控制单元,是计算机的神经中枢和指挥中心,只有在控制器的控制下整个计算机才能有条不紊的工作、自动执行程序。
控制器的工作流程为:从内存中取指令、翻译指令、分析指令,然后根据指令的内存向有关部件发送控制命令,控制相关部件执行指令所包含的操作。

3. 存储器

存储器的主要功能是存储程序和各种数据,并且能够在计算机运行过程高速、自动地完成程序或者数据的存储,存储器是有记忆的设备,而且采用两种稳定状态的物理器件来记录存储信息,所以计算机中的程序和数据都要转换为二进制代码才能进行存储和操作。

4.输入输出设备

实际上我们操作计算机都是与输入输出设备在打交道。
鼠标键盘是输入设备、显示器是输出设备;
服务器中网卡既是输入设备也是输出设备……

2. 二进制

进位制是一种计数方式,利用这种计数法可以使用有限种数字符号来表示所有的数值。二进制是计算机技术中广泛采用的一种数制,使用01两个数码来表示,它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。 我们熟悉的十进制,一位数可以是 0-9,一共有10种可能,如果要表示第 11 种可能就需要进位;类比一下二进制,一位数只能是01,一共有 2 种可能。

  • 1位二进制数,也就是1bit,有2种可能,可以表示数 0,1
  • 2位二进制数,也就是2bit,有4种可能(2*2),可以表示数 0,1,2,3
  • 3位二进制数,也就是3bit,有8种可能(222),可以表示数 0,1,2,3,4,5,6,7
  • n位二进制数,有2^n - 1种可能

2.1 知道为什么你家的宽带带宽200M,但是你的下载速度永远到不了200M吗?

这得从我的DNA里找一条记忆了:计算机的计量单位是“字节”,一个字节能存储8位二进制数据

1Byte = 8 bit

2^8 = 256,1个字节能表示的数就是0-255,一共有256种可能。
1位16进制数能表示为4位2进制数,所以一个字节能表示2个16进制

1Bite
8bit             1111 1111
2个十六进制位      f     f

再说说KB、MB、GB、Kb、Mb、Gb

1Kb = 1024 bit
1KB = 1024 B    2^10 Byte
1MB = 1024 KB   2^20 Byte
1GB = 1024 MB   2^30 Byte

我们的带宽是200M每秒,事实上是200Mb/s,但是文件是以Byte为单位的,而不是bit,所以需要换算一下

200Mb / 8 = 25MB

所以其实能达到的最高下载速度是25MB/s

2.2 一个ip地址:192.168.1.1,一共有多少位?

ip地址用符号 . 分开,每一段的范围都是 0-255,也就是 2^8 ,一共有8位,4*8=32,一共32位!

2.3 红色的16进制是#ff0000,它需要占用多大的存储空间?

举一反三,一个16进制是4个bite,#ff0000一共是4*6=24b,也就是24/8=3Bite

3. 指令

这个就不难理解了,计算机指令就是指挥机器工作的指示和命令,程序就是一些列一定顺序排列的指令,执行程序的过程就是计算机工作的过程。
通常一条指令包括两方面的内容:操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。

“2. 操作系统”

👧 我把操作系统分为以下4个大块

1. 进程和线程

  • 什么是进程 进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。
    比如在Windows系统里,一个运行的.exe文件就是一个进程:

图5.png

图7.png

  • 什么是线程 线程是程序执行的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。
    一个进程可以由很多线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。
    线程由CPU独立调度执行,在多CPu环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
    一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以共享数据。

图6.png

2. 调度算法

在操作系统中调度是指一种资源分配,所以调度算法指的就是:根据系统的资源分配策略所规定的资源分配算法。 调度算法要求:高资源利用率、高吞吐量(对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量)、用户满意等原则,多的就不说了,了解一下即可。

3. 内存管理

内存管理是指软件运行时对计算机内存资源的分配和使用的技术。最主要的目的是高效、快速的分配并且在适当的时候释放和回收内存资源,多的就不说了,了解一下即可。

4. 文件系统I/O

图7.png

汇编语言

👧 “汇编语言即第二代计算机语言,用一些我们容易理解和记忆的缩写单次来代替一些特定的指令,例如用'ADD'来代表假发操作指令、'SUB'代表剪发操作指令、'INC'代表增加、'DEC'代表减少等等。通过这种方法人们很容易阅读已完成的程序或理解程序正在执行的功能,对现有的程序bug修复以及运营维护都变得更加简单方便。汇编语言是面向机器的程序设计语言。”

1. 寄存器和内存

👧 “稍作了解即可”

  • 寄存器是CPU的组成部分,CPU直接拿它里面的东西进行计算操作,它是有限存贮容量的告诉存贮部件,它们可用来暂存指令、数据和位址。
  • 内存是挂在CPU外面的数据总线上的。访问内存时要在CPU的寄存器填上地址,再执行相应的汇编指令,这时CPU会在数据总线上生成读取或写入内存数据的时钟信号,最终内存的内容会被CPU寄存器的内容更新或被读入CPU的寄存器。

图8.png

2. 堆栈模型

待编辑...

3. CPU指令

待编辑...

编译原理

待编辑...

计算机网络

1. TCP/IP协议

编码

1. 二进制与编码

👧 关于二进制,前面已经讲到过

  • 二进制 1字节 = 8位,所以1字节的二进制数中能表示的最大数是1111 1111
    那么这个数的大小是多少呢!让我们把它转为十进制数:
    无论是什么进制,都是左边是高位,右边是低位:2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 = 255
    1个字节可以表达的最大的数是255,也就说表示0 ~ 255256个数
    还有一些关于原码、反码、补码的知识点后续再出文补充 ~~
  • 编码 编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码

计算机内部只有 0 和 1 两种状态,把我们人类认识的数字、字母、文字转换成 0 和 1 的组合,这就是计算机编码!

图9.png

2. ASCII

历史中的很长一段时间里,计算机仅仅应用在欧洲的一些发达国家,因此在他们的程序里只存在他们所理解的拉丁字母(如:a、b、c、d等)和阿拉伯数字,他们在编码解码时也只需要考虑这一种情况:如何将这些字符转换成计算机所能理解的二进制数。ASCII字符集应运而生,他们在编码时只需要对照着ASCII字符集,每当在程序中遇到字符 a 时,就会找到 a 对应的ASCII值(97)然后以二进制形式存起来即可。
👧 小黑,放一下ASCII字符集对照表
图1010101010101010
这种编码就被称为ASCII编码,从字符集对照表中可以看出,ASCII字符集支持128种字符,仅使用 7 个bit位!也就是一个字节的后7位就可以将它们全部表示出来,而最前面的一位统一规定为 0 即可~如:a可以表示为0110 0001
很明显,ASCII所包含的字符相当有限,大部分都是英文字母、英文标点和阿拉伯数字,当情况稍微复杂起来,它就很难应付了 🤯

3. unicode

计算机的底层是一个由 0 和 1 组成的数字世界,因此我们输入的汉字、英文、符号等字符会被转成数字写入内存中。读取内容的时候也会根据相应的数字转换成对应的字符。这样一个过程我们就需要一个字符集了字符集保存着字符和数字之间一对一的映射关系,而每个字符所对应的那个数字称为码点,例如上面提到的ASCII字符集中,字母 A 对应的码点就是 0x41 (十六进制),上一个小节也说了ASCII字符集的明显缺陷,Unicode字符集应运而生~~
Unicode编码定义了这个世界上几乎所有的字符,而且还兼容了很多老版本的编码规范,包括ASCII

  • 讲讲码点 码点是如何表示的呢? U+xxxxxx是码点的表现形式,x代表一个十六进制数字,可以有4 ~ 6位,不足4位的就补0补足4位,超过的不管它,该是几就是几。
    举个栗子
    查表!字符A的ASCII码是65,转成16进制就是41(16^14 + 16^01),按照补零规则,A的码点就是:U+0041,以此类推,B的码点是U+0042……
    你要问我是咋知道的,我才不会告诉你我是在哪查的呢!^ ^
    细的暂时不说了,有兴趣可以看看这篇文章还有这篇文章,觉得写的hin好,嘻嘻 ^^