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)
-
用vi编辑程序,编译,运行
- 编译
- 运行
-
预处理
-
编译
-
汇编
-
链接:用链接器将函数链接到程序
硬件组成
- 总线:贯穿整个系统,相当于各字节间的连接,总线上有接口,每次只传送1个字。
- I/O设备:输入与输出相当于计算机与外界沟通的桥梁
- 键盘
- 鼠标
- 显示器
- 磁盘
- 主存:存储程序和程序处理的数据,由一组动态随机存取存储器芯片组成。
- 处理器:中央处理单元,相当于计算机的大脑,不断处理接收到的指令,维持计算机的运行。
存储设备的层次结构
从上至下,设备的访问速度越来越慢,容量越来越大。高一层的存储器将作为低一层存储器存储器的高速缓存。
进程、线程、文件、并发、并行
- 一个系统上可以有多个进程
- 一个进程可以由多个线程组成
- 多线程比单线程更高效
- 进程就像是线程上的单元,而线程就是解决每个程序的控制流。
- 文件就是字节序列,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小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)