2019-2020-1 20181329 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
一、异常
1、异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现。异常是控制流中的突变,用来响应处理器状态中的某些变化。
2、异常处理程序完成后会发生的情况:
1)处理程序将控制返回给事件发生时正在执行的指令
2)处理程序将控制返回给如果没有发生异常将会执行的下一条指令
3)处理程序终止被中断的程序
3、异常分为四类:中断、陷阱、故障、终止

4、C程序用syscall函数可以直接调用任何系统调用。在x86-64系统上,系统调用是通过一条称为syscall的陷阱指令来提供的。
5、syscalls n指令允许用户对内核服务受控访问,即用户请求服务n。执行syscalls会导致异常处理程序的陷阱。
二、进程
1、进程的经典定义:一个执行中程序的实例
2、一个逻辑流的执行在时间上与另一个流重叠,称为并发流。多个流并发地执行的一般现象被称为 并发 ,一个进程和其他进程轮流运行的概念称为 多任务 ,一个进程执行它的控制流的一部分的每一时间段叫做 时间片 ,多任务也叫做 时间分片 。
3、进程总是处于下面三种状态之一:运行、停止、终止。
4、并发流:两个流在时间上重叠,即使它们是运行在同一个处理器上;
并行流:是并发流的一个真子集,如果两个流并发地运行在 不同的处理器核或者计算机上。
5、调度是由内核中称为调度器的代码处理的。在内核调度了一个新的进程运行后,它就抢占当前进程,并使用一种称为上下文切换的机制来将控制转移到新的进程。
1) 保存当前进程的上下文
2) 恢复某个先前被抢占的进程被保存的上下文
3) 将控制传递给这个新恢复的进程。
三、进程创建和控制的系统调用及函数使用
1、fork
使用 man fork 查看帮助:需要包含的头文件是#include <unistd.h>。

运行老师的代码 ,结果如下:



2、exec
事实上,在这6个函数中真正的系统调用只有execve,其他5个都是库函数,他们最终都会调用execve这个系统调用。
运行老师给的代码,如下:

3、wait
调用wait(&status)等价于调用waitpid(-1,&status,0)。
运行老师给的代码,如下:

4、getpid,getppid
每个进程都有一个唯一的正数(非零)进程ID(PID).getpid函数返回调用进程的PID。getppid函数返回它的父进程的PID(创建调用进程的进程)。getpid和getppid函数返回一个类型为pid_t的整数值,在Linux系统上它在types.h中被定义为int。
5、exit
从程序员的角度,我们可以认为进程总是处于下面三种状态之一:运行、停止、终止。
进程会因为三种原因终止:1.收到一个信号,该信号的默认行为是终止进程,2.从主程序返回,3.调用exit函数。
exit函数以status退出状态来终止进程。
四、数组指针、指针数组、函数指针、指针函数的区别
1、数组指针是一个指针,该指针指向的是一个数组;
2、指针数组是一个数组,数组的元素保存的是指针;
3、函数指针是一个指针,该指针指向一个函数;
4、指针函数是一个函数,该函数返回的是一个指针。
五、理解信号机制:kill,alarm,signal,sigaction
1、用kill函数发送信号,进程通过调用kill函数发送信号给其他进程。

2、 用alarm函数发送信号,进程可以通过调用alarm函数向他自己发送SIGALRM信号。

3、signal

教材学习中的问题和解决过程
1、在使用exec函数族时,一定要加上错误判断语句。因为exec很容易执行失败,其中最常见的原因有:
1) 找不到文件或路径,此时errno被设置为ENOENT。
2) 数组argv和envp忘记用NULL结束,此时errno被设置为EFAULT。
3) 没有对用可执行文件的运行权限,此时errno被设置为EACCES。
上周考试错题总结
关于open(2),下面说法正确的是( )
:
A . flag 参数中O_RDONLY,O_WRONLY,O_RDWR至少要有一个
B . O_RDONLY|O_WRONLY == O_RDWR
C . fd=open("foo.txt",O_WRONLY|O_APPEND,0),调用write(fd,buff,n)写入foo.txt的数据不会破坏已有数据。
D . fd=open("foo.txt",O_WRONLY|O_APPEND,0644),必将导致其他人不能写foo.txt
错误答案:AB 正确答案:AC
解析:
umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读(4)+写(2)+执行(1),同组的和其它用户有读写权限),默认情况下的umask值是022(可以用umask命令查看),此时你建立的文件默认权限是644(6-0,6-2,6-2),建立的目录的默认权限是755(7-0,7-2,7-2),可以用ls -l验证一下哦 现在应该知道umask的用途了吧,它是为了控制默认权限,不要使默认的文件和目录具有全权而设的
Linux中下列概念中可以用Unix I/O处理的是()
:
A . 普通文件
B . 设备文件
C . 目录
D . 套接字
错误答案:ABC 正确答案:ABCD
解析:
套接字也是可以用Unix I/O处理的。
浙公网安备 33010602011771号