软件设计师教程(一)计算机系统知识-计算机系统基础知识
计算机系统基础知识
- 计算机系统硬件基本组成
- 中央处理单元
- CPU的功能
- CPU的组成
- 多核 CPU
- 数据表示
- 校验码
计算机系统硬件基本组成
- 计算机系统 = 硬件 + 软件 (协同工作运行)
- 计算机基本硬件 = (运算器 + 控制器) + 存储器 + (输入设备 + 输出设备) PS. 还得是冯诺依曼
- 硬件核心 ⇒ 中央处理单元(Central Processing Unit,CPU)= 运算器 + 控制器 + 等部件⇒ 数据加工
- 记忆设备 ⇒ 存储器 = 内部存储器 + 外部存储器
内部存储器 ⇒ 临时数据,速度快,容量小 ⇒ 内存
外部存储器 ⇒ 长期数据,速度慢,容量大 ⇒ 硬盘 - 外设 ⇒ 输入设备 + 输出设备 ⇒ 输入数据和指令,输出运行结果
中央处理单元
CPU的功能
CPU ⇒ 负责获取程序指令、对指令进行译码并加以执行。
- 程序控制,程序的执行顺序(重要功能)
- 操作控制,指令的操作信号送到对应的部件,控制部件按照指令的功能进行相应操作(让谁做,做什么操作)
- 时间控制,指令执行的时间、持续时间等(何时做,做多久,做的顺序)
- 数据处理,对数据进行算术、逻辑计算等等,处理的结果被人们所有(对数据进行加工处理是最根本的任务)
- 异常处理,系统内外部的中断做出响应
CPU的组成
CPU === 运算器 + 控制器 + 寄存器组 + 内部总线等部件
- 运算器
运算器 = 算术逻辑单元(Arithmetic and Logic Unit, ALU)+ 累加寄存器 + 数据缓冲寄存器 + 状态条件寄存器等 ⇒ 数据加工部件,用于完成计算机的各种运算。
->>>>> 控制器 控制 运算器<<<<<-
1 运算器 ⇒ 执行所有的算术运算和所有的逻辑运算并进行逻辑测试
2 算术逻辑单元(ALU)⇒ 处理数据,实现数据的算术运算和逻辑运算
3 累加寄存器(AC)⇒ 简称累加器,通用寄存器,为运算器的ALU执行运算时提供工作区。也就是临时存放运算的数据。(一般运算都是两个数字奥)
4 数据缓存寄存器(DR)⇒ 作为CPU和内存、外部设备之间数据传送的中转站,也是操作速度上的缓冲
5 状态条件寄存器(PSW)⇒ 保存当前指令执行完成过后的状态。(让大家知道我做了什么操作) - 控制器
运算器只是一个没得感情的工具人,只会运算,而控制器用于控制整个CPU的工作,决定了计算机运行过程的自动化。不仅要保证程序正确执行,而且还要能够处理异常事件。
– 控制器 包含 指令控制逻辑、时许控制逻辑、总线控制逻辑和中断控制逻辑等 –
1 逻辑控制逻辑 完成 取指令、分析指令和执行指令的操作,过程分为取指令、指令译码、按指令操作码执行、形成下一条指令地址等步骤。
<1> 指令寄存器(IR)。CPU先从内存取出指令,放在缓冲寄存器中,再送到 IR 暂存,指令译码器根据 IR 的内容产生各种微操作指令,控制其他的组成部件工作,完成所需的功能。(操作层面)
<2> 程序计数器(PC)。PC可以寄存信息,也可以计数,又称为指令计数器。程序执行 ⇒ 顺序执行、转移执行。程序执行前,将程序的起始地址放进 PC 中,PC 的内容就是程序第一条指令的地址。在程序执行过程中,CPU会自动修改 PC 的内容,让其保持的总是要执行的系一条指令地址。顺序执行就是对 PC 加1,转移的时候,就是在当前的指令地址加一个向前或向后的位移量得到。(那我理解就是,PC 有一长串指令地址,只要顺着往下走就可以了)
<3> 地址寄存器(AR)。AR 保存当前 CPU 所访问的内存单元地址。因为CPU和内存操作速度有差异,需要AR保持地址信息,直到内存的读/写操作完成为止。(类似数据层面)
<4> 指令译码器(ID)。指令 = 操作码 + 地址码,对指令的操作码字段进行分析解释,要知道进行什么操作,向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
2 时序控制逻辑 为每条指令按时间顺序提供应有的控制信号
3 总线逻辑 为多个功能部件服务的信息通路的控制电路,也就是将各种部件连在一起的的线
4 中断控制逻辑 用于控制各种中断请求,根据优先级对中断请求进行排队,逐个交给 CPU 处理 - 寄存器组
寄存器组 = 专用寄存器 + 通用寄存器,运算器和控制器的寄存器是专用寄存器,作用是固定的。通用寄存器用途广泛并可以自定义其用途,其数目因处理器不同有所差异。
多核 CPU
核心就是内核,是CPU最重要的组成部分,具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有的合理布局。
多核最大的有点是,可以满足用户同时进行多任务处理的要求。单核多线程 CPU 是交替地转换执行多个任务,只不过交替转换时间短,用户感觉不出来,但是多核理论上,各自核心负责各自的任务,速度就更快。
想要发挥多核CPU的全部威力,需要操作系统能够及时、合理地个各个核分配任务和资源,也需要应用软件在运行时可以把并行的线程同时交付给多个核心分别处理。
数据表示
在计算机中,数值的表示形式称为机器数,采用二进制,数的符号就是0和1,小数点则隐含,表示不占位置。机器数对应的实际数值称为数的真值。
机器数 = 无符号数 + 带符号数
无符号数 = 纯整数(小数点位置在机器数最低为之后) + 纯小数(小数点位置在机器数最高位之前)小数点位置是约定的,不会表示出来。
带符号数 机器数最高位表正负的符号位,其余位则表示数值
来看老生常谈的原码、反码和补码等,这些编码方法称为码制。
- 原码、反码、补码和移码,在机器运算的时候都是用补码进行运算的,可以用加法表示减法。
1 ------- 原码表示法 -------
数值XXX的原码记为[X]原[X]_原[X]原,如果机器字长为nnn,原码定义如下:
XXX纯整数
[X]原={X0⩽X⩽2n−1−12n−1+∣X∣−(2n−1−1)⩽X⩽0[X]_原=\begin{cases} X & 0\leqslant X \leqslant 2^{n-1}-1 \\ 2^{n-1} + |X| & -(2^{n-1}-1) \leqslant X \leqslant 0 \end{cases}[X]原={X2n−1+∣X∣0⩽X⩽2n−1−1−(2n−1−1)⩽X⩽0
XXX纯小数
[X]原={X0⩽X<120+∣X∣−1<X⩽0[X]_原=\begin{cases} X & 0\leqslant X <1 \\ 2^{0} + |X| & -1 < X \leqslant 0 \end{cases}[X]原={X20+∣X∣0⩽X<1−1<X⩽0
看个例子,如果字长为8,看下+1,-1,+127,-127,+45,-45,+0.5,-0.5的原码表示,首先明确,字长为8,除过最高位是表示正负,数值的话也就是7位,272^727 = 128,128换算2进制,正好七位数进1,就是1000 0000。
[+1]原=00000001[+1]_原=0\; 000\, 0001[+1]原=00000001
[−1]原=10000001[-1]_原=1\; 000\, 0001[−1]原=10000001
[+127]原=01111111[+127]_原=0\; 111\, 1111[+127]原=01111111
[−127]原=11111111[-127]_原=1\; 111\, 1111[−127]原=11111111
[+45]原=00101101[+45]_原=0\; 010\, 1101[+45]原=00101101
[−45]原=10101101[-45]_原=1\; 010\, 1101[−45]原=10101101
[+0.5]原=0⋄1000000[+0.5]_原=0\; \diamond100\, 0000[+0.5]原=0⋄1000000
[−0.5]原=1⋄1000000[-0.5]_原=1\; \diamond100\, 0000[−0.5]原=1⋄1000000
⋄\diamond⋄是小数点位置
看出规律了,只要在范围内,就是把最高位的正负符号变一下。
[+0]原=00000000[+0]_原=0\; 000\, 0000[+0]原=00000000
[−0]原=10000000[-0]_原=1\; 000\, 0000[−0]原=10000000
2 ------- 反码表示法 -------
XXX纯整数
[X]反={X0⩽X⩽2n−1−12n−1+X−(2n−1−1)⩽X⩽0[X]_反=\begin{cases} X & 0\leqslant X \leqslant 2^{n-1}-1 \\ 2^{n}-1 + X & -(2^{n-1}-1) \leqslant X \leqslant 0 \end{cases}[X]反={X2n−1+X0⩽X⩽2n−1−1−(2n−1−1)⩽X⩽0
XXX纯小数
[X]反={X0⩽X<12−2−(n−1)+X−1<X⩽0[X]_反=\begin{cases} X & 0\leqslant X < 1 \\ 2-2^{-(n-1)} + X & -1 < X \leqslant 0 \end{cases}[X]反={X2−2−(n−1)+X0⩽X<1−1<X⩽0
把上面例子数的反码表示一下
[+1]反=00000001[+1]_反=0\; 000\, 0001[+1]反=00000001
[−1]反=11111110[-1]_反=1\; 111\, 1110[−1]反=11111110
[+127]反=01111111[+127]_反=0\; 111\, 1111[+127]反=01111111
[−127]反=10000000[-127]_反=1\; 000\, 0000[−127]反=10000000
[+45]反=00101101[+45]_反=0\; 010\, 1101[+45]反=00101101
[−45]反=11010010[-45]_反=1\; 101\, 0010[−45]反=11010010
[+0.5]反=0⋄1000000[+0.5]_反=0\; \diamond100\, 0000[+0.5]反=0⋄1000000
[−0.5]反=1⋄0111111[-0.5]_反=1\; \diamond011\, 1111[−0.5]反=1⋄0111111
看出规律了,只要在范围内,就是把1和0互换。
[+0]反=00000000[+0]_反=0\; 000\, 0000[+0]反=00000000
[−0]反=11111111[-0]_反=1\; 111\, 1111[−0]反=11111111
3 ------- 补码表示法 -------
[X]补={X0⩽X⩽2n−1−12n+X−(2n−1−1)⩽X⩽0[X]_补=\begin{cases} X & 0\leqslant X \leqslant 2^{n-1}-1 \\ 2^{n} + X & -(2^{n-1}-1) \leqslant X \leqslant 0 \end{cases}[X]补={X2n+X0⩽X⩽2n−1−1−(2n−1−1)⩽X⩽0
XXX纯小数
[X]补={X0⩽X<12+X−1⩽X<0[X]_补=\begin{cases} X & 0\leqslant X <1 \\ 2 + X & -1 \leqslant X < 0 \end{cases}[X]补={X2+X0⩽X<1−1⩽X<0
[+1]补=00000001[+1]_补=0\; 000\, 0001[+1]补=00000001
[−1]补=11111111[-1]_补=1\; 111\, 1111[−1]补=11111111
[+127]补=01111111[+127]_补=0\; 111\, 1111[+127]补=01111111
[−127]补=10000001[-127]_补=1\; 000\, 0001[−127]补=10000001
[+45]补=00101101[+45]_补=0\; 010\, 1101[+45]补=00101101
[−45]补=11010011[-45]_补=1\; 101\, 0011[−45]补=11010011
[+0.5]补=0⋄1000000[+0.5]_补=0\; \diamond100\, 0000[+0.5]补=0⋄1000000
[−0.5]补=1⋄1000000[-0.5]_补=1\; \diamond100\, 0000[−0.5]补=1⋄1000000
看出规律了,只要在范围内,就是把这个数的反码+1。
[+0]补=00000000[+0]_补=0\; 000\, 0000[+0]补=00000000
[−0]补=00000000[-0]_补=0\; 000\, 0000[−0]补=00000000
4 ------- 移码表示法 -------
在XXX上增加一个偏移量定义,用于表示浮点数中的阶码。机器字长为nnn,规定偏移量为2n−12^{n-1}2n−1
XXX为纯整数,则[X]移=2n−1+X(−2n−1⩽X<2n−1)[X]_移=2^{n-1} + X(-2^{n-1}\leqslant X<2^{n-1})[X]移=2n−1+X(−2n−1⩽X<2n−1)
XXX为纯小数,则[X]移=1+X(−1⩽X<1)[X]_移=1 + X(-1\leqslant X<1)[X]移=1+X(−1⩽X<1) - 定点数和浮点数
1 -------定点数-------
小数点位置固定不变的数,一般是两种,定点整数(纯整数)和定点小数(纯小数)
2 -------浮点数-------
一个二进制数字N可以表示为更一般的形式,那就是N=2E∗FN=2^E*FN=2E∗F,其中E称为阶码,F称为尾数。用阶码和尾数表示的数为浮点数。表示格式为:
其中阶符是阶码的符号,数符是尾数的符号,也就是整个浮点数的符号。
由于一个数的浮点表示不固定,所以有了规格化表示,将尾数的绝对值限定在 [0.5,1] 。
3 -------IEEE 754-------
这个就是约定俗成的工业标准,标准形式如下:
(−1)S2E(b0b1b2b3...bp−1)(-1)^S2^E(b_0b_1b_2b_3...b_{p-1})(−1)S2E(b0b1b2b3...bp−1)
(−1)S(-1)^S(−1)S为该浮点数的数符,S取1或0决定正或负;EEE为指数(阶码),使用移码表示的;(b0b1b2b3...bp−1)(b_0b_1b_2b_3...b_{p-1})(b0b1b2b3...bp−1)为尾数,长度为PPP位,用源码表示。
<1> 规格化的值
当阶码部分的二进制不全为0也不全为1,所表示的是规格化的值。
<2> 非规格化的值
当阶码部分的二进制值全为0,所表示的数是非规格化的。
<3> 特殊值
当阶码部分的二进制值全为1时,表示特殊的值。
4 -------浮点数的运算-------
<1> 对阶
<2> 求尾数和
<3> 结果规格化并判溢出
<4> 舍入处理
<5> 溢出判别
校验码
提高硬件电路的可靠性+提高代码的校验能力 ⇒ 校验码 ⇒ 合法编码 + 错误编码
码距,是指一个编码系统中任意合法编码之间至少有多少个二进制位不同。
合法编码用于传送数据,错误编码时不允许再数据中出现的编码。
- 奇偶校验码
通过在编码中增加一位校验位来使编码1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码举距变为2。
奇偶校验码 = 水平奇偶校验码 + 垂直奇偶校验码 + 水平垂直校验码 - 海明码
利用就性来检错和纠错的校验方法。 - 循环冗余校验码
利用生成多项式为k个数据位产生r个校验位来进行编码,其编码长度位k+r
代码格式为
软件设计师教程(一)计算机系统知识-计算机系统基础知识相关推荐
- 软件设计师教程(九)计算机系统知识-软件工程基础知识
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(四)计算 ...
- 软件设计师教程(十三)计算机系统知识-软件系统分析与设计
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(四)计算 ...
- 软件设计师教程(二)计算机系统知识-计算机体系结构
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 计算机体系结构 软件设计师教程 计算机体系结构的发展 计算机系统结构概述 计算机体系结构分类 指令系统 指令集体系结构的分类 C ...
- 软件设计师教程(五)计算机系统知识-数据结构
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(四)程序 ...
- 汇编程序设计与计算机体系结构软件工程师教程笔记:汇编语法基础知识
<汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...
- 软考-软件设计师 - 第2章 程序设计语言基础知识【附补充常考知识点】
本章导图: 2.1 程序设计语言概述 2.1.1 程序设计语言的基本概念 1 低级语言与高级语言 低级语言:机器语言.汇编语言 高级语言:面向各类应用的程序设计语言,如Java,C,C++,PHP,P ...
- 软件设计师考试 | 第五章 软件工程基础知识 | 软件质量
文章目录 (一)软件质量特性 1.ISO/IEC 9126软件质量模型 2.Mc Call软件质量模型 (二)软件质量保证 (三)软件评审 1.设计质量的评审内容 2.程序质量的评审内容 3.与运行环 ...
- 软件设计师考试 | 第五章 软件工程基础知识 | 系统设计
文章目录 (一)概要设计 1.设计软件系统总体结构 2.数据结构及数据库设计 3.编写概要设计文档 4.评审 (二)详细设计 在系统分析阶段,把需求通过规格说明书描述了出来,这是目标系统的逻辑模型:在 ...
- 软件设计师教程(四)程序设计语言基础知识
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 程序设计语言知识 软件设 ...
最新文章
- 02.规划过程组表格-需求管理计划
- 【已解决】Navicat 远程连接 Linux服务器上的MySQL数据库
- css实现排序升降图标
- react-native run-android的输出
- 个人简介页面如何设计?集设网优秀案例给你灵感
- 【剑指Offer】46、圆圈中最后剩下的数
- SQL Sever — 上课笔记【主键、外键、唯一性约束、检查约束】
- 对进程、线程和应用程序域的理解
- 在Windows10上安装3Ds Max完整教程
- Infor SyteLine ERP 安装后中文语言设置
- android设置自动亮度,android5.1 自动亮度调节简析
- API接口怎么使用(教你使用api接口获取数据)
- C#中的ASCII转换
- 汽车驾驶技巧-倒车入库技巧图解-怎样倒车入库
- 计算机专业考研青岛,青岛大学(专业学位)计算机技术考研难吗
- CrackMe003:NAG窗口(4C法)和浮点计算
- 2022年全球在线招聘软件行业分析报告
- Jenkins+Kubernetes+Docker实现微服务持续集成
- 无盘服务器内存温度过高死机,电脑CPU温度过高经常死机怎么解决
- 电子计算机技术是学什么,电子技术应用是学什么?
热门文章
- DFIG_Wind_Turbine:基于MATLAB/Simulink的双馈异步风力发电机仿真模型,控制方案采用矢量控制
- 正则表达式(电话号码 IP)
- 模糊pid算法实现一般步骤
- Hadoop快速入门——第三章、MapReduce案例(字符统计)
- 阿贾克斯(Ajax)异步请求数据
- 无人机slam定位算法调研
- 患者知情同意书无纸化电子签核解决方案
- Linux下Hive-1.2.2安装
- Appium移动端自动化测试(二):uiautomator2.0使用
- 操作系统课程设计geekos project1-3