20145329 《信息安全系统设计基础》第十一周学习总结

20145329 《信息安全系统设计基础》第十一周学习总结

教材学习内容总结

  • 异常控制流(ECF)
    异常控制流(Exceptional Control Flow, ECF):现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。
    控制转移:从一条指令到下一条指令的过渡
    控制流:控制转移序列。

  • 异常控制流发生在计算机系统的各个层次
    硬件层:硬件检测到的事件会触发控制突然装移到异常处理程序
    操作系统层:内核通过上下文转换将控制从一个用户进程转移到另一个用户进程。
    应用层:一个进程可以发送信号到到另一个进程,而接收者将会控制突然转移到它的一个信号处理程序。

异常

  • 异常
    异常控制流的一种形式,是控制流中的突变,用来响应处理器状态中的某些变化,由硬件和操作系统实现。

  • 异常与过程调用
    异常类似于过程调用,但是有一些重要的不同:
    (1)处理器压入栈的返回地址,是当前指令地址或者下一条指令地址。
    (2)处理器也把一些额外的处理器状态压到栈里
    (3)如果控制一个用户程序到内核,所有项目都压到内核栈里。
    (4)异常处理程序运行在内核模式下,对所有的系统资源都有完全的访问权限。

  • 异常的分类
    (1)中断
    (2)陷阱
    (3)故障
    (4)终止

进程

  • 进程提供给应用程序的关键抽象
    (1)一个独立的逻辑控制流,提供一个假象:程序独占地使用处理器
    (2)一个私有的地址空间,提供一个假象:程序独占地使用存储器系统

  • 逻辑控制流
    程序计数器(PC)值的序列叫做逻辑控制流,简称逻辑流。

  • 并发流
    一个逻辑流的执行在时间上与另一个流重叠(与是否在同一处理器无关),这两个流并发的运行。

  • 私有地址空间
    进程为程序提供的假象,好像它独占的使用系统地址空间。一般而言,和这个空间中某个地址相关联的那个存储器字节是不能被其他进程读写的。

  • 用户模式和内核模式
    用户模式和内核模式的区别就在于用户的权限上,权限指的是对系统资源使用的权限。

  • 上下文切换
    (1)操作系统内核使用上下文切换这种较高层形式的 异常控制流来实现多任务。上下文切换机制建立在较底层异常机制之上。

(2)上下文
内核重新启动一个被抢占的进程所需的状态。由一些对象的值组成:通用目的寄存器、浮点寄存器、程序计数器、用户栈、状态寄存器、内核栈、内核数据结构。

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

进程控制

  • pid_t getpid(void); 返回调用进程的PID

  • pid_t getppid(void); 返回父进程的PID(创建调用进程的进程)

  • 进程的三种状态
    运行;停止:被挂起且不会被调度;终止:永远停止。

  • 创建进程
    父进程通过调用fork函数来创建一个新的运行子进程。
    .#include <sys/types.h>
    .#include <unistd.h>
    pid_t fork(void);

  • 终止进程
    exit函数
    .#include <stdlib.h>
    void exit(int status);

信号

  • 发送信号
    (1)内核通过更新目的进程上下文中的某个状态,发送(递送)一个信号给目的进程。发送信号的两种原因: •内核检测到一个系统事件。

(2)返回调用进程的进程组ID:getpgrp函数
.#include <unistd.h>
pid_t getpgrp(void);
(3)改变自己或者其他进程的进程组:setpgid函数
.#include <unsitd.h>
int setpgid(pid_t pid,pid_t pgid);
(4)成功返回0,错误返回-1

  • 接收信号。
    (1)当目的进程被内核强迫以某种方式的发送做出反应时,目的进程就接收了信号。进程可以忽略这个信号,终止或者通过执行一个称为信号处理程序的用户层函数不活这个信号。

(2)每个信号类型都有一个预定的默认行为:
进程终止
进程终止并转储存储器
进程停止直到被SIGCONT

  • 待处理信号
    一个只发出而没有被接收的信号叫做待处理信号。在任何时刻,一种类型至多只会有一个待处理信号。

代码调试

  • exec1.c
    功能:装入并运行其它程序的函数

  • exec2.c
    功能:装入并运行其它程序的函数

  • exec3.c
    功能:装入并运行其它程序的函数

  • forkdemo1.c
    功能:将运行的程序分成2个完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

  • forkdemo2.c
    功能:执行了两次fork函数

  • forkdemo3.c
    功能:fork函数将一个进程分成两个进程,并且返回两次

  • forkdemo4.c
    功能:增加sleep(10)函数,父进程会睡眠

  • forkgdb.c
    功能:子程序和父程序循环进行

  • psh1.c
    功能:执行用户输入的指令,并用数组存储指令

  • psh2.c
    功能:执行用户输入的指令,增加wai函数,实现循环输入指令

  • testbuf1.c
    功能:打印hello,进程等待,可输入

  • testbuf2.c
    功能:打印hello,进程等待,可输入

  • testbuf3.c
    功能:缓冲区顺序打印

  • testpid.c
    功能:显示进程id和其父进程的id

  • testpp.c
    功能:段错误

  • testsystem.c
    功能:使用system(char *command)发出一个DOS命令

  • waitdemo1.c
    功能:验证父子进程的调用顺序

  • waitdemo1.c
    功能:设置了父进程在子进程结束后的状态位

  • eniron.c
    功能:打印设置环境变量的路径

  • environvar.c
    功能:打印外部变量environ的内容

  • consumer.c
    功能:判断是否打开文件流,以及是否正常打开文件

  • producer.c

  • testmf.c
    功能:FIFO创建

  • listargs.c
    功能:打印指令,输出信息

  • pipe.c
    功能:实现管道的功能

  • pipedemo.c
    功能:将输入输出用管道连接

  • pipedemo2.c
    功能:父进程休眠子进程开始执行

  • stdinerdir.c
    功能:输入信息后打印输入,打开文件语句,打开正常后,从文件中读取前三行信息

  • stdinerdir2.c
    功能:输入信息后打印输入,打开文件语句失败

  • testty.c
    功能:打印缓冲区的内容

  • whotofile.c

  • sigactdemo.c
    功能:将标准输入的信息打印到标准输出上

  • sigactdemo2.c
    功能:每2s打印一次Two seconds passed

  • sigdemo1.c
    功能:每2s打印一次hello,打印五个

  • sigdemo2.c
    功能:每隔1s打印一次haha,并且需要强制退出

  • sigdemo3.c
    功能:打印输入信息,需要强制退出

本周代码托管截图



其他

读懂代码是学习的最大的肯定,可以激发自己更好的学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 50/50 1/1 20/20
第二周 50/100 1/2 30/50
第三周 100/200 1/3 20/70
第四周 0/200 0/3 20/90
第五周 50/250 1/4 20/110
第六周 50/300 1/5 20/130
第七周 0/300 1/6 20/150
第八周 0/300 1/7 20/170
第九周 100/400 2/9 20/190
第十周 0/400 1/10 20/210
第十一周 600/1000 2/11 30/230

参考资料

posted @ 2016-11-27 22:36  20145329吉东云  阅读(184)  评论(1编辑  收藏  举报