计系(2)复习

news2025/1/16 18:02:12

期末了,就是看书有点看不进去。所以我想着打字打出来吧,应该能看进去一些。

目录

第一章 计算机系统漫游

第二章 信息的表示和处理

第三章 程序的机器级表示

第六章 存储器层次结构

第七章 链接


第一章 计算机系统漫游

1.2 程序被其他程序翻译成不同的格式

1) 掌握编译系统的四个阶段,掌握各个阶段的文件名称和类型。

预处理:预处理器cpp    hello.c->hello.i

编译:编译器ccl   hello.i->hello.s

汇编:汇编器as   hello.s->hello.o

链接:把几个.o文件链接生成可执行文件

1.4 处理器读并解释存储在内存中的指令

1) 了解shell程序

shell是一个应用程序,它输出一个提示符,等待输一个命令行,然后执行这个命令。

2) 了解计算机系统的硬件组成

总线、I/O设备、主存、处理器

3) 理解hello程序的运行过程

从I/O设备(键盘)输入hello,将字符存入寄存器,存入主存。按回车,shell程序执行指令,把可执行hello文件从磁盘复制到主存。处理器开始执行hello程序。

1.5 高速缓存至关重要

1) 理解高速缓存的组成器件

cache???

2) 理解高速缓存的主要作用

CPU从寄存器读数据很快,处理器从主存读取数据很慢。访问速率差距过大,高速缓存存放近期处理器可能回处理的数据来缩小差异。

1.6 存储设备形成层次结构

1) 掌握存储器层次结构中不同存储器在访问时间、存储容量、价钱上的趋势P10

1.7 操作系统管理硬件

1) 了解操作系统提供的抽象表示

文件:是对I/O设备的抽象

虚拟存储器;是对主存和磁I/O设备的抽象

进程:是处理器、主存、I/O设备的抽象

第二章 信息的表示和处理

2.1 信息存储

1) 理解进制转换,数据大小

二进制、十进制、十六进制。

2) 掌握大端法和小端法的存储规则

小端法:地位在低地址。一般x86机器都是小端法。

3)  掌握C语言中的位级运算

|  &  ~

4) 掌握C语言中的逻辑运算

|| && !。除了true就是false,除了1就是0.

5)  理解算数移位和逻辑移位

算数位移 右移补1,左移补0;

逻辑位移 右移左移都是补0;

2.2 整数表示

1) 理解常用数字表示方法(原码、补码、反码、移码)

正数:原码、补码、反码都一样。

负数:反码是除符号位都取反,补码是反码+1。

移码:补码的符号位取反

2) 掌握无符号数(原码)、有符号数(补码)、二进制数之间的转换。最高有效

位: 补码表示符号位;无符号数表示正权重

B2U([1011])=1*2^3+0*2^2-1*2^1+1*2*0=8+0+2+1=11

B2T([1011])=-1*2^3+0*2^2+1*2^1+1*2^0=-8+2+1=-5

T2U_{16}(-12345)=-12345+2^{16}

T2U_{16}(56)=56

U2T_{8}(16)=16

U2T_8(200)=200-2^8 

3)  理解无符号数的零扩展,理解补码数的符号扩展

4)  理解截断数字

不管有符号还是无符号,只需要把高位去掉,保留低位就行

2.3 整数运算

1)  理解补码加减法  2) 理解溢出

3) 了解整数乘法

2.4 浮点数

V=(-1)^s*M*2^E

1) 掌握IEEE 754浮点规格化表示

e不是全0,也不是全1;

2)  掌握阶码、偏置bias

规格化:E=e-127或e-1023  M=1.f

非规格化E:1-127或1-1023  M=0.f

3)  掌握特殊值的浮点表示: NaN,负无穷,指数/尾数 的位数

无穷大e全1.f全0

NaN e全1,f不全0

4)  掌握规格化数的表示范围,进制转换

规格化范围[1.0,2.0) 

第三章 程序的机器级表示

3.2 程序编码

1)  理解反汇编器objdump  (objdump .o和可执行程序,生成结果不同)

可以objdump -d hello.o

也可以objdump -d hello

生成结果不同,地址不同。

2)  理解编译的过程

hello.i->hello.s ,变成汇编语言。

3)  掌握代码格式

3.3 数据格式

1) 掌握C语言数据类型在X86-64中的大小:后缀 b/w/l/q – 1/2/4/8 

按X86-64中的大小,char/b;short/w;int/l; long /q; char */q; float/s; double/l

浮点数有点神奇,书上就这么写的。单精度s,双精度l。这个l不会产生歧异,因为浮点数使用的是一组完全不同的指令和寄存器。

3.4 访问信息

1) 掌握整数寄存器

生成1字节和2字节数字的指令回保持剩下的字节不变;生成4字节的指令会把高位4个字节置为0;

2) 掌握操作数格式

注意比例因子s必须是1、2、4、8. 

3) 掌握数据传送指令mov (movb, movw, movl, movq),掌握movl清零,理解扩展

原操作数可以是一个立即数,也可以是通过寻址得到的内存空间的数值。

目的地址可以是寄存器,也可以是通过寻址得到的内存空间。

mov指令不能直接完成内存到内存的数据半夜

 

 任何为寄存器生成32位值的指令,都会把该寄存器的高位置0。所以movl会把高位置0.

 

MOVZ是零扩展,MOVS是符号扩展。 

cltq把%eax符号扩展到%rax

4)  掌握入栈和出栈操作(pushq,popq),等价指令

                                                                                                                                                                   入栈  是rsp-8                   

rsp rsp rsp rsp rsp rsp                                                                                                                                                         

3.5 算数和逻辑操作

1) 理解有效地址

有效地址就是一个可以用于指定哪个内存位置可以用来执行存取操作的值。

2)  掌握加载有效地址(lea)

leaq是movq的变形。它的指令形式是从内存读数据到寄存器,但实际上它更笨就没有引用内存。

movq (%rdi,%rsi,4),%rax                     //%rax=M[r[Rdi]+4*R[%rsi]]

leaq (%rdi,%rsi,4),%rax                      //%rax=r[Rdi]+4*R[%rsi]

3) 理解算数移位和逻辑移位     

SA算数位移。SH逻辑位移。

SAL补0,SAR补符号位。

SHR补0,SHL补0。

4) 理解特殊的算术操作imulq, mulq, idivq, divq   

看书p133

3.6 控制

1) 了解条件码的符号

CF:进位标志。

ZF:零标志。

SF:符号标志。

OF:溢出标志。

2) 掌握比较和测试指令。不修改寄存器的值、只设置条件码

CMP指令与SUB指令行为一致。

 TEST指令与AND指令行为一致。常常test自身。testq %rax,%rax来判断%rax是负数、零、还是正数。

3)  理解跳转指令(jmp,je, jne)  

4)  掌握PC相对寻址

5)  掌握条件控制实现条件分支(if-else)

6)  掌握条件传送 cmov 

7)  理解循环 do-while, while, for

8)  掌握switch语句,跳转表  

3.7 过程

1)  掌握通用的栈帧结构

2) 掌握过程调用call 

3) 掌握数据传送   

4) 掌握栈上的局部存储

5) 掌握递归过程  

3.8 数组分配和访问

1) 掌握数组的分配

2) 掌握指针运算

3) 掌握嵌套数组

3.9 异质的数据结构

1)  掌握结构体偏移量和大小

2) 掌握数据对齐

3.10 在机器级程序中将控制与数据结合起来

1) 理解指针

2) 理解内存越界和缓冲区溢出,掌握缓冲区溢出的过程

第六章 存储器层次结构

6.1 存储技术

1)  理解静态、动态存储器的基本存储单元(SRAM-晶体管、DRAM-电容)

SRAM静态存储器的基本存储单元:晶体管

DRAM动态存储器的基本存储单元:电容

2) 理解静态、动态存储器分别对应的存储设备

静态:

动态:相机的传感器

3) 了解非易失性存储器

断电不会丢失信息。

SRAM和DRAM都不是非易失性存储器。

非易失性存储器有:ROM(只读存储器),闪存。

4) 了解闪存存储器

闪存是一种非易失性存储器,固态硬盘SSD是基于闪存的存储技术。

5) 掌握磁盘存储器的基本构成(盘片、盘面、柱面、磁道、扇区)

 6) 掌握磁盘容量的计算方法 

磁盘容量=盘片数*盘面数*磁道数*扇区数*每个扇区的字节数。 

7) 掌握磁盘访问时间(寻道时间、旋转时间、传送时间)的概念和计算方法

寻道时间:一般是通过对几千次对随机扇区的寻道求平均值

旋转时间:

传送时间: 

访问时间=寻道时间+旋转时间+传送时间。

6.2 局部性

1) 掌握存储系统的时间局部性和空间局部性

时间局部性:被引用过一次的内存位置很可能在不远的将来再被多次引用。

空间局部性:被引用过一次的内存位置,那么程序很可能在不远的将来引用附件的一个内存位置。

6.3 存储器层次结构

1) 掌握存储器层次结构中不同存储器在访问时间、存储容量、价钱上的趋势

越上面越快、越小、越贵。

 2) 掌握高速缓存在存储器层次结构中的作用

CPU从寄存器读数据很快,处理器从主存读取数据很慢。访问速率差距过大,高速缓存存放近期处理器可能回处理的数据来缩小差异。

3) 理解缓存命中率的概念和计算方法

缓存命中率=命中次数/总次数

6.4 高速缓存存储器

1) 掌握直接映射、全相联的地址表示

直接映射  只有一行:E=1。命中率低。

 全相联是   只有一组:S=1。成本高。

2) 了解组相联的地址表示

 3) 理解影响高速缓存存储器命中率的主要因素

①高速缓存大小的影响 

②块大小的影响

③相联度(E)越高,命中率越高。

④写策略的影响。

6.5 编写高速缓存友好的代码

1) 掌握空间局部性对多维数组的影响

第七章 链接

7.1 编译器驱动程序

1) 掌握编译过程的各个步骤(预处理、编译、汇编、链接)

预处理:预处理器cpp    hello.c->hello.i

编译:编译器ccl   hello.i->hello.s

汇编:汇编器as   hello.s->hello.o

链接:把几个.o文件链接生成可执行文件

2) 掌握链接的概念:链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程。(链接的优点)

7.2 静态链接

1) 掌握静态链接需要完成的两个主要任务

符号解析 和 重定位。

2)  掌握符号解析的概念。

符号解析是将每个符号引用和目标文件符号表中的确定的符号定义联系起来。

3) 掌握重定位的概念。

重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程。

7.3 目标文件

1) 理解目标文件的三种形式:可重定位目标文件(二进制)、可执行目标文件(二进制)、共享目标文件。

7.4 可重定位目标文件

1) 掌握ELF可重定位目标文件的组成

7.5 符号和符号表

1) 理解全局符号、局部符号的概念。

全局符号:main、外地符号exteern

局部符号(本地符号):static

2) 掌握定义和引用的概念。

符号定义:包括变量的声明,变量的初始化,函数的实现

符号引用:包括变量的使用,函数的调用

3) 掌握ELF符号表条目。能看懂READELF工具显示的符号表条目。

符号表是由汇编器构成的,???不记得上课讲过,没印象了??还是掌握。。。。

7.6 符号解析

1) 理解强符号、弱符号的概念。

函数和已初始化的全局变量是强符号。

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

2) 掌握处理多重定义符号的规则。  

①不允许有多个同名的强符号。

②如果有越高强符号和多个弱符号同名,那么选择强符号。

③如果有多个弱符号同名,那么从这些弱符号中任意选择一个。

3) 理解存档文件。(.a文件)

静态库一存档文件的形式存在磁盘中。.a文件是几个.o文件组成的。

得到静态库  Linux> ar rccs lib.a hello.o add.o

4) 掌握静态库链接。  

将所有相关的目标模块.o打包成为一个单独的文件.a,称为静态库。libc.a是C标准库,libm.a是数学库。

lib.c无需明显地指出,编译器自己默认帮你

链接指令是有顺序的,如果foo.c调用libx.a,libx.a调用liby.a,liby.a调用libx.a。

可以这样:linux> gcc foo.c libx.a liby.a libx.a

连接器维护三个集合:E,U,D

E中按顺序装.o文件。U。。去看PPT吧

7.7 重定位

1) 掌握重定位的过程。

符号解析完之后重定位。重定位有两步:重定位节和符号定义、重定位节中的符号引用。

2) 掌握ELF重定位条目。 

 3) 理解两种重要的重定位的类型和重定位符号引用

真的没讲吧??

7.8 可执行目标文件

1) 掌握ELF可执行目标文件的组成 

7.9 加载可执行目标文件

1) 了解LINUX运行时存储器映像

7.10 动态链接共享库

1) 了解链接共享库的文件后缀名

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信道特性(通信原理)

信道模型:信道模型的相关知识用信息理论与编码的知识来进行学习。 信道的分类:根据通信信道一般性来划分。 信道的噪声也是值得探究的一个学习点,感兴趣的可以进行查找。 根据信道输入/输出信号在时间和幅值上的离散或连续来划分如下&#…

【刷题笔记】牛客网:链表指定区间内反转

【刷题笔记】牛客网:链表指定区间内反转 一、题目描述及示例 二、思路分析 1、首先,我们来定义一个虚拟的头节点tempHead(原因:如果从第一个位置开始反转,则可以不用进行特殊情况考虑),并使te…

chatgpt赋能python:PythonGCD:介绍与计算方法

Python GCD:介绍与计算方法 Python是一种流行的编程语言,它在计算数学问题时也非常实用。其中一个基本的数学问题就是计算两个或多个数的最大公约数(GCD)。Python的math库提供了计算GCD的方法,但我们也可以编写我们自…

13.STM32F103C8使用PSRAM64H外扩RAM空间

一、简介 最近在调试STM32F103C8驱动墨水屏的实验,在使用过程中,需要使用大内存的RAM需要,由于C8T6的RAM空间只有20KB,而墨水屏的需要的内存为800*480*2/893.75KB。 在网上查了相关的方案,都是使用STM32F103ZE外扩IS6…

基于模拟退火算法的旅行商问题优化(matlab程序)

0.代码链接 基于模拟退火算法的旅行商问题优化(matlab程序)资源-CSDN文库 1.简述 金属退火是将金属加热到一定温度,保持足够时间,然后以适宜速度冷却(通常是缓慢冷却,有时是控制冷却)的一种金属热处理工艺。模拟退…

ubuntu22.04安装atlas2.0.0

这是本人《数据治理》课程的课程实验,对本人来说非常具有挑战性。 环境: 1、Apache Atlas 2.0 2、JDK 1.8.0_251 3、Maven 3.6.3 因为是课程作业,不用于生产。使用Atlas内嵌Hbase与Solr的部署方式。 在ubuntu裸机上安装,裸机未安装java&#…

ChatGPT | Word表格整体输出

本文来自欧巴Godwin的博客 ,引用必须注明出处! 用LangChain读取Word和PDF的文字内容是好的,但如果内容包含表格则读取出来的内容完全没法看。用ChatGPT往往是做企业知识库,所以会出现一个场景,即员工想让ChatGPT讲解包…

2、数据库操作语句:多表查询(表employ、department、location)

目录 1、多表查询连接条件 1)在employ、department两张表中查询 2)若查询语句中出现了多个表中都存在的字段,必须指明此字段所在的表。 3)如果表名比较长,SQL语句中多次使用表名,可以给表起别名&#xf…

chatgpt赋能python:Python实现Fibonacci数列

Python实现Fibonacci数列 Fibonacci数列是一个非常经典的数列,定义如下: F ( 0 ) 0 , F ( 1 ) 1 F(0)0, F(1)1 F(0)0,F(1)1 F ( n ) F ( n − 1 ) F ( n − 2 ) F(n)F(n-1)F(n-2) F(n)F(n−1)F(n−2) 也就是说,第n个数等于前两个数之和…

开环模块化多电平换流器仿真(MMC)N=6

模型简介: 运行环境MATLAB2021a 开环模块化多电平换流器仿真(MMC)N=6,连接负载,采用载波移相调制。 可以得到换流器输出N+1=7电平的相电压波形。可考虑线路阻抗。 子模块采用半桥结…

chatgpt赋能python:用Python实现网络工具——Ping

用Python实现网络工具——Ping 网络是现代社会不可或缺的一部分,而网络工具也是每个程序员的必备技能之一。其中,Ping是最常用的网络工具之一,主要用于测试两台计算机之间的网络连接质量。今天,我们将着重讨论如何用Python实现Pi…

【初识C语言(5)】C语言关键字+define定义常量和宏

文章目录 1. 常见关键字2. 关键字 typedef3. 关键字 static3.1 修饰局部变量3.2 修饰全局变量3.3 修饰函数 4. define 定义常量和宏 1. 常见关键字 C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。 这里先主要…

SD/StableDiffusion模型,ai绘画部署教程,谷歌云端零成本部署,支持中文

目录 前言 准备前提 说明 开始搭建 1、第一步,下载ipynb脚本文件 2、第二步,上传一键脚本文件到谷歌云盘 3、选择该.ipynb文件--右键--打开方式--关联更多应用 4、输入框搜索Colaboratory找到该应用,安装 5、安装过程中,…

chatgpt赋能python:Python的pow()函数-实现快速幂运算

Python的pow()函数 - 实现快速幂运算 Python是一门高级编程语言,具有简单易学、功能强大、代码可读性高等特点。在Python的内置函数中,有一个很有用的函数叫做pow()。pow()函数可以对数字进行快速幂运算,其实现方法很简单,但是在…

chatgpt赋能python:Python画轨迹图:认识、用法与优势

Python画轨迹图: 认识、用法与优势 Python的数据可视化能力十分强大。画图工具虽然千千万,但其中,轨迹图是同时准确又美观的图形表现。本文将向读者介绍Python画轨迹图的好处、如何使用以及如何在项目合适的地方使用轨迹图。 了解Python轨迹图 为了更…

chatgpt赋能python:Python绘制波浪线教程

Python绘制波浪线教程 Python是一种高级编程语言,它广泛应用于各种领域,如数据分析、Web开发、自动化操作以及人工智能等等。在这篇文章中,我们将介绍如何使用Python来绘制漂亮的波浪线。 简介 绘制波浪线是一种在艺术设计、信息图表、数据…

MySQL压测实战

写作目的 最近看到一句话是MySQL的TPS是4000,这句话是不严谨的,因为没有说服务器的配置。所以自己买了个服务器做了一个压测。希望自己对数据有一个概念。 注意:服务器不同结果不同,结果不具有普适性。 服务器配置 配置参数CPU…

MySQL数据库操作篇2(表的增删查改约束)

在数据类型那篇文章里,笔者曾经提到过约束条件,但也只是简单的提了提,并没有展开来说,约束条件是MySQL为确保数据正确性,安全性,以及倒逼程序员规范操作的一大利器,这篇文章笔者详细谈谈有哪些约…

0019-TIPS-2019-tokyowesterns-gnote : switch(jump) Doubule Fetch

漏洞源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/proc_fs.h> #include <linux/string.h> #include <linux/slab.h> #include <asm/uaccess.h>…

chatgpt赋能python:Python绘制车辆轨迹图

Python绘制车辆轨迹图 在现代交通中&#xff0c;车辆轨迹图是一个广泛应用的技术&#xff0c;它可以被用于道路交通管理&#xff0c;行车安全评估等领域。Python是一种强大的编程语言&#xff0c;它提供了许多绘制数据可视化图表的库。本文将介绍如何使用Python和Matplotlib库…