作为一名计算机专业的学生,计算机组成原理、计算机网络、操作系统这三门课程可以说是专业核心基础课,是至关重要的,其内容是一名合格的coder所必备的知识集;非科班出身的程序员要是想要有所提升,也需要认真学习这三门课程,可以快速形成计算机知识的结构体系,理解计算机底层原理,在工作实践中可以借鉴优秀的设计;而且很多互联网公司在笔试和面试中都会涉及到这三门课程的知识点,因此我通过视频学习对这三门课程就行复习巩固,同时分三篇博客记录总结。
计算机组成原理
一 计组之概述篇
-
计算机的发展历史
第一阶段(1946-1957):电子管计算机 特点:集成度低,体积大,功耗高,运行速度慢,操作复杂。
第二阶段(1957-1964):晶体管计算机 特点:相对电子管计算机,体积小,速度快,功耗低,可靠性高,配备显示器。
第三阶段(1964-1980):集成电路计算机 特点:操作系统诞生。
第四阶段(1980-至 今):超大规模集成电路计算机 特点:集成度高,速度快,体积小,价格低,用途广泛。
第五阶段( f u t u r e) :生物计算机&&量子计算机 … -
计算机的分类
超级计算机、大型计算机、迷你计算机(普通服务器)、工作站、微型计算机(个人计算机) -
计算机的体系与结构
冯·诺伊曼体系:将程序指令和数据一起存储的计算机设计概念结构,存储器+控制器+运算器+输入设备+输出设备。
现代计算机的结构:以存储器为核心,解决冯·诺伊曼体系瓶颈问题(CPU与存储设备之间的性能差异)。
-
计算机的层次
-
计算机的字符与编码集
字符编码集的历史:ASCII码 --> Extended ASCII码
中文编码集:GB2312、GBK、Unicode(统一码、万国码)
二 计组之组成篇
-
计算机的总线与I/O设备
a.计算机的总线(Bus)
概述:连接多个设备或者接入点的数据传输通路。
作用:解决不同设备之间的通信问题。
分类:片内总线(高集成度内部的信息传输线)、系统总线(细分为:数据总线&地址总线&控制总线,是CPU、主内存、IO设备、各组件之间的信息传输线)
总线的仲裁:为了解决总线使用权的冲突问题,三种方法:链式查询、计时器定时查询、独立请求。
b.常见的输入输出设备
字符输入设备:键盘
图形输入设备:鼠标、数位板、扫描仪
图像输出设备:显示器、打印机、投影仪
c.输入输出接口的通用设计
数据线:I/O设备与主机进行数据交换的传送线(单向&双向)。
状态线:I/O设备状态向主机报告的信号线。
命令线:CPU向I/O设备发送命令(读写信号、启动停止信号)的信号线。
设备选择线:主机选择I/O设备进行操作的信号线。
d.CPU与I/O设备的通信
程序中断:提供低速设备通知CPU的一种异步的方式,CPU可以在高速运转的同时兼顾低速设备的响应。
直接存储器访问(DMA):
-
计算机的存储器
a.存储器的分类:
按照存储介质:半导体存储器(内存、U盘、固态硬盘)、磁存储器(磁带、磁盘)
按照存取方式:随机存储器RAM(随机读取,与位置无关)、串行存储器(按顺序查找,与位置有关)、只读存储器ROM(只读不写)
b.存储器的层次结构
缓存-主存层次:局部性原理,在CPU与主存之间增加一层速度快容量小的Cache,解决主存速度不足的问题。
主存-辅存层次:局部性原理,主存之外增加辅助存储器,解决主存容量不足的问题。
局部性原理:是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
c.计算机的主存储器
内存RAM(随机存取存储器Random Access Memory):通过电容存取数据,掉电将丢失所有数据。
d.计算机的辅助存储器
e.计算机的高速缓存
工作原理:命中率是衡量缓存的重要性能指标,理论上CPU每次都能从高速缓存取数据的时候,命中率为1。
高速缓存的替换时间:当缓存没有数据,需要从主存载入数据的时候。
高速缓存的替换策略:随机算法、先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)。 -
计算机的CPU
a.计算机的指令系统
机器指令的形式:操作码(指明指令所要完成的操作)+地址码(给出操作数或操作数的地址);
机器指令的操作类型:数据传输、算术逻辑操作、移位操作、控制指令;
机器指令的寻址方式:指令寻址(顺序寻址+跳跃寻址)、数据寻址(立即寻址(速度快)+直接寻址(寻找操作数简单)+间接寻址(寻址范围大,速度慢))
b.计算机的控制器
作用:控制器是协调和控制计算机运行的。
组成:程序计数器(存储下一条指令的地址)、时序发生器(发送时序脉冲)、指令译码器(控制器的主要部件之一,翻译操作码+地址码)、指令寄存器(控制器的主要部件之一,从主存或缓存存取计算机指令)、主存地址寄存器(保存当前CPU正要访问的内存地址单元)、主存数据寄存器(保存当前CPU正要读或写的主存数据)、通用寄存器(比一般专用寄存器大,可以暂时存放或传送数据或指令,可保存ALU的运算中间结果)。
c.计算机的运算器
作用:进行数据运算加工。
组成:数据缓冲器(输入缓冲暂时存放外设送过来的数据,输出缓冲暂时存放送往外设的数据)、ALU(算术逻辑运算)、状态字及寄存器(存放运算状态和运算控制信息)、通用寄存器(比一般专用寄存器大,可以暂时存放或传送数据或指令,可保存ALU的运算中间结果)。
d.计算机指令执行的过程
指令执行过程:取指令-分析指令-执行指令
CPU的流水线设计:因运算器和控制器不能同时工作,CPU的综合利用率并不高,所以CPU的流水线设计可以提高CPU的利用率,提高大概3倍。
三 计组之计算篇
- 进制运算的基础知识
进位制:即进制,是一种计数方式,亦称进位计数法,有限种数字符号来表示无限的数值。
关于进制转换推荐看文:https://blog.csdn.net/meegomeego/article/details/49948241 - 二进制数据的表示方法
a.有符号数和无符号数
原码表示法:0表示正数,1表示负数,规定符号位位于数值的第一位;表达简单,容易理解,但运算复杂。
b.二进制的补码表示法
定义:
引入目的:为了消除减法(未完全实现)引入补码的概念,使用正数代替负数。
规律:负数的补码等于反码+1,如十进制数-7,反码表示为1,1000,补码表示为1,1001。
举个小例子计算题:
c.二进制的反码表示法
定义:
引入目的:找出原码和补码之间的规律,消除转换过程中的减法操作。
规律:负数的反码等于原码除符号位外按位取反,如十进制数-7,原码表示为1,0111,反码表示为1,1000。
举个小例子计算题:
d.小数的二进制补码表示
定义:
上述两个整数的反码补码计算规律同样适用。 - 二进制数据的运算
a.定点数与浮点数
定点数:小数点固定在某个位置。
浮点数的表示格式:符号、阶码、尾数
浮点数的表示范围:单精度± (2-2^-23) × 2127
双精度± (2-2^-52) × 21023 其中大于浮点数绝对值最大的数为上溢,小于绝对值最小的数据为下溢。
浮点数的规格化:尾数使用纯小数、尾数最高位必须是1。
b.定点数的加减法运算
加法运算:数值位与符号位一同运算,并将符号位产生的进位自然丢掉(模2^n舍去)。
举两个小栗子计算题(整数和小数):
减法运算:将B[补码]转换成-B[补码]来计算,其中-B[补码]=B[补码]连同符号按位取反,末尾加1,例如B[补码]=1,0010101 ,则-B[补码]=0,1101011。
举个小栗子计算题:
c.浮点数的加减法运算
步骤:对阶(使得阶码一致,尾数才可以运算)–>尾数求和–>尾数规格化–>舍入–>溢出判断
运算:先进行对阶,后与定点数的加减法相同。
举个小栗子计算题:
d.浮点数的乘除法运算
乘法:阶码相加,尾数求积。
除法:阶码相减,尾数求商。
四 计组之实践篇
- 实现双向链表
单向链表:节点1–>节点2–>节点3–>节点4–>节点5 其中每一个节点都有下一个节点的地址或引用。
双向链表:节点1⇋节点2⇋节点3⇋节点4⇋节点5 每一个节点都有上一个和下一个节点的地址和引用。
双向链表优点:可以快速找到上/下节点,也可以快速去掉链表中的某一个节点。
具体实现请查看我的另外一篇博客:https://blog.csdn.net/huanglei305/article/details/99422314 - 实现FIFO缓存置换算法
淘汰缓存时,把最先进入链表的结点淘汰掉。
具体实现:https://blog.csdn.net/huanglei305/article/details/99424177 - 实现LRU缓存置换算法
具体实现:https://blog.csdn.net/huanglei305/article/details/99426147 - 实现LFU缓存置换算法
具体实现:https://blog.csdn.net/huanglei305/article/details/99428409
五 重要知识点及笔&面试常考题目
持续更新...