计算机组成原理期末复习

文章目录

  • 第一章:计算机系统漫游
    • 编译系统
    • 进程线程之间的关系
    • 存储器层次结构
    • 虚拟地址
  • 第二章:信息的表示和处理
    • 大端与小端
    • 整数运算
    • 浮点数运算
  • 第三章:程序的机器级表示
    • 栈的压入和弹出
    • 算数与逻辑运算操作指令
    • 条件判断与循环
  • 第六章:存储器层次结构
    • 存储器
    • 程序的局部性
    • Cache
  • 第七章:链接
    • 目标文件的三种形式
    • 可重定位目标文件
    • 链接时符号相关
    • 静态库静态链接逻辑

第一章:计算机系统漫游

编译系统

image-20240110165937098

进程线程之间的关系

1)从定义上说,进程是操作系统进行资源分配和调度的基本单位,而线程是进程的执行单元,共享进程的资源

2)具体来说,进程就是运行起来的可执行程序,当我们运行一个可执行程序的时候,就会创建一个或多个进程,创建进程的时候需要分配空间,比如:栈区、文件映射区、堆区、静态区、常量区、代码段,这就是为什么进程也被称为是资源分配的基本单位;每个进程中都有唯一的主线程,有且只有一个,主线程和进程是相互依存的关系,主线程结束进程也会结束

3)每个进程有自己的独立地址空间,不与其他进程分享;一个进程里可以有多个线程,彼此共享同一个地址空间。堆内存、文件、套接字等资源都归进程管理,同一个进程里的多个线程可以共享使用。每个进程占用的内存和其他资源,会在进程退出或被杀死时返回给操作系统

4)并发应用开发可以用多进程或多线程的方式,多线程由于可以共享资源,效率较高;反之,多进程默认是不共享地址空间与资源,开发较为麻烦,共享数据时效率较低。但多进程安全性较好,在某一个进程出问题时,其他进程一般不受影响,而在多线程的情况下,一个线程执行了非法操作会可能导致整个进程退出

存储器层次结构

50275095722b5f46187673c0d02cdbd

虚拟地址

ccb2222ef7adb7b917e96b17e27e70d

第二章:信息的表示和处理

大端与小端

image-20240110170038635

整数运算

移位运算

逻辑右移和算数右移的区别:算术右移填符号位,逻辑右移填 0

整数运算的要点

无论是有符号无符号什么类型,不用管这些方面

整数运算的要点就是:先转换成补码进行运算,运算完转换为原码,最后根据输出的进制和类型输出即可

(需要注意的是,根据不同的类型:1)整形提升,高位补符号位;2)截断,保留的是低位)

之前写过整形计算的文章:C语言-整形的存储,2.3 的部分有例题。

浮点数运算

(-1)^S * M * 2^E

(-1)^S 表示符号位;M 表示有效数字;2^E 表示指数位

举个例子:

十进制的 5.0

先转换成二进制:101.0

写成浮点数的形式:(-1)^0 * 1.01 * 2^2

相当于:S=0 , M=1.01 , E=2

需要注意的地方:

对于 32 位的浮点数,最高的 1 位是符号位 S

接着的 8 位是指数 E,剩下的 23 位为有效数字 M

img

对于64 位的浮点数,最高的 1 位是符号位 S

接着的 11 位是指数E,剩下的 52 位为有效数字 M

img

三种情况:规格化,非规格化,特殊情况

规格化:E 不等于 0,E 不等于 255 的时候就是规格化的情况(正常情况)(Normalized)

非规格化:E 存放的全为零(也就是 E = 0)的时候就是非规格化(Denormalized)

特殊情况:E 存放的全为 1(也就是 E = 255)的时候就是特殊情况,特殊情况分为两类:

  1. 表示这个数无穷大(Infinity)
  2. 表示这个数不存在(NaN)

页转换

347532adb06939ed7a75736fdfc6a71

如图分析:k = 4 的阶码位和 n = 3 的小数位(位表示:中间的四位和最后的三位)

非规格化的数:

E = 1 - 偏置量,M 的值从 0 开始,分子与位表示最后三位的值保持一致

规格化的数:

E = e - 偏置量,e 代表的是中间四位的值(当中间全为 1 时,最终值为无穷大)

M = 1 + 最后三位的值,浮点数值的计算是: 2^E * M,最终求的取值

第三章:程序的机器级表示

栈的压入和弹出

3d9104e9e669032c004ed9466d029b9

push 与 pop 指令:

入栈操作:1)栈顶指针(rsp) - 偏移量;2)将保存在寄存器(rax) 的数据保存进栈中

出栈操作:1)将栈顶的数据读出,复制到寄存器(rdx) 中;2)栈顶指针(rsp) + 偏移量

算数与逻辑运算操作指令

学会使用 leaq:

leaq 6(%rax), %rdx -> rdx = rax + 6

leaq (%rax, %rcx), %rdx -> rdx = rax + rcx

leaq (%rax, %rcx, 4), %rdx -> rdx = rax + rcx*4

leaq 7(%rax, %rax, 8), %rdx -> rdx = rax + rax*8 + 7

leaq 0xA(, %rcx, 4), %rdx -> rdx = rcx*4 + 0xA

练习使用其他操作数:

假设:%rax = 0x100 %rcx = 0x1 %rdx = 0x3

0x100 = 0xFF 0x108 = 0xAB 0x110 = 0x13 0x118 = 0x11

计算操作:

addq %rcx, (%rax) -> 0x100(地址) = 0x100 + %rcx 所以 0x100 = 0xFF(值) + 0x1 = 0x100(值)

subq %rdx, 8(%rax) -> (0x100+8)(地址) = 0x108 - %rdx 所以 0x108 = 0xAB - 0x3 = 0xA8

incq 16(%rax), -> 0x100+16 = 0x110 + 1 所以 0x110 = 0x13 + 1 = 0x14 (incq 类似 ++ 操作)

subq %rdx, %rax -> rax = rax - rdx 所以 0x100 = 0x100 - 0x3 = 0xFD (没有括号,直接减的 rax)

移位操作:

sal 和 shl 都是左移操作

sar 是算数右移,shr 是逻辑右移

条件判断与循环

练习:

(备注:%rdi 是 x,jge 表示 >=)

cmpq $-3, %rdi

jge .L2

这两句合在一起就是:如果 x >= -3 就 jump 到 L2 所在的位置

翻译成C语言代码就是:

if ( x < -3 ) {

}

因为 x < -3 程序就会正常往下走,不需要跳转到其他的位置

switch 语句:

跳转表从上到下从 0 开始依次排列

如果遇到重复的 L,就证明对应的数字不存在,不影响数数,继续往下数,不存在的数字全部归到 default

如果遇到两个 case 叠在一起(也就是 case 后面没有内容,而是直接跟着下一个 case)

那这两个 case 在跳转表中存在两个相同的 L,case 的数字就是 L 对应的数字(数字顺序不限(也就是答案不唯一))

第六章:存储器层次结构

存储器

易失性存储器

RAM(RandomAccessMemory)的全名为随机存取记忆体,它相当于PC 机上的移动存储,用来存储和保存数据的。

最常见的易失性存储器类型是随机存取存储器或 RAM。计算机和其他电子设备使用 RAM 进行高速数据访问。RAM 的读/写速度通常比大容量存储设备(例如硬盘或 SSD)快几倍。

非易失性存储器

非易失性存储器(NVMe)是一种半导体技术,不需要持续供电来保留存储在计算设备中的数据或程序代码。

非易失性存储器的例子包括:只读存储器(ROM是非易失性存储器,这意味着信息永久存储在芯片上)、闪存、大多数类型的磁性计算机存储设备(例如硬盘、软盘和磁带)、光盘和早期的计算机存储方法,如纸带和打孔卡。

磁盘的构造:

推荐看这篇文章:[5 分钟图解磁盘的结构(盘片、磁道、扇区、柱面)- CSDN 博客](https://blog.csdn.net/weixin_37641832/article/details/103217311#:~:text=一个 磁盘 (如一个 1T 的机械硬盘)由多个 盘片 (如下图中的,0 号盘片)叠加而成。 盘片的表面涂有 磁性物质 ,这些磁性物质用来记录 二进制 数据。)

程序的局部性

时间局部性

如果被引用过的内存位置很可能在不远的将来还会被多次引用,此时,我们可以说程序具有良好的时间局部性

空间局部性

如果内存一个位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置,此时,我们可以说程序具有良好的空间局限性

Cache

661a7e1c7416f8e6b48bb8ccde3ecd2

练习题 6.9:

C = B * E * S -> 1024 = 4 * 1 * S -> S = 256

S = 2^s -> 256 = 2^s -> s = 8

B = 2^b -> 4 = 2^b -> b = 2

t = m - (s + b) -> t = 32 - (8 + 2) -> t = 22

解得:S = 256;t = 32;s = 8;b = 2

主要得把公式记住:

C = B * E * S

t = m-(s+b)

S = 2^s

B = 2^b

M = 2^m

直接映射高速缓存的流程:

image-20240111212951873

缓冲区溢出:

缓冲区溢出指当一段程序尝试把更多的数据放入一个缓冲区,数据超出了缓冲区本身的容量,导致数据溢出到被分配空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。攻击者可以利用缓冲区溢出修改计算机的内存,破坏或控制程序的执行,导致数据损坏、程序崩溃,甚至是恶意代码的执行。

防止缓冲区溢出攻击:

  • 完整性检查:在程序指针失效前进行完整性检查。
  • 随机化地址空间: 关键数据区的地址空间位置随机排列。通常,缓冲区溢出攻击需要知道可执行代码的位置,而随机化地址空间使这几乎不可能。
  • 防止数据执行:标记内存的某些区域为可执行或不可执行,从而阻止在不可执行区域运行代码的攻击。
  • 编写安全的代码:使用能够帮助识别不安全函数或错误的编译器,利用编译器的边界检查来实现缓冲区的保护。避免使用不进行缓冲区检查的函数(例如,在 C语言中,用 fgets() 代替 gets())。使用内置保护的语言编写或在其代码中使用特殊的安全性程序,来预防缓冲区溢出漏洞。

第七章:链接

目标文件的三种形式

可重定位目标文件

  • 其代码和数据可和其他可重定位文件合并为可执行文件
  • 每个 .o 文件由对应的 .c 文件生成
  • 每个 .o 文件代码和数据地址都从 0 开始

可执行目标文件

  • 包含的代码和数据可以被直接复制到内存中并执行
  • 代码和数据地址为虚拟地址空间中的地址

共享的目标文件

  • 特殊的可重定位目标文件,能在装入或运行时被装入到内存并自动被链接,称为共享库文件

可重定位目标文件

相关节的表示:

image-20240111214639443

链接时符号相关

什么是强弱符号?

函数和带初始化的全局变量是强;

未初始化的全局变量是弱符号。

符号多重定义的规则:

– 规则1:不允许有多个强符号;
– 规则2:如果有一个强符号 + 一个或多个弱符号,选择强符号;
– 规则3:如果有多个弱符号,任意选一个。

链接报错是什么情况?

连接过程中常见的错误是 符号未找到(undefined reference)和符号重定义(redefinition)

由于在编译器在处理各个符号的时候,已经没有了各个 C语言源文件的概念,只有目标文件。 因此对于这种错误,连接器在报错的时候,只会给出错误的符号的名称,而不会像编译器报错一样给出错误程序的行号。

静态库静态链接逻辑

image-20240111215642226

库在命令行中出现的位置和顺序问题:

image-20240111220226742

练习:

image-20240111220320417

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/318192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

U盘抜太快打不开恢复方法

U盘是一种常用的存储设备&#xff0c;由于其便携性和大容量等特点&#xff0c;被广泛应用于数据存储和传输。然而&#xff0c;有时候我们会遇到U盘拔出后无法再次使用的问题&#xff0c;这通常是由于U盘拔出太快导致的。本文将深入探讨U盘拔太快打不开的原因&#xff0c;并提供…

【elfboard linux 开发板】10. 设备树与烧录

1. 设备树介绍 设备树由一系列被命名的node和property组成 可以描述如下信息&#xff1a; CPU的数量和类别内存基地址和大小总线和桥外设连接中断控制器和中断使用情况GPIO控制器和GPIO使用情况Clock 控制器和 Clock 使用情况 由dts文件以文本方式对系统设备树进行描述&…

GPT-4V的图片识别和分析能力原创

GPT-4V是OpenAI开发的大型语言模型&#xff0c;是GPT-4的升级版本。GPT-4V在以下几个方面进行了改进&#xff1a; 模型规模更大&#xff1a;GPT-4V的参数量达到了1.37T&#xff0c;是GPT-4的10倍。 训练数据更丰富&#xff1a;GPT-4V的训练数据包括了1.56T的文本和代码数据。 …

Ubuntu 22.04 安装prometheus

服务器监控和报警软件有很多&#xff0c;为什么我们会选择Prometheus而不是其他软件呢&#xff1f; 因为它有以下优点&#xff1a; 自带简易web监控页面&#xff0c;用户可以很方便地查看监控数据和使用仪表盘。能实时收集数据并根据自定义警报规则推送告警&#xff1b;具有丰…

力扣双周赛第三题----2857. 统计距离为 k 的点对

这题我们的暴力做法就是o(n^2),但是根据数据量这样会超时&#xff0c;所以我们不能用暴力解法去解决 那么想一想双指针可以吗&#xff0c;不可以。为什么呢&#xff1f;因为他没有一个特性可以让他双指针跳过前面或者后面一个点。比如他们数组有顺序的情况下&#xff0c;还有一…

【JaveWeb教程】(23) MySQL数据库开发之事务与索引 详细代码示例讲解(最全面)

目录 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2 结构3.3 语法 2. 事务 场景&#xff1a;学工部整个部门解散了&#xff0c;该部门及部门下的员工都需要删除了。 操作&#xff1a; -- 删除学工部 delete from dept where id 1; -- 删除成功-- 删除学工部的员工…

某厂校招一道关于C的笔试题

一、笔试原题 题目&#xff1a;在Linux x86 _ 54 gcc环境下&#xff0c;下面的程序会出现什么问题&#xff1f;运行结果是什么&#xff1f;为什么&#xff1f; 程序如下图&#xff1a; 通过在gcc的环境下编译运行&#xff0c;发现运行结果为不断死循环打印0-17的数字 我们…

遥感影像-语义分割数据集:高分卫星-云数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该云数据集包括RGB三通道的高分辨率图像&#xff0c;包含高分一、高分二及宽幅数据集。 KeyValue卫星类型高分系列覆盖区域未知场景未知分辨率1m、2m、8m数量12000单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通道数三通道标签图…

云卷云舒:AI for DB、DB for AI

云卷云舒&#xff1a;算力网络云原生&#xff08;下&#xff09;&#xff1a;云数据库发展的新篇章-CSDN博客https://blog.csdn.net/bishenghua/article/details/135050556 随着数据库和AI技术的分支同向演进&#xff0c;AI 和数据库间的关联越发紧密了。 大模型的演进发展&a…

为何资深程序员都离不开 requirements.txt?你还在为环境配置发愁吗?

requirements.txt 文件是一个用于记录 Python 包依赖的文件&#xff0c;它能够帮助我们快速配置开发环境。在迁移到新的开发环境时&#xff0c;通常需要逐个使用 pip install 命令安装各种包&#xff0c;这个过程既耗时又可能出现错误。 而 requirements.txt 文件可以让我们一…

通过IP地址识别风险用户

随着互联网的迅猛发展&#xff0c;网络安全成为企业和个人关注的焦点之一。识别和防范潜在的风险用户是维护网络安全的关键环节之一。IP数据云将探讨通过IP地址识别风险用户的方法和意义。 IP地址的基本概念&#xff1a;IP地址是互联网上设备的独特标识符&#xff0c;它分为IP…

靶场实战(14):OSCP备考之VulnHub SUNSET NOONTIDE

打靶思路 资产发现 主机发现服务发现漏洞发现&#xff08;获取权限&#xff09; irc服务提升权限 server用户 sudosuidcron内核提权信息收集 1、资产发现 1.1、主机发现 本次靶场SUNSET: NOONTIDE[1]指定IP&#xff0c;不涉及主机发现过程。 1.2、服务发现 使用命令sudo -u roo…

Kubernetes 集群管理—日志架构

日志架构 应用日志可以让你了解应用内部的运行状况。日志对调试问题和监控集群活动非常有用。 大部分现代化应用都有某种日志记录机制。同样地&#xff0c;容器引擎也被设计成支持日志记录。 针对容器化应用&#xff0c;最简单且最广泛采用的日志记录方式就是写入标准输出和标…

调用openai实现聊天功能

&#x1f4d1;前言 本文主要是【聊天机器人】——调用openai实现聊天功能的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f3…

编译和链接(2)

3. 预处理详解 3.2#define 3.2.5带副作用的宏参数 当宏参数在宏的定义中出现超过一次的时候&#xff0c;如果参数带有副作用&#xff0c;那么你在使用这个宏的时候就可能 出现危险&#xff0c;导致不可预测的后果。副作用就是表达式求值的时候出现的永久性效果。 例如&…

day16 二叉树的最大深度 n叉树的最大深度 二叉树的最小深度 完全二叉树的节点数

题目1&#xff1a;104 二叉树的最大深度 题目链接&#xff1a;104 二叉树的最大深度 题意 二叉树的根节点是root&#xff0c;返回其最大深度&#xff08;从根节点到最远叶子节点的最长路径上的节点数&#xff09; 递归 根节点的的高度就是二叉树的最大深度 所以使用后序遍…

【Minio】常见问题解决思路

检查存储服务器对应的端口与应用服务器是否能够互通&#xff0c;通过ping|telnet命令检查、查看防火墙端口是否开放&#xff0c;检查防火墙端口linux系统和windows系统各有不同。检查电脑上的杀毒软件是否限制了网络端口和文件权限问题。检查minio配置信息是否正确&#xff0c;…

Unity AssetBundles资源管理和热更新

项目中的做法&#xff0c;在项目中一般会把资源按照文件目录去划分资源&#xff0c;以文件路径的名字作为AB的名字&#xff0c;一般都是把资源的这些放到预处理中。 一般会分为几个类型&#xff0c;比如把单个文件夹下的每个资源进行打bundle&#xff0c;把单个文件夹下的所有资…

10年果粉拯救老掉牙Mac心得(没错我是标题党)

连续两周了&#xff0c;当我不能用Mac,或者说当我闲置了近10年隔三差五的用Mac时&#xff0c;成功发现我的AppleID已经无法登录了。事情是这样的&#xff0c;当我踌躇满志地准备改一篇稿子&#xff08;潜在的稿费啊亲&#xff01;&#xff09;时&#xff0c;发现Pages竟然没有W…

驾驭数字孪生:智慧水利的未来之路

一、数字孪生技术的原理与实践 随着科技的不断进步&#xff0c;数字孪生技术作为一项创新的技术应用&#xff0c;正在逐渐改变我们的生活和工作方式。特别是在工业领域&#xff0c;数字孪生技术被视为实现智能制造、提升生产效率和产品质量的重要手段。本章节将深入探讨数字孪…
最新文章