프론트엔드 개발 블로그

[OS] 메모리 관련 면접 질문

by heeji_
 

기술면접 대비로 운영체제의 메모리 파트를 돌아보며 자주 물어보는 질문에 대한 답을 정리했습니다.

Q. 프로세스에 할당되는 메모리의 각 영역을 설명해보세요


  1. 코드 - 실행 파일을 구성하는 명령어들이 적재되는 메모리 영역 / 프로그램 소스 코드를 저장한다. 읽기 전용 영역이므로 프로세스가 함부로 변경할 수 없다.
  2. 데이터 - 프로그램에 필요한 전역변수, 정적변수를 저장한다.
  3. 스택 - 함수 호출에 필요한 스택 프레임과 지역변수를 저장한다. 스택은 각 프로세스가 메모리에 로드될 때 크기가 고정되어 런타임에 스택의 크기를 바꿀 수 없다. (컴파일 타임에 크기가 결정되는 것이다.)
  4. - 프로그래머가 관리하는 공간으로 메모리를 동적으로 할당하고 해제할 수 있다. c언어의 malloc()이나 calloc()에 의해 생성된 변수들이 이 곳에 할당된다.

+) 힙이 메모리의 낮은 주소부터 할당되고 스택은 높은 주소부터 할당된다. 그래서 각 영역이 상대 영역을 침범하는 일이 발생할 수 있다.

Q. 외부 단편화, 내부 단편화란?


  • 외부 단편화 - 메모리 중 사용하지 못하는 공간이 생기는 현상. 물리 메모리에서 사이에 남는 공간들을 합하면 충분한 공간이 되는 부분들이 흩어져있을 때 발생한다.
  • 내부 단편화 - 프로세스가 사용하는 메모리 공간 중 남는 부분이 발생하는 현상. A라는 프로세스에 100B를 할당했는데 실제로 A가 쓰는 공간이 80B라면 20B의 낭비가 발생한다.

Q. 페이지와 세그멘테이션에 대해 설명해보세요


Paging (페이징)

  • 페이지라는 고정 크기로 논리 메모리를 분리하고, 페이지와 같은 크기의 프레임으로 물리 메모리를 분리한다. 페이징을 사용하면 논리 메모리는 물리 메모리에 저장될 때, 연속적으로 저장될 필요가 없어 외부 단편화를 해결할 수 있다는 장점이 있다. 단점은 내부 단편화 문제의 비중이 늘어나게 된다는 것이다.

Segmentation (세그멘테이션)

  • 페이징과 다르게 서로 다른 크기의 논리적 단위인 세그먼트로 메모리를 분리한다. 세그먼트 테이블에는 각 세그먼트의 기준(시작 물리 주소)와 한계(길이)를 저장한다. 세그멘테이션을 사용하면 세그먼트들이 메모리에 할당되고 해제되는 과정에서 외부단편화가 발생한다. 자유 공간들이 많은 수의 작은 조각들로 나눠져 쓰지 못하게 될 수도 있기 때문이다.

Q. page fault는 무엇이고 이를 최소화할 수 있는 방법은?


프로그램의 페이지가 물리메모리에 부재 할 수있는데 이것을 페이지 폴트라고 한다. 페이지 폴트가 발생하면, 해당 페이지를 가상 메모리에서 찾아야한다. 이 때 이를 해결하는 과정을 요구 페이징 (Demand Paging)이라고 한다.

  1. CPU는 물리 메모리를 확인하여 페이지가 없으면 trap을 발생해 OS에 알린다.
  2. OS는 CPU의 동작을 잠시 멈춘다.
  3. OS는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단한다.
  4. 페이지 폴트이면, 현재 물리 메모리에 비어있는 프레임이 있는지 찾는다.
  5. 비어있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화한다.
  6. 중단되었던 CPU를 다시 시작한다.

Q. virtual address는 무엇인가?


  • 한 프로세스가 메모리에 저장되는 논리적인 모습을 가상 메모리에 구현한 공간이다. 현재 직접적으로 필요하지 않은 메모리 공간은 실제 물리 메모리에 올리지 않는다.

참고 링크프로세스 메모리 구조 운영체제 20장 - 메모리 관리(7) : 세그멘테이션(Segmentation)가상 메모리 요구 페이징(Demand Paging)

블로그의 정보

아자아자

heeji_

활동하기