2017-2018-1 20155315 《信息安全系统设计基础》第1周学习总结

2017-2018-1 20155315 《信息安全系统设计基础》第1周学习总结

每章一个问题

  • 第1章:我们输入的命令,计算机是如何将其转换为计算机的语言?
  • 第2章:计算机在计算的过程中产生溢出要如何保证计算的精确度?
  • 第3章:及时编译的时候,如果输错了命令只能从头开始吗?有其他的办法吗?
  • 第4章: 处理器是如何跟踪每一条命令的?又是如何分配每一条命令的空间的?
  • 第5章:既然程序可以分块,那么,模块被其他程序调用修改值的时候,是不是会有专门的区域存储修改的值?
  • 第6章:一个程序只要满足了高速缓存是不是就可以称作是高效率的程序呢?
  • 第7章:链接器在使用的时候有什么限制吗?
  • 第8章:fork函数与之前java中的catch有什么区别?
  • 第9章:虚拟内存与动态分配的malloc有冲突吗?两者是什么关系?
  • 第10章:Unix I/O与标准I/O函数之间的关系是什么?两者要如何互换?
  • 第11章:linux下的网络编程有什么优势?
  • 第12章:线程化的程序中如何找到最适合最高效的函数?

教材学习内容总结

Linux快捷键复习

  • Ctrl+Alt+T 打开新窗口
  • Ctrl+Shift+T 打开新的标签页
  • Ctrl+Shift+Q 关闭当前窗口
  • Ctrl+Shift+w 关闭当前标签页
  • Ctrl+空格切换输入法

位+上下文

  • 源程序是由0和1组成的位(bit)序列。
  • 8个位被组织成一组,称为字节。
  • 16个位称为字

程序的生命周期(gcc)

  1. 用vi编辑程序,编译,运行

    • 编译

    • 运行
  2. 预处理

  3. 编译

  4. 汇编

  5. 链接:用链接器将函数链接到程序

硬件组成

  1. 总线:贯穿整个系统,相当于各字节间的连接,总线上有接口,每次只传送1个字。
  2. I/O设备:输入与输出相当于计算机与外界沟通的桥梁
    • 键盘
    • 鼠标
    • 显示器
    • 磁盘
  3. 主存:存储程序和程序处理的数据,由一组动态随机存取存储器芯片组成。
  4. 处理器:中央处理单元,相当于计算机的大脑,不断处理接收到的指令,维持计算机的运行。

存储设备的层次结构

从上至下,设备的访问速度越来越慢,容量越来越大。高一层的存储器将作为低一层存储器存储器的高速缓存。

进程、线程、文件、并发、并行

  • 一个系统上可以有多个进程
  • 一个进程可以由多个线程组成
  • 多线程比单线程更高效
  • 进程就像是线程上的单元,而线程就是解决每个程序的控制流。
  • 文件就是字节序列,I/O设备包括磁盘、键盘、显示器甚至网络
  • 并发:一个同时具有多个活动的系统。
  • 并行:用并发使一个系统运行得更快。

三个抽象

  • 文件是对I/O的抽象
  • 虚拟存储器是对程序存储器的抽象
  • 进程是对一个正在运行的程序的抽象

链接

相当于一个整合,将各部分整合成一个单一的可执行的文件。

  • 符号解析,将每一个定义与引用联系起来
  • 重定位,把定义与位置联系起来,修改引用后指向新的位置实现重定位。
  • 目标文件就是字节块的集合
    • 可重定位的
    • 可执行的
    • 共享的:可以被动态地加载并链接

符号和符号表

  • 目标模块定义的可被其他模块引用的全局符号
  • 其他模块定义的可被目标模块引用的全局符号(外部符号)
  • 目标模块定义的只可被目标模块引用的本地符号

教材学习中的问题和解决过程

  • 问题1:链接器如何解析多重定义的全局符号?但是,链接器是如何筛选不同定义的全局变量呢?全局变量不是不变的吗?

  • 问题1解决方案:看了书上的解释,我知道了“符号”就像是我们熟知的变量和函数一样。全局符号就相当于动态变量,本地符号就相当于本地的静态变量。

根据强弱符号的定义,Unix链接器使用下面的规则来处理多重定义的符号:

1)不允许有多个强符号

2)如果有一个强符号和多个弱符号,那么选择强符号

3)如果有多个弱符号,那么从这些弱符号中选择任意一个

没有定义的全局变量就是弱符号,强符号被定义了多次就会出现错误。如果是同一个符号但有强有弱,链接器就会自动选择模块中的强符号。

代码调试中的问题和解决过程

  • 问题1:将程序进行预处理
  • 问题1解决方案:在gcc中,gcc -o用来指定输出文件的文件名。输入gcc -E hello.c -o hello.i,结果正确。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

暂无

结对及互评

暂无

其他(感悟、思考等,可选)

一个暑假过去了,发现自己好多虚拟机的操作都不像之前那么熟练了。感觉还是得多练,要多敲代码才能更好地学习。这一周学习了第一章和第七章,前面的内容掌握得差不多了,但是,第七章的链接还不是很理解,后续会继续学习。然后自己敲了一些C语言的小程序,对用vim写代码也熟练了一点。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 37/37 1/1 25/25
  • 计划学习时间:20小时

  • 实际学习时间:25小时

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-09-24 17:40  20155315庄艺霖  阅读(299)  评论(0编辑  收藏  举报