본문 바로가기

OS,Network,Container

[운영 체제] Segmentation Falut란? 페이징과 세그멘테이션 얕게 이해하기

반응형

1. 개요

업무 중 특정 고객사의 프로세스에서 segfault가 발생하였다.

 

대학교 3학년 때 운영 체제 수업을 들으면서 분명히 배웠던 내용이지만 자세한 기억이 나지 않아 정리하게 되었다.


2. 기본 개념 정리

참고 : https://steady-coding.tistory.com/524

 

2.1) 메모리

메인 메모리

: CPU가 직접 접근할 수 있는 기억 장치

(CPU는 연산을 수행하는 장치로 Memory에 적재되어 있는 프로그램 코드를 참조하여 연산을 수행한다.)

 

가상 메모리

: 메모리의 공간은 한정적이기 때문에 사용자에게 더 많은 메모리를 제공하기 위해 가상 주소를 사용한다. 메모리 관리 장치는 가상 주소를 이용해 실제 데이터가 담겨 있는 주소로 변환해준다.

 

가상 메모리의 장점

  1. 프로그램 용량이 실제 물리 메모리보다 커도 된다.
  2. 더 많은 프로그램을 동시에 실행할 수 있다.

    ⇒ 응답 시간 유지

    ⇒ CPU 이용률과 처리율 증가

 

가상 메모리의 구현

운영 체제는 물리 메모리의 제약을 갖고 있는 주 기억 장치를 보조하기 위해 디스크를 보조 기억 장치로 사용한다.

⇒ 메인 메모리와 디스크의 페이징 공간을 묶어 하나의 메모리처럼 동작하게 하며, 이를 통해 메인 메모리의 한계를 뛰어 넘는 메모리 사용을 가능하게 하는 가상 메모리를 구현한다.

 

Swapping
CPU 할당이 끝난 프로세스의 메모리를 보조 기억 장치로 내보내고 (Swap out) 다른 프로세스의 메모리를 불러오는 작업 (Swap in)을 Swap이라고 한다.
⇒ Swap 작업에는 Disk 전송 시간이 필요하기 때문에 메모리 공간이 부족해질 때 스왑이 이루어진다.

 

메모리 관리
다중 프로그래밍 시스템에서는 수백개의 프로세스를 수용하기 위해 RAM을 동적 분할하는 메모리 관리 작업이 필요하다.
⇒ 디스크에 있는 프로그램을 어떻게 RAM에 적재할 것인지 판단하는 알고리즘이 필요함

연속 메모리 관리
프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 한다.

1. 고정 분할 기법 : 주 기적 장치가 고정된 파티션으로 분할
    ⇒ 내부 단편화가 발생
2. 동적 분할 기법 : 파티션들이 동적으로 생성되며 자신의 크기와 같은 파티션에 적재
    ⇒ 외부 단편화 발생

 

그러면 단편화란 무엇일까?
프로세스들이 메모리에 적재되고 제거되는 일이 반복되면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼의 자유 공간이 늘어나게 된다.

 

1) 내부 단편화
: 프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생하며, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이를 의미한다.

2) 외부 단편화
: 메모리 할당 및 해제 작업의 반복으로 작은 메모리가 중간 중간 존재할 수 있다.
이렇게 사용하지 않는 메모리가 존재하여 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황

 

불연속 메모리 관리
프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법 (단편화 문제를 해결하기 위해 제시된 기법)
⇒ 외부 단편화 해소를 위한 페이징
⇒ 내부 단편화 해소를 위한 세그멘테이션

 

페이징
프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식

>> 페이지 : 고정 사이즈의 가상 메모리 내 프로세스 조각
>> 프레임 : 페이지 크기와 같은 주 기억 장치의 메모리 조각


⇒ 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 법

 


페이징 테이블
물리 메모리는 고정 크기의 프레임으로, 가상 메모리는 고정 크기의 페이지로 분리되어 있다.
개별 페이지는 순서에 상관 없이 물리 메모리에 있는 프레임에 매핑되어 저장된다.

모든 프로세스는 하나의 페이징 테이블을 가지고 있으며, 여기에는 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위치한 메인 메모리의 시작 주소가 있다.
⇒ 하나의 프로세스를 나눈 가상 메모리 페이지들이 각각 실제 메인 메모리의 어디 프레임에 적재되어 있는지 알아낼 수 있다.

페이징의 장단점


1) 장점
논리 메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리에 남는 프레임에 적절히 배치되기 때문에 외부 단편화가 생기지 않는다.

2) 단점
내부 단편화가 발생할 수 있다.

세그멘테이션
분할 방식을 제외하면 페이징과 세그멘테이션이 동일하기 때문에 매핑 테이블의 동작 방식도 동일하다.

다만, 주소의 앞 비트들은 페이징 번호가 아니라 세그멘트 번호가 된다. <sefment, offset> 형태로 구성되며, 세그멘트 번호를 통해 세그멘트의 기준(세그멘트의 시작 물리 주소)와 한계(세그멘트의 길이)를 파악할 수 있다.

세그멘테이션 장단점

1) 장점
내부 단편화 문제 해소
=> 보호와 공유 기능 수행 가능하다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고, 같은 코드 영역은 한 번에 저장할 수 있다.

2) 단점
외부 단편화 문제가 발생할 수 있다.


3. Segfault

Segmentation fault란?
프로그램이 동작 중 잘못된 주소를 참조 할 때 발생하는 오류이다.

 

발생 조건은?
>> 읽기 전용 메모리 영역에 데이터를 쓰려고 할 때
>> 운영 체제 메모리 영역 또는 보호된 메모리 데이터를 쓰려고 할 때
>> 잘못된 메모리 영역을 접근 하려고 할 때
      : NULL, -1, ..

 

segfault 커널 메시지 관련하여 리눅스 프로그램에서 발생하는 에러 코드 정리

https://utcc.utoronto.ca/~cks/space/blog/linux/KernelSegfaultErrorCodes

segfault가 발생 시 발생하는 에러 메시지

dmesg -T 명령어를 수행할 때 시간을 보여준다.

 

더욱 자세한 원인을 파악하기 위해 gdb 등의 디버거 툴로도 확인이 가능할 것으로 보인다.

 

error 14?

- error 14: attempt to execute code from an unmapped area.
    This is the sign of trying to call through a mangled function pointer (or a NULL one), or perhaps returning from a call when the stack is in an unexpected or corrupted state so that the return address isn't valid. One source of mangled function pointers is use-after-free issues where the (freed) object contains embedded function pointers.
    (Error 14 with a faulting address of 0 often means a function call through a NULL pointer, which in turn often means 'making an indirect call to a function without checking that it's defined'. There are various larger scale causes of this in code.)
    
- error 14
    : 매핑되지 않은 영역에서 코드 실행을 시도합니다.
    이것은 망가진 함수 포인터(또는 NULL 포인터)를 통해 호출을 시도하거나 스택이 예기치 않거나 손상된 상태에 있을 때 호출에서 반환하여 반환 주소가 유효하지 않다는 신호입니다. 맹글링된 함수 포인터의 소스 중 하나는 (해제된) 객체에 포함된 함수 포인터가 포함되어 있는 use-after-free 문제입니다.
    (오류 주소가 0인 오류 14는 종종 NULL 포인터를 통한 함수 호출을 의미하며, 이는 종종 '함수가 정의되었는지 확인하지 않고 간접적으로 호출'을 의미합니다. 코드에서 이에 대한 다양한 대규모 원인이 있습니다. )

 

가볍게 dmesg 명령어를 통해 왜 프로세스가 죽었는지, 각 개념에 대한 정의 및 dmesg 출력에서 각 어떤 것들을 의미하는지 알아보았다.

 

추후 유사한 문제가 발생할 때 좀 더 파악해볼 생각이다.

 

 

 

 

 

반응형