2017-2018-1 20155338 《信息安全系统设计基础》第十四周学习总结

2017-2018-1 20155338 《信息安全系统设计基础》第十四周学习总结

学习目标:

找出全书你认为学得最差的一章,深入重新学习一下,要求(期末占5分):

  • 总结新的收获

  • 给你的结对学习搭档讲解或请教,并获取反馈

  • 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号《信息安全系统设计基础》第十四周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。

本周我主要学习第八章

异常

  • 1.异常是异常控制流的一种形式,它一部分是由硬件实现的,一部分是有操作系统实现的。

  • 2.异常:控制流中的突变,用来响应处理器状态中的某些变化。

  • 3.在处理器中,状态被编码为不同的位和信号。状态变化成为事件。

  • 4.异常表:当处理器监测到有时间发生时,通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序)。

  • 5.当异常处理程序完成处理后,根据引起异常的事件的类型,会发生以下三种情况的一种:


(1)处理程序将控制返回给当前指令Icurr,即当事件发生时正在执行的指令。 
(2)处理程序将控制返回给Inext,即如果没有发生异常将会执行的下一条指令。 
(3)处理程序终止被中断的程序。

系统中可能的每种类型的异常都分配了一个唯一的非负整数的异常号。

异常号的分配:


(1)处理器的设计者:被除零、缺页、存储器访问违例、断点以及算数溢出。
(2)操作系统内核的设计者分配的:系统调用和来自意外不I/O设备的信号。

异常与过程调用的异同:


(1)过程调用时,在跳转到处理器之前,处理器将返回地址压入栈中。然而,根据异常的类型,返回地址要么是当前指令,要么是下一条指令。 
(2)处理器把一些额外的处理器状态压入栈里,在处理程序返回时,重新开始被中断的程序会需要这些状态。 
(3)如果控制从一个用户程序转移到内核,那么所有这些项目都被压到内核栈中,而不是压到用户栈中。 
(4)异常处理程序运行在内核模式下,意味着它们对所有的系统资源都有完全的访问权限。

异常的类别

1.异常的分类:中断、陷阱、故障和终止。

2.中断:异步发生,都是来自处理器外部的I/O设备的信号的结果。


(1)硬件异常中断处理程序通常称为中断处理程序。

(2)异步异常是有处理器外部的I/O设备中的时间产生的,同步异常是执行一条指令的直接产物。

(3)陷阱、故障、终止时同步发生的,是执行当前指令的结果,我们把这类指令叫做故障指令。

进程

用户模式和内核模式:

  • 1、模式位:用某个控制寄存器中的一个位模式,限制一个应用可以执行的指令以及它可以访问的地址空间范围。

  • 2.当设置了位模式,进程就运行在内核模式中,一个运行在内核模式中的进程可以中兴指令集中的任何指令,而且可以访问系统中任何存储器位置。

  • 3.没有设置位模式时,进程就运行在用户模式中,不允许执行特权指令,例如停止处理器、改变位模式,或者发起一个I/O操作。

  • 4.用户程序必须通过系统调用接口间接的当问内核代码和数据。

  • 5.进程从用户模式变为内核模式的唯一方法是通过诸如中断、故障、或者陷入系统调用这样的异常。

上下文切换机制:


(1)保存当前进程的上下文 
(2)恢复某个先前被抢占的进程被保存的上下文 
(3)将控制传递给这个新恢复的进程

回收子进程

一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止。


#include <sys/types.h>
#include <sys/wait.h>

pid_t waitpid(pid_t pid,int *status,int options);
//返回:若成功,返回子进程的PID;若WNOHANG,返回0;若其他错误,返回-1。

Wait函数


#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);
//返回:若成功,返回子进程的PID;若错误,返回-1。
//调用wait(&status)等价于调用waitpid(-1.&status,0)

让进程休眠

sleep函数:将进程挂起一段指定的时间:


#include <unistd.h>
unsigned int sleep(unsigned int secs);
//返回:还要休眠的秒数
//如果请求的时间量已经到了,返回0,否则返回还剩下的要休眠的秒数。

pause函数:让调用函数休眠,直到该进程收到一个信号。


#include <unistd.h>

int pause(void);
//返回:总是-1

信号

发送信号的两个原因:

(1)内核监测到一个系统事件,比如被零除错误或者子进程终止。

(2)一个进程调用了kill函数,显式地要求内核发送一个信号给目的进程。一个进程可以发送信号给它自己。

接收信号

进程可以通过使用signal函数修改和信号相关联的默认行为。 唯一例外是SIGSTOP和SIGKILL,它们的默认行为是不能被修改的。


#include <signal.h>
typedef void (*sighandler_t)(int);

sighandler_t signal(int signum,sighandler_t handler);
//返回:若成功,返回指向前次处理程序的指针;若出错,为SIG_ERR

signal函数改变和信号signum相关联的行为的三种方法:

(1)handler是SIG_ IGN,忽略类型为signum的信号;

(2)handler是SIG_DFL,类型为signum的信号行为恢复为默认行为。

(3)否则,handler就是用户定义的函数地址。这个函数称为信号处理程序。

信号处理问题

  • 1.待处理信号被阻塞:

  • 2.待处理信号不会排队等待;

  • 3.系统调用可以被中断:像read、wait、accept这样的系统调用潜在地会阻塞进程一段较长的时间,称为慢速系统调用。

注意:不可以用信号来对其他进程中发生的事件计数。

上周考试错题总结

1、我们用一个十六进制的数表示长度w=4的位模式,对于数字的无符号加法逆元的位的表示正确的是()

A、0x8的无符号加法逆元是0x8

B、0xD的无符号加法逆元是0x

C、0xF的无符号加法逆元是0x1

D、0xF的无符号加法逆元是1

正确答案: A C D 我的答案: A D

解析:P62
错因:C和D是矛盾项,手点错了。

2、有关磁盘操作,说法正确的是()

A .对磁盘扇区的访问时间包括三个部分中,传送时间最小。

B .磁盘以字节为单位读写数据

C .磁盘以扇区为单位读写数据

D .读写头总处于同一柱面

正确答案: A C D 我的答案: A C

解析:P409

3、有关RAM的说法,正确的是()

A .SRAM和DRAM掉电后均无法保存里面的内容。

B .DRAM将一个bit存在一个双稳态的存储单元中

C .一般来说,SRAM比DRAM快

D .SRAM常用来作高速缓存

E .DRAM将每一个bit存储为对一个电容充电

F .SRAM需要不断刷新

G .DRAM被组织为二维数组而不是线性数组

正确答案: A C D E G 你的答案: A D E G

解析:p400

错因:书上第400页,一般DRAM用来作为主存及图形系统的帧缓冲区,所以DRAM更快。

本周结对学习情况

- [20155307](http://www.cnblogs.com/zhuanyedajiesanshinian/p/8099346.html)
- 结对学习内容
    - 回收子进程
    - 让进程休眠

其他(感悟、思考等,可选)

本周重新学习了第八章,对进程控制方面有了更多的认知,了解到以前学习的不深刻,可能其他章也存在同样的问题,日后会再检索。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 2000行 15篇 200小时
第一周 150/150 1/1 17/17
第二周 70/220 1/2 12/29
第三周 100/320 1/3 10/39
第四周 100/420 1/4 10/59
第五周 80/500 2/6 22/81
第六周 300/800 2/8 30/111
第七周 200/1000 1/9 25/136
第八周 500/1500 2/11 30/166
第九周 500/2000 2/13 36/202
第十周 100/2100 0/13 20/222
第十一周 200/2300 2/15 35/257
第十三周 300/2600 2/17 25/282
第十四周 200/2800 1/18 35/317

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:30小时

  • 实际学习时间:35小时

原文地址:https://www.cnblogs.com/Hdywan/p/8099675.html