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

    教材学习内容总结

    控制流:控制转移序列。

    控制转移:从一条指令到下一条指令。

    异常控制流:现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流。

    一、异常(硬件触发异常,软件处理异常)

        1、异常的剖析,如下图所示:

    2、异常处理

              异常表:当处理器检测到有事件发生时,它会通过跳转表,进行一个间接过程调用(异常),到异常处理程序。

              异常号:系统中可能的某种类型的异常都分配了一个唯一的非负整数的异常号。异常号是到异常表中的索引。

    异常类似于过程调用,但有一些重要的不同之处。

    一旦硬件触发了异常,异常处理程序则由软件完成。

    3、异常的类别——中断、陷阱、故障和终止

    a)中断处理:异步是指硬件中断不是由任何一条指令造成的,而是由外部I/O设备的事件造成的。

    b)陷阱和系统调用:系统调用是一些封装好的函数,内部通过指令int n实现。

                陷阱最重要的用途是提供系统调用。系统调用运行在内核模式中,并且可以访问内核中的栈。

                系统调用的参数是通过通用寄存器而不是栈来传递的,如,%eax存储系统调用号,%ebx,%ecx,%edx,%esi,%edi,%ebp最多存储六个参数,%esp不能用,因为进入内核模式后,会覆盖掉它。

    c)故障

     d)终止

    二、进程(操作系统层):逻辑控制流,私有地址空间,多任务,并发,并行,上下文,上下文切换,调度。

          进程就是一个执行中的程序实例。系统中的每个程序都是运行在某个进程的上下文中的。

          进程提供给应用程序的关键抽象:a)一个独立的逻辑控制流 ;b)一个私有的地址空间

    一些概念:并发流:并发流一个逻辑流的执行在时间上与另一个流重叠,叫做~

                并发:多个流并发执行的一般现象称为并发。

                多任务:多个进程并发叫做多任务。

                并行:并发流在不同的cpu或计算机上,叫~

          3、私有地址空间

                一个进程为每个程序提供它自己的私有地址空间。

                运行应用程序代码的进程初始时是在用户模式中的。进程从用户模式变为内核模式的唯一方法是通过异常。

                linux提供了/proc文件系统,它允许用户模式进程访问内核数据结构的内容。

          4、上下文切换,调度

           上下文切换:操作系统内核使用叫上下文切换的异常控制流来实现多任务。

           上下文切换:a)保存当前进程的上下文;b)恢复某个先前被抢占的进程被保存的上下文; c)将控制传递给这个新恢复的进程

           调度:内核中的调度器实现调度。

           当内核代表用户执行上下文切换时,可能会发生上下文切换。如果系统调用发生阻塞,那么内核可以让当前进程休眠,切换到另一个进程,如read系统调用,或者sleep会显示地请求让调用进程休眠。一般,即使系统调用没有阻塞,内核亦可以决定上下文切换,而不是将控制返回给调用进程。

           中断也可能引起上下文切换。如,定时器中断。

    三、信号(操作系统和应用程序之间):进程之间传送信号

          一种更高层次的软件形式的异常,称为unix信号,它允许进程中断其他进程。

         低层的硬件异常是由内核异常处理程序处理的,正常情况下,对用户进程而言是不可见的。信号提供了一种机制,通知用户进程发生了这些异常。

        1、信号处理过程

         1)发送信号:内核通过更新目的进程中上下文中的某个状态,发送一个信号给目的进程。发送信号有两个原因:a)内核检测到一个系统事件; b)一个进程调用kill函数,心事发送信号

         2)接收信号:,目的进程就接收了信号。进程可以忽略这个信号,终止或者通过执行信号处理程序捕获这个信号。

        注意:待处理信号,一种类型的信号只能有一种待处理信号,多余的不会排队,而是会舍掉 ; 信号还可以阻塞。

    2、发送信号:/bin/kill , kill函数,键盘,alarm函数

          进程组:每个进程都只属于一个进程组,进程组是由一个进程组ID来标识的。默认的,一个子进程和它的父进程同属于一个进程组。 

          在任何时刻,至多只有一个前台作业和0个或多个后台作业。外壳为每个作业创建一个独立的进程组,一个作业对应一个进程组。

  • 相关阅读:
    用Taro写一个微信小程序——版本升级
    matlab subplot 的边距(with tight margins)
    Nginx(Tengine) 解决 unknown directive "stream" 问题
    MinIO 分布式集群搭建
    Docker 及 Docker Compose 日常操作(团队培训材料)
    基于 AdoptOpenjdk 官方 Dockerfile 制作 jre8 镜像(修改字符集和时区)
    Syncthing 开源文件同步工具
    Harbor 2.2.0 搭建与使用
    Centos7 使用 chronyd 进行时钟同步
    Centos7 安装 Python3 及配置国内源、虚拟环境
  • 原文地址:https://www.cnblogs.com/brs6666/p/9942072.html
Copyright © 2011-2022 走看看