2017-2018-1 20155224 《信息安全系统设计基础》第1周学习总结
教材学习内容总结
linux系统下文件的转换。
- gcc hello.c => 编译hello.c源程序,出现a.out文件
- gcc -o hello hello.c => 编译hello.c源程序,出现hello文件
- od -tc -tx1 hello.c => 按单字节查看文件内容
- gcc -E hello.c -o hello.i => 预处理阶段
- gcc -S hello.c -o hello.s => 编译阶段
- gcc -C hello.c -o hello.o => 汇编阶段
- od -c hello.o => 查看汇编码
- objdump -d hello.o => 得到汇编码
- gcc hello.o -o hello => 使hello文件可执行
调试
- gcc -g hello.c => 调试
- gdb a.out
- b main => 在main中设断点b
- info b => 查看断点b情况
- run => 运行
断点
- b fxx => 函数断点
- b +行号 => 行断点
- tb => 临时断点
- b if => 条件断点
常用cgbd
- cgbd a.out
- s => step
- n => next
- qit
- p => print
- p i ... => 改值
- f => finish
- display ...
提出问题
- 第一章:为什么通过进程、虚拟内存、文件三个抽象概念可以实现操作系统的两个基本功能
- 第二章:有符号数和无符号数转化的意义是什么。
- 第三章:程序的机器级表示是什么意思
- 第四章:处理器的体系结构是什么
- 第五章:如何优化程序
- 第六章:存储器这种层次结构有什么好处
- 第七章:静态库动态库是什么意思,一般用于什么
- 第八章:异常控制流是什么意思
- 第九章:虚拟内存和内存有什么区别
- 第十章:系统级I/O是什么意思
- 第十一章:如何用C语言进行网络编程
- 第十二章:进程线程有何区别
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:教材上有这样一段文字
虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。
不太理解虚拟内存的工作方式。 - 问题1解决方案:通过阅读百度知道和知乎的界面,对虚拟内存如何解决各种问题有了一定了解,解答了我的疑惑。
百度知道:
- 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
- 虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的
程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存[2] 技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合
知乎:
- 作者:古斟布衣
链接:https://www.zhihu.com/question/39562196/answer/149204845
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 不管是手机,还是电脑,看起来都能同时运行好多个用户程序,但这只是一个假象。因为操作系统中,程序运行的基本单元是进程,并且每个用户程序都可能不止创建一个进程。但遗憾的是,即使在物理内存无限的假设下,处理器的每个核心也只能同时运行一个进程。更何况,某些用户程序可能还可以多个同时运行。因此,操作系统必须把把当前不需要的进程切换到后台;也就是说,需要将进程本身及其调用的动态库所使用的代码、数据、栈、堆等保存起来,并在下次被调度器选中时重新开始执行。如此多的进程及其数据都保存在内存中,既放不下,还产生地址冲突。
- 但这样只能解决单个程序过大的问题,如果程序很多时,内存仍然不够。因此,操作系统为每个进程提供一套独立的虚拟地址空间,从而使得同一块物理内存在不同的进程中可以对应到不同或相同的虚拟地址,变相的增加了程序可以使用的内存。在处理器上,负责管理虚拟地址和物理地址翻译的模块被称之为MMU,即虚拟内存管理单元,因此虚拟内存从处理器角度看,也是虚拟地址。
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [20155219](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
xxx
xxx
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 3/3 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)