2018-2019-1 20165316 《信息安全系统设计基础》第七周学习总结
教材学习内容总结
8.1 异常
- 异常(exception)就是控制流中的突变,用来响应处理器状态中的某些变化。具体过程是:处理器状态中的变化(事件)触发从应用程序到异常处理程序的突发的控制转移(异常);在异常处理程序完成处理后,它将控制返回给被中断的程序或者终止。
- 异常可以分为四类——中断(interrupt)、陷阱(trap)、故障(fault)和终止(abort)。
- 中断是异步发生的,是来自处理器外部的 I/O 设备的信号的结果,中断处理程序将控制返回到下一条指令。除了它,其他异常均为同步发生,叫做故障指令(fault instruction)。
- 陷阱是有意的异常,是执行一条指令的结果,陷阱处理程序将控制返回到下一条指令,它最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
- 故障由错误情况引起,它可能能够被故障处理程序修正。如果故障修理成功,则返回原指令,否则终止程序。
- 终止是不可恢复的致命错误造成的后果,通常是一些硬件错误,具有终止应用程序的能力。
- Linux/x86-64 系统中的异常
- C程序用 syscall 函数可以直接调用任何系统调用。
- 从系统调用返回时,%rcx 和 %rll 都会被破坏,%rax 包含返回值。
8.2 进程
- 进程的经典定义就是一个执行中程序的实例。
- 系统中每个程序都运行在某个进程的上下文(context)中。上下文是由程序正确运行所需的状态组成的。这个状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
- 地址空间底部是保留给用户程序的,包括通常的代码、数据、堆和栈段。代码段总是从地址 0x400000 开始。
- 在内核调度了一个新的进程运行后,它就抢占当前进程,并使用一种称为上下文切换的机制来将控制转移到新的进程,上下文切换:1)保存当前进程的上下文,2)恢复某个先前被抢占的进程被保存的上下文,3)将控制传递给这个新恢复的进程。
8.4 进程控制
- 父进程通过调用 fork 函数创建一个新的运行的子进程。
- 新创建的子进程几乎但不完全与父进程相同。子进程相当于从 fork() 函数继续执行。但是子进程和父进程有不同的 PID,这也是它们最大的区别。
- 在父进程中,fork 返回子进程的 PID。在子进程中,fork 返回 0。子进程的 PID 总是为非零。
- 一个进程可以通过调用 waitpid 函数来等待它的子进程终止或者停止,waitpid 返回导致 waitpid 返回已终止子进程的 PID。
- execve 函数在当前进程的上下文中加载并运行一个新程序。
代码托管
上周考试错题总结
Linux shell创建的每个进程开始都默认打开的文件有(ABC)
A .标准输入(fd=0)
B .标准输出(fd=1)
C .标准错误(fd=2)
D .显示器和键盘
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 1000行 | 30篇 | 400小时 |
第一周 | 156/200 | 2/2 | 20/20 |
第二周 | 121/200 | 2/2 | 18/30 |
第三周 | 107/200 | 2/2 | 15/30 |
第四周 | 111/200 | 2/2 | 16/30 |
第五周 | 101/200 | 1/1 | 18/30 |
第六周 | 110/200 | 2/2 | 19/30 |
第七周 | 90/200 | 1/1 | 18/30 |