linux segmentation浅谈

本文深入探讨了Segmentation Fault,通常称为SIGSEGV,这一在计算机软件运行过程中可能出现的错误。它解释了SIGSEGV的来源、分类,并详细说明了在不同操作系统环境下(如Unix和Windows)如何触发这种错误。此外,文章阐述了当用户态程序尝试访问非法内存时,硬件和内核是如何通过发送SIGSEGV信号来保护系统的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Segmentation fault 是什么

Segmentation fault 常常被称为SIGSEGV,是操作计算机软件时在特定条件下发生的错误。当程序试图使用不能使用的内存,或者以不正确的方式访问一块内存时产生的错误。Segmentation是一种内存管理和操作系统的保护机制。现在都是用页管理内存,一些操作系统虽然用页作为内存管理的主要策略,但是在逻辑层面仍然有segmentation。在诸如unix的操作系统,当处理器试图使用非法内存时,会收到SIGSEGV signal。在windows上,当处理器试图使用非法内存时,会收到STATUS_ACCESS_VIOLATION exception

可以归类为:1SIGSEGV是在访问内存时发生的错误,属于内存管理的范畴

2 SIGSEGV 是一个用户态的概念,是操作系统在用户态程序错误访问内存所做出的处理。

3 当用户态程序访问(读写或执行)不允许访问的内存时,产生SIGSEGV

4 当用户态程序以错误的方式访问允许访问的 内存时,产生SIGSEGV。

 

当用户态程序访问一个会引发SIGSEGV的地址时,硬件首先产生一个page fault,即“缺页异常”,内核中的page fault首先判断该地址是否属于用户态程序的地址空间,如果属于,则检查该访问的累世是否和该内存区域的类型是否匹配,不匹配,则发送SIGSEGV信号;如果该地址不属于用户态地址空间,检查访问该地址的操作是否发生在用户态,如果是,发送SIGSEGV

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值