2018-2019-1 20165228 《信息安全系统设计基础》第七周学习总结

2018-2019-1 20165228 《信息安全系统设计基础》第七周学习总结

教材学习内容总结

第八章 异常控制流(Exception Control Flow,ECF)

异常控制流发生在系统的各个层次

  • 理解ECF将帮助理解重要的系统概念
  • 理解ECF将帮助理解应用程序如何与操作系统交互
  • 理解ECF帮助编写有趣的新应用程序
  • 理解ECF帮助理解并发
    异常
  • 异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现。
  • 异常(exception)就是控制流中的突变,用来响应处理器状态的某种变化。
  • 任何情况下,当处理器检测到有事件发生时,它会通过一张叫做异常表(exception tabled)的跳转表,进行一个简介过程调用(异常),到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序(exception handler))。当异常处理子程序完成处理后,根据引起异常的事件的类型,会发生以下3种情况之一:
  • 处理程序将控制返回给当前指令Icurr,即当事件发生时正在执行的指令。
  • 处理程序将控制返回给Inext,如果没有异常将会执行的下一条指令。
  • 处理程序终止被中断的程序。
    异常处理
  • 在系统启动时,操作系统分配和初始化一张称为异常表的跳转表,使得表目k包含异常k的处理程序的地址。
  • 在运行时,处理器检测到发生了一个事件,并且确定了相应的异常号k。随后处理器触发异常,方法是执行间接过程调用,通过异常表的表目k,转到相应的处理程序。
    异常的类别

    异常分为四类:

  • 中断
  • 陷阱
  • 故障
  • 终止

进程
  • 异常是允许操作系统提供进程的概念的基本构造快,进程是计算机科学中最深刻,最成功的概念之一
  • 进程经典定义:一个执行中的程序实例,系统中每个程序都是运行某个进程的上下文中的,其中上下文是由程序正确运行所需的状态组成。包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
    逻辑控制流
  • PC值的序列叫做逻辑控制流,或者简称逻辑流

并发流
  • 逻辑流有许多不同的形式。 异常处理程序,进程,信号处理程序,线程和Java进程都是逻辑流的例子
  • 并发流就是一个逻辑流的执行在时间上与另一个流重叠,这两个流并发运行。
  • 多个流并发地执行的一般现象称为并发。
  • 一个进程执行它的控制流的一部分的每一时间段叫做时间片。所以多任务也成为时间分片。
    私有地址空间
  • 进程为每个程序提供一种独占使用系统地址空间的假象。

用户模式和内核模式
  • 处理器通常使用某个控制寄存器的中的一个模式位来提供限制应用执行的指令和访问地址空间范围的机制。
  • 设置模式位,运行在内核模式。即,超级用户模式,可执行任何指令,可访问任何文件。
  • 没有设置模式位,运行在用户模式,不允许执行特权指令,也不允许用户模式中的进程直接引用地址空间中内核区内的代码和数据
    上下文切换
  • 操作系统内核使用一种称为上下文切换的 较高层次 的异常控制流来实现多任务。它建立在较低层异常机制之上的。
  • 内核为每一个进程维持一个上下文,即内核重新启动一个被抢占的进程所需的状态。由通用目的寄存器、浮点寄存器、程序计数器等的值和各种内核数据结构组成。

    引发上下文切换:

  • 内核代表用户执行系统调用
  • 中断
    获取进程ID
#include<sys/types.h>
#include<unistd.h>
pid_t getpid(void);
pid_t getppid(void);
  • PID是每个进程唯一的正数。getpid()返回调用进程的PID,getppid()返回它的父进程的PID。

    返回一个类型pid_t的值,在Linux系统下在type.h被定义为int

    创建和终止进程

    进程的三种状态:

  • 运行:进程要么在CPU中执行,要么等待执行,最终被内核调度。
  • 停止:进程的执行被挂起,且不会被调度。
  • 终止:进程永远停止

    创建子进程
#include<sys/types.h>
#include<unistd.h>
pid_t fork(void);
返回:子进程返回0,父进程返回子进程的PID,如果出错,返回-1;
  • 子进程得到与父进程用户级虚拟地址空间相同的(但是独立的)一份拷贝。

    包括文本,数据和bss段,堆以及用户栈。子进程还获得与父进程任何打开文件描述符相同的拷贝。

  • 意味着当父进程调用fork时,子进程可以读写父进程中打开的任何文件。

    父进程和新创建的子进程之间最大的区别在于有不同的PID。

    回收子进程
#include<sys/types.h>
#include<sys/wait.h>
pid_t waitpid(pid_t pid ,int *status, int options);
返回:如果成功,则为子进程的PID,如果WNOHANG,则为0,如果其他错误,则为-1.
  • 当一个进程由于某种原因终止时,内核并不是立即把它从系统中清除。相反,进程被保持在一种已终结的状态,知道被它的父进程 回收(reap)。
  • 一个进程可以通过调用waitpid函数来等待它的子进程终止或停止

    教材学习中的问题和解决过程

  • 问题1:如何使用非本地跳转来规避正常的调用/返回栈规则。
  • 解决方法: 非本地跳转通过setjmp和longjmp函数来提供。

原文地址:https://www.cnblogs.com/cloud795/p/9943563.html

时间: 2024-10-15 14:33:46

2018-2019-1 20165228 《信息安全系统设计基础》第七周学习总结的相关文章

20135223何伟钦—信息安全系统设计基础第七周学习总结

第六章 存储器层次结构 [学习时间:6小时] [学习任务:<深入理解计算机系统>第六章] 6.1存储技术 6.1.1随机访问存储器 分为两类:静态(SRAM)和动态(DRAM). (1)SRAM:高速缓存存储器,既可以在CPU芯片上,也可以在片下. (2)DRAM:主存以及图形系统的帧缓冲区. 1.静态RAM SRAM将每个位存储在一个双稳态的存储器单元里.每个单元是用一个六晶体管电路来实现的.该电路有一个属性:可以无限期地保持在两个不同的电压配置或状态之一. 2.动态RAM 每位晶体管数 相

20135205信息安全系统设计基础第七周学习总结

第六周 存储器层次结构 ---------------------------------------------------------------------- 第一节 存储技术 1.三种常见存储技术 1)RAM 静态RAM:SRAM将每个位存储在一个双稳态的存储单元里. 每个单元是用一个六晶体管电路实现的这个电路有这样一个属性,可以无限期地保持在两个不同的电压配置或状态之一. 动态RAM:DRAM将每个位存储为对一个电容的充电. 每个单元由一个电容和一个访问晶体管组成. 与SRAM不同,D

信息安全系统设计基础第七周学习总结—20135227黄晓妍

第六章存储器层次结构 6.1存储技术 6.1.1随机访问存储器(分成两类) 静态RAM(SRAM):快,作为高速缓存存储器.(几百几千兆) 动态RAM(DRAM):作为主存,图形系统的帧缓冲区.(<=几兆) 1.静态RAM 具有双稳定状态,它可以无期限地保持在两个不同的电压配置(状态)其中的一个.也可以保持在亚稳定状态,但这个状态易被干扰.由于它具有双稳定性,所以即使有干扰,当干扰消除时,它能很快地恢复到稳定值. 2.动态RAM DRAM将每个位存储为对一个电容充电.对干扰非常敏感,电容的电压被

20135234马启扬-——信息安全系统设计基础第七周学习总结

第六章 存储器层次结构 存储器系统是一个具有不同容量,成本和访问时间的存储设备的层次结构. CPU寄存器保存着最常用的数据. 靠近CPU的小的,快速的高速缓存存储器作为一部分存储在相对较慢的主存储器(主存)中的数据和指令的缓存区域. 主存暂时存放存储在容量较大的,慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓存区域. 6.1存储技术 6.1.1随机访问存储器 随机访问存储器(RAM)分为:静态的RAM(SRAM)和动态的RAM(DRAM) SRAM用来

信息安全系统设计基础第七周学习总结

一. Linux命令复习: man –k: man –k <命令> :用于学习命令 关于man命令的区分: (1)一般命令:(2)系统调用:(3)库函数,涵盖了C标准函数库.可以通过在man后面加上相应区段的数字查看相应段的内容. cheat: 查看可用的小抄列表:cheat –l 要访问某个指定命令的小抄,只要运行cheat命令,后面跟上该命令的名称:cheat <command-name> 你可以通过使用“-s”选项,在所有小抄中搜索包含有指定关键词的内容:cheat -s &

2018-2019-1 20165228 苏祚堃《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 GCC编译: 预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp 编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl 汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as 链 接:gcc hello.o –o hello ;gcc -o 调用ld 带head.h的头文件编译:需要使用"-I +

2018-2019-1 20165228 《信息安全系统设计基础》第二周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 信息=位+上下文 无符号编码:基于传统的二进制表示法,表示大于等于零的数字 补码编码:表示有符号数证书最常见的方式,可表示或正或负的数字 浮点数编码:表示实数的科学计数法的以二为基数的版本 溢出:计算机的表示法是用有限数量的位来对一个数字编码,当结果太大以至不能表示时,某些运算就会溢出 信息的存储 1个字节为8位,大多数计算机将1个字节作为最小的可寻址的存储器单位. 机器级程序将存储器视为一个非

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

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

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有