zoukankan      html  css  js  c++  java
  • 学习笔记9

    第六章 信号和信号处理
        6.1 信号和中断
            “中断”是从1/0设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。与发送给CPU的中断请求一样,“信号”是发送给进程的请求,将进程从正常执行转移到中断处理。
            (1)首先,我们将进程的概念概括为:一个“进程”(引号中)就是一系列活动。
            (2)“中断”是发送给“进程”的事件,它将“进程”从正常活动转移到其他活动,称 为“中断处理”。“进程”可在完成“中断”处理后恢复正常活动。
            (3)“中断” 一词可应用于任何“进程”,并不仅限于计算机中的CPU。例如,我们可能会提到以下几种“中断”。
                  .1 人员中断
                  当我在办公室读书、评分、做白日梦时,可能会发生一些真实事件,所有这些事件都叫作人员中断
                  每个中断都分配有一个唯一的ID识别号,并有一个预先安装的动作函数
                  人可在收到中断请求时“执行”动作函数
                  根据来源,中断可分为三类:
                      来自硬件的中断:大楼着火,闹钟响了等
                      来自其他人的中断:电话响了,有人敲门等
                      自己造成的中断:切到手指,吃得太多等
                  按照紧急程度,中断可分为以下几类:
                      不可屏蔽(NMI):大楼着火!
                      可屏蔽:有人敲门等
                  人员的每个动作函数都是通过本能或经验实现的
                  由于人员中断的种类太多,所以不能在上表中全部列出,但是思路应该清晰
                  .2 进程中断
                  这类中断是发送给进程的中断
                  当某进程正在执行时,可能会收到来自3个不同来源的中断:
                      来自硬件的中断:终端、间隔定时器的“Ctrl+C”组合键等
                      来自其他进程的中断:kill(pid, SIG#)、death_of_child等
                      自己造成的中断:除以0、无效地址等
                  每个进程中断都被转换为一个唯一ID号,发送给进程
                 .3 硬件中断
                  这类中断是发送给处理器或CPU的信号
                  这类中断也有三个可能的来源:
                      来自硬件的中断:定时器、I/O设备等
                      来自其他处理器的中断:FFP、DMA、多处理器系统中其他CPU
                      自己造成的中断:除以0、保护错误、INT指令
                  每个中断都有唯一的中断向量号
                   .4 进程的陷阱错误。
                  进程可能会自己造成中断。
          这些中断是由被CPU识别为异常的错误引起的,例如除以0、无效地址、非法指令、越权等。
          当进程遇到异常时,它会陷入操作系统内核,将陷阱原因转换为信号编号,并将信号发送给自己。
          如果在用户模式下发生异常,则进程的默认操作是终止,并使用一个可选的内存转储进行调试。
        6.2 Unix/Linux信号示例
            (1)按"Ctrl+C”组合键通常会导致当前运行的进程终止
            (2)用户可使用nohup a.out &命令在后台运行一个程序
            (3)也许几天后,用户再次登录时会发现(通过ps-u LTD)后台进程仍在运行
        6.3 Unix/Linux中的信号处理
              6.3.1 信号类型
                Unix/Linux支持31种不同的信号,每种信号在signal.h文件中都有定义
       
                每种信号都有一个符号名,如 SIGHUP(1)、SIGEMT(2)、SIGKILL(9)、S1GSEGV(11)等
              6.3.2 信号的来源
                来自硬件中断的信号:
                在进程执行过程中,一些硬件中断被转换为信号发送给进程。硬件信号示例是:
                    中断键(Ctrl+C),它产生一个SIGINT(2)信号
                    间隔定时器,当时间到期时,会生成一个SIGALRM(14)、SIGVTALRM(26)或SIGPROF(27)信号
                    其他硬件错误,如总线错误、IO陷阱等
                来自异常的信号:
                当用户模式下的进程遇到异常时,会陷入内核模式,生成一个信号,并发送给自己。常见的陷阱信号有SIGFPE(8),表示浮点异常(除以0),最常见也是最可怕的是SIGSEGV(11),表示段错误,等等。
                来自其他进程的信号:
                进程可使用kill(pid, sig)系统调用向pid标识的目标进程发送信号。读者可以尝试以下实验。在Linux下,运行简单的C程序
                    main()( while(1); }
                使进程无限循环。从另一个(X-window)终端,使用ps-u查找循环进程pid。然后输入sh命令
                    kill -s 11 pid
                循环进程会因为段错误而死亡。
             6.3.3 进程PROC结构体中的信号
                每个进程PROC都有一个32位向量,用来记录发送给进程的信号
                在位向量中,每一位(0位除外)代表一个信号编号
             6.3.4 信号处理函数
            6.3.5 安装信号捕捉函数
        6.4 信号处理步骤
       6.5 信号与异常
      Unix信号最初设计用于以下用途
        作为进程异常的统一处理方法:当进程遇到异常时,它会陷入内核模式,将陷阱原因转换为信号编号,并将信号发送给自己
        让进程通过预先安装的信号捕捉函数处理用户模式下的程序错误
        在特殊情况下,它会让某个进程通过信号杀死另一个进程
       6.6 信号用作IPC
       6.7 Linux中的IPC
       IPC是指用于进程间通信的机制
            6.7.1 管道和FIFO
         管道和管道编程在第三章中有过介绍
            6.7.2 信号
            6.7.3 System V IPC
         System V IPC共有三种类型:System V消息队列、System V 信号量、System V 共享内存区。
      
            6.7.4 POSIX消息队列
        
            6.7.5 线程同步机制
        Linux不区分进程和线程
         在Linux中,进程是共享某些公共资源的线程
         
            6.7.6 套接字
        套接字是用于跨网络进程通信的IPC机制
      
       
  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/Ye-fen/p/15552447.html
Copyright © 2011-2022 走看看