• 2017-2018-1 20155312 《信息安全系统设计基础》第六周学习总结


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

    • 改进情况:

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

    参考资料

  • 相关阅读:
    洛谷 P2294 【[HNOI2005]狡猾的商人】
    洛谷 P5960 【【模板】差分约束算法】/差分约束算法入门
    洛谷 P3916 【图的遍历】
    洛谷 P1347 【排序】
    洛谷 P3243 【[HNOI2015]菜肴制作】
    ES6,ES7,ES8,ES9,ES10新特性一览
    Sass、LESS 和 Stylus区别总结
    MyBatis更新用户信息操作
    MyBatis使用mapper映射文件删除用户信息
    MyBatis使用mapper映射文件添加用户信息
  • 原文地址:https://www.cnblogs.com/zjy1997/p/7750934.html
Copyright © 2020-2023  润新知