计算机组成原理期末复习

文章目录

  • 第一章:计算机系统漫游
    • 编译系统
    • 进程线程之间的关系
    • 存储器层次结构
    • 虚拟地址
  • 第二章:信息的表示和处理
    • 大端与小端
    • 整数运算
    • 浮点数运算
  • 第三章:程序的机器级表示
    • 栈的压入和弹出
    • 算数与逻辑运算操作指令
    • 条件判断与循环
  • 第六章:存储器层次结构
    • 存储器
    • 程序的局部性
    • 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.rhkb.cn/news/238364.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【金猿案例展】首创证券——NoETL敏捷分析解决方案

‍ Aloudata 本项目案例由 Aloudata 投递并参与“数据猿年度金猿策划活动——2023大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 党的十八大以来&#xff0c;党中央、国务院不断加大金融科技创新支持力度&#xff0c;扩大金融科…

关于有源电力滤波器在地铁站低压配电系统中的应用分析——安科瑞赵嘉敏

摘要&#xff1a;作为国家提出的绿色电网、节能降耗已成为现代化企业努力的目标&#xff0c;也是企业急需解决的问题。作为地铁车站这类市政公共交通建筑的着重系统——配电系统。实现绿色电网实质上是解决电网中存在的各种电能问题&#xff0c;主要是涉及到谐波与无功问题两个…

统计学习 复习(知识点+习题)

复习资料&#xff1a;https://github.com/RuijieZhu94/StatisticalLearning_USTC 第一章 线性回归 1. From one to two 最小二乘 课后题 有偏/无偏估计 加权最小二乘 2. Regularization 线性回归&#xff08;二维情况&#xff09; 求解有约束优化问题 正则化最小加权二乘…

postman上传文件文件名有黄色图标

问题&#xff1a; 解决方案 步骤一&#xff1a;设置处打开settings 步骤二&#xff1a;打开location&#xff0c;选择文件所在磁盘目录 步骤三&#xff1a;关闭选项框 文件报错问题解决

数字孪生+人工智能突破复杂地形和气候提供可靠的电力

利用 Bentley 应用程序实现数字化交付&#xff0c;大大缩短了项目时间和成本&#xff0c;降低了碳排放量 Kalpataru Projects International Limited (KPIL) 正在扩展喀麦隆的电力网络&#xff0c;以改善该国 13% 人口的电网连接和电力供应。根据其项目管理方法&#xff0c;KPI…

MySQL 从零开始:02 MySQL 安装

文章目录 1、下载 MySQL 安装程序2、安装 MySQL 要操作 MySQL &#xff0c;首先要安装 MySQL &#xff0c;本文将一步步展示如何安装 MySQL&#xff0c;简直详细到令人发指。 环境&#xff1a; 操作系统&#xff1a;Windows10 64位MySQL版本&#xff1a;社区版 8.0.11.0 1、下…

什么是WhatsApp Business?WhatsApp和WhatsApp Business区别?

什么是WhatsApp Business&#xff1f; WhatsApp Business账号是Meta专为企业设计的WhatsApp账号。不同于消费者层次的应用&#xff0c;WhatsApp Business旨在为企业提供更好的服务支持&#xff0c;方便企业与消费者建立更好的双向沟通渠道。 WhatsApp和WhatsApp Business有什…

逸学Docker【java工程师基础】2.Docker镜像容器基本操作+安装MySQL镜像运行

基础的镜像操作 在这里我们的应用程序比如redis需要构建成镜像&#xff0c;它作为一个Docker文件就可以进行构建&#xff0c;构建完以后他是在本地的&#xff0c;我们可以推送到镜像服务器&#xff0c;逆向可以拉取到上传的镜像&#xff0c;或者说我们可以保存为压缩包进行相互…

第三代量子计算机交付,中国芯片开辟新道路,光刻机难挡中国芯

日前安徽本源量子宣布第三代超导量子计算系统正式上线&#xff0c;这是中国最先进的量子计算机&#xff0c;计算量子比特已达到72个&#xff0c;在全球已居于较为领先的水平&#xff0c;这对于中国芯片在原来的硅基芯片受到光刻机阻碍无疑是巨大的鼓舞。 据悉本源量子的第一代、…

docker应用:搭建uptime-kuma监控站点

简介&#xff1a;Uptime Kuma是一个易于使用的自托管监控工具&#xff0c;它的界面干净简洁&#xff0c;部署和使用都非常方便。 历史攻略&#xff1a; docker&#xff1a;可视化工具portainer docker-compose&#xff1a;搭建自动化运维平台Spug 开源地址&#xff1a; ht…

药物“出气”可知|ZL-005大小鼠雾化给药仪

雾化吸入给药是一种通过装置使药物进入肺部局部或全身发挥作用的给药方式。相较于口服药剂&#xff0c;雾化吸入给药可避免首过效应和药剂破坏&#xff0c;提高药物生物利用度。 而ZL-005大小鼠雾化给药仪&#xff0c;则是新一代小动物雾化装置的理想选择&#xff0c;可完成动…

逆水行舟 不进则退

目录 一、前言 二、2023年度总结 三、2024展望未来 一、前言 这是我从工作以来到现在最喜欢的一句话&#xff0c;我想把这句话送给自己也想送给大家。 2019年7月实习到现在已经过去了四年多&#xff0c;进入2024年也迎来了我工作生涯的第五个年头。 在这个行业里&#xff…

失踪人员信息发布与管理系统:计算机毕设课题的研究与实践 springboot+java+vue+mysql

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

IDEA、CLion代码智能提示功能忽略大小写

代码提示和补充功能有一个特性&#xff1a;区分大小写。 如果想不区分大小写的话&#xff0c;就把这个对勾去掉。建议去掉勾选。

Java微服务系列之 ShardingSphere - ShardingSphere-JDBC

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

金和OA jc6 GetAttOut SQL注入漏洞复现

产品简介 金和OA协同办公管理系统j6软件是一种综合性的协同办公解决方案&#xff0c;旨在提高企业内部的协作效率和工作效率。它提供了一系列功能和工具&#xff0c;帮助组织进行任务管理、日程安排、文件共享、团队协作和沟通等方面的工作 漏洞概述 金和 OA jc6 /jc6/JHSof…

HTTP超文本传输协议

一. HTTP基本概念 1. HTTP是什么 HyperText Transfer Protocol超文本传输协议&#xff0c;是一个在“两点”之间“传输”文字、图片、音频、视频等“超文本”数据的“约定和规范”。&#xff08;可以是服务器到服务器&#xff0c;也可以是服务器到客户端&#xff0c;所以用“…

鲲鹏系统:亚马逊账号防关联的最强利器

在亚马逊平台运营&#xff0c;我们都了解亚马逊通过浏览器中的Cookies来判断同一台电脑上是否有多个账号登录的情况。对于刷 单操作&#xff0c;通常需要小号登录刷完单后&#xff0c;清除cookies&#xff0c;切换不同的IP来进行操作&#xff0c;以避免账号之间被检测关联。 然…

源码篇--SpringCloud-OpenFeign--代理类的生成

文章目录 前言一、bean 定义的注册&#xff1a;1.1 启动类开启feign 接口&#xff1a;1.2 feign 接口的扫描&#xff1a; 二、feign bean 的生成&#xff1a;2.1.FeignContext bean &#xff1a;2.2.FeignClientFactoryBean 实例生成&#xff1a;2.2.1 this.feign(context) fei…

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷&#xff0c;但现有研究成果主要集中在财务业务单一领域&#xff0c;缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理&#xff0c;无论从自身技术发展&#xff0c;或…