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


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

    教材学习内容总结

    异常

    • 异常:异常就是控制流中的突变,用来响应处理器状态中的某些变化。
    • 基本思想:如图所示
    • 异常的类别:
      • 中断
        • 中断是异步发生的,是来自处理器外部的I/O设备的信号的结果。
        • 处理方法:对于IO设备,通过向处理器芯片上的一个引脚发信号,并将异常号放到系统总线上,来触发中断,这个异常号标识了引起中断的设备。当前指令完成执行后,处理器从系统总线读取异常号,调用适当的中断处理程序,处理器返回时,它就将控制返回给下一条指令。如图所示
      • 陷阱和系统调用
        • 陷阱是有意的异常,是执行一条指令的结果。
        • 处理方法:执行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就接近了。

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

    参考资料

  • 相关阅读:
    牛客多校第九场 && ZOJ3774 The power of Fibonacci(二次剩余定理+斐波那契数列通项/循环节)题解
    2019牛客多校第九场B Quadratic equation(二次剩余定理)题解
    URAL 1132 Square Root(二次剩余定理)题解
    牛客多校第九场H Cutting Bamboos(主席树 区间比k小的个数)题解
    配置android.support.v7.widget.Toolbar 搜索框样式
    Google之路
    Editplus 竖选,竖插入技巧
    JNDI
    Spring Hibernate Transaction示例
    AOP 入门
  • 原文地址:https://www.cnblogs.com/20165203-xyx/p/9941033.html
Copyright © 2020-2023  润新知