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

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

参考老师提供的教材内容导读

教材学习内容总结

第八章内容

  • 异常控制流(EFC):现代系统通使控制流发生突变来对系统状态的变化做出反应,可发生在计算机系统的各个层次中。
  • 异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现,异常就是控制流中的突变,用来响应处理器状态中的某些变化。
  • 系统中可能的每种类型的异常都分配一个唯一的非负整数的异常号
  • 异常的种类:
  1. 中断:是异步发生的
  2. 陷阱:陷阱是有意的异常,是执行一条指令的结果
  3. 故障:故障由错误情况引起,它可能能够被故障处理程序修正

  1. 终止:终止是不可恢复的致命错误造成的结果,通常是一些硬件错误。

  • 进程就是一个执行中程序的实例。系统中的每个程序都是运行在某个进程的上下文中的。
  • 进程提供给应用程序的关键抽象:

一个独立的逻辑控制流,独占地使用处理器;

一个私有的地址空间,独占地使用存储器系统

  • 程序计数器(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小时

  • 改进情况:本周既需要学习课本内容,还需要完成课堂上未完成的内容,压力较大

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

原文地址:https://www.cnblogs.com/ljq1997/p/7750630.html