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

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

教材学习内容总结

学习目标

了解异常及其种类
理解进程和并发的概念
掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,
理解数组指针、指针数组、函数指针、指针函数的区别
理解信号机制:kill,alarm,signal,sigaction
掌握管道和I/O重定向:pipe, dup, dup2

  1. 异常的类别:
    中断
    陷阱和系统调用
    故障
    终止

  2. 进程和并发:
    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
    并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

  3. 掌握进程创建和控制的系统调用及函数

    • fock()
      所需头文件
    #include <unistd.h>
    

    函数说明
    fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
    函数原型

    pid_t fork( void);
    

    函数返回值
    (pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)
    返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

    • exec()
      所需头文件
    #include <unistd.h>
    

    函数说明
    执行文件
    函数原型

int execl(const char *path, const char *arg, ...)
int execv(const char *path, char *const argv[])
int execle(const char *path, const char *arg, ..., char *const envp[])
int execve(const char *path, char *const argv[], char *const envp[])
int execlp(const char *file, const char *arg, ...)
int execvp(const char *file, char *const argv[])

函数返回值
成功:函数不会返回
出错:返回-1,失败原因记录在error中

* wait()	
所需头文件
```
#include<sys/types.h>
#include<sys/wait.h>
```
函数说明
等待子进程中断或结束
函数原型
```
pid_t wait(int *status)
```
函数返回值
如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno 中。

* waitpid()
所需头文件
```
#include<sys/types.h>
#include<sys/wait.h>
```
函数说明
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。
函数原型
```
pid_t waitpid(pid_t pid,int *status,int options)
```
函数返回值
如果在调用 waitpid()时子进程已经结束,则 waitpid()会立即返回子进程结束状态值。 子进程的结束状态值会由参数 status 返回,而子进程的进程识别码也会一起返回。

* exit()
所需头文件
```
stdlib.h
```
函数说明
关闭所有文件,终止正在执行的进程。
函数原型
```
void exit(int status)
```

* getpid()
所需头文件
```
#include <unistd.h>
```
函数说明
取得进程识别码
函数原型
```
pid_t getpid(void);
```
函数返回值
目前进程的进程ID

* getppid()
所需头文件
```
#include <unistd.h>
```
函数说明
取得父进程的进程识别码
函数原型
```
pid_t getppid(void);
```
函数返回值
目前进程的父进程识别码。

教材学习中的问题和解决过程

  • 问题1:wait和waitpid有什么区别?
  • 问题1解决方案:进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程, wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。 参数status用来保存被收集进程退出时的一些状态,它是 一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉 从本质上讲,系统调用waitpit和wait的作用是完全相同 的,但waitpid多出了两个可由用户控制的参数pid和options,从而为我们编程提供了另一种更灵活的方式。

[代码托管]

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 6/6 1/1 20/20
第二周 117/123 1/2 5/25
第三周 83/206 2/3 5/30
第四周 97/303 3/4 5/35

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:XX小时

  • 实际学习时间:XX小时

  • 改进情况:

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

参考资料

原文地址:https://www.cnblogs.com/20155222lzj/p/7751994.html