20155214 2017-2018-1 《信息安全系统设计基础》
第1周学习总结
教材学习内容总结
-
在GCC编译过程产生的文件中,源程序(xxx.c),修改后源程序(xxx.i)以及汇编程序(xxx.s)都是以文本形式保存,而可重定位目标程序(xxx.o)和可执行目标程序以二进制形式保存。
-
链接器负责将单独预编译好的目标文件(如printf.o)合并到主程序中。
教材学习中的问题和解决过程
- 问题1:Unix和Linux之间的区别?
解决方案:通过搜索引擎初步了解,Unix侧重商业版,由封闭团队开发,注重对现有BSD做修改以适合80386系统。Linux作为免费软件,开放开发,使用类Unix内核的Minix作为模板研发,提供完整的Unix接口。
- 问题2:命令行和shell,虚拟终端Terminal的联系?
解决方案:shell解读并执行处理命令行,实行人机交互,执行脚本等。Terminal作为虚拟终端为shell提供命令行用户界面。
- 问题3:如何理解“每个I/O设备,包括磁盘、键盘、显示器,甚至是网络都可以视作文件(字节序列)?
解决方案:将Linux中的事物阐释为字节流,文件是对I/O的抽象,那么所有的输入输出都可以通过相同的Linux工具进行读写。主要分为
普通文件
,特殊文件
和目录文件
。
- 问题4:并发和超线程的区别?
解决方案:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于
挂起状
。采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分,可以使芯片在任一时刻同时进行不冲突的多线程处理,使芯片性能得到提升。
- 问题5:重定位和重定向的区别?
解决方案:通过链接器将符号引用指向新生成的对应存储器,称为重定位数据节。重定向通过管道将父进程的标准输入与子进程的标准输出相连接。
代码调试中的问题和解决过程
-
问题1:上学期,由于库的建立,以及上传过于简单,码云代码管理的较为杂乱。
-
问题1解决方案:通过设置分支
git branch <name>
,管理每周代码以及实验代码可能会较为清晰明了。 -
问题2:创建静态库libvector.a后,在main2.c中调用提示找不到头文件victor.h?
-
问题2解决方案:需要新建头文件victor.h,并在其中定义libvector.a中的函数,之后编译main2.c,链接libvector.a即可。
-
问题3:当运行与动态库libvector.so链接的可执行文件时,出现
./p2: error while loading shared libraries: libvector.so: cannot open shared object file: No such file or directory
错误提示?
p为链接静态库可执行文件,p2为链接动态库可执行文件,p3为利用接口链接动态库的可执行文件
- 问题3解决方案:暂时没解决。
代码托管
将脚本statistics中的".java"通过
:%s/*.java/*.c
替换为".c",即可统计本周c代码量。
上周考试错题总结
- 无
结对及互评
ps:结对对象20155237已转学。
其他(感悟、思考等,可选)
- 相较上学期Java课程的学习,本学期博客的提交时间更加宽裕了。在本周敲的几十行代码里,个人感觉课程的重心已经从对编程语言的学习转向《深入理解计算机系统》。但在阅读到有关计算机结构的一些内容如“储存器映像”时,还是缺乏直观感受,希望后面的学习能够有所理解。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 78/78 | 1/1 | 10/10 |
-
计划学习时间:14小时
-
实际学习时间:10小时
-
改进情况:无。