zoukankan      html  css  js  c++  java
  • 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>  program也就是执行文件,一般在当前目录下。
    gdb <program>  core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
    gdb <program>  <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程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.课程建议:我认为,首先,课堂检测基础知识是比较好的措施,能够检测课前学习的成果如何,同时,可以发现学习中出现的漏洞;其次,老师能够带领我们课堂演示一些指令的用法,能够让我除了实验楼无声的演示之外,有助于理解使用方式;最后,“量”的问题,开学前两周“量”真的很多,知识们在脑海里匆匆而过,大多数只留了个印象,确实变成了完成任务,调整之后,尤其是结合习题学习,让我真的掌握了(汇编这块特别突出,以前学习汇编时欠债,确实读不懂汇编语言,但是现在读懂了),所以我认为知识的学习是慢慢积累的,而不是一口吃个大胖子,最终结果只会消化不良,与此同时,自己主动学习要比被动的逼迫去学习来的有动力。

  • 相关阅读:
    scrapy爬虫爬取小姐姐图片(不羞涩)
    scrapy爬虫登录edusrc查看漏洞列表
    代码审计【根据功能点定向审计】BugFree ZSWin重装案例
    645-2007协议解析
    最近总结
    防爆zigbee模块
    物联网卡余额管理软件更新
    激光+紫外催化控制器
    modbus转edp协议
    modbus转mqtt工具
  • 原文地址:https://www.cnblogs.com/zzzz5/p/4927832.html
Copyright © 2011-2022 走看看