2017-2018-1 20155329 《信息安全系统设计基础》第8周学习总结
教材学习内容总结
学习目标
掌握三种并发的方式:进程、线程、I/O多路复用
掌握线程控制及相关系统调用
掌握线程同步互斥及相关系统调用
线程控制及相关系统调用
- exec系统调用会从当前进程中把当前程序的机器指令清除,然后在空的进程中载入调用时指定的程序代码,最后运行这个新的程序。
- execvp函数:从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件,如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
- execlp函数的作用:调用execlp函数进行命令的执行,execlp函数是可变参数函数,第一个参数需要设置系统环境变量中所能获取的命令文件,或者自己设置绝对路径的命令文件,最后一个参数必须设置为空,以便标记这个函数的参数已经设置完成,中间的所有参数设置为第一个命令的参数,完成输出重定向。
返回值:如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。 - fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。我们可以通过fork返回的值来判断当前进程是子进程还是父进程。
- wait的函数原型是
-#include <sys/types.h> /* 提供类型pid_t的定义*/
-#include <sys/wait.h>
pid_t wait(int status);*
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
并发
- 程序级并发—进程
- 函数级并发—线程
同步和互斥
-
同步:为完成某种任务而建立的两个或多个进程(线程),这些进程(线程)因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
-
互斥:当一个进程进入临界区使用临界资源时,另一个进程(线程)必须等待, 当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。
-
用信号量来判断同步和互斥。
几个经典的互斥问题
- 哲学家问题
- 读者写者问题
- 死锁问题
课上着重讲了读者写者问题,在我的上一篇课堂回忆博客中也有写到读者写者问题的读者优先的伪代码
调用时用返回值确定是否调用成功
代码托管
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:14小时
-
实际学习时间:18小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)