# 2017-2018-1 20155232 《信息安全系统设计基础》第六周学习总结
2017-2018-1 20155232 《信息安全系统设计基础》第六周学习总结
教材学习内容总结
本周学习第十章和第八章:
第十章内容总结在第四周博客中
第八章:
- 异常处理
- 异常的类别
1.中断:来自I/O设备的信号,异步,总是返回到下一条指令
2.陷阱:有意的异常,同步,总是返回到下一条指令
3.故障:潜在可恢复的错误,同步,可能返回到当前指令
终止
不可恢复的错误,同步,不会返回
- linux系统中的异常
1.故障和终止
2.系统调用:每个调用都有唯一的整数号,对应到偏移表。系统调用可以用
syscall
的陷阱指令提供。
-
进程程序中执行的实例。程序都运行在每个进程的上下文中。
-
逻辑控制流:程序计数器(PC)的值的序列
-
并发流:一个逻辑流的执行在时间上与另一个流重叠
-
用户模式和内核模式
- 上下文切换没有设置模式位--用户模式
- 设置模式位--内核模式
-
系统调用错误处理
1.unix系统函数遇到错误时,返回-1,并设置全局整数变量。
2.错误处理包装函数
- 进程控制
1.获取进程ID
2.创建和终止进程
3.回收子进程
4.让进程休眠
- 加载并运行程序
- 信号术语
1.发送信号
- 进程组
- 用/bin/kill程序发送信号
- 从键盘发送信号
- 用kill函数发送信号
- 用alarm函数发送信号
2.接收信号
3.待处理信号
- 非本地跳转:
1.通过setjmp和longjmp函数来提供。
2.setjmp函数在env缓冲区中保存当前的调用环境,以供longjmp使用,返回0。
3.longjmp函数从env缓冲区恢复调用环境,然后触发一个从最近一次初始化env的setjmp调用的返回。然后sejmp返回带有非零的返回值retval。
-
操作进程的工具
-
课本练习题8.3中代码如下:
验证所有可能的输出序列:
序列acbc,abcc,bacc都是可能的序列,通过运行验证出来结果:
-
课本练习题8.4验证程序会输出多少行,可能序列是什么?
观察代码中printf的个数有6个,就可以确定输出行数,所以会打印6行。
- 课本练习8.2中代码如下:
子进程执行了两个printf语句,在fork返回后,子进程产生输出
p1:x=2
p2:x=1
而父进程只执行了第七个printf
p2:x=0
教材学习中的问题和解决过程
-
setjmp和longjmp的区别和使用?
-
底下做一下归纳整理:
int setjmp(jmp_buf envbuf);
setjmp函数用缓冲区envbuf保存系统堆栈的内容,以便后续的longjmp函数使用。setjmp函数初次启用时返回0值。
void longjmp(jmp_buf envbuf, int val);
longjmp函数中的参数envbuf是由setjmp函数所保存的堆栈环境,longjmp函数本身是没有返回值的,setjmp函数的返回值就是val。
这个链接有较为详细的使用方法。
代码调试中的问题和解决过程
-问题1:运行课本8.11课后作业,如下代码,验证程序最后会输出多少个hello,出现错误提示如下:
-
复制了错误信息,上网搜索了解决方法,发现时编译命令的问题,于是更改:
-
问题2
在输入上面的命令编译后
gcc 8.11.c -lpthread -o 8.11.c
又出现了错误:
后来仔细检查后发现因为太粗心输入的可运行文件的名字和.c文件的名字相同导致出错,再次修改后,运行成功:
- 问题三:
在输入课本p514页代码时,出现错误提示,对变量类型的未定义: - 解决:
再仔细查看代码后,发现课本上代码省略了头文件,而我自己在输入代码时也忘记加上,所以导致这个变量类型未定义的错误。
从运行结果可以发现,fork函数只被调用一次,却会返回两次,一次在调用的进程中,也就是父进程,一次是在新建的子进程中。
代码托管
上周考试错题总结
无
结对及互评
点评模板:
暂无
本周结对学习情况
-
- 结对学习内容
- 共同学习课本第三章和实验楼内容
- 分析课本中代码遇到的问题
- 结对学习内容
思考
这周的学习内容主要是机器代码汇编。教材中有很多的代码,通过自己练习加深了理解。汇编是接近机器语言的一种语言,很难懂,虽然现在基本用不上了,但是理解读懂汇编代码才能更好的理解和学习计算机,而且汇编知识上学期也学过,所以更加深了印象。
学习进度条
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第四周 | 12/12 | 1/1 | 20/20 | |
第五周 | 271/283 | 1/2 | 15/15 | |
第6周 | 276/283 | 2/3 | 18/18 | |
第7周 | 150/283 | 4/4 | 21/23 | |
第8周 | 294/283 | 4/4 | 24/27 | |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 | ||||
耗时估计的公式 | ||||
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。 |
-
计划学习时间:27小时
-
实际学习时间:24小时
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)