2017-2018-1 20155320 《信息安全系统设计基础》第六周学习总结
参考老师提供的教材内容导读
教材学习内容总结
第八章内容
- 异常控制流(EFC):现代系统通使控制流发生突变来对系统状态的变化做出反应,可发生在计算机系统的各个层次中。
- 异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现,异常就是控制流中的突变,用来响应处理器状态中的某些变化。
- 系统中可能的每种类型的异常都分配一个唯一的非负整数的异常号
- 异常的种类:
- 中断:是异步发生的
- 陷阱:陷阱是有意的异常,是执行一条指令的结果
- 故障:故障由错误情况引起,它可能能够被故障处理程序修正
- 终止:终止是不可恢复的致命错误造成的结果,通常是一些硬件错误。
- 进程就是一个执行中程序的实例。系统中的每个程序都是运行在某个进程的上下文中的。
- 进程提供给应用程序的关键抽象:
一个独立的逻辑控制流,独占地使用处理器;
一个私有的地址空间,独占地使用存储器系统
- 程序计数器(PC)值的序列叫做逻辑控制流,简称逻辑流。
- 一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地运行。
- 多个流并发地执行的一般现象被称为并发。多任务:一个进程和其他进程轮流运行的概念。 时间片:一个进程执行它的控制流的一部分的每一时间段。
- 进程控制:
1.获取进程ID
每个进程都有一个唯一的正数(非零)进程ID。getpid函数返回调用进程的PID。
getpid函数
2.进程的三种状态:
运行
停止
终止——进程会因为三种原因终止进程:收到信号,该信号默认终止进程;从主程序返回;调用exit函数。
exit函数
Fork函数:
- 父进程通过调用fork函数创建一个新的运行的子程序。
fork函数在父进程中返回子进程的PID,在子进程中返回0
waitpid函数
一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止
wait 函数
wait函数是waitpid函数的简单函数
sleep函数
sleep函数将一个进程挂起一段指定的时间
pause 函数
该函数让调用函数休眠,直到该进程收到一个信号
execve函数
execve函数在当前进程的上下文中加载并运行一个新程序
setenv函数
第十章内容
- 打开和关闭文件
进程是通过调用open函数来打开一个已存在的文件或者创建一个新文件夹
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(char *filename, int flags, mode_t mode);
1.filename:文件名
2.flags:指明进程打算如何访问这个文件,可取的值如下:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:文件不存在,就创建新文件
O_TRUNC:如果文件存在,就截断它
O_APPEND:写操作前设置文件位置到结尾处
这些值可以用“或”连接起来。
3.mode:指定了新文件的访问权限位,符号名称如下:
- 关闭函数
#include <unistd.h>
int close(int fd);
关闭一个已经关闭的描述符会出错
- 读函数,成功则返回写的字节数,出错返回-1。返回值为有符号数。
#include <unistd.h>
ssize_t write(int fd, void *buf, size_t n);
参数:
fd:文件描述符
buf:存储器位置
n:最多从存储器位置buf拷贝n个字节到当前文件位置
- RIO包能自动地处理不足值。提供了两个函数:无缓冲的输入输出函数,带缓冲的输入函数。
- 写函数:write函数从内存位置buf复制至多n个字节到描述符fd的当前文件位置。
#include<unistd.h>
int close (int fd);
- RIO无缓冲的输入输出函数
rio_readn函数和rio_writen函数
#include "csapp.h"
ssize_t rio_readn(int fd, void *usrbuf, size_t n);
ssize_t rio_writen(int fd, void *usrbuf, size_t n);
- RIO的带缓冲的输入函数
rio_readlineb从rp读出一个文本行(包括换行符)并把它存到usrbuf,并用空字符结束这个文本行。最多读maxlen-1个字节,剩下一个给结尾处的空字符。
教材学习中的问题和解决过程
- 问题1:并发和并行的区别
- 问题1解决方案:
1.并发:多个流并发地执行的一般现象。
多任务:一个进程和其他进程轮流运行的概念。
时间片:一个进程执行它的控制流的一部分的每一时间段。
多任务也叫时间分片。
2.并行流:如果两个流并发的运行在不同的处理器核或者计算机上
代码调试中的问题和解决过程
- 问题1:编译时出现错误
- 问题1解决方案:通过查找资料,在编译命令最后面加上-lpthread就可以了
代码托管
上周考试错题总结
- 14.多选:
short int v=-12345;
unsigned short uv=(unsigned short) v;
那么(AB)
-
A .v=-12345, uv=53191**
-
B .v=uv=0xcfc7**
-
C .v,uv的底层的位模式不一样
-
D .v,uv的值在内存中是不一样的
-
解析:有符号数和无符号数的转换,值不同,位模式不变
-
22.C语言中,字符串被编码为一个以0结尾的字符数组。(A)
- A .正确
- B .错误
- 解析:null的值是0
-
7.大多数计算机使用同样的机器指令来执行无符号和有符号加法。(A)
- A .正确
- B .错误
- C .不确定。
-
23.下面和代码可移植性相关的C语言属性有(ABC)
- A .#define
- B .typedef
- C .sizeof()
- D .union
- 解析:#define可以定义宏使得变量可移植,typedef可以使得类型可移植,sizeof()使得不同类型长度可移植。
结对及互评
本周结对学习情况
- 20155326
-
结对照片
-
结对学习内容
- 第八、十章内容
-
其他(感悟、思考等,可选)
本周学习任务感觉很重,因为课上的测试没有全部完成,然后要写两篇博客,还要学习两章内容。所以学习压力比较大,感觉效率还需要提升。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 200小时 | |
第一周 | 5/5 | 1/1 | 15/15 | |
第二周 | 1/2 | 23/38 | ||
第三周 | 206/327 | 1/3 | 28/66 | |
第四周 | 206/327 | 1/4 | 10/77 | |
第五周 | 285/568 | 1/5 | 20/97 | 主要学习了汇编及反汇编的相关知识 |
第六周 | 160/683 | 3/8 | 20/107 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:20小时
-
实际学习时间:20小时
-
改进情况:本周既需要学习课本内容,还需要完成课堂上未完成的内容,压力较大
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)