计组-总线设计
总线(Bus)概念总线是主机为了解决不同可更换设备之间的通信问题而产生的,计算机各种功能部件之间传送信息的公共通信干线。
总线分类总线可以根据不同的特征进行不同的分类:
机械特性:尺寸,形状,管脚数量,排列顺序。
电气特性:传输方向(单向 or 双向)和有效的电平范围(0 - 0.5 低电平 0.5 - 1 V 高电平)
功能特性:地址总线,数据总线,控制总线。
时间特性:信号和时序的关系。
以及下图:
数据传输格式:里面串行总线和并行总线的区别就是同时传输数据的位数,串行总线一次传输一位数,并行总线一次可以传输多位数。
总线的功能:主要内容看下图。
总线结构总线的结构:总线的结构设计分为单总线设计,双总线设计,三总线设计。当然这里的单总线指的是每种总线(数据总线,控制总线,地址总线)只有一根。
单总线结构,就是最基本的总线:
双总线结构,将 CPU 与主存的总线和 IO 总线分离开来,高速的用一根,低速的用一根,从而提高整体的效率。
注意里面的通道是一个小控制器,它有自己的控制系统,负责控制 IO 和内存之间的交互。
三总线结构,思路还是将不同的速度分级,从而提高 ...
计组-中央处理器
CPU 的主要职责分析CPU 需要有运算器和控制器两个基本的结构,然后完成大概下面的任务:
指令控制:完成取指令,分析指令和指令执行的操作,即程序的顺序控制。
操作控制:控制产生操作信号,然后传送到所对应的部件上,让其来配合完成整条指令。
时间控制:对各种操作加以时间上的控制。
数据加工:对数据进行算数和逻辑运算,这里主要由运算器完成。
中断处理:处理异常情况和特殊请求。
运算器 Calculator 的基本结构下图可以看出运算器 Calculator 主要是由 ALU 和各类寄存器组成的:
主要部件 ALU 的工作原理在前面章节的数据表示和运算里面已经说明了,下面主要说一下运算器的工作流程。
首先引入了一个叫作 CPU 内部总线的东西,这个东西负责整个 CPU 内部的数据传输,但是 CPU 有很多个部件,同一时间只能有一个数据信号发送方,为了防止数据传送冲突,就在每个部件上都接入一根 in 和一根 out 控制线,负责控制元器件数据信号的发送和接收。只有 in 控制线有电流,元器件才会从总线上接收数据,只有 out 控制线有电流,元器件才能将自己存储的数据传送到数据总 ...
计组-指令系统
指令构成指令是由指令集架构定义的单个的 CPU 操作,指令包括一个操作码和地址码,操作码用来指示这条指令执行什么任务,地址码用来表示这条指令作用的对象的所在位置。
下面是对于指令的基本分析:
定长操作码很简单,按照指令数量的最大长度编号即可,但是地址码不是定长的,所以这样的话虽然操作码定长了,但是整体的指令不会定长。
而变长操作码,下面的图就是规划变长操作码对应不同数量的地址指令的一种方式,通过让操作码变长来适应不同长度的地址码,从而让整个指令定长:
指令寻址指令寻址指的是 CPU 去获取指令的方式,目前来说有两种寻址模式,分别为顺序寻址和跳跃寻址。
顺序寻址:借助于 PC (Programme Counter) 不断的地址 +1 实现的,实现也很简单,只需要将所有要执行的指令按照顺序在内存中放在一起即可。
跳跃寻址:当遇到跳跃指令的时候,往往会给出要 PC 跳到的指令的地址,就需要修改 PC 里面的内容,然后跳到对应的地址读取指令。
数据寻址数据寻址方式就是指令在计算机中寻找要操作的对象的过程,有很多种:
大概的图:
立即寻址立即寻址指形式地址 A 表示的就是操作数本身,也就是 ...
计组-深入虚拟内存
本文转自与 知乎-安佳玮 深入虚拟内存(Virtual Memory,VM)
我们应该知道物理内存(Physical Memory)指的是硬件上的内存,即 RAM。它通常指的是插在主板上的内存条,给进程提供临时数据存储的设备。因为 CPU 可以直接从物理内存中读取数据和指令,所以物理内存又叫做主存。
虚拟内存(virtual memory,VM)又叫做虚拟存储 **(virtual storage)**,是一种内存管理技术。它是操作系统提供的一种对主存的抽象。虚拟内存的实现由操作系统软件和硬件结合完成,包括硬件异常、地址翻译、磁盘文件、内核程序等。
本文将深入虚拟内存的实现机制,讨论它是怎么将磁盘和主存结合共同提供这种抽象的。
虚拟内存解决了什么问题?1)虚拟内存给进程提供了一个更大的内存空间,不再受物理内存大小的限制。它将物理内存看作是存储在磁盘上的地址空间的缓存。 现在的电脑好一点的差不多就是 16GB 或者 32GB 的内存,而且内存越大,肯定就越贵。那如果只有物理内存,在很多情况下根本不够用,特别是需要运行很多程序的情况下。而磁盘空间相对来说是很便宜的,即使是 SSD,在同 ...
计组-存储系统
主存的简单模型首先看一个主存储器的模型图:
存储元:存储一个高低电位的最小单位。
存储单元:多个存储元组成的集合。
存储字:存放在一个存储单元中的二进制代码组合,也就是一组数据。
译码器:将地址存储器中的读写地址翻译成主存的读取控制电路。
片选线:整个芯片的开关,用高低电平表示是否在工作。作用于控制存储容量的扩充。多个存储器芯片同时开,同时关,实现存储器每次取出的位数的扩充,位扩展(一个存储单元能存储的最长信息位)。多个芯片轮流开轮流关,实现存储器存储单元数量的扩充,字扩展(增加内存地址的范围,能存下更多条数据)。两者结合可以实现字和位同时的扩充。
寻址:按照地址寻找到在某处的操作数。寻址有很多中,比如按字节寻址(也就是 8bit 大小位一个地址),按字寻址(计算机字长大小位一个地址),等等。
RAM 分类随机存储器 Random Access Memory,这里的随机存储意思是无论在存储器的任何位置写入数据,所需要的时间都为电流经过的时间,耗时基本相同。并不是写入的数据会随机分布的意思。大部分随机存储器的特点就是保存数据需要通电,一旦断电就会数据丢失。
RAM 为了减少译码器的控制 ...
计组-数据的表示和运算
数据的检验BCD 码BCD 码用 4 位二进制数来表示 1 位十进制数中的 0~9 这 10 个数码,对于浮点数来说,BCD 码的最大作作用就是能和十进制完美对接,不会产生 精度损失 ,因为其他二进制编码表示浮点小数的时候,为离散的,像 0.3 这样的数浮点数就无法表示。但是 BCD 码因为四位表示十进制的一位,所以就没有这个问题。
奇偶校验码奇校验码规定校验码的 1 有奇数个,也就是所有位(有效信息位+校验位)进行异或运算得到结果为 1
偶校验码规定校验码的 1 有偶数个,也就是所有位(有效信息位+校验位)进行异或运算得到结果为 0
这种校验码只能检测有奇数位发生错误的情况,不具备纠错能力。
海明码海明码具有两位检错,一位纠错的能力。
首先设需要验证的位数为 n,需要 k 位作为校验位,根据公式:n+k<=2^k-1 计算出来所需要的额外验证位 k。
这些验证位在验证码的位置是按照二进制位权决定的,比如当 k 等于 3 的时候,在二进制里面就可以表示 1 2 4 这三个位权,那么就把所需要的 3 个验证位放在验证码的第 1 2 4 位上面。这是因为海明码的纠错是依靠判断验证位正 ...
计组-计算机基本结构/工作流程
前言
已经很久没有写过博客了,发现这样的效果真的是不太好,所以觉得还是继续保持经长写博客的习惯吧,为了缓解记忆枯燥的 Spring API,我决定并发学习计算机组成原理(视频当电视剧看)
计算机基本结构/计算流程
需要注意几点:
上面计算流程中,CPU 区分从存储器中取出来的是指令还是数据的方法是根据指令执行周期,一个指令从 PC 中取出地址到完全执行完毕为一整个指令执行周期,其中周期的都会有取指令阶段和执行阶段。CPU 通过区分从存储器中获取内容是在取指令阶段还是执行阶段来判断取出来的是指令还是数据。
在计算机中,透明 的概念是等价与黑盒的,即无法对外显示。据此,寄存器对汇编语言是非透明的,汇编语言可以直接操作寄存器。
计算机性能指标
快捷键整合
Windows 快捷键Ctrl + Shift + N 创建新文件夹
Ctrl + D 删除文件
Win + E 打开文件管理器
Ctrl + 拖拽 创建文件副本
Ctrl + N 新建同级界面(常用于文件管理器)
Alt + 双击 查看文件属性
Win + X + U + S 快速睡眠
Win + D 显示桌面
Win + L 锁屏
IDEA 快捷键视野移动Ctrl + + 展开当前折叠的代码块
Ctrl + Shift + + 展开所有折叠的代码块
Ctrl + - 折叠当前展开的代码块
Ctrl + Shift + - 折叠所有展开的代码块
Ctrl + ↑/↓ 向上/下滚轮
Alt + ↑/↓ 光标移动到上/下一个方法中
Shift + 滚轮 横向滚动滚轴
Ctrl + Alt + ←/→ 切换光标上一个/下一个位置
文本编辑Ctrl + R 当前文件进行文本替换 Replace
Ctrl + Shift + F 全局搜索
Ctrl + Shift + R 全局替换
Ctrl + Shift + U 选中内容进行大小写替换
Ctrl + W 递进选择光标处代码
Ctrl + Y ...
BookStore 项目记录
关于我跟着视频做了一个小小的 Java Web 项目这件事
其实这个项目已经很久之前就做好了,但是由于各种的拖延症,导致了现在才开始总结,不过应该没有遗忘太多,所以还好。
项目结构大概的结构:
项目的思路就是 MVC 分层,分为 Model View Controller 三层,然后分别完成对应的任务。
DAO 层持久化层比较让我记忆深刻的就是使用了 JDBCUtils BaseDao DetialsDao 三层来实现代码复用和解耦。
首先使用 JDBCUtils 工具类来负责数据库连接池的创建和管理,用于外界控制获取数据库连接和事务的实现,专注于和数据库的直接联系:
123456789public class JDBCUtils { public static DruidDataSource source; static { source=getDruidDataSource() //创建阿里的 Druid 连接池 } public static Connection getConnection(); // ...
JSON 和 AJAX
JSON关于 JSON 本身的一些信息,可以在:JSON 和 XML 思维导图 查看,这里不在叙述。
JavaScript Object <-> String在 JavaScript 中,JSON 本身是一个对象,以访问属性的方式访问 JSON 里面的键值对:
1234567891011121314$(function () { var json={ "Tempest" : "Xorex", "Yukinoshita" : { //Json 内嵌对象 "name" : "Yukino", "age" : 18, "height" : 168, "log" : ["Yukinoshita","Yukino"] //这里是 Json ...