2017-2018-1 20155318 《信息安全系统设计基础》第六周学习总结
教材学习内容总结
学习目标
- 了解异常及其种类
- 理解进程和并发的概念
- 掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,
- 理解数组指针、指针数组、函数指针、指针函数的区别
- 理解信号机制:kill,alarm,signal,sigaction
- 掌握管道和I/O重定向:pipe, dup, dup2
教材学习
- 异常:异常是异常控制流的一种形式,是控制流中的突变,用来响应处理器状态中的某些变化,由硬件和操作系统实现。
- 异常处理程序完成后有三种情况
- 1)处理程序将控制返回给事件发生时正在执行的当前指令
- 2)处理程序将控制返回给没有发生异常将会执行的下一条指令
- 3)处理程序终止被中断的程序
- 异常的分类:中断、陷阱、故障和终止。
- 中断:异步发生,是来自处理器外部的I/O设备的信号的结果。 硬件异常中断处理程序通常称为中断处理程序。
- 陷阱和系统调用:
- 陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
- 普通的函数运行在用户模式中,用户模式限制了函数可以执行的指令的类型,而且它们只能访问与调用函数相同的栈。系统调用运行在内核模式中,内核模式允许系统调用执行指令,并访问定义在内核中的栈。
- 故障:是由错误情况引起的。
- 终止:是不可恢复的致命错误造成的结果,通常是一些硬件错误。终止处理程序从不将控制返回给应用程序。
教材学习中的问题和解决过程
-
execvp()函数
-
从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
-
exec1运行结果如下:
-
将exevp函数的第一个参数"ls"该为arglist[0],运行结果相同
-
fork()函数
-
一个进程,包括代码、数据和分配给进程的资源。
-
fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
-
一个进程调用fork() 函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。
-
编译如下代码:
include "csapp.h"
int main()
{
pid_t pid;
int x = 1;
pid = Fork(); //line:ecf:forkreturn
if (pid == 0) { /* Child */
printf("child : x=%d
", ++x); //line:ecf:childprint
exit(0);
}
/* Parent */
printf("parent: x=%d
", --x); //line:ecf:parentprint
exit(0);
}
编译时提示出错信息:
- 解决方案:出现该问题的原因是因为,Linux系统并没有自带csapp.h头文件。这个头文件是该书作者自己编写的。所以,只要把这个头文件加入到系统的include目录中,参考这里+代码+步骤
- 将两个文档在其他地方编写后强制移动到/usr/include目录中,修改后编译和运行:
代码调试中的问题和解决过程
同上
代码托管
运行statistics.sh脚本图
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
其他(感悟、思考等)
本周学习主要是补齐课上及课下的实验,任务量比较大……
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 3/3 | |
第二周 | 100/100 | 1/2 | 3/6 | |
第三周 | 300/400 | 1/3 | 4/10 | |
第四周 | 0/400 | 2/5 | 2/12 | |
第五周 | 25/425 | 1/6 | 4/16 | |
第六周 | 181/606 | 3/9 | 10/26 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:5小时
-
实际学习时间:10小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)