2017-2018-1 20155304 《信息安全系统设计基础》第六周学习总结
教材学习内容总结
第八章 异常控制流
8.1异常
异常时异常控制流的一种形式,他一部分是由硬件实现,一部分由软件实现。
异常就是控制流中的突变,用来响应处理器状态中的某些变化。
如果异常中断的是一个一场程序,那么就将恢复为用户模式。
- 四种情况
1.中断:来自IO的设备的信号,异步,总是返回到下一条指令。
(1)异步发生,是来自处理器外部的I/O设备的信号的结果。 硬件异常中断处理程序通常称为中断处理程序。
(2)异步异常是有处理器外部的I/O设备中的时间产生的,同步异常是执行一条指令的直接产物。
(3)陷阱、故障、终止时同步发生的,是执行当前指令的结果,我们把这类指令叫做故障指令。
2.陷阱:有意的异常,同步,总是返回到下一条指令
(1)陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。
(2)普通的函数运行在用户模式中,用户模式限制了函数可以执行的指令的类型,而且它们只能访问与调用函数相同的栈。系统调用运行在内核模式中,内核模式允许系统调用执行指令,并访问定义在内核中的栈。
3.故障:是由错误情况引起的。
故障:潜在可恢复的错误,同步,可能返回到当前指令
4.终止:不可恢复的错误,同步,不会返回
- 异常与过程调用的不同之处:
(1)过程调用时,在跳转到处理器之前,处理器将返回地址压入栈中。然而,根据异常的类型,返回地址要么是当前指令,要么是下一条指令。
(2)处理器把一些额外的处理器状态压入栈里,在处理程序返回时,重新开始被中断的程序会需要这些状态。
(3)如果控制从一个用户程序转移到内核,那么所有这些项目都被压到内核栈中,而不是压到用户栈中。
(4)异常处理程序运行在内核模式下,意味着它们对所有的系统资源都有完全的访问权限。
8.2进程
-
一个独立的逻辑控制流:他提供一个假象,好像我们的额程序独占的使用处理器。
-
一个私有的地址空间:他提供一个假象,好像我们独占的使用存储器系统。
-
多个流一起执行被称为并发。
-
一个进程和其他进程轮流进行的概念被称为多任务。
-
一个进程执行执行他的控制流的一部分的每一段时间叫做时间片。
-
并发流:一个逻辑流的执行在时间上与另一个流重叠。
-
并发:多个流并发地执行的一般现象。
-
多任务:一个进程和其他进程轮流运行的概念。
-
时间片:一个进程执行它的控制流的一部分的每一时间段。
多任务也叫时间分片。
1、模式位:用某个控制寄存器中的一个位模式,限制一个应用可以执行的指令以及它可以访问的地址空间范围。
2、当设置了位模式,进程就运行在内核模式中,一个运行在内核模式中的进程可以中兴指令集中的任何指令,而且可以访问系统中任何存储器位置。
3、没有设置位模式时,进程就运行在用户模式中,不允许执行特权指令,例如停止处理器、改变位模式,或者发起一个I/O操作。
4、用户程序必须通过系统调用接口间接的当问内核代码和数据。
5、进程从用户模式变为内核模式的唯一方法是通过诸如中断、故障、或者陷入系统调用这样的异常。
- 上下文切换机制:
(1)保存当前进程的上下文
(2)恢复某个先前被抢占的进程被保存的上下文
(3)将控制传递给这个新恢复的进程
- 引起上下文切换的情况:
(1)当内核代表用户执行系统调用时
(2)中断时
第十章
- 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程。 输入操作:从I/O设备拷贝数据到主存、输出操作:从主存拷贝数据到I/O设备
- Unix I/O是一个简单低级的应用接口,可以把所有的输入输出当作对文件的读写来执行。
1.打开文件:标准输入描述符为0、标准输出描述符为1、标准错误描述符为2.
2.改变当前的文件位置:文件位置是从文件开头起始的字节偏移量。
3.读写文件:从当前文件位置开始。当大于文件长度的时候出发EOF条件。
4.关闭文件。
- open函数
int open(char *filename,int flags,mode_t mode);
1.flages参数指明进程打算如何访问该文件O_RDONLY:只读
、O_WRONLY:只写
、O_RDWR:可读可写
、O_CREAT:如果文件不存在就创建一个截断的(空)文件
、O_TRUNC:如果文件已经存在,就截断它
、O_APPEND:每次写操作前,设置文件位置到文件的结尾处
。
2.mode参数指定新文件的访问权限位,每个进程都有一个umask,是通过调用umask函数来设置的。当进程通过带某个mode参数的open函数调用来创建一个新文件时,文件的访问权限位被设置为mode & ~umask
3.进程通过调用close函数关闭一个打开的文件:int close(int fd);
-
read
函数:从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf,返回值-1表示错误,返回值0表示EOF。 -
read和write传送的字节一般比应用程序要求的少,不足值产生的情况有:
读时遇到EOF
从终端读文本行
读和写网络套接字
- RIO包可自动处理不足值。
ssize_t rio_readn(int fd,void *usrbuf,size_t n)
;
1.无缓冲的输入输出函数:直接在存储器和文件之间传送数据。
2.带缓冲的输入函数:允许从文件中读取文本行和二进制数据,文件内容缓存在应用级缓冲区内。
-
应用程序通过调用
statint stat(const char *filename,struct stat *buf)
;和fststint fstat(int fd,struct stat *buf)
; -
函数检索关于文件的信息。
教材学习中的问题和解决过程
在10.2中关于打开和关闭文件的open函数中的第三个参数的使用存在问题。书上写了一个例子,文件的拥有者有读写权限,而其他的用户都有读权限。而答案为什么给出的是umask(DEF _ UMASK);fd = Open("foo.txt",O _CREATE|O _TRUNC|O _WRONLY,DEF _MODE);给出的O _WRONLY是只读,而并不是读写操作,是如何完成的读写操作?而其也具体的权限参数是什么?根据上面的解释知道是Open函数的第二个flags参数是指明了进程打算如何访问这个文件,第三个mode _t mode参数是指明文件的访问权限,结合图10—1会知道具体的访问权限。后来通过看书,发现自己忽略掉了一点就是每个进程都有一个umask,它是通过调用umask函数来设置的。这样以来之前对于这个答案有所定义给定了mode和umask默认值: #define DEF _MODE S _IRUSR|S _IWUSR|S _IRGRP|S _ IWGRP|S _IROTH|S _IWOTH #define DEF _UMASK S _IWGRP|S _IWOTH,这样在结合之前的Open函数就解决了我的问题。
代码调试中的问题和解决过程
无
其他(感悟、思考等,可选)
这周的学习任务有点多,导致周末无暇顾及各科任务,以后要合理安排学习时间。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 47/100 | 1/1 | 10/10 | |
第二周 | 180/200 | 1/1 | 10/10 | |
第三周 | 200/300 | 1/1 | 10/10 | |
第五周 | 190/300 | 1/1 | 10/10 | |
第六周 | 220/300 | 2/2 | 10/10 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)