通讯架构学习-nginx-(五) Unix体系结构:

Unix体系结构:
    类Unix操作系统结构分为两个状态:1)用户态, 2)内核态
    a)操作系统/内核: 用来控制计算机硬件资源, 提供应用程序运行到环境
     我们写的程序, 他要么运行在用户态, 要么运行在内核态。一般来说是在用户态
     当程序要执行一些特殊代码时, 程序就有可能切入到内核态, 这种切换是由操作系统控制, 不需要人为介入
         换角度理解:用户态:最外圈应用程序的活动空间
    b)系统调用:就是一些函数(系统函数), 你只需要调用这些函数
    c)shell:bash(borne again shell)重新装配的shell, 他是shell的一种, linux上默认采用的是bash
        bash就是一个可执行程序, 是一个命令解释器
    d)用户态:内核之间的切换:
    用户态权限小, 内核态权限大 , 切换不需要我们介入
        malloc(), printf() 是系统干的, 不需要我们介入
    
    疑问:为什么区分用户态, 内核态?
        (1)权限分开,权限小的干一些危险的事的时候, 不至于威胁到系统
        (2)既然这些接口是操作系统提供, 也是操作系统统一管理, 资源是有限的,不加以管理, 会造成访问冲突,资源耗尽,系统崩溃,系统提供接口, 就是减少资源访问上的冲突。
        


那么什么时候从用户态切换到内核态呢?
   a) 系统调用:比如调用malloc()
   b) 异常事件:比如来了一个信号
   c) 外部设备中断

signal函数范例:
    信号来了 我们可以捕捉 signal(para, param) 第一个参数是信号, 第二个是个函数地址
    signal因为兼容性 不建议使用
    建议使用sigaction()


可重入函数:在信号处理函数中调用, 它是安全的,这些函数是可重入的, 被称为异步信号安全的。

在信号处理函数中注意:
 a) 尽量使用简单的函数做简单的事情
 b) 如果必须要在信号处理函数中调用系统函数, 一定要是可重入的。
 c)如果必须在信号处理函数中调用那些可能修改errno值得函数 , 要事先备份 errno值, 信号返回前恢复errno值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值