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

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

教材学习内容总结

异常

  • 异常:异常就是控制流中的突变,用来响应处理器状态中的某些变化。
  • 基本思想:如图所示
  • 异常的类别:
    • 中断
      • 中断是异步发生的,是来自处理器外部的I/O设备的信号的结果。
      • 处理方法:对于I\O设备,通过向处理器芯片上的一个引脚发信号,并将异常号放到系统总线上,来触发中断,这个异常号标识了引起中断的设备。当前指令完成执行后,处理器从系统总线读取异常号,调用适当的中断处理程序,处理器返回时,它就将控制返回给下一条指令。如图所示
    • 陷阱和系统调用
      • 陷阱是有意的异常,是执行一条指令的结果。
      • 处理方法:执行syscall指令,但是会导致一个到异常处理程序的陷阱,这个处理程序解析参数,并调用适当的内核程序。如图所示
    • 故障
      • 故障由错误引起的,它可能能够被故障处理程序修正。
      • 缺页异常:当指令引用一个虚拟地址,而与该地址相对应的物理页面不在内存中,因此必须从磁盘中取出时,就会发生故障。
      • 处理方法:根据故障是否能够被修复,故障处理程序要么重新执行引起故障的指令,要么终止。如图所示,
    • 终止
      • 终止是不可恢复的致命错误造成的结果,通常是一些硬件错误。
      • 例子:DARM或者SRAM位被损坏时发生的奇偶错误。
      • 处理方法:处理程序将控制返回给一个abort例程,该例程会终止这个应用程序。如图所示
  • 总结:如图所示
    • Linux/x86-64故障和终止
      • 触发错误
      • 一般保护故障
      • 缺页
      • 机器检查

进程和并发

  • 进程:一个执行中程序的实例。
  • 上下文:由程序正确运行所需的状态组成。这个状态包括存放在内存中的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开文件描述符的集合。
  • 进程的逻辑抽象
  • 一个独立的逻辑控制流:它提供一个假象,好像我们的程序独占地使用处理器。
  • 一个私有的地址空间:它提供一个假象,好像我们的程序独占地使用内存系统,让我们更深入地看看这些抽象。
  • 并发流:一个逻辑流的执行在时间上与另一个流重叠,称为并发流,这两个流被称为并发地运行
  • 并发:多个流并发地执行的一般现象被称为并发
  • 多任务:一个进程和其他进程轮流执行的概念称为多任务
  • 时间片:一个进程执行它的控制流的一部分的每一时间段叫做时间片
  • 并行流:如果两个流并发地运行在不同的处理器核或者计算机上,那么我们称他们为并行流,它们并行地运行,且并行地执行

进程控制

  • 获取进程ID:每个进程都有一个唯一的正数进程ID(PID),getpid函数返回调用进程的PID,getppid函数返回它的父进程的PID(创建调用进程的进程)。

  • 创建和终止进程:

    • 进程所处的三种状态
      • 运行
      • 停止
      • 终止:三种原因
        • 收到一个信号,该信号的默认行为是终止进程。
        • 从主程序返回。
        • 调用exit函数。
    • 创建进程:
      • 父进程通过调用fork函数创建一个新的运行的子进程
      • fork函数的使用格式:如图所示
        • 注意:fork函数只被调用一次,却会返回两次:一次是在调用进程(父进程)(fork函数返回子进程的PID)中,一次是在新创建的子进程(fork函数返回0)中。
  • waitpid函数:来等待它的子进程终止或者停止。

    • 使用格式:
    • 主要作用:
      • 判定等待集合的成员。
      • 修改默认行为。
      • 检查已回收子进程的退出状态。
      • 错误条件:如果调用进程没有子进程,那么waitpid返回-1,并且设置errnoECHILD,如果waitpid函数被一个信号中断,那么它返回-1,并设置errnoEINTR.
  • 让进程休眠:sleep函数----将一个进程挂起一段指定的时间。

    • 如果请求的时间量已经到了,sleep返回0,否则返回还剩下的要休眠的秒数。
  • pause函数:让调用函数休眠,直到该进程收到一个信号。

  • execve函数:在当前进程的上下文中加载并运行一个新程序。

    • 调用一次并从不返回。
    • getenv函数:在环境数组中搜索字符串name=value.如果找到了,它就返回一个指向value的指针,否则,它就返回NULL.
  • setenv函数:如果环境数组包含一个形如name=oldvalue的字符串,那么unsetenv会删除它,而setenv会用newvalue代替oldvalue,但是只有在overwirte非零时才会这样。如果name不存在,那么setenv就把name=newvalue添加到数组中。

信号机制

  • 信号:一个信号就是一条小消息,它通知进程系统中发生了一个某种类型的事件。
  • 发送信号和接收信号。
  • /bin/kill程序发送信号:
    • 例:/bin/kill -9 15213:发送信号9给进程15213.
    • /bin/kill -9 -15213:发送一个SIGKILL信号给进程组15213中的每一个进程。
    • kill函数发送信号:调用kill函数发送信号给其他进程。
      • 如果pid>0,那么kill函数发送信号号码sig给进程pid.
      • 如果pid=0,那么kill发送信号sig给调用进程所在进程组中的每个进程,包括调用进程自己。
      • 如果pid<0,kill发送信号sig给进程组|pid|中的每个进程。
    • alarm函数发送信号:调用alarm函数向它自己发送SIGALRM信号。
      • 如果seg=0,那么不会调度安排新的闹钟。
    • signal函数:修改和信号相关联的默认行为。

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

问题:根据本周上课讲解内容,提出疑问:ls命令为查看,那么还有没有其他的命令也可以查找呢?

解答:

  • find -name "文件名":能够精确定位查找某个文件。
  • find -name "文件名" -ls 这个方法能够精确定位查找某个文件,并且列出文件详情。
  • locate “m”查找当前目录所有的含有m字符的字串。
  • locate -i“test”查找当前目录所有的含有test字符,并且不区分大小写。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

相对内核而言,文件分为文本文件和二进制文件。其中文本文件只含有ASCII或Unicode字符。
A .正确
B .错误
C .不确定
答案:B
解析:文件分为普通文件、目录和套接字,其中文本文件是只含有ASCII或Unicode字符的普通文件。

其他(感悟、思考等,可选)

本周的教材内容主要学习了第8章,异常控制流,了解了流的概念,及计算机系统中异常的处理方法,了解了计算机操作系统中如何打开、关闭等对进程进行一系列操作,课上内容了解了ls的用法,并尝试着自己变成实现ls的用法,收获很大。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料

posted @ 2018-11-10 23:13  I~Justice  阅读(209)  评论(0编辑  收藏  举报