zoukankan      html  css  js  c++  java
  • # 2017-2018-1 20155232 《信息安全系统设计基础》第六周学习总结

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

    教材学习内容总结

    本周学习第十章和第八章:
    第十章内容总结在第四周博客

    第八章:

    • 异常处理
    • 异常的类别

    1.中断:来自I/O设备的信号,异步,总是返回到下一条指令

    2.陷阱:有意的异常,同步,总是返回到下一条指令

    3.故障:潜在可恢复的错误,同步,可能返回到当前指令
    终止
    不可恢复的错误,同步,不会返回

    • linux系统中的异常

    1.故障和终止

    2.系统调用:每个调用都有唯一的整数号,对应到偏移表。系统调用可以用

    syscall
    

    的陷阱指令提供。

    • 进程程序中执行的实例。程序都运行在每个进程的上下文中。

    • 逻辑控制流:程序计数器(PC)的值的序列

    • 并发流:一个逻辑流的执行在时间上与另一个流重叠

    • 用户模式和内核模式

      • 上下文切换没有设置模式位--用户模式
      • 设置模式位--内核模式
    • 系统调用错误处理

    1.unix系统函数遇到错误时,返回-1,并设置全局整数变量。
    2.错误处理包装函数

    • 进程控制
      1.获取进程ID

    2.创建和终止进程

    3.回收子进程

    4.让进程休眠

    1. 加载并运行程序
    • 信号术语

    1.发送信号

    • 进程组
    • 用/bin/kill程序发送信号
    • 从键盘发送信号
    • 用kill函数发送信号
    • 用alarm函数发送信号

    2.接收信号

    3.待处理信号

    • 非本地跳转:

    1.通过setjmp和longjmp函数来提供。

    2.setjmp函数在env缓冲区中保存当前的调用环境,以供longjmp使用,返回0。

    3.longjmp函数从env缓冲区恢复调用环境,然后触发一个从最近一次初始化env的setjmp调用的返回。然后sejmp返回带有非零的返回值retval。

    • 操作进程的工具

    • 课本练习题8.3中代码如下:

      验证所有可能的输出序列:
      序列acbc,abcc,bacc都是可能的序列,通过运行验证出来结果:

    • 课本练习题8.4验证程序会输出多少行,可能序列是什么?

    观察代码中printf的个数有6个,就可以确定输出行数,所以会打印6行。

    • 课本练习8.2中代码如下:

    子进程执行了两个printf语句,在fork返回后,子进程产生输出

    p1:x=2
    p2:x=1
    

    而父进程只执行了第七个printf

    p2:x=0
    

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

    • setjmp和longjmp的区别和使用?

    • 底下做一下归纳整理:

    int setjmp(jmp_buf envbuf);
    
    setjmp函数用缓冲区envbuf保存系统堆栈的内容,以便后续的longjmp函数使用。setjmp函数初次启用时返回0值。
    
    void longjmp(jmp_buf envbuf, int val);
    
    longjmp函数中的参数envbuf是由setjmp函数所保存的堆栈环境,longjmp函数本身是没有返回值的,setjmp函数的返回值就是val。
    

    这个链接有较为详细的使用方法。

    代码调试中的问题和解决过程

    -问题1:运行课本8.11课后作业,如下代码,验证程序最后会输出多少个hello,出现错误提示如下:

    • 复制了错误信息,上网搜索了解决方法,发现时编译命令的问题,于是更改:

    • 问题2
      在输入上面的命令编译后

    gcc 8.11.c -lpthread -o 8.11.c
    
    

    又出现了错误:

    后来仔细检查后发现因为太粗心输入的可运行文件的名字和.c文件的名字相同导致出错,再次修改后,运行成功:

    • 问题三:
      在输入课本p514页代码时,出现错误提示,对变量类型的未定义:
    • 解决:
      再仔细查看代码后,发现课本上代码省略了头文件,而我自己在输入代码时也忘记加上,所以导致这个变量类型未定义的错误。


    从运行结果可以发现,fork函数只被调用一次,却会返回两次,一次在调用的进程中,也就是父进程,一次是在新建的子进程中。

    代码托管

    上周考试错题总结

    结对及互评

    点评模板:

    暂无

    本周结对学习情况

    • 20155215

      • 结对学习内容
        • 共同学习课本第三章和实验楼内容
        • 分析课本中代码遇到的问题

    思考

    这周的学习内容主要是机器代码汇编。教材中有很多的代码,通过自己练习加深了理解。汇编是接近机器语言的一种语言,很难懂,虽然现在基本用不上了,但是理解读懂汇编代码才能更好的理解和学习计算机,而且汇编知识上学期也学过,所以更加深了印象。

    学习进度条

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第四周 12/12 1/1 20/20
    第五周 271/283 1/2 15/15
    第6周 276/283 2/3 18/18
    第7周 150/283 4/4 21/23
    第8周 294/283 4/4 24/27

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

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

    • 计划学习时间:27小时

    • 实际学习时间:24小时

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

    参考资料

  • 相关阅读:
    关于cuda拷贝的速度测试
    VS报错:DEBUG Assertion Failed!
    cuda&vs2010的属性配置
    CUDA中自动初始化显卡设备宏
    如何在win10中安装ArcGIS10.2
    @RequiresPermissionss是否可以填写多种权限标识,只要满足其一就可以访问?
    通用权限管理设计 之 数据权限
    请教Nutzwk项目,在beetl页面怎么用shiro标签呢?
    shiro简单配置
    spring+mybatis+druid+mysql+maven事务配置
  • 原文地址:https://www.cnblogs.com/lsqsjsj/p/7751401.html
Copyright © 2011-2022 走看看