学习计时:共xxx小时 读书: 代码: 作业: 博客: |
一、学习目标 |
1. 了解异常及其种类 2. 理解进程和并发的概念 3. 掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv, 4. 理解数组指针、指针数组、函数指针、指针函数的区别 5. 理解信号机制:kill,alarm,signal,sigaction 6. 掌握管道和I/O重定向:pipe, dup, dup2 |
二、学习资源 |
1. 教材:第八章《异常控制流》 2. 课程资料:https://www.shiyanlou.com/courses/413 实验九,课程邀请码:W7FQKW4Y 3. 教材中代码和习题中代码运行、思考一下,读代码的学习方法见这。
|
三、学习方法 |
1. 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。
2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第十周学习总结”
|
四、学习任务 |
1. 阅读教材,完成课后练习(书中有参考答案) 2. 考核:练习题把数据变换一下 3. 加分题:课后作业最多两人一组,互相不能重复,1星题目每人最多加一分,2星题目每人最多加二分,3星题目每人最多加三分,4星题目每人最多加四分。 |
五、后续学习预告(可选): |
第十二章《并发编程》
|
六、学习过程 |
第八章 异常控制流
一.异常控制流 1.控制流:控制转移序列。
2.控制转移:从一条指令到下一条指令。
3.异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。
二.异常处理 1. 异常的定义 异常是控制流中的突变,用来响应处理器状态中的某些变化。 2. 异常处理程序完成处理后发生的情况 (1)处理程序将控制返回给当前指令Icurr,即当事件发生时正在执行的命令。 (2)处理程序将控制返回给Inext,即如果没有发生异常将会执行的下一条指令。 (3)处理程序终止被中断的程序。 3.系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号。 4. 异常表的起始地址放在一个叫做异常表基址寄存器的特殊CPU寄存器里。 5. 异常表与过程调用的不同之处 (1)过程调用时,在跳转到处理程序之前,处理器将返回地址压入栈中。而根据异常的类型,返回类型要么是当前指令,要么是下一条指令。 (2)处理器也把一些额外的处理器状态压到栈里,在处理程序返回时,重新开始被中断的程序会需要这些状态。 (3)如果控制从一个用户程序转移到内核,则这些所有项目都被压到内核栈中,而不是压到用户栈中。 (4)异常处理程序运行在内核模式下,意味着它们对所有的系统资源都有完全的访问权限。 6.异常的类别:中断、陷阱、故障、终止。
三.Linux/IA32系统的异常 1.Linux/IA32 故障和终止 (1)除法错误 (2)一般保护故障 (3)缺页 (4)机器检查 2.Linux/IA32 系统调用:将系统调用和它们相关联的包装函数称为系统级函数。
四.进程 1. 进程:一个执行中的程序的实例。系统中每个程序都运行在某个进程的上下文中。 2. 进程提供给应用程序的关键抽象:一个独立的逻辑控制流和一个私有的地址空间。
五.逻辑控制流:调用调试器单步执行程序时会看到一系列程序计数器(PC)的值,这些值唯一地对应于包含在程序的可执行目标文件中的指令。这个PC值的序列叫做逻辑控制流。
六.并发流
(1)并发的定义:多个流并发的执行的一般现象称为并发(一段时间内P1、P2交替运行)
(2) 并行流:并发流的真子集,两个流并发地运行在不同的处理器核或计算机上,并行地运行且并行地执行。
(3) 多任务:多个进程并发叫做多任务。
(4) 并行:并发流在不同的cpu或计算机上,叫做并行。
七.私有地址空间 (1)一个进程为每个程序提供它自己的私有地址空间。 (2)运行应用程序代码的进程初始时是在用户模式中的。进程从用户模式变为内核模式的唯一方法是通过异常。 (3)linux提供了/proc文件系统,它允许用户模式进程访问内核数据结构的内容。
八.上下文切换 (1)上下文切换:操作系统内核使用叫上下文切换的异常控制流来实现多任务。 (2)上下文切换特点:保存当前进程的上下文;恢复某个先前被抢占的进程被保存的上下文; 将控制传递给这个新恢复的进程。 (3)调度:内核中的调度器实现调度。 (4)当内核代表用户执行上下文切换时,可能会发生上下文切换。
九.创建和终止进程
(1)进程总是处于下面三种状态之-: 1.运行:进程要么在CPU上执行,要么在等待被执行且最终会被内核调度。 2.停止:进程的执行被挂起(suspend),且不会被调度。当收到SIGSTOP、SIGTSTP、SIDTTN或者 SIGTTOU 信号时,进程就停止,并且保持停止直到它收到一个 SIGCONT 3.信号:在这个时刻,进程再次开始运行。 4.终止:进程永远地停止了。 进程会因为三种原因终止:
(2)fork函数的特点 1.只被调用一次,返回两次。 2.并发执行。 3.相同但独立的地址空间。 4.共享文件 (3)回收子进程 1.回收子进程的两种方法:内核的init进程、父进程waitpid函数。 2.一个进程可以通过调用waitpid函数来等待它的子进程终止或停止。
十.让进程休眠 1.sleep函数将一个进程挂起一段指定的时间。 2.pause函数让调用函数休眠,直到该进程收到一个信号。
十一.信号 1. 一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。 2. 低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。
十二.信号术语(1)传送一个信号到目的进程是由两个步骤组成的:发送信号和接收信号。
十三.信号处理 信号处理有以下特性:
十四.非本地跳转 (1)c语言提供了一种用户级异常控制流形式,称为本地跳转。 (2)setjmp函数只被调用一次,但返回多次;longjmp只调用一次,但从不返回。 (3)非本地跳转的一个重要应用就是允许从一个深层嵌套的函数调用中立即返回,通常是由检测到某个错误情况引起的。
|
七、遇到的问题及解决 |
课后题我随便选了几道看了看,感觉8.7不是太能理解。 书中进程那块有几个小点没有看懂,尤其是489页的图。
|
八、其他 |
因为第八章这两周老师在课上讲过一些,所以在看书的时候感觉比前几周要熟悉一些,感觉结合了老师课上讲的内容和做的笔记再加上看书能更容易的理解这些复杂的内容。但是还是无法攻克代码这一大关,以前的基础不扎实,现在感觉无论花多少时间看都不能完全的理解,有的是每一句看懂了但连起来就有点迷糊;有的是整体知道这个代码是干嘛用的但一句一句模模糊糊。 |