2017-2018-1 20155211 《信息安全系统设计基础》第6周学习总结
2017-2018-1 20155211 《信息安全系统设计基础》第6周学习总结
教材学习内容总结
-
当异常处理程序完成处理后,根据引起异常的事件的类型,处理程序会发生以下三种情况之一:
- 将控制返回给当前指令Icurr,即当事件发生时正在执行的指令。
- 将控制返回给Inext,即如果没有发生异常将会执行的下一条指令。
- 终止被中断的程序。
-
陷阱和系统调用
(1)陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
(2)普通的函数运行在用户模式中,用户模式限制了函数可以执行的指令的类型,而且它们只能访问与调用函数相同的栈。系统调用运行在内核模式中,内核模式允许系统调用执行指令,并访问定义在内核中的栈。
- 子进程和父进程的异同:
异:有不同的PID
同:用户级虚拟地址空间,包括:文本、数据和bss段、堆以及用户栈。任何打开文件描述符,子进程可以读写父进程中打开的任何文件。
- fork函数: 父进程的PID总是非零,返回值就提供一个明确的方法来分辨程序是在父进程还是在子进程中执行。
- fork函数的特点:
- 调用一次,返回两次
- 并发执行
- 相同的但是独立的地址空间
- 共享文件
- 一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止。
include <sys/types.h>
include <sys/wait.h>
pid_t waitpid(pid_t pid,int *status,int options);
//返回:若成功,返回子进程的PID;若WNOHANG,返回0;若其他错误,返回-1。
- 默认地,当option=0时,waitpid挂起调用进程的执行,直到它的等待集合中的一个子进程终止。
- (1)pid>0:等待集合是一个单独的子进程,进程ID等于pid。
- (2)pid=-1:等待结合就是由父进程所有的子进程组成的。
- wait函数(调用wait(&status)等价于调用waitpid(-1.&status,0))
include <sys/types.h>
include <sys/wait.h>
pid_t wait(int *status);
//返回:若成功,返回子进程的PID;若错误,返回-1。
- execve函数:在当前进程的上下文中加载并运行一个新程序。
- 特点:execve调用一次从不返回
include
int execve(const char filename,const char argv[],const char *envp[]);
//返回:若成功,则不返回,若错误,返回-1
教材学习中的问题和解决过程
代码调试中的问题和解决过程
代码托管
(statistics.sh脚本的运行结果截图)
本周结对学习情况
- 20155235
- 讨论了fork函数调用的问题
其他(感悟、思考等,可选)
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第六周 | 167/200 | 1/1 | 25/30 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:30小时
-
实际学习时间:25小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)