# 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. 加载并运行程序
  • 信号术语

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函数只被调用一次,却会返回两次,一次在调用的进程中,也就是父进程,一次是在新建的子进程中。

代码托管

上周考试错题总结

结对及互评

点评模板:

暂无

本周结对学习情况

  • 20155215

    • 结对学习内容
      • 共同学习课本第三章和实验楼内容
      • 分析课本中代码遇到的问题

思考

这周的学习内容主要是机器代码汇编。教材中有很多的代码,通过自己练习加深了理解。汇编是接近机器语言的一种语言,很难懂,虽然现在基本用不上了,但是理解读懂汇编代码才能更好的理解和学习计算机,而且汇编知识上学期也学过,所以更加深了印象。

学习进度条

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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小时

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-10-29 21:36  短爪爪爪  阅读(161)  评论(0编辑  收藏  举报