20135337——信息安全设计基础第七周复习笔记


课本知识重难点梳理

第1章 计算机系统漫游

1.信息

  • 位+上下文

系统中所有信息都是由一串位表示的,区分不同数据对象唯一方法是读到这些数据对象时的上下文。

2.程序被翻译成不同格式

  • 编译系统

预处理器、编译器、汇编器、链接器

3.存储设备层次结构

  • 核心思想:缓存
  • 操作系统核心抽象:文件、虚存、进程、虚拟机

第2章 信息的表示和处理

1.信息存储

  • 进制转换:拿二进制作中间量
  • 网络编程基础:字节顺序

    大端法:高对低,低对高
    小端法:高对高,低对低
  • 运算

    逻辑运算:结果0或1(如果对第一个参数求值就能确定表达式的结果,那么就不会对第二个参数求值)
    位运算:结果位向量
    有无符号计算、截断、扩展都要结合具体的练习来体会公式的使用。
  • 掩码:对特定位可以置一,可以清零
  • IEEE浮点标准

    V=(-1)^s X 2^E X M 来表示一个数
    符号:s决定这个数是正还是负。
    阶码:E对浮点数加权,权重是2的E次幂。
    尾数:M是一个二进制小数,范围为1~2-ε或者0~1-ε。
  • 舍入

    向偶舍入:将数字向上或向下舍入,结果的最低有效数字为偶数。
    能用于二进制小数。(默认)
    向零舍入:把整数向下舍入,负数向上舍入。
    向下舍入:正数和负数都向下舍入。
    向上舍入:正数和负数都向上舍入。

第3章 程序的机器级表示

1.机器级代码

  • ISA指令集体系结构

    gcc -s hello.c(产生汇编代码)
    gcc -c hello.c(编译并汇编该代码)
    objdump -d hello.o(反汇编)
    针对指令的使用结合具体的练习进行学习效率会更高。

    2.过程

  • 栈帧结构
    栈帧——为每一个过程分配的内存空间,它包含两个特殊的参数,栈指针和帧指针。
    栈是向低地址增长的。

    帧指针:%ebp,指向栈底。
    栈指针:%esp,指向栈顶,栈指针可以移动,来分配或释放空间。
    %esp减小——分配空间
    %esp增大——释放空间

第4章 处理器体系结构

1.Y86指令集体系结构

具体使用结合练习

  • 异常
    halt指令、非法指令、访问非法地址

    2.HCL硬件控制语言

  • 数字系统

    组合逻辑、存储器元素、时针信号
  • 表达式

    AND:&&
    OR:||
    NOT:!

    3.Y86的顺序实现

    取指、译码、执行、访存、写回、更新PC

第6章 存储器层次结构

1.随机访问存储器RAM

分类:SRAM和DRAM

特点:掉电失忆

  • SRAM比较DRAM

    SRAM:供电不变,不刷新,抗干扰,存取快,贵

    2.只读存储器ROM

  • 分类:根据能被重新编写次数和对其编程所用机制分

    PROM:编程一次
    EPROM:能被擦除和重编1000次
    EEPROM:基于EPROM,达10^5次
    flash:一类非易失性存储器

  • 特点:非易失性

    3.磁盘

  • 磁盘的容量 = 每扇区大小每磁道扇区数磁道数 2 盘片数量
  • 访问时间

    T(max rotation)=1/RPM * 60secs/1min ——最大旋转延迟时间
    T(avg rotation)=1/2 * T(max rotation) ——平均延迟时间
    T(avg transfer)=1/RPM * 1/(平均扇区数/磁道) * 60secs/1min ——平均传送时间
    T(access)=T(avg seek)+T(avg rotation)+T(avg transfer) ——整个估计的访问时间

    总结:访问一个磁盘扇区中512字节主要花在寻道时间和旋转延迟

    4.总线

  • 存储总线

    1.并行传递方式。
    2.指令和数据向CPU传递时的通道。
    3.分三组:数据总线(用于传递数据);
    地址总线(用于传递主存储器的地址);
    控制总线(用于各种内部控制指令的传递)。
  • 系统总线

    1.传送的信息包括数据信息、地址信息、控制信息。
    2.数据总线(用于传送数据信息);
    地址总线(用来传送地址的地址总线的位数决定了CPU可直接寻址的内存空间大小);
    控制总线(用来传送控制信号和时序信号)。
  • I/O总线

    指缆线和连接器系统,用来传输I/O路径技术指定的数据和控制信号。
  • 读写事务

5.局部性

    1.重复引用同一个变量从的程序有良好的时间局部性;
2.对于步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性;
3.对于取指令来说,循环有很好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

6.存储器层次结构

  • 中心思想:每层存储设备都是下一层的缓存。

  • 缓存命中

若需要访问k+1层里的数据块d,如果d已经缓存在第k层,则称缓存命中。

  • 缓存不命中

1.若d不在第k层,则是缓存不命中。第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块。

2.替换策略:1.随机替换策略-随机牺牲一个块。2.最少被使用替换策略LRU-牺牲最后被访问的时间距离现在最远的块。

3.种类

    1.强制性不命中(冷不命中)

一个空的缓存称为冷缓存,对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。

2.冲突不命中

限制性的放置策略——将第k+1层的某个块限制放置在第k层块的一个小的子集中。

3.容量不命中

当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。

7.高速缓存存储器

  • 块、行、组

    块:一个固定大小的信息包。
    行:存储块以及其他信息的容器。
    组:一个或多个行的集合。
  • 通用的高速缓存存储器

  • 直接映射高速缓存

    三步:组选择、行匹配、字选择(如果缓存不命中还需行替换)

第7章

结合以下Linux基础总结

Linux基础

1.VIM

  • 普通模式、插入模式和命令行模式切换:

    普通→插入: i 或 a
    插入→普通: Esc
    普通→命令行: :
    命令行→普通:Esc
  • 帮助系统

    普通模式下按F1打开vim自己预设的帮助文档
    命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件

2.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

3.GDB

使用GCC编译时要加“-g”参数,然后才能够用gdb调试

  • 启动gdb的方法

    gdb program也就是执行文件,一般在当前目录下。
    gdb core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
    gdb 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。
  • 设置断点

    break func 设置断点,在函数func()入口处
    info break 查看断点信息。
    r 运行程序
    n 单条语句执行
    c 继续运行程序
    p I 打印变量i的值
    bt 查看函数堆栈。
    finish 退出函数。
    q 退出gdb

4.makefile

实现自动化编译

  • 格式

    target(目标文件)... : prerequisites(要生成那个target所需要的文件或是目标)...
    command(任意的Shell命令,就是make需要执行的命令)
  • Makefile中的宏

    递归展开方式  VAR=var
    简单方式 VAR:=var
    使用变量 $(VAR)

5.静态库与动态库

  • Windows:静态库:.lib;动态库:.dll(windows)
  • Linux:静态库:.a;动态库:.so(linux)(重点学习Linux下的)

    a.静态库

  • 为了创建该库,使用AR工具:

    ar rcs libvector.a addvec.o multvec.o

  • 为了创建可执行文件,需要编译链接输入文件*.o 和libvector.a:

    gcc -O2 -c .c
    gcc -static -o p2 .o ./libvector.a

  • 加载可执行目标文件

    ./p

    b.动态库

  • 创建动态库

    gcc -shared -fPIC -o libvector.so addvec.c multvec.c
  • 将动态库链接到程序中

    gcc -o p2 *.c ./libvector.so

每周检测重复出现(重点)

  • man -k

    man -k k1 | grep k2 | grep k3
    1 Linux中的一般命令
    2 系统调用
    3 库函数,涵盖了C语言的标准函数库
  • cheat

    To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )
  • find

    查找当前目录下所有目录的find命令是(find . -type d)
  • grep

    查找宏 STDIN_FILENO 的值的命令是(grep -nr XXX /usr/include)
  • 形成空调用栈帧

    push %ebp movl %esp %ebp

作业例题





总结体会

1.收获与不足:经过两个月的学习,让我对计算机有了进一步的了解,包括汇编的知识,存储器的知识,机器进行计算等方面。收获最大的是如何学习。第一,通过小组答疑论坛大家交流出现的问题,能够发现自己在看书时没有注意的细节,能够学习他人的学习态度。第二,通过自己看书,起初是漫无重点的看,渐渐地学会根据老师给出的重点,有侧重点的学,自己的学习态度也逐渐由开始完成任务变成学知识。第三,通过每周检测和博客评比,增加了认真学习的动力。第四,学的知识只是一条条概念,很多时候不理解,但是结合书上的练习就变得容易了。第五,自学应该是一个个人能力问题,而不仅仅是这门课程的学习方式。不足之处,正如老师说的“欠债”,由于C语言知识的薄弱,让我实践编写代码存在很大的问题,但是前两个月基本没有编程序的项目,我想在日后的学习中应该是一个很大的阻力,现在要努力补充、学习。
2.课程建议:我认为,首先,课堂检测基础知识是比较好的措施,能够检测课前学习的成果如何,同时,可以发现学习中出现的漏洞;其次,老师能够带领我们课堂演示一些指令的用法,能够让我除了实验楼无声的演示之外,有助于理解使用方式;最后,“量”的问题,开学前两周“量”真的很多,知识们在脑海里匆匆而过,大多数只留了个印象,确实变成了完成任务,调整之后,尤其是结合习题学习,让我真的掌握了(汇编这块特别突出,以前学习汇编时欠债,确实读不懂汇编语言,但是现在读懂了),所以我认为知识的学习是慢慢积累的,而不是一口吃个大胖子,最终结果只会消化不良,与此同时,自己主动学习要比被动的逼迫去学习来的有动力。

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告