2017-2018-1 20155301 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
第一章 计算机系统漫游
1.信息=位+上下文,程序从一个源文件开始,后缀是.c,源程序(源文件)是由0和1组成的位序列。.c程序中每一个字节都对应一个整数值,只由ASCII字符构成的文件称为文本文件,所有其他文件都称为二进制文件。
2.C语言程序运行时被翻译成的其他格式,被其他程序转化为一系列的低级机器语言指令,这些指令按照“可执行目标程序”的格式打好包,并以二进制磁盘文件的形式存放起来,目标程序也称为可执行目标文件。
源文件到目标文件由编译器驱动程序完成的
gcc -o hello hello.c
编译过程可分为4步:
第一步:预处理阶段,预处理器cpp根据#开头的命令,修改原始的C程序,读取头文件的内容,并把它直接插入程序文本中,以.i为文件扩展名。
第二步:编译阶段,编译器ccl将文件文本.i翻译成文本文件.s,包含一个汇编语言程序。
第三步:汇编阶段,汇编器as将.s翻译成机器语言指令,把这些指令打包为“可重定位目标程序”,并保存在.o文件中
第四步:链接阶段,将主函数与主函数中引用的C语言标准库函数以某种方式合并,得到一个可执行目标文件,被加载到内存中,有系统执行
3.编译系统通过优化程序性能,理解链接时出现的错误,避免安全漏洞等方式进行工作。
4.处理器读并解释储存在内存中的指令,在Unix系统上运行该可执行文件,我们将它的文件名输入到shell应用程序中,比如:
linux>./hello
hello, world
linux>
如果该命令行的第一个单词不是一个内置的shell命令,那么shell会假设这是一个可执行文件的名字,它将加载并运行这个文件
5.硬件由总线,I/O设备,主存,处理器组成
6.高速缓存十分重要,根据机械原理,较大的存储设备要比较小的存储设备运行的慢,而快速设备的造假远高于同类的低速设备。
上一层的存储器作为第一层存储器的高速缓存。
7.系统之间通过网络通信,从一个单独的系统来看,网络可视为一个i/o设备,当系统村驻村复制一串字符到网络适配器时,数据流经过网络到达另一台机器,系统可以读取从其他机器发送来的数据,并把数据复制到自己的主存。
8.线程级并发,当一个县城必须等到某些数据被装在到高速缓存中,那cpu就可以去执行另一个线程。它从两方面提高了性能,首先他减少了再执行多个任务是模拟并发的需要,其次,它可以使应用程序运行的更快。
第七章 链接
1.编译器驱动程序,在用GNU编译系统构造程序时通过在shell中输入下列命令来调用GCC驱动程序:
linux>gcc -Og -o prog main.c sum.c
shell调用操作系统中一个叫做加载器的函数,他将可执行文件prpg中的代码和数据复制到内存,然后将控制转移到这个程序的开头。
2.静态链接,以一组可重定位目标文件和命令行参数作为输入,生成一个完全连接的、可以加载和运行的可执行目标文件作为输出。其中的链接器需要完成符号解析和重定位两项主要任务。
3.目标文件具有三种形式,分别是可重定位目标文件、可执行目标文件、共享目标文件。编译器和汇编器生成可重定位目标文件,链接器生成可执行目标文件。
4.可重定位目标文件的格式
图中展示了一个典型的ELF可重定位目标文件格式,其中的ELF头以16字节的序列开始,这个序列描述了生成该文件的系统的字的大小和字节顺序,ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息。
5.符号和符号表,每一个可重定位目标模块m都有一个符号表,包含m定义和引用的符号信息,符号表中包含三种不同的符号,一是由m定义并可以被其他模块引用的全局符号;二是由其他模块定义被m所引用的全局符号‘三是只被m定义和引用的局部符号。
6.链接器解析符号引用的方法是将每个引用与它输入到可重定位目标文件的符号表中的一个确定的符号定义关联起来,编译器允许每个模块中每个局部符号有一个定义。但是对于全局符号的符号解析是比较麻烦,当多个目标文件中定义了相同名字的全局符号,链接器要么标志一个错误,要么以某种方式选出一个定义并抛弃其它定义。
7.重定位由重定位结合符号定义以及重定位接种的符号引用两部分组成。
运行helloworld并提交
教材学习中的问题和解决过程
第一章:对于多线程问题:当一个处理器等待输入设备响应的时候,多线程会转向执行另一个程序命令,假如任务A需花费5分钟,任务B需话费10分钟,对于任务A等待输入设备指令时跳去执行任务B,任务A和任务B在我的理解里不能同时进行,但是所花费的时间为什么时10分钟,是有多个处理器吗,我理解的是15分钟。
第二章:怎么样让负数等于正数?
第三章:为什么C语言只有一个条件语句;而汇编中有两个分支呢?
第四章:Y-86和X-86的区别
第五章:程序性能的评估方面,如何评估
第六章:存储器的结构是什么
第七章:如何构造动态链接库,动态链接库和静态链接库的区别是什么
第八章:如何理解并发流,怎么应用
第九章:虚拟内存的作用是什么,和实际的内存区别在哪里
第十章:如何读取目录内容
第十一章:如何构建Web服务器
第十二章:如何在客户端-服务器中加入并发的结构
代码调试中的问题和解决过程
无
[代码托管]
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 4/200 | 1/2 | /20 | |
第二周 | /500 | /4 | /38 | |
第三周 | /1000 | /7 | /60 | |
第四周 | /1300 | /9 | /90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)