期中总结
各种指令:
搜索指令:man -k
例: man -k k1 | grep k2 | grep 数字
搜索同时含有k1 k2 最后的数字代表区段,常用的: 1.Linux 2.系统调用 3.c语言
Vim指令:
进入插入模式:i
退出插入模式:Esc
命令行::
保存并退出:wq
只退出不保存:q
Gcc与Gdb:
Gcc:
预处理:gcc –E hello.c –o hello.i; gcc –E调用cpp 生成中间文件
编 译 :gcc –S hello.i –o hello.s; gcc –S调用ccl 翻译成汇编文件
汇 编 :gcc –c hello.s –o hello.o; gcc -c 调用as 翻译成可重定位目标文件
链 接 :gcc hello.o –o hello ; gcc -o 调用ld** 创建可执行目标文件
(编译加-g才能用Gdb)
Gdb:
基本指令:
gdb programm(启动GDB)
l 查看所载入的文件
b 设断点 info
b 查看断点情况
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行(不进入)
s 单步运行(进入)
quit 退出GDB
断点设置:
1.行断点 b [行数或函数名] <条件表达式>
2.函数断点 b [函数名] <条件表达式>
3.条件断点 b [行数或函数名] <if表达式>
4.临时断点 tbreak [行数或函数名] <条件表达式>
各种知识点:
l 信息就是“位+上下文”
l 系统的硬件组成:总线、I/O、设备主存
l 操作系统两个基本功能:防止硬件被失控的应用程序滥用、向应用程序提供简单一致的机制来控制复杂的低级硬件设备
l 操作系统三个基本抽象:文件<--I/O设备;虚拟存储器<--主存,磁盘I/O设备;进程<--处理器,主存,I/O设备
l Y86:一个简单的、可以称之为IA32指令集的子集的指令集;只包括四字节整数操作,寻址方式比较少。指令编码长度从1——6字节不等。指令集的一个重要性只就是字节编码必须具有唯一的解释。
关于指令结构,每条指令的第一个字节表明指令的类型;这个字节分为两个部分,每部分四位:高四位是代码部分(0——0xB),第四位是功能部分。这里补充一些缩写:立即数(i),寄存器(r)、存储器(m)。指令附加的寄存器指示符字节依次是数据源(如果是立即数,把这一位设置成0xf)、目的寄存器/基址寄存器。有些指令需要附加四字节的常数字,采用小端法(倒序)编码
l pushl会把栈指针减4,并将一个寄存器值写入存储器中。因此,执行pushl %esp 和 popl %esp的结果是不固定的。
l 处理操作的阶段——
取指:从寄存器读取指令字节,地址为程序计数器的值。计算下一条指令地址等于PC中的值加上已取出指令的长度;
译码:从寄存器文件中最多读出两个操作数,它读入指令rA和rB指明的寄存器,不过有些是读寄存器%esp的;
执行:ALU执行指明的操作、引用的有效地址或者是修改栈指针,得到的值称为valE;
访存:将数据写入存储器或者从存储器读出数据,读出的数据叫做valM;
l 写回:写两个结果到寄存器文件;
l 更新PC:将PC设置成下条指令地址。
l DRAM: DRAM的芯片中的单元被分成d个超单元,每个超单元都由w个DRAM单元组成。一个d*w的DRAM总共存储了dw位的信息。超单元被组织成一个r行c列的长方形阵列,这里rc = d。信息通过引脚的外部连接器流入和流出芯片。
每个DRAM芯片被连接到某个称为存储控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或者依次从每个芯片传出w位。电路设计者将DRAM组织成二维而不是线性数组的一个原因是降低芯片上地址引脚的数量。
l 磁盘结构
磁盘是保存大量数据的存储设备;但读取速度慢。
磁盘有若干盘片组成,密封在容器(磁盘驱动器)内;每个盘片的两个表面都有一组被称为磁道的同心圆;每个同心圆由一些间隙分隔成一组等容量磁道(通常是512字节),间隙中存储的是标识扇区的格式化位。
柱面:所有盘片表面到主轴中心距离相等的磁道的集合
l 对扇区的访问主要有三个部分:
寻道:将读写头定位到包含目标扇区的磁道上。
Tseek
取决于它以前的位置和传动臂在盘面上的移动速度。时间通常为
3——9ms
。
旋转:一旦读写头定位到了期望的磁道,驱动器等待目标扇区的第一个位旋转到读写头下面。平均旋转时间是最大时间(等磁盘旋转一圈)
传送:驱动器开始写或者读扇区的内容;时间长短取决于旋转速度和每条磁道的扇区数目。平均时延为
Tavg=1/RPM*1/(
平均扇区数
/
磁道
)*60secs/1min
l CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令的。在使用其的系统中,地址空间中,有一块地址是为与I/O设备通信保留的;叫做I/O端口
l 高速缓存存储器(S,E,B,m)
每个存储器地址有m位,形成M=2^m个不同地址。这m位被划分成t个标记位、s个组索引位和b个块偏移位。
这样一个机器的高速缓存被组织成S=2^s个高速缓存组的数组;每个数组包含E个高速缓存行;每行由一个B=2^b字节的数据块、一个有效位(指明这个行是否包含有效信息)、t=m-(b+s)个标记位(唯一标识存储在这个高速缓存行中的块)组成
高速缓存的大小为C=SEB
收获:
这半学期,我觉得电脑对我越来越不只是一个简单的工具了,我慢慢对电脑有了深入的了解,不在像以前那样,只知道用电脑,打开别人编写的程序,游戏,而是学会用电脑编写自己的程序,让电脑帮助我更高效的完成我想要的,这门课对我的帮助可谓巨大,Vim编辑器让我节省许多文本编辑的时间,gcc与gdb也让我对编译程序有了新的认识,调试更加方便,后面学习的理论知识,则让我有了知其然,还知其所以然的感觉,计算机怎么存储,怎么运行,指令如何识别,每一集存储都有什么作用,他们间的联系是什么,这些都让我对计算机的了解更加深入。
建议:
在学习的过程中,偶尔也会遇到许多信息量巨大的知识点,让我一下子有些摸不着头脑,而且周围的同学也都不怎么理解,没有人可以方便的解惑,而且面对一本厚厚的字数密集的书,也不能很高的集中注意力,如果能配上视频教材就更好了,不知道老师有没有这方面的资源