第八周学习报告

学习计时:共4小时

读书:2小时

代码:0小时

作业:0小时

博客:2小时

 

知识点总结:

 

一、Linux命令

 

k 上移 j 下移 h 左移 l 右移

 

q!退出并丢弃一切改动

 

x 删除错误字符

i 插入字符(esc返回正常模式)

A 在最后一行添加文本

vim+文件名 编辑文件

wq 保存并退出

删除类:

dw 从光标处删除一个单词

d$ 从光标处删至行尾

de 从当前光标位置删除至单词末尾

动作:

在动作前输入数字可使其重复

dd 删除整行

u 撤销最后执行的命令

U 恢复该行原始状态

ctrl+R 撤销撤销命令。。。

p 粘贴

0 将光标移到行首

r 替换光标所在位置字符

ce 改变至一个单词末尾

执行命令:

搜索 /或?

过滤 !

打开文件:

vim+文件名

或 e+文件路径

i 进入插入模式

w 保存文档

w+文件名 另存为

复制粘贴

普通模式

y复制 p粘贴

剪切粘贴

dd剪切 p粘贴

ddp交换上下行

~转换大小写

字符的替换与撤销(Undo)

快速缩进

普通模式下输入15G,跳转到15行

普通模式下输入>> 整行将向右缩进(使用,用于格式化代码超爽)

普通模式下输入<< 整行向左回退

普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数

shiftwiden命令

可以控制缩进或回退的字符数

调整文本命令

ce 居中

ri 靠右

le 靠左

查找

快速查找

/+要查找的字符串

?向上查找,/向下查找

n 继续查找 N 反向查找

高级查找

\*寻找游标所在处的单词

\#同上,但 \* 是向前(上)找,#则是向后(下)找

g\*\* ,但部分符合该单词即可

g\#\# ,但部分符合该单词即可

多文件编辑

n/N!强制切换:之前文件的输入没有保存,仅仅是切换到另一个文件

打开新文件

e+文件名 打开文件

e#回到前一个文件

ls 列出以前编辑过的文档

b+文件名 直接进入编辑

bd+文件名 删除以前编辑过的文件项目

e!+文件名 打开新文件,放弃正在编辑的文件

f 显示正在编辑的文件名

f+文件名 改变正在编辑的文件名

 

恢复文件

vim -r+文件名 进入文档

ewcover+文件名 恢复

 

可视模式

v 选取,再按v,取消选取

shift+v 选取整行

ctrl+v 矩形区域选取

d 删除选取区域

y 复制选取区域

 

视窗操作

在命令行模式下输入new,打开一个新的视窗

命令行模式下输入:sp 1.txt 打开新的横向视窗来编辑1.txt

命令行模式下输入:vsp 2.txt 打开新的纵向视窗来编辑1.txt

普通模式下Ctrl-w s 将当前窗口分割成两个水平的窗口

普通模式下Ctrl-w v 将当前窗口分割成两个垂直的窗口

普通模式下Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!

普通模式下Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗

普通模式下Ctrl-w j 移至下面视窗

普通模式下Ctrl-w k 移至上面视窗

普通模式下Ctrl-w h 移至左边视窗

普通模式下Ctrl-w l 移至右边视窗

普通模式下Ctrl-w J 将当前视窗移至下面

普通模式下Ctrl-w K 将当前视窗移至上面

普通模式下Ctrl-w H 将当前视窗移至左边

普通模式下Ctrl-w L 将当前视窗移至右边

普通模式下Ctrl-w - 减小视窗的高度

普通模式下Ctrl-w + 增加视窗的高度

 

文档加密

创建加密文档

vim -x+文档名

输入密码,确认密码

 

在命令行模式中输入!可执行外部的shell命令

!ls 用于显示当前目录的内容

!rm+文件名用于删除该文件

w+文件名可将当前 VIM 中正在编辑的文件另存为该文件

 

帮助系统

F1 打开帮助界面

h+文件名 打开该帮助文件

ver 显示版本及参数

 

功能设定

可以在编辑文件时进行功能设定,退出后不会保存

要永久保存需修改vim配置文件

获取目前的设定

set 显示所修改过的配置

set all显示所有设定值

set option?显示option设定值

set nooption取消当期设定值

set功能说明

命令行模式下

set autoindent(ai) 设置自动缩进

set autowrite(aw) 设置自动存档,默认未打开

set background=darklight,设置背景风格

set backup(bk) 设置自动备份,默认未打开

set cindent(cin) 设置C语言风格缩进

 

二、信息的表示处理

三种重要的数字表示:无符号编码,补码编码(有符号),浮点数编码

当结果太大不能表示时会溢出,大量安全漏洞都是由于算数运算引发的

信息存储

最小的可寻址存储器单位:字节

虚拟存储器:每个字节都由唯一的数字标识,称为地址

虚拟地址空间:所有可能地址的集合

每个程序对象可视为字节块,程序本身是一个字节序列

十六进制表示法

0x...

当x是2的非负整数二次幂时,将n写作i+4j的形式,j表示0的个数

i=0 :1      i=1 :2    i=2 :4     i=3 :8

字长:指明整数和指针数据的标称大小

字长为w,虚拟地址范围:0~2的w次方-1,最多访问2的w次方个字节

大多数计算机字长为32位,实验楼为64位

gcc -m32 可以在64位机上生成32位的代码

虚拟存储器:每个字节都由唯一的数字标识,称为地址

虚拟地址空间:所有可能地址的集合

每个程序对象可视为字节块,程序本身是一个字节序列

数据大小

两种不同的浮点数格式:单精度 双精度

格式:4字节 8字节

寻址和字节顺序

小端法:最低有效字节在最前面,高对高,低对低

大端法:最高有效字节在最前面,相反

反汇编器:确定可执行程序文件所表示的指令序列的工具

C 强制类型转换

sizeof 确定对象使用字节数

不同的操作系统有不同的分配规则,结果相同,指针值却完全不同

字节模式 整型 0x00003039  浮点数 0x4640E400

表示字符串

字符串:以null字符结尾的字符数组

文本数据比二进制数据具有更强的平台独立性

库函数strlen不计算终止的空字符

布尔代数

与 或 非 异或

位向量:表示有限集合

位级运算

确定一个位级运算最好的方法:将十六进制的参数扩展成二进制表示并执行二进制运算,然后再转换回十六进制

常见用法:掩码运算

掩码:位模式,从一个字中选出的位的集合

逻辑运算

0 false 非0 true

如果对第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值

移位运算

<<    >>

逻辑右移:左端补0

算数右移:左边补最高有效位

对于无符号数据,右移必须是逻辑的

补码编码

最常见的有符号数的计算机表示方式就是补码形式

将字的最高有效位解释为负权

最高有效位:符号位

权重-2的位数次方,是无符号表示中权重的负数

最小值[10...0] 最大值[01...1]

UMax TMin TMax

P42页表

|TMin|=|TMax|+1

UMax=2TMax+1

C语言中的有符号数与无符号数

大多数数字都默认为有符号的

要创建一个无符号常量,要加上后缀U或u

转换的原则是底层的位保持不变

如果一个运算一个有符号一个没符号,会将有符号强制转换为无符号

IEEE浮点表示

标准:V=(-1)的s次方*M*2的E次方

符号:s决定正(0)负(1)

尾数:M是二进制小数

阶码:E的作用是对浮点数加权

情况1:规格化的值:当exp的位模式既不全是0,也不全是1

情况2:非规格化的值:阶码域全0

情况3:特殊值:阶码全1

舍入

找到最接近的匹配值

四种舍入方式

默认方法找到做接近的匹配,其他三种用于计算上界和下界

向偶数舍入(默认):向上舍入,向下舍入

 

三、程序的机器级表示

程序编码

命令gcc指的是GCC C编译器

-01 使用第一级优化(提高优化级别会使最终程序运行更快,但编译时间可能会变长

第二级优化被认为是较好的选择

机器级代码

两种抽象:指令集体系结构,虚拟地址

汇编代码的特点:用可读性更好的文本格式来表示

可见的处理器状态:程序计数器(PC),整数寄存器文件,条件码寄存器,浮点寄存器

汇编代码不区分有符号或无符号整数,不区分各种类型的指针,不区分指针和整数

程序存储器:程序的可执行机器代码,操作系统需要的一些信息,用来管理过程调用和返回的运行时栈,用户分配的存储器块

操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器中的物理地址

数据格式

16位 字

32位 双字

64位 四字

大多数数据类型都是双字

指针:4字节的双字

单精度 4字节

双精度 8字节

扩展精度 10字节/12字节

字符后缀

数据传送指令三个变种:movb,movw,movl

操作数指令符

大多数指令有一个或多个操作数,指示出执行一个操作中要引用的源数据值,以及放置结果的目标位置

不同操作数的可能性分为3种类型:立即数$,寄存器,存储器

 数据传送指令

把许多不同的指令分为指令类

见图P114 图3-4

MOV类中的指令将元操作数的值复制到目的操作数中

MOVS和MOVZ指令将一个较小的源数据复制到一个较大的数据位置,高位用符号位扩展或零扩展进行填充

Pushl指令:把数据压入到栈上

加载有效地址

Leal:从存储器读数据到寄存器

目的操作数必须是一个寄存器

一元操作和二元操作

一元操作有一个操作数

二元操作有两个操作数

两个操作数不能同时是存储器的位置

移位操作

先给出移位量,再给出要移位的数值

左移:SAL.SHL效果一样

右移:SAR算术,SHR逻辑

条件码

单个位的条件码寄存器

常用条件吗:CF,ZF,SF,OF

CF:无符号溢出

ZF:零

SF:负数

OF:有符号溢出

Leal进行地址运算所以不改变条件码

两种只会设置条件码的指令:CMP,SUB

访问条件码

三种方法:

根据条件码的某个组合,将一个字节设置为0或者1

条件跳转到程序的某个其他部分

有条件的传送数据

跳转指令及其编码

跳转指令会导致执行切换到程序中一个全新的位置

目的地通常用一个标号指明

当执行PC有关寻址时,程序计数器的值是跳转指令后面的那条指令的地址,而不是跳转指令本身的地址

栈帧结构

栈:传递过程参数、存储返回信息、保存寄存器用于以后恢复、本地存储

为单个过程分配的那部分栈成为栈帧

寄存器%ebp为帧指针

寄存器%esp为栈指针

 

四、处理器体系结构

我们看到的计算机系统只限于机器语言程序级

指令被编码为由一个或多个字节序列组成的二进制格式——指令集体系结构(ISA)

设计处理器:基于顺序操作,功能正确,有点不实用,时钟必须足够慢。

创建一个流水线化的处理器,处理冒险或冲突

冒险:一条指令的位置或操作数依赖于其他仍在流水线中的指令

Y86处理器:硬件构造块,结构构造模块

程序员可见的状态

程序员可见状态:每条指令都会读取或修改处理器状态的某些部分

Y86处理器类似于IA32,有8个程序寄存器

每个程序寄存器存储一个字

3个一位的条件码:ZF、SF、OF

存储器:一个很大的字节数组,保存着程序和数据

Y86用虚拟地址引用储存器的位置

虚拟地址会被翻译成物理地址

状态码Stat:程序执行的总体状态,正常or异常

Y86指令

是IA32指令集的一个子集,只包括四字节整数操作

详见P232图4-2

Movl指令:irmovl、rrmovl、mrmovl、rmmovl

第一字母:源 i:立即数 r:寄存器 m:储存器

第二字母:目的 r:寄存器 m:储存器

储存器引用方式:基址和偏移量形式

4个整数操作指令OPl:addl、subl、andl、xorl,只对寄存器数据进行操作

7个跳转指令:jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支

6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg

Call指令将返回地址入栈,然后跳到目的地址

Pushl:入栈 popl:出栈

Halt指令停止指令的执行

指令编码

每条指令的第一个字节表明指令的类型

高4位:代码 低四位:功能

Rrmovl:无条件传送,功能代码0

寄存器标识符0-7

程序寄存器存在CPU中的一个寄存器文件中

寄存器指示符字节:指示一个或两个寄存器

有些指令需要附加4字节的常数字

Y86异常

程序员可见的状态包括状态码Stat,描述程序执行的总体状态

1 AOK  正常

2 HLT 处理器执行halt指令

3 ADR 遇到非法地址

4 INS 遇到非法指令

处理器会调用一个异常处理程序。

Y86程序

.开头的命令是汇编器命令:调整地址

.pos0:从地址0开始产生代码

初始化栈指针,帧指针

YIS:指令集模拟器

一些Y86指令的详情

Pushl:栈指针减4,并且将一个寄存器值写入存储器中。

处理器的行为不确定

两种约定:1.压入%esp的原始值 2.压入减去4的%esp的值

组合电路和HCL布尔表达式

组合电路

两条限制:

两个或多个逻辑门的输出不能连接在一起,否则可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障

这个网必须是无环的。

多路复用器:根据输入控制信号的值

组合逻辑电路与C语言中逻辑表达式的区别:

组合电路:输出会持续的响应输入的变化

C表达式:遇到才求值

C表达式:允许参数是任意整数,0表示FALSE,其他都是TURE

组合电路:只对位0,1进行操作

C表达式可能只被部分求值

 字级的组合电路和HCL整数表达式

在HCL中,将所有的字级信号都声明为int,不指定字的大小,每个字都可以声明为有特定的位数

在画字级电路的时候,用中等粗度的线来表示携带字的每个位的线路,用虚线表示布尔信号结果

多路复用函数用情况表达式来描述

选择表达式可以是任意的布尔表达式,可以有任意多的情况

情况表达式能描述带复杂选择标准的,多种输入信号的块。

储存器和时钟

由一个时钟控制

时钟寄存器:存储单个位或字,时钟信号控制寄存器加载输入值

随机访问寄存器:存储多个字,用地址来选择该读或该写哪个字

硬件寄存器,程序寄存器

寄存器文件有两个读口端,一个写口端,允许同时进行多个读或写操作

处理器还包括另一个只读储存器

两个储存器合并为一个具有双端口的储存器:一个用来读指令,另一个用来读或写数据

将处理组织成阶段

取址,译码,执行,访存,写回,更新PC

以一种统一的方式处理所有的跳转指令,它们只在判断是否要选择分支的时候不同

在执行阶段,检查条件码和跳转条件来确定是否要选择分支,产生出一个位信号Cnd

在更新PC阶段,检测这个标志

1:PC设为valC(跳转目标)

2:PC设为valP(下一条指令的地址)

SEQ硬件结构

同各个阶段相关的硬件单元负责执行这些处理

在右边,反馈线路向下,包括要写到寄存器文件的更新值,以及更新的程序计数器值

取址,译码,执行,访存,写回

浅灰色方框表示硬件单元

控制逻辑块是用灰色圆角矩形表示的

线路的名字在白色椭圆中说明

宽度为字长的数据连接用中等粗细的线表示

宽度为字节或更窄的数据连接用细线表示

单个位的连接用虚线来表示

 SEQ阶段的实现

Nop指令:除了将PC加1,不进行任何处理

Halt指令:使得处理器状态被设置为HLT,导致处理器停止运行

1、  取指阶段

包括指令存储器硬件单元。以PC作为第一个字节的地址,这个单元一次从存储器读出6个字节,第一个字节被解释为指令字节(Split)

Icode:控制逻辑块计算指令

Ifun:功能码

当指令地址不合法,这些值对应于nop指令

2.译码和写回阶段

寄存器文件有四个端口

支持同时进行两个读或两个写

每个端口都有一个地址连接和一个数据连接

地址连接是一个寄存器ID,数据连接是一组32根线路

3.执行阶段

执行阶段包括算术\逻辑单元(ALU),对输入数据执行一系列运算

4.访存阶段

读或者写程序数据

两个控制块产生存储器地址和存储器输入数据的值

另外两个块产生控制信号表明应该执行读操作还是写操作

当执行读操作时,数据存储器产生值valM

5.更新PC阶段

会产生程序计数器的新值

 

五、存储器层次结构

随机访问存储器

分为静态和动态

  1. 静态RAM

SRAM将每个位存储在一个双稳态的存储器单元里。

它可以无限期地保持在两个不同的电压配置或状态之一

亚稳态

2.动态RAM

DRAM将每个位存储为对一个电容的充电。

每个单元由一个电容和一个访问晶体管组成

只要有供电,SRAM就会保持不变。DRAM需要刷新

3.传统的DRAM

分为d个超单元,每个超单元由w个DRAM单元组成,一个d*w单元共存储dw位信息

超单元被组织成r行c列的长方形阵列,rc=d

每个超单元有形如(i,j)的地址,i表示行,j表示列

每个DRAM芯片被连接到某个称为存储控制器的电路

4.存储器模块

DRAM芯片包装在存储器模块中,插在主板的扩展槽上

常见:双列直插存储器模块,单列直插存储器模块

通过将多个存储器模块连接到存储控制器,能够聚合主存

5.增强的DRAM

快页模式DRAM(FPM DRAM)

扩展数据输出DRAM(EDO DRAM)

同步DRAM(SDRAM)

双倍数据速率同步DRAM(DDR DRAM)

Rambus DRAM(RDRAM)

视频RAM(VRAM)

6.非易失性存储器

DRAM和SRAM断电后会丢失信息,是易失的,非易失性存储器断电后依然保存着信息

ROM:只读存储器

PROM(可编程ROM):只能被编程一次

可擦写可编程ROM(EPROM):能够被擦除和重编程的次数的数量级可达1000次

闪存:基于闪存的磁盘驱动器——固态硬盘

存储在ROM中的程序通常称为固件。

7.访问主存

数据流通过总线传播

总线事务:读事务:从主存传送数据到CPU 写事务:从CPU传送数据到主存

总线是一组并行的导线,能携带地址、数据和控制信号

系统总线:连接CPU和I/O桥

存储器总线:连接I/O桥和主存

读事务和写事务都有三个基本步骤

磁盘存储

磁盘构造

由盘片构成,每个盘片有两个表面,表面覆盖着磁性记录材料

盘片中央有一个可以旋转的主轴,使盘片以固定的旋转速率旋转,通常5400~15000转每分钟

每个表面都由一个称为磁道的同心圆组成,每个磁道被划分为一组扇区,每个扇区包括相等数量的数据位,扇区之间由一些间隙分隔开

整个装置通常称为磁盘驱动器

磁盘容量

一个磁盘可以记录的最大位数称为它的最大容量

记录密度:磁盘一英寸的段中可以放入的位数

磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数

面密度:记录密度和磁道密度的乘积

磁盘容量=字节数/扇区*平均扇区数/磁道*磁道数/表面*表面数/盘片*盘片数/磁盘

磁盘操作

磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂的一端。

寻道:通过沿着半径轴前后移动这个传动臂,驱动器可以将读/写头定位在盘面上的任何磁道上

对扇区的访问时间三部分:

寻道时间:移动传动臂所需的时间称为寻道时间

旋转时间:Tmax=1/RPM*60secs/1min,平均旋转时间是它的一半

传送时间:一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目

逻辑磁盘块

逻辑盘控制器:维护着逻辑块号和实际磁盘扇区之间的映射关系

控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)三元组,唯一的标识了对应的物理扇区

连接到I/O设备

输入/输出(I/O设备),通过I/O总线连接到CPU和主存

I/O总线比系统总线和存储器慢,但可以容纳种类繁多的第三方I/O设备

通用串行总线控制器:连接到USB总线的设备的中转机构

图形卡(适配器):包含硬件和软件逻辑,代表CPU在显示器上画像素

主机总线适配器:将一个或多个磁盘连接到I/O总线,使用主机总线接口定义的通信协议

访问磁盘

CPU使用一种称为储存器映射I/O的技术来向I/O设备发出命令

地址空间中有一块地址是为与I/O设备通信保留的

每个这样的地址称为I/O端口

CPU通过执行三个存储指令,发起磁盘读

第一条指令:发送一个命令字,告诉磁盘发起一个读,同时还发送了其他的参数

第二条指令:指明应该读得逻辑块号

第三条指令:指明应该存储磁盘扇区内容的主存地址

商用磁盘的剖析

第一列给出区号,区0在最外面,区14在最里面

第二列给出该区每条磁道中包含的扇区数

第三列显示分配给区的柱面数量

第四列给出了分配给每个区的逻辑块总数

靠外面的区比靠里面的区有更多的扇区

固态硬盘

固态硬盘(SSD)是一种基于闪存的存储技术

一个SSD包由一个或多个闪存芯片和删除翻译层组成

比起旋转磁盘,SSD有很多优点:

由半导体存储器构成,没有移动部件,因而随机访问时间比旋转磁盘要快,能耗更低,也更结实

缺点:容易磨损,贵

局部性

局部性原理:倾向于引用邻近于其他最近引用过的数据项的数据项

两种形式:时间局部性,空间局部性

一般而言,有良好局部性的程序比局部性差的程序运行得更快

顺序访问一个向量每个元素的函数,具有步长为1的引用模式。

在一个连续向量,每隔k个元素进行访问,就被称为步长为k的引用模式

随着步长的增加,空间局部性下降

双重嵌套循环按照行优先顺序读数组的元素

重复引用同一个变量的程序有良好的时间局部性

对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。在存储器中以大步长跳来跳去的程序空间局部性会很差

对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好

存储器层次结构

存储技术:不同存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小。CPU和主存之间的速度差距在增大

中心思想:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存

块:连续的数据对象片

缓存命中

当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k块

 

第k层没有缓存数据对象d

如果缓存不命中,第k层的缓存从第k+1层缓存中取出包含d的那个块,如果第k层的缓存已经满了的话,可能会覆盖现存的一个块,这个过程称为替换或驱逐,被驱逐的块称为牺牲块,决定该替换哪个块是由缓存的替换策略来控制的

一个空的缓存有时称为冷缓存,此类不命中称为强制性不命中或冷不命中

冲突不命中:数据对象映射到同一个缓存块

容量不命中:工作集大小超过缓存大小

高速缓存存储器

存储器地址m位,S=2的s次方个高速缓存组,每个组包含E个高速缓存行,每个行由B=2的b次方字节的数据块组成

一个有效位指明这个行是否包含有意义的信息,还有t=m-(b+s)个标记位

描述:元组(S,E,B,m)

高速缓存的大小C指的是所以块的大小的和,C=S*E*B

(详见p410图6-28)

 

六、其他

gcc编译器

1.流程:预处理、编译、汇编、链接

(1)预处理 对头文件和宏文件进行处理

-E:查看,让gcc在预处理结束后停止编译

gcc -E hello.c -o hello.i

(2)编译 检查,翻译成汇编语言

-s 查看 gcc -s hello.i -o hello.s

(3)汇编 gcc-c hello.s -o hello.o 转成目标文件

(4)链接 函数库 静态库.a 动态库 .so

gcc默认为动态库 gcc hello.o -o hello

2.分析

(1)常用 -I dir:在头文件的搜索路径列表中添加dir目录,添加放置在其他位置的头文件

gcc hello|.c -I /root/workplace/gcc/ -o hello|

(2)库

静态库:使用归档工具ar将一些目标文件集成在一起

-L dir 在库文件的搜索路径列表中添加dir目录

动态库:-tpic 构造一个目标文件

           -shared 生成动态库

           注册动态库路径名

gdb调试器

1.使用流程

gcc -g test.c -o test

查看文件 l

设置断点 b+行号

查看断点情况 info b

查看调用函数情况 bt

运行代码 r

查看变量值 p+变量

单步运行 n或s s会进入函数,n不会进入函数

恢复程序运行 c

2.基本命令

help 查找gdb命令

help+命令名

设置断点与恢复命令

函数断点 b+函数名

条件断点 b+行数/函数名+if表达式

修改运行参数相关命令

set 变量=设定值

makefile工程管理器

1.makefile基本结构

makefile是make读入的唯一配置文件

由make工具创建目标体

target:dependency_files

(Tab) command

make target

2.makefile变量

变量定义:

递归展开方式 VAR=var

简单方式:VAR:=var

3.规则:隐含规则,模式规则

 

我的收获:

学会了Linux命令,vi,gcc,gdb,make的使用

了解了信息表示和处理的方式,程序的计算机表示,处理器体系结构,存储器层次结构

更加深入的理解了计算机系统

读书的速度也变快了,起初读起来很慢很费力,后来越来越快,重点也抓得越来越准,400多页书就这样被看完了

虽然要说兴趣真的兴趣不大这是没办法的事,但是强迫自己学还是可以学懂一些的,对自己的学习能力更加有自信了

 

我的不足:

我的记忆力越来越差了,学过的东西不一会就忘了,考前一定要再重新看一遍否则什么都不会,有的时候连自己的手机号都记不起来,这该怎么办才好呢??

我钻研的精神也不够,有些地方实在看不懂就不看了,想缓一缓以后再看,然后就忘了

我的数学能力太差了,有一章有好多复杂的公式,我就不知道它在讲什么了

我的电脑有个不足就是虚拟机装不上Linux,可能是我还没有尝试足够多遍吧

 

课程建议和意见:

既然老师说了接下来的课程的模式和以前不一样了,那我就不提什么意见了,拭目以待

 

你可能感兴趣的:(第八周学习报告)