2017-2018-1 20155312 《信息安全系统设计基础》第六周学习总结
教材学习内容总结
第三周课下主要学习了教材第8章、第10章的内容:了解异常及其种类;理解进程和并发的概念;了解进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv;理解数组指针、指针数组、函数指针、指针函数的区别;理解信号机制:kill,alarm,signal,sigaction;掌握管道和I/O重定向:pipe, dup, dup2
教材学习中的问题和解决过程
-
问题1:异步异常和同步异常是如何划分的?
-
问题1解决方案:通过查阅教材第八章504页,我了解到异常可以分为以下四类:中断、陷阱、故障、终止。这里提到了“同步异常”和“异步异常”的概念,通过进一步了解,我知道了像“中断”这类由处理器外部的I/O设备中的事件产生的异常属于异步异常,但是对于同步异常的解释“执行一条指令的直接产物”我还是不太理解。
-
通过对陷阱、故障、终止这几类异常的进一步了解,我总结出异步异常是由用户发起系统调用或出现错误引发的,是由执行当前指令的结果。
-
补充:abort例程用于处理终止类异常,可以终止发生异常的应用程序。
-
问题2:进程和并发的概念区分?
-
问题2解决方案:关于进程,书中提到进程有两个假象:一个独立的逻辑控制流和一个私有的地址空间。通过PC的值我们可以了解到目前是哪个进程的哪个语句正在CPU中执行,关于进程之间的调度方法,我们已经在操作系统这门课中学习过了,这里毋庸赘言。总之,进程是指一个时间段内多个进程一起执行,但其实一个时间点对应的是一个事件。关于并发,与进程最明显的不同是,它的逻辑流不是交替执行的,而是在时间上重叠的,多个流并发执行,即一个时间点多个事件。
-
补充:这里要区分“并发流”和“并行流”两个概念。
- 并发流和并行流都是指两个流在时间上是重叠的。但是并行流是并发流的子集,不管两个流是运行在同一个CPU上还是不同的CPU上,都可以叫做并发,但是只有运行在不同的CPU上,才能叫做并行。
-
问题3:进程创建和控制的系统调用及函数使用fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv各自的功能是什么?如何使用?
(1)fork:“create a child process”即创建一个子进程。使用“man 2 fork”命令查看其帮助文档,如下图所示:
- 通过观察“SYNOPSIS”我们了解到它需要包含的头文件是#include <unistd.h>,用法也很简单。
- 通过观察“RETURN VALUE”我们了解到在父亲进程中其返回值时子进程的PID,在子进程中其PID是0。
- 通过观察“SEE ALSO”我们了解到它还与下列函数有关:clone(2), execve(2), exit(2), setrlimit(2), unshare(2),
vfork(2), wait(2), daemon(3), capabilities(7), creden‐
tials(7)
(2)exec:“execute a file”这是C语言中的函数 ,用于执行一个文件。用“man 3 exec”来查看其帮助文档:
- 通过观察“SYNOPSIS”我们了解到它需要包含的头文件是:#include <unistd.h>,相关的用法很多,通过观察可以发现“const char *arg, ...”和“char *const argv[]”其实只是按照一一列举元素和数组两种方式来指定命令的参数。函数名为“execv*”的采用第二种方式,函数名为“execl*”的采用第一种方式。
- 通过观察“RETURN VALUE”我们了解到只有在出现错误时该函数才会返回-1
- 通过观察“SEE ALSO”我们了解到除了fork,它还与下列函数有关:sh(1), execve(2), execveat(2), ptrace(2), fexecve(3), environ(7)
(3&4)wait&waitpid:"wait for process to change state"等待一个进程去改变当前状态。
- 通过观察“SYNOPSIS”我们了解到它需要包含的头文件是:#include <sys/types.h>;#include <sys/wait.h>。wait()和waitpid()的用法有所不同。wait()挂起调用进程直到有一
其子女运行终止;waitpid()挂起调用进程执行直到由PID参数指定的子状态已更改。
- 通过观察“RETURN VALUE”我们了解到wait()返回终止子进程的PID,出错时返回-1;waitpid()返回状态改变的子进程的PID,出错时同样返回-1。
- 通过观察“SEE ALSO”我们了解到它们还和下列函数有关: _exit(2), clone(2), kill(2), ptrace(2), sigaction(2), signal(2),
wait4(2), pthread_create(3), credentials(7), signal(7)
(5)exit:“terminate the calling process”终止当前唤起的进程。"man 2 exit"查看帮助文档后,如下图所示:
- 通过观察“SYNOPSIS”我们了解到它需要包含的头文件是:#include <unistd.h>,用法也比较简单。
- 这个系统调用没有返回值。
- 通过观察“SEE, ALSO”我们了解到除了上述函数它还和下列函数有关:exit_group(2),kill(2), wait4(2), atexit(3), exit(3), on_exit(3), termios(3)
代码托管
(运行statistics.sh脚本时出现了问题,与实际情况不符)
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [20155333](http://www.cnblogs.com/rh123456/)
- 结对照片
- 结对学习内容
- 第8章、第10章
其他(感悟、思考等,可选)
最近总觉得时间不够用,忙着写密码竞赛的报告,没时间完成应该完成的学习任务,希望自己能够协调好时间,把每件事情都做到尽善尽美。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:17小时
-
实际学习时间:10小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)