2012-06-08 3 views

답변

0

분할 오류는 다음과 같은 경우에 발생할 수 있습니다

A)에만 패치를 적용하여 고정 할 수있는 버그가 프로그램/명령.

b) C 프로그래밍에서 배열 끝을 넘어 배열에 액세스하려고 시도 할 때도 나타날 수 있습니다.

c) 중요한 공유 라이브러리, 구성 파일 또는/dev/entry가 누락 된 경우 chrootjail 내부에서 발생할 수 있습니다.

d) 언젠가 하드웨어 또는 오류가있는 메모리 또는 드라이버로 인해 문제가 발생할 수 있습니다.

e) 모든 컴퓨터 장비에 권장되는 환경을 유지하십시오 (과열로 인해이 문제점이 발생할 수도 있음).

이유 페이지 폴트가 발생

a)의 가상 메모리 어드레스를 액세스하려고

b) 명령어 피연산자/명령어 어드레스

c) 데이터 읽기/쓰기 - 데이터 또는 인출 명령어

d) 아마 페이지 '미정 페이지 임)

E'없는 '인 하지 판독 기록 가능하지 '

F)는 아마 페이지는'

아마 페이지가

g) '

+0

멋지다, 두 가지 모두를위한 멋진 목록입니다! – Varun

7

페이지 부재 (일명 #PF)은 세그먼트 폴트 공통 원인 '보이지 (어드레싱 일부 존재하지 않는 페이지의 데이터, 권한 수준에 관계없이 보호 된 페이지에서 데이터를 읽거나 쓰려고 시도, 실행하지 않는 페이지에서 코드 가져 오기 ...).

그러나 segfault는 다른 몇 가지 드문 이유 때문에 발생할 수 있습니다. 예를 들어 요청한 현재 권한 수준 (CPL)없이 권한있는 명령어를 실행하려고하면 이 샘플 확인 :이 샘플에서는

% cat segfault.c && gcc segfault.c -o segfault 
int  main(void) 
{ 
    __asm__("invd"); 

    return 0; 
} 

% ./segfault 
Segmentation fault 

을의 세그먼트 폴트 메모리와는 아무 상관이있다. invd 명령은 권한있는 명령입니다 (CPL이 ring0 인 경우에만 실행 가능함). 따라서 사용자 공간에서 실행할 수 없습니다. 이 명령을 실행할 때 일반 보호 오류 (일명 #GP) 예외가 발생합니다. 커널은 예외를 catch하고 잘못된 프로그램에 kill 신호를 보냅니다.

+0

Thnx Benoit, 이것이 내가 기대했던 정확한 설명입니다. – Varun