세그멘테이션 폴트는 수행 중인 프로그램이 메모리 상에 이상한 주소를 접근하려 할 때 발생한다. 여러분이 만든 프로그램이라면 세그멘테이션 폴트는 아마도 포인터가 뭔가 이상한 곳을 가리키고 있다는 말일 것이다. 그러나 표준 유닉스유틸리티인 경우 결국 같은 내용이겠지만 아마 프로그램에게 다룰 수 없는 이상한 입력을 준다든지 했을 것이다. |
프로그램을 중단시킬 수 있는 대부분의 버그들은 ‘SegmentationFault’라는 메시지를 남긴다. 이 메시지의 ‘fault’라는 말은 결함, 실수 등의 의미임을 쉽게 생각할 수 있다. 하지만 ‘segmentation’은 무슨 의미일까? 세그먼테이션은 운영체제에서 메모리 관리(Memory Management)의 한 종류이다. 세그먼테이션을 정의한다면 완전히 머신(machine) 독립적인 주소 공간을 할당해주는 직접적인 방법이라고 할 수 있다. 예를 들어, 컴파일러가 소스를 컴파일 할 때 다음과 같은 테이블을 만들 수 있다.
세그먼테이션을 사용할 때의 장점에는 여러 가지가 있지만 우선 각 프로시저가 주소 번지 0에서 시작되는 분리된 세그먼트를 갖기 때문에 독립된 프로시저의 연결이 단순해진다. 또한 여러 개의 프로세스가 프로시저나 데이터를 쉽게 공유할 수 있다. 이러 장점은 세그먼테이션이 가상 메모리와는 달리 그 크기가 유동적이라는 데서 기인한다. |
Bus error 이것은 성격상 세그먼테이션 폴트와 유사하다. 그러나 미묘한 차이가 있는데 버스에러란 커널이 스스로 문제점을 발견하지 못했다는 점에서다. 어떤 문제가 있음을 메모리 시스템(즉 하드웨어)이 발견한다. 많은 시스템에서느 이 메시지는 입출력 연산을 잘못 시도했음을 말한다. (있지도 않은 장치를 접근하려 했거나 뭔가 자연적이지 못했을때 등등) |
- skt_wipi_c를 컴파일 할때 오류가 난 부분인데 wipi_sdk 버전을 낮추니 문제가 해결되었다. 상위 버전으로 컴파일 할때 다시 오류가 날지 모르겠다...
'리눅스 서버에 대해서' 카테고리의 다른 글
gcc 옵션 설명 (0) | 2011.05.26 |
---|---|
GNU 어셈블러 지시자 정리 (0) | 2011.05.26 |
ccacheを使って共同作業のビルド時間を改善する (0) | 2011.05.12 |
게임 서버 epoll 사용한것... 소스 (0) | 2008.11.18 |
리눅스 쓰레드 (0) | 2008.06.19 |