鲸鱼的抽屉  

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小时

  • 改进情况:

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

参考资料

posted on 2017-10-29 20:03  鲸鱼的抽屉  阅读(167)  评论(0编辑  收藏  举报