chore: vitepress 1.0.0-rc.4 => 1.0.0-rc.31(还原配色方案)
This commit is contained in:
@@ -66,7 +66,7 @@ export const themeConfig: DefaultTheme.Config = {
|
||||
articleMetadataConfig: {
|
||||
author: '查尔斯', // 文章全局默认作者名称
|
||||
authorLink: '/about/me', // 点击作者名时默认跳转的链接
|
||||
showViewCount: true, // 是否显示文章阅读数, 需要在 docs/.vitepress/theme/api/config.js 及 interface.js 配置好相应 API 接口
|
||||
showViewCount: false, // 是否显示文章阅读数, 需要在 docs/.vitepress/theme/api/config.js 及 interface.js 配置好相应 API 接口
|
||||
},
|
||||
// 自定义扩展: 文章版权配置
|
||||
copyrightConfig: {
|
||||
|
@@ -250,8 +250,10 @@
|
||||
.vp-doc a {
|
||||
font-weight: 400;
|
||||
color: var(--vp-c-text-1);
|
||||
text-decoration: none;
|
||||
}
|
||||
.vp-doc a:hover {
|
||||
color: var(--vp-c-brand);
|
||||
color: var(--vp-c-brand-1);
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
@@ -159,8 +159,9 @@
|
||||
.meta-content a {
|
||||
font-weight: 400;
|
||||
color: var(--vp-c-text-2);
|
||||
text-decoration: none;
|
||||
}
|
||||
.meta-content a:hover {
|
||||
color: var(--vp-c-brand);
|
||||
color: var(--vp-c-brand-1);
|
||||
}
|
||||
</style>
|
@@ -251,9 +251,11 @@ svg:not(:root) {
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
color: var(--vp-c-text-1);
|
||||
text-decoration: none;
|
||||
}
|
||||
.vp-doc a:hover {
|
||||
color: var(--vp-c-brand);
|
||||
color: var(--vp-c-brand-1);
|
||||
text-decoration: underline;
|
||||
}
|
||||
.meta-content a {
|
||||
font-size: 14px;
|
||||
|
@@ -89,9 +89,11 @@
|
||||
a {
|
||||
font-weight: 400;
|
||||
color: var(--vp-c-text-2);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--vp-c-brand);
|
||||
color: var(--vp-c-brand-1);
|
||||
text-decoration: underline;
|
||||
}
|
||||
</style>
|
@@ -39,7 +39,8 @@
|
||||
display: none;
|
||||
}
|
||||
a:hover {
|
||||
color: var(--vp-c-brand);
|
||||
color: var(--vp-c-brand-1);
|
||||
text-decoration: underline;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.VPFooter {
|
||||
|
@@ -18,16 +18,10 @@
|
||||
--vp-home-hero-image-filter: blur(40px);
|
||||
|
||||
/* 1.0.0-beta.7 及以前版本配色方案 */
|
||||
--vp-c-brand: var(--vp-c-green);
|
||||
--vp-c-brand-light: var(--vp-c-green-light);
|
||||
--vp-c-brand-lighter: var(--vp-c-green-lighter);
|
||||
--vp-c-brand-lightest: var(--vp-c-green-lightest);
|
||||
--vp-c-brand-dark: var(--vp-c-green-dark);
|
||||
--vp-c-brand-darker: var(--vp-c-green-darker);
|
||||
--vp-c-brand-darkest: var(--vp-c-green-darkest);
|
||||
--vp-c-brand-dimm-1: var(--vp-c-green-dimm-1);
|
||||
--vp-c-brand-dimm-2: var(--vp-c-green-dimm-2);
|
||||
--vp-c-brand-dimm-3: var(--vp-c-green-dimm-3);
|
||||
--vp-c-brand-1: var(--vp-c-green-1);
|
||||
--vp-c-brand-2: var(--vp-c-green-2);
|
||||
--vp-c-brand-3: var(--vp-c-green-3);
|
||||
--vp-c-brand-soft: var(--vp-c-green-soft);
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
|
@@ -1,487 +0,0 @@
|
||||
---
|
||||
title: 软件设计师知识点速记:计算机组成与体系结构
|
||||
author: 查尔斯
|
||||
date: 2023/05/06 21:10
|
||||
categories:
|
||||
- 杂碎逆袭史
|
||||
tags:
|
||||
- 软考
|
||||
- 软件设计师
|
||||
---
|
||||
|
||||
# 软件设计师知识点速记:计算机组成与体系结构
|
||||
|
||||
## 进制转换
|
||||
|
||||
### R 进制 => 十进制
|
||||
|
||||
R 进制转十进制使用 **按权展开法** ,其具体操作方式为:将 R 进制数的每一位数值用 $R^k$ 形式表示,即幂的底数是 R,指数为 k,k 与该位和小数点之间的距离有关。当该位位于小数点左边,k 值是该位和小数点之间数码的个数,而当该位位于小数点右边,k 值是负值,其绝对值是该位和小数点之间数码的个数加 1。
|
||||
|
||||
**示例:二进制数 10100.01 转换为十进制数。**
|
||||
|
||||
**解析:** 示例中的二进制数存在小数点位,这时候我们可以分开转换整数和小数部分,最后将转换结果相加即可。
|
||||
|
||||
首先,将整数部分 10100 转换为十进制数,方法是将每个二进制数位乘以 2 的幂次方,再将结果相加。
|
||||
$$
|
||||
10100B = 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 = 16 + 4 = 20D
|
||||
$$
|
||||
然后,将小数部分 0.01 转换为十进制数,方法是将每个二进制数位乘以 2 的负幂次方,再将结果相加。
|
||||
$$
|
||||
0.01B = 0 * 2^{-1} + 1 * 2^{-2} = 0 + 0.25 = 0.25D
|
||||
$$
|
||||
|
||||
最后,我们将整数部分和小数部分的结果相加即可。下方是整数部分和小数部分转换整合在一起的效果:
|
||||
|
||||
$$
|
||||
10100.01B = 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 + 0 * 2^{-1} + 1 * 2^{-2} = 20 + 0.25 = 20.25D
|
||||
$$
|
||||
|
||||
::: tip 笔者说
|
||||
**权:** 即 R。
|
||||
**按权展开:** 即将 R 进制的每一权位数值(个位、十位、百位...)分别展开计算,最后求和。
|
||||
:::
|
||||
|
||||
::: details 例题:七进制数 604.01 转换为十进制数。
|
||||
**解析:** 根据按权展开法,可得到下列表达式:
|
||||
$$
|
||||
604.01 = 6 * 7^2 + 0 * 7^1 + 4 * 7^0 + 0 * 7^{-1} + 1 * 7^{-2} = 298 + 0.02 = 298.02D
|
||||
$$
|
||||
:::
|
||||
|
||||
### R 进制 <= 十进制
|
||||
|
||||
十进制转 R 进制使用 **短除法** ,简单来说就是将十进制数除 R 取余,余数为权位上的数,得到的商值继续除R,依此步骤继续向下运算直到商为 0 为止。然后从最后一个余数读到第一个即为我们转换的 R 进制。
|
||||
|
||||
**示例:十进制数 150 转换为二进制数。**
|
||||
|
||||
**解析:**
|
||||
|
||||

|
||||
|
||||
### 二进制 => 八进制
|
||||
|
||||
每 3 位二进制数 **按权展开** 相加得到 1 位八进制数,二进制转成八进制是从右到左开始转换,不足位时补 0。
|
||||
|
||||
**示例:二进制数 100101110 转换为八进制数。**
|
||||
|
||||
**解析:**
|
||||
|
||||

|
||||
|
||||
**结果为:100101110B = 226O**
|
||||
|
||||
::: tip 笔者说
|
||||
为什么每位八进制数要用 3 位二进制数表示?
|
||||
这也很好理解,八进制数中 7 是每位最大值,如果用二进制表示的话就是 111。这不就是 3 位二进制数吗?
|
||||
$$
|
||||
1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 7
|
||||
$$
|
||||
:::
|
||||
|
||||
### 二进制 <= 八进制
|
||||
|
||||
上方提到了,二进制数转换为八进制,是用 3 位二进制数表示 1 位八进制数。反之八进制数转换为二进制数,那就需要用 1 位八进制数来表示 3 位二进制数。
|
||||
|
||||
八进制数通过对每位数值进行短除法,得到二进制数,每位八进制数为 3 位二进制数,不足时在最左边补 0。
|
||||
|
||||
**示例:八进制数 226 转换为二进制数。**
|
||||
|
||||
**解析:**
|
||||
|
||||

|
||||
|
||||
**结果为:226O = 10010110B**
|
||||
|
||||
### 二进制 => 十六进制
|
||||
|
||||
与二进制转八进制方法类似,转八进制是取三合一,转十六进制是取四合一。即每 4 位二进制数 **按权展开** 相加得到 1 位十六进制数。
|
||||
|
||||
**示例:二进制数 100101110 转换为十六进制数。**
|
||||
|
||||
**解析:**
|
||||
|
||||

|
||||
|
||||
**结果为:100101110B = 12CH**
|
||||
|
||||
### 二进制 <= 十六进制
|
||||
|
||||
二进制数转换为十六进制数,是用 4 位二进制数表示 1 位十六进制数。反之十六进制数转换为二进制数,那就需要用 1 位十六进制数来表示 4 位二进制数。
|
||||
|
||||
十六进制数通过对每位数值进行短除法,得到二进制数,每位十六进制数为 4 位二进制数,不足时在最左边补 0。
|
||||
|
||||
**示例:十六进制数 12C 转换为二进制。**
|
||||
|
||||
**解析:**
|
||||
|
||||

|
||||
|
||||
**结果为:12CH = 100101100B**
|
||||
|
||||
::: tip 笔者说
|
||||
十六进制中,每位的最大值为 15,但如果用十进制的写法的话就占用了 2 位,所以十六进制中,使用 A 表示 10、B 表示 11、C 表示 12、D 表示 13、E 表示 14、F 表示 15。
|
||||
:::
|
||||
|
||||
## 码制的表示
|
||||
|
||||
在计算机中,数字通常以二进制形式表示,也就是由 0 和 1 组成的数字序列。为了方便计算机进行数学运算,计算机需要使用一些编码方式来表示数字,其中最常用的编码方式是原码、反码、补码和移码。
|
||||
|
||||
### 码制运算
|
||||
|
||||
| | 数值1 | 数值-1 |
|
||||
| ---- | --------- | --------- |
|
||||
| 原码 | 0000 0001 | 1000 0001 |
|
||||
| 反码 | 0000 0001 | 1111 1110 |
|
||||
| 补码 | 0000 0001 | 1111 1111 |
|
||||
| 移码 | 1000 0001 | 0111 1111 |
|
||||
|
||||
- 原码:原码是最基本的编码方式,它的规则很简单:将数字的符号位(左侧第 1 位)和数值位(其余位)分开,符号位用 0 表示正数,用 1 表示负数,数值位则按照正常的二进制表示。例如:+5 的原码是 **0**0000101,-5 的原码是 **1**0000101。
|
||||
|
||||
- 反码:反码是为了解决原码的符号位带来的问题而出现的。反码的规则是:正数的反码与原码相同,负数的反码是符号位不变,数值位按位取反。例如:+5 的反码还是 **0**0000101,-5 的反码是 **1**1111010。
|
||||
|
||||
> **取反:** 原来为 0 则变为 1,原来为 1 则变为 0。(真假变换)
|
||||
|
||||
- **补码** :补码是为了解决反码的问题而出现的。补码的规则是:正数的补码与原码相同,负数的补码是它的反码加 1。例如,+5 的补码还是 **0**0000101,-5 的补码是 **1**1111011。
|
||||
|
||||
> 补码具有会溢出的特性,适合参与进行加减法运算。
|
||||
|
||||
- 移码:移码是将补码的符号位取反,其余位不变。例如,+5 的移码是 **1**0000101,-5 的移码是 **0**1111011。
|
||||
|
||||
|
||||
这些编码方式在计算机中都有广泛的应用,不同的编码方式有不同的优缺点,具体使用哪种编码方式取决于具体的应用场景。
|
||||
|
||||
::: warning 笔者说
|
||||
|
||||
在上方补码介绍中,提到了二进制数计算加 1 的问题,**1**1111010 + 1 = **1**1111011,这个很简单,但如果是 **1**1111011 + 1 呢?其实也很简单,注意的就是二进制每位最大值是 1,如果每位 > 1 也就是 2 的时候就要进 1 了(逢 2 进 1)。
|
||||
|
||||
```
|
||||
11111011 (原数)
|
||||
00000001 (加1)
|
||||
--------
|
||||
11111100 (结果)
|
||||
```
|
||||
:::
|
||||
|
||||
::: details 为什么有原、反、补码之分?
|
||||
|
||||
> 在学习原码,反码和补码之前,需要先了解机器数和真值的概念。
|
||||
>
|
||||
> 1. 机器数:一个数在计算机中的二进制表示形式叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为 1。
|
||||
>
|
||||
> 例如:十进制中的数 +3,计算机字长为 8 位,转换成二进制就是**0**0000011。如果是 -3 ,就是 **1**0000011。
|
||||
>
|
||||
> 那么,这里的 **0**0000011 和 **1**0000011 就是机器数。
|
||||
>
|
||||
> 2. 真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如:上面的有符号数 **1**0000011,其最高位 1 代表负,其真正数值是 -3 而不是形式值 131(10000011 转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
|
||||
>
|
||||
> 例如:**0**000 0001 的真值 = +000 0001 = +1,**1**000 0001 的真值 = –000 0001 = –1
|
||||
|
||||
首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位选择对真值区域的加减。但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即:`1 - 1 = 1 + (-1) = 0` ,所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。
|
||||
|
||||
于是人们开始探索将符号位参与运算,并且只保留加法的方法。首先来看原码:
|
||||
|
||||
例如:计算十进制的表达式:1 - 1 = 0。
|
||||
|
||||
$$
|
||||
1 - 1 = 1 + (-1) = [00000001]_原 + [10000001]_原 = [10000010]_原 = -2D
|
||||
$$
|
||||
|
||||
```
|
||||
00000001 (原码)
|
||||
10000001 (原码)
|
||||
--------
|
||||
10000010 (原码)
|
||||
```
|
||||
|
||||
如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的。这也就是为何计算机内部不使用原码表示一个数。
|
||||
|
||||
为了解决原码做减法的问题,出现了反码:
|
||||
$$
|
||||
1 - 1 = [00000001]_反 + [11111110]_反 = [11111111]_反 = [10000000]_原 = -0D
|
||||
$$
|
||||
|
||||
```
|
||||
00000001 (反码)
|
||||
11111110 (反码)
|
||||
--------
|
||||
11111111 (反码)
|
||||
```
|
||||
|
||||
发现用反码计算减法,结果的真值部分是正确的。而唯一的问题其实就出现在"0"这个特殊的数值上。虽然人们理解上 `+0` 和 `-0` 是一样的,但是 0 带符号是没有任何意义的。而且会有 `[0000 0000]原` 和 `[1000 0000]原` 两个编码表示0。除此之外,虽然相反数相加没有问题,但是其他数的减法依旧不对劲。
|
||||
|
||||
例如:计算十进制的表达式:2 - 1 = 1。
|
||||
$$
|
||||
2 - 1 = 2 + (-1) = [00000010]_反 + [11111110]_反 = [00000000]_反 = [00000000]_原 = 0D
|
||||
$$
|
||||
|
||||
```
|
||||
00000010 (反码)
|
||||
11111110 (反码)
|
||||
--------
|
||||
100000000 (反码) -> 最高位 1 溢出,则结果为 00000000
|
||||
```
|
||||
|
||||
所以,这个码还是不行。
|
||||
|
||||
于是补码出现了,不仅解决了 0 的符号问题:
|
||||
$$
|
||||
1-1 = 1 + (-1) = [00000001]_原 + [10000001]_原 = [00000001]_补 + [11111111]_补 = [00000000]_补 = [00000000]_原 = 0D
|
||||
$$
|
||||
|
||||
```
|
||||
00000001 (补码)
|
||||
11111111 (补码)
|
||||
--------
|
||||
00000000 (补码)
|
||||
```
|
||||
|
||||
这样 0 用 `[00000000]` 表示,而以前出现问题的 `-0` 则不存在了。[^1]
|
||||
|
||||
还解决了负数加法的问题:
|
||||
$$
|
||||
2 - 1 = 2 + (-1) = [00000010]_补 + [11111111]_补 = [00000001]_补 = [00000001]_原 = 1D
|
||||
$$
|
||||
|
||||
```
|
||||
00000010 (补码)
|
||||
11111111 (补码)
|
||||
--------
|
||||
100000001 (反码) -> 最高位 1 溢出,则结果为 00000001
|
||||
```
|
||||
|
||||
所以,在计算机系统中,数据分为原码反码和补码三种,并且,不论整数或负数,一律用补码来表示和存储。而且,由于反码、补码都是为了解决负数的问题而产生的变化,正数则没有变化,这也是为什么正数的反码、补码和原码一致的原因了。
|
||||
:::
|
||||
|
||||
### 数值范围
|
||||
|
||||
| 码制 | 定点整数 | 定点小数 |
|
||||
| ---- | ------------------------------------ | ------------------------------------------- |
|
||||
| 原码 | $-(2^{n-1} -1) \sim + (2^{n-1} - 1)$ | $-(1 - 2^{-(n-1)}) \sim + (1 - 2^{-(n-1)})$ |
|
||||
| 反码 | $-(2^{n-1} -1) \sim + (2^{n-1} - 1)$ | $-(1 - 2^{-(n-1)}) \sim + (1 - 2^{-(n-1)})$ |
|
||||
| 补码 | $-2^{n-1} \sim + (2^{n-1} - 1)$ | $-1 \sim + (1 - 2^{-(n-1)})$ |
|
||||
| 移码 | $-2^{n-1} \sim + (2^{n-1} - 1)$ | $-1 \sim + (1 - 2^{-(n-1)})$ |
|
||||
|
||||
在一个字长为 n (例如:字长为 8)的计算机中,原码可以表示的整数数值范围为:**1**1111111 ~ **0**1111111,将除符号位之外的数值位转换为十进制:
|
||||
$$
|
||||
1111111B = 1 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 127D
|
||||
$$
|
||||
即 8 位原码可表示的数值范围为:-127 ~ +127,推导得出 n 位原码可表示的数值范围是:
|
||||
$$
|
||||
-(2^{n-1} -1) \sim + (2^{n-1} - 1)
|
||||
$$
|
||||
原码和反码之所以负数要 - 1 主要是存在 -0 的表示,而补码、移码则不存在 -0,所以也不需要 - 1了。
|
||||
|
||||
::: tip
|
||||
其中 -128 的补码为 1000 0000,-1 的补码是 1000 0000 是人为规定的。
|
||||
:::
|
||||
|
||||
## 浮点运算
|
||||
|
||||
浮点数表示:
|
||||
$$
|
||||
N = 尾数 * 基数^{指数}
|
||||
$$
|
||||
运算过程:
|
||||
$$
|
||||
对阶 > 尾数计算 > 结果格式化
|
||||
$$
|
||||
特点:
|
||||
|
||||
1. 一般尾数用补码,阶码用移码
|
||||
2. 阶码的位数决定数的表示范围,位数越多范围越大
|
||||
3. 尾数的位数决定数的有效精度,位数越多精度越高
|
||||
4. 对阶时,小数向大数看齐
|
||||
5. 对接是通过较小数的尾数右移实现的
|
||||
|
||||
## 计算机结构
|
||||
|
||||
运算器:
|
||||
|
||||
1. 算术逻辑单元 ALU:数据的算术运算和逻辑运算
|
||||
|
||||
2. 累加寄存器 AC:通用寄存器,为 ALU 提供一个工作区,用在暂存数据
|
||||
|
||||
3. 数据缓冲寄存器 DR:写内存时,暂存指令或数据
|
||||
|
||||
4. 状态条件寄存器 PSW:存状态标志与控制标志
|
||||
|
||||
(争议:也有将其归为控制器的)
|
||||
|
||||
控制器:
|
||||
|
||||
1. 程序计数器 PC:存储下一条要执行指令的地址
|
||||
2. 指令寄存器 IR:存储即将执行的指令
|
||||
3. 指令译码器 ID:对指令中的操作码字段进行分析解释
|
||||
4. 时序部件:提供时序控制信号
|
||||
|
||||
## 计算机体系结构分类-Flynn
|
||||
|
||||
| 体系结构类型 | 结构 | 关键特性 | 代表 |
|
||||
| -------------------------- | ---------------------------------------------------- | -------------------------------------- | ---------------------------------------------- |
|
||||
| 单指令流单数据流<br />SISD | 控制部分:一个<br />处理器:一个<br />主存模块:一个 | | 单处理器系统 |
|
||||
| 单指令流多数据流<br />SIMD | 控制部分:一个<br />处理器:多个<br />主存模块:多个 | 各处理器以异步的形式执行同一条指令 | 并行处理机<br />阵列处理机<br />超级向量处理机 |
|
||||
| 多指令流单数据流<br />MISD | 控制部分:多个<br />处理器:一个<br />主存模块:多个 | 被证明不可能,至少是不实际 | 目前没有,有文献称流水线计算机为此类 |
|
||||
| 多指令流多数据流<br />MIMD | 控制部分:多个<br />处理器:多个<br />主存模块:多个 | 能够实现作业、任务、指令等各级全面并行 | 多处理机系统<br />多计算机 |
|
||||
|
||||
## 指令的基本概念
|
||||
|
||||
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式为:操作码字段|地址码字段。
|
||||
|
||||
操作码部分指出了计算机要执行什么性质的操作,如加法、减法、取数、存数等。地址码字段需要包含各操作数的地址及操作结果的存放地址等,从其地址结构的角度可以分为三地址指令、二地址指令、一地址指令和零地址指令。
|
||||
|
||||
## 寻址方式
|
||||
|
||||
- 立即寻址方式:操作数直接在指令中,速度快,灵活性差
|
||||
- 直接寻址方式:指令中存放的是操作数的地址
|
||||
- 间接寻址方式:指令中存放了一个地址,这个地址对应的内容是操作数的地址
|
||||
- 寄存器寻址方式:寄存器存放操作数
|
||||
- 寄存器间接寻址方式:寄存器内存放的是操作数的地址
|
||||
|
||||
## CISC 和 RISC
|
||||
|
||||
| 指令系统类型 | 指令 | 寻址方式 | 实现方式 | 其他 |
|
||||
| ------------------ | ------------------------------------------------------------ | ---------- | ---------------------------------------------------- | ---------------------------------------------- |
|
||||
| CISC(复杂指令集) | 数量多,使用频率差别大,可变长格式 | 支持多种 | 微程序控制技术(微码) | 研制周期长,编译子程序库小 |
|
||||
| RISC(精简指令集) | 数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有 Load/Store 操作内存。 | 支持方式少 | 增加了通用寄存器,硬布线逻辑控制为主,适合采用流水线 | 优化编译,有效支持高级程序语言,编译子程序库大 |
|
||||
|
||||
## 流水线技术
|
||||
|
||||
流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理时针对不同指令而言的,它们可同时分为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均速度。
|
||||
|
||||
相关参数计算:
|
||||
|
||||
- 流水线建立时间:第 1 条指令执行时间
|
||||
- 流水线周期:指令分段后,最长段时间
|
||||
- 流水线执行时间(默认使用理论公式,无答案时考虑实践公式)
|
||||
- 理论公式:流水线建立时间+(指令条数-1)x流水线周期
|
||||
- 实践公式:指令段数x流水线周期+(指令条数-1)x流水线周期
|
||||
- 流水线吞吐率=指令条数/流水线执行时间
|
||||
- 流水线最大吞吐率=流水线周期的倒数
|
||||
|
||||
吞吐率和建立时间是使用流水线技术的两个重要指标。吞吐率是指单位时间里流水线处理机流出的结果数。
|
||||
|
||||
对指令而言,就是单位时间里执行的指令数。流水线开始工作时,需经过一定时间才能达到最大吞吐率,这就是建立时间。若 m 个子过程所用时间一样,均为 $\Delta_{0}$ ,则建立时间 $T_{0} = m\Delta_{0}$。
|
||||
|
||||
::: details 2009上半年:某指令流水线由 5 段组成,第 1、3、5 段所需时间为 $\Delta t$,第 2、4 段所需时间分别为 $3\Delta t$、$2\Delta t$,如下图所示,那么连续输入 n 条指令时的吞吐率(单位时间内执行的指令个数)TP 为______。
|
||||
|
||||
**答:** 连续输入 n 条指令时,第 1 条指令需要的时间为 $(1 + 3 + 1 + 2 + 1)\Delta t$,之后,每隔 $3\Delta t$ 便完成 1 条指令,即流水线一旦建立好,其吞吐率为最长子过程所需时间的倒数。综合 n 条指令的时间为 $(1 + 3 + 1 + 2 + 1)\Delta t + ( n - 1)\times 3\Delta t$,因此吞吐率为:
|
||||
$$
|
||||
\frac{n}{(3 + 3 + 2)\Delta t + 3(n - 1)\Delta t}
|
||||
$$
|
||||
:::
|
||||
|
||||
## 层次化存储结构
|
||||
|
||||
- CPU:寄存器,最快,但容量小,成本高
|
||||
- Cache:按内容存取
|
||||
- 内存(主存):
|
||||
- 随机存储器(RAM)
|
||||
- 只读存储器(ROM)
|
||||
- 外存(辅存):硬盘、光盘、U盘等
|
||||
|
||||
局部性原理是层次化存储结构的支撑。
|
||||
|
||||
## Cache
|
||||
|
||||
### 概念
|
||||
|
||||
在计算机的存储系统体系中,Cache 是访问速度最快的层次(若有寄存器,则寄存器最快)。
|
||||
|
||||
使用 Cache 改善系统性能的依据是程序的局部性原理。
|
||||
|
||||
如果以 h 代表对 Cache 的访问命中率,$t_1$ 表示 Cache 的周期时间,$t_2$ 表示主存储器周期时间,以读操作为例,使用 “Cache + 主存储器” 的系统的平均周期为 $t_3$,则:
|
||||
$$
|
||||
t_3 = h * t_1 + (1 - h) * t_2
|
||||
$$
|
||||
其中,(1 - h)又称为失效率(未命中率)。
|
||||
|
||||
### 映像
|
||||
|
||||
- 直接相联映像:硬件电路较简单,但冲突率很高
|
||||
|
||||
- 全相联映像:电路难于设计和实现,只适用于小容量的 Cache,冲突率较低
|
||||
|
||||
- 组相联映像:直接相联与全相联的折中
|
||||
|
||||
- 地址映像是将主存与 Cache 的存储空间划分为若干大小相同的页(或称为块)。
|
||||
|
||||
例如:某机的主存容量为 1GB,划分为 2048 页,每页 512KB;Cache 容量为 8MB,划分为 16 页,每页 512KB。
|
||||
|
||||
## 主存-编址与计算
|
||||
|
||||
- 存储单元
|
||||
- 按字编址:存储体的存储单元是字存储单元,即最小寻址单位是一个字
|
||||
- 按字节编址:存储体的存储单元是字节存储单元;即最小寻址单位是一个字节。
|
||||
|
||||
根据存储器所要求的的容量和选定的存储芯片的容量,就可以计算出所需芯片的总数,即:
|
||||
$$
|
||||
总片数 = 总容量 / 每片的容量
|
||||
$$
|
||||
**例如:若内存地址区间为 4000H ~ 43FFH,每个存储单元可存储 16 位二进制数,该内存区域用 4 片存储器芯片构成,则构成该内存所用的存储器芯片的容量是多少?**
|
||||
|
||||
**解析:** 在计算机中,内存通常是按照地址来寻址的,每个地址对应着一个存储单元。在这个问题中,给定了内存地址区间为 4000H ~ 43FFH,其中 H 表示十六进制数。
|
||||
|
||||
在十六进制数中,一个数字可以表示 4 位二进制数。因此,4000H 表示的二进制数为 0100000000000000,43FFH 表示的二进制数为 0100001111111111。这两个二进制数之间的差值为 1111111111,即 2 的 10 次方减 1,也就是 1023。
|
||||
|
||||
因此,该内存地址区间中共有 1024 个存储单元(地址数量),分别对应着 4000H ~ 43FFH 中的每个地址。每个存储单元可以存储一个 16 位二进制数,因此该内存区域的总容量为 1024 x 16 = 16384 位二进制数。
|
||||
|
||||
由于该内存所用的存储器芯片数量为 4 片,因此每片存储器芯片的容量为 16384 / 4 = 4096 位二进制数,即 4KB。
|
||||
|
||||
## 总线
|
||||
|
||||
一条总线同一时刻仅允许一个设备发送,但允许多个设备接收。
|
||||
|
||||
总线的分类:
|
||||
|
||||
- 数据总线(Data Bus):在 CPU 与 RAM 之间来回传送需要处理或是需要储存的数据。
|
||||
- 地址总线(Address Bus):用来指定在 RAM(Random Access Memory)之中储存的数据的地址。
|
||||
- 控制总线(Control Bus):将微处理器控制单元(Control Unit)的信号,传送到周边设备,一般常见的为 USB Bus 和 1394 Bus。
|
||||
|
||||
## 串联系统与并联系统
|
||||
|
||||
串联系统可靠度:
|
||||
$$
|
||||
R = R_1 * R_2 * ... *R_n
|
||||
$$
|
||||
并联系统可靠度:
|
||||
$$
|
||||
R = 1 - (1 - R_1) * (1 - R_2) * ... * (1 - R_n)
|
||||
$$
|
||||
|
||||
## 附录
|
||||
|
||||
### 考试题型
|
||||
|
||||
软考中级软件设计师考试科目分为上午《基础知识》与下午《应用技术》两门,考试题型也各不相同。
|
||||
|
||||
上午《基础知识》考试题型均为 **单选题(客观题)** ,一共 75 道题,总分 75 分,考试采取笔试的方式进行作答,考生在答题卡上进行填涂,考试时长共 150 分钟,其中 71~75 题为英语题。
|
||||
|
||||
下午《应用技术》考试题型为 **主观题,涵盖题型较广,包括填空题、问答题、算法设计图补充等** 多种题型。其中包括四道必做题与二道选答题,选答题一般是在 C++ 和 Java 中二选一,前面四道大题一般是结构化分析设计、数据库分析设计、面向对象分析与设计和常用数据结构和算法的掌握情况。考试时长同样为 150 分钟,总分 75 分[^2]。
|
||||
|
||||
以下是详细介绍:
|
||||
|
||||
**试题1:结构化分析与设计;**
|
||||
|
||||
主要考查数据流图 DFD 的绘制,考查形式为顶层数据流图和 0 层数据流图填空(外部实体/数据源、数据存储/文件、加工处理/数据变换填空)、找出遗漏的数据流或者错误的数据流,偶尔考查数据流图的一些绘制要点,如分层数据流绘制需要注意的问题等。
|
||||
|
||||
**试题2:数据库分析与设计;**
|
||||
|
||||
主要考查 ER 图的绘制以及 ER 图与关系模式的映射,考查形式为补充完成 ER 图(增加实体、联系、属性以及联系类型)、将关系模式补充完整(属性/字段填空)、找出关系模式的主外键,偶尔考查关系模式的规范化,如将某个关系模式转换为第三范式等。
|
||||
|
||||
**试题3:面向对象分析与设计;**
|
||||
|
||||
主要考查对常用 UML 图形的掌握情况,比较常见的图形包括用例图、类图、顺序图、活动图和状态图,考查形式为图形填空,附带考查 UML 的一些基础知识,例如类图中的几种关系及其区别、用例图中用例之间关系的内涵等;
|
||||
|
||||
**试题4:数据结构与算法**
|
||||
|
||||
主要考查对常用数据结构和算法的掌握情况,通常考查一些中等难度的算法,例如最短装配时间算法、B树、贪心算法、动态规划、回溯法、背包问题、最短路径、拓扑排序、堆排序等,考查形式为C语言代码填空、复杂度分析(时空复杂度)、算法稳定性分析等。
|
||||
|
||||
**试题5、6(二选一):C++ 和 Java**
|
||||
|
||||
主要考查对常见设计模式的掌握情况,该试题通常会结合一个设计模式实例,给出实例描述和类图,然后进行程序代码填空,有C++和Java两个语言版本,二选一[^3]。
|
||||
|
||||
## 参考资料
|
||||
|
||||
[^1]: 转载的关于 二级制的反码,补码,原码等,筛选过的.:https://blog.csdn.net/tunln5288/article/details/97562905
|
||||
[^2]: 信管网-中级软件设计师考试题目类型有哪些?:https://www.cnitpm.com/pm1/108810.html
|
||||
[^3]: 信管网-软件设计师下午题型有哪些?:https://www.cnitpm.com/pm1/109480.html
|
@@ -1,147 +0,0 @@
|
||||
---
|
||||
title: 软件设计师知识点速记:标准与知识产权
|
||||
author: 查尔斯
|
||||
date: 2023/05/08 21:22
|
||||
categories:
|
||||
- 杂碎逆袭史
|
||||
tags:
|
||||
- 软考
|
||||
- 软件设计师
|
||||
---
|
||||
|
||||
# 软件设计师知识点速记:标准与知识产权
|
||||
|
||||
## 保护范围与对象
|
||||
|
||||
| 法律法规名称 | 保护对象及范围 | 注意事项 |
|
||||
| ------------------------------------ | -------------------------------- | ------------------------------------------------------------ |
|
||||
| 著作权法(版权) | 著作权(文学、绘画、摄影等作品) | 1、**不需要申请** ,作品完成即开始保护;<br />2、绘画或摄影作品原件出售(赠予)著作权还归原作者,原件拥有者有:所有权、展览权。 |
|
||||
| 软件著作权法<br />计算机软件保护条例 | 软件著作权<br />软件作品 | 1、**不需要申请** ,作品完成即开始保护;<br />2、登记制度便于举证。 |
|
||||
| 专利法 | 专利权 | 需要申请,专利权有效期是从申请日开始计算。 |
|
||||
| 商标法 | 商标权 | 需要申请,核准之日起商标受保护。 |
|
||||
| 反不正当竞争法 | 商业秘密权 | 1、商业秘密包括技术与经营两个方面;<br />2、必须有保密措施才能认定商业秘密。 |
|
||||
|
||||
::: tip
|
||||
|
||||
- 著作权是提高对作品,包括文学、艺术、自然科学、社会科学和工程技术领域内具有独创性并能以某种有形形式复制的智力成果。
|
||||
- 专利权保护的是具有创造性的发明及设计等成果。
|
||||
- 商业秘密权用来保护商家的秘密(例如:软件的技术信息及经营信息属于商业秘密范畴)。
|
||||
- 计算机软件既是作品,又是一种使用工具,还是一种工业产品(商品),具备作品性、工具性、商业性特征。因此对于计算机软件保护来说,仅依靠某项法律或法规不能解决软件的所有知识产权问题, 需要利用多层次的法律保护体系对计算机软件实施保护。我国已形成了比较完备的计算机软件知识产权保护的法律体系,即已形成以著作权法、计算机软件保护条例、计算机软件著作权登记办法保护为主,以专利法、反不正当竞争法、合同法、商标法、刑法等法律法规为辅的多层次保护体系,可对计算机软件实施交叉和重叠保护。在这样的保护体系下,计算机软件能够得到全面的、适度的保护。例如,计算机软件符合专利法所保 护的法定主题,就可以申请专利,利用专利法来保护其中符合发明创造条件的创造性成 果。对于那些为极少数专门用户开发的专用软件,可以利用反不正当竞争法中的商业秘密权和合同法来保护其中的技术秘密。我国没有专门针对知识产权制定统一的法律(知识产权法),而是在民法通则规定的原则下,根据知识产权的不同类型制定了不同的单项法律及法规,如著作权法、商标法、专利法、计算机软件保护条例等,这些法律、法规共同构成了我国保护知识产权的法律体系。
|
||||
|
||||
:::
|
||||
|
||||
## 保护期限
|
||||
|
||||
| 客体类型 | 权力类型 | 保护期限 |
|
||||
| ------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 公民作品 | 署名权、修改权、保护作品完整权 | 没有限制 |
|
||||
| | 发表权、使用权和获得报酬权 | 作者终生及其死亡后的50年(第50年的12月31日) |
|
||||
| 单位作品 | 发表权、使用权和获得报酬权 | 50年(首次发表后的第50年的12月31日),若期间未发表,不保护 |
|
||||
| 公民软件产品 | 署名权、修改权 | 没有限制 |
|
||||
| | 发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获得报酬权、转让权 | 作者终生及其死亡后的50年(第50年的12月31日)。合作开发,以最后死亡作者为准。 |
|
||||
| 单位软件产品 | 发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获得报酬权、转让权 | 50年(首次发表后的第50年的12月31日),若期间未发表,不保护 |
|
||||
| 注册商标 | | 有效期10年(若注册人死亡或倒闭1年后,未转移则可注销,期满前6个月内必须续住) |
|
||||
| 发明专利权 | | 保护期为20年(从申请日开始) |
|
||||
| 实用新型和外观设计专利权 | | 保护期为10年(从申请日开始) |
|
||||
| 商业秘密 | | 不确定(相当于无期限限制),公开后公众可用 |
|
||||
|
||||
::: tip
|
||||
|
||||
- 保护期限不受限制的有:署名权、修改权、保护作品完整权。保护期限为作者终身及死后50年的,包括:发表权、使用权和获得报酬权。
|
||||
- 根据《中华人民共和国商标法》第三十八条:注册商标有效期满,需要继续使用的,应当在期满前六个月内申请续展注册。专利权和著作权到期后都无法延长,商业秘密权无期限限制。
|
||||
- 根据我国法律法规的规定,烟草类商品必须使用注册商标。
|
||||
- 根据《中华人民共和国商标法》第十条:下列标志不得作为商标使用,县级以上行政区划的地名或者公众知晓的外国地名,不得作为商标。但是,地名具有其他含义或者作为集体商标、证明商标组成部分的除外;已经注册的使用地名的商标继续有权。
|
||||
|
||||
:::
|
||||
|
||||
## 知识产权人确定
|
||||
|
||||
| 情况说明 | 判断说明 | 归属 |
|
||||
| -------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 作品(职务作品) | 利用单位的物质技术条件进行创作,并由单位承担责任的 | 除署名权外其他著作权归单位 |
|
||||
| | 有合同约定,其著作权属于单位 | 除署名权外其他著作权归单位 |
|
||||
| | 其他 | 作者拥有著作权,单位有权在业务范围内优先使用 |
|
||||
| 软件(职务作品) | 属于本职工作中明确规定的开发目标 | 单位享有著作权 |
|
||||
| | 属于从事本职工作活动的结果 | 单位享有著作权 |
|
||||
| | 使用了单位资金、专用设备、未公开的信息等物质、技术条件,并由单位或组织承担责任的软件 | 单位享有著作权 |
|
||||
| 专利权(职务作品) | 本职工作中作出的发明创造 | 单位享有专利 |
|
||||
| | 履行本单位交付的本职工作之外的任务所作出的的发明创造 | 单位享有专利 |
|
||||
| | 离职、退休或调动工作后1年内,与原单位工作相关 | 单位享有专利 |
|
||||
| 作品软件(委托创作) | 有合同约定,著作权归委托方 | 委托方 |
|
||||
| | 合同中未约定著作权归属 | 创作方 |
|
||||
| 作品软件(合作开发) | 只进行组织,提供咨询意见、物质条件或者进行其他辅助工作 | 不享有著作权 |
|
||||
| | 共同创作的 | 共同享有,按人头比例。成果可分割的,可分开申请。 |
|
||||
| 商标 | 在同一种商品或者类似商品上 | 谁先申请谁拥有(除知名商标的非法抢注)<br />同时申请(同日申请),则根据谁先使用(需提供证据)<br />无法提供证据,协商归属,无效时使用抽签(但不可不确定) |
|
||||
| 专利 | | 谁先申请谁拥有<br />同时申请(同日申请),则协商归属 |
|
||||
|
||||
::: tip
|
||||
|
||||
- 根据“同一的发明创造只能被授予一项专利”的规定,在同一天,两个不同的人就同样的发明创造申请专利的,专利局将分别向各申请人通报有关情况,请他们自己去协商解决这一问题,解决的方法一般有两种,一种是两申请人作为一件申请的共同申请人;另一种是其中一方放弃权利并从另一方得到适当的补偿。
|
||||
- 根据专利法实施细则,职务发明创造是指:
|
||||
- 在本职工作中做出的发明创造
|
||||
- 履行本单位交付的本职工作之外的任务所做出的发明创造
|
||||
- 退职、退休或者调动工作后 **1年内** 做出的,与其在原单位承担的本职工作或者原单位分配的任务有关的发明创造。
|
||||
|
||||
|
||||
:::
|
||||
|
||||
## 侵权判定
|
||||
|
||||
- 中国公民、法人或者其他组织的作品,不论是否发表,都享有著作权。
|
||||
- 开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。
|
||||
- 著作权法不适用于下列情形:
|
||||
- 法律、法规,国家机关的决议、决定、命令和其他具有立法、行政、司法性质的文件,及其官方正式译文;
|
||||
- 时事新闻;
|
||||
- 历法、通用数表、通用表格和公式。
|
||||
|
||||
| 不侵权 | 侵权 |
|
||||
| ---------------------------------------- | ------------------------------------------------------------ |
|
||||
| 个人学习、研究或者欣赏 | 未经许可,发表他人作品 |
|
||||
| 适当引用 | 未经合作作者许可,将与他人合作创作的作品当作自己单独创作的作品发表的 |
|
||||
| 公开演讲内容 | 未参加创作,在他人作品署名 |
|
||||
| 用于教学或科学研究 | 歪曲、篡改他人作品的 |
|
||||
| 复制馆藏作品 | 剽窃他人作品的 |
|
||||
| 免费表演他人作品 | 使用他人作品,未付报酬 |
|
||||
| 室外公共场所艺术品临摹、绘画、摄影、录像 | 未经出版者许可,使用其出版的图书、期刊的版式设计的 |
|
||||
| 将汉语作品译成少数民族语言作品或盲文出版 | |
|
||||
|
||||
::: tip
|
||||
|
||||
- 如某美国专利在中国没有申请,则在中国不享有专利权,即在中国销售,中国企业不需要向美国公司支付美国专利的许可使用费。
|
||||
|
||||
:::
|
||||
|
||||
## 标准化基础知识
|
||||
|
||||
### 标准的分类
|
||||
|
||||
- 国际标准:ISO、IEC等国际标准化组织
|
||||
- 国家标准:
|
||||
- GB:中国
|
||||
- ANSI:美国
|
||||
- BS:英国
|
||||
- JIS:日本
|
||||
- 区域标准:又称为地区标准
|
||||
- PASC:太平洋地区标准会议
|
||||
- CEN:欧洲标准委员会
|
||||
- ASAC:亚洲标准咨询委员会
|
||||
- ARSO:非洲地区标准化组织
|
||||
- 行业标准:
|
||||
- GJB:中国军用标准
|
||||
- MIT-S:美国军用标准
|
||||
- IEEE:美国电气电子工程师协会
|
||||
- 地方标准:国家的地方一级行政机构制定的标准
|
||||
- 企业标准
|
||||
- 项目规范
|
||||
|
||||
### 标准的编号
|
||||
|
||||
- 国际、国外标准代号:标准代号+专业类号+顺序号+年代号
|
||||
- 我国国家标准代号:
|
||||
- GB:强制性标准代号
|
||||
- GB/T:推荐性标准代号
|
||||
- GB/Z:指导性标准代号
|
||||
- GSB:实物标准代号
|
||||
- 行业标准代号:由汉语拼音大写字母组成(如电子行业为SJ)
|
||||
- 地方标准代号:由 DB 加上省级行政区代码的前两位
|
||||
- 企业标准代号:由 Q 加上企业代号组成
|
Binary file not shown.
Before Width: | Height: | Size: 27 KiB |
Binary file not shown.
Before Width: | Height: | Size: 112 KiB |
Binary file not shown.
Before Width: | Height: | Size: 79 KiB |
Binary file not shown.
Before Width: | Height: | Size: 92 KiB |
Binary file not shown.
Before Width: | Height: | Size: 144 KiB |
Binary file not shown.
Before Width: | Height: | Size: 118 KiB |
24
package.json
24
package.json
@@ -11,28 +11,28 @@
|
||||
"preview": "vitepress preview docs"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@arco-design/web-vue": "^2.49.2",
|
||||
"@types/blueimp-md5": "^2.18.0",
|
||||
"@types/jquery": "^3.5.16",
|
||||
"markdown-it": "^13.0.1",
|
||||
"@arco-design/web-vue": "^2.53.3",
|
||||
"@types/blueimp-md5": "^2.18.2",
|
||||
"@types/jquery": "^3.5.29",
|
||||
"markdown-it": "^13.0.2",
|
||||
"markdown-it-footnote": "^3.0.3",
|
||||
"markdown-it-mathjax3": "^4.3.2",
|
||||
"mermaid": "9.3.0",
|
||||
"unplugin-vue-components": "^0.24.1",
|
||||
"vite": "^4.4.8",
|
||||
"vitepress": "1.0.0-rc.4",
|
||||
"unplugin-vue-components": "^0.25.2",
|
||||
"vite": "^5.0.3",
|
||||
"vitepress": "1.0.0-rc.31",
|
||||
"vitepress-plugin-mermaid": "2.0.8",
|
||||
"vue": "^3.3.4"
|
||||
"vue": "^3.3.9"
|
||||
},
|
||||
"dependencies": {
|
||||
"@antv/g2plot": "2.4.31",
|
||||
"axios": "^1.4.0",
|
||||
"axios": "^1.6.2",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"dayjs": "^1.11.9",
|
||||
"fast-glob": "^3.3.1",
|
||||
"dayjs": "^1.11.10",
|
||||
"fast-glob": "^3.3.2",
|
||||
"gitalk": "^1.8.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"jquery": "^3.7.0"
|
||||
"jquery": "^3.7.1"
|
||||
},
|
||||
"pnpm": {
|
||||
"overrides": {
|
||||
|
1379
pnpm-lock.yaml
generated
1379
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user