기술면접 대비로 운영체제의 메모리 파트를 돌아보며 자주 물어보는 질문에 대한 답을 정리했습니다.
Q. 프로세스에 할당되는 메모리의 각 영역을 설명해보세요

- 코드 - 실행 파일을 구성하는 명령어들이 적재되는 메모리 영역 / 프로그램 소스 코드를 저장한다. 읽기 전용 영역이므로 프로세스가 함부로 변경할 수 없다.
- 데이터 - 프로그램에 필요한 전역변수, 정적변수를 저장한다.
- 스택 - 함수 호출에 필요한 스택 프레임과 지역변수를 저장한다. 스택은 각 프로세스가 메모리에 로드될 때 크기가 고정되어 런타임에 스택의 크기를 바꿀 수 없다. (컴파일 타임에 크기가 결정되는 것이다.)
- 힙 - 프로그래머가 관리하는 공간으로 메모리를 동적으로 할당하고 해제할 수 있다. c언어의 malloc()이나 calloc()에 의해 생성된 변수들이 이 곳에 할당된다.
+) 힙이 메모리의 낮은 주소부터 할당되고 스택은 높은 주소부터 할당된다. 그래서 각 영역이 상대 영역을 침범하는 일이 발생할 수 있다.
Q. 외부 단편화, 내부 단편화란?
- 외부 단편화 - 메모리 중 사용하지 못하는 공간이 생기는 현상. 물리 메모리에서 사이에 남는 공간들을 합하면 충분한 공간이 되는 부분들이 흩어져있을 때 발생한다.
- 내부 단편화 - 프로세스가 사용하는 메모리 공간 중 남는 부분이 발생하는 현상. A라는 프로세스에 100B를 할당했는데 실제로 A가 쓰는 공간이 80B라면 20B의 낭비가 발생한다.
Q. 페이지와 세그멘테이션에 대해 설명해보세요
Paging (페이징)
- 페이지라는 고정 크기로 논리 메모리를 분리하고, 페이지와 같은 크기의 프레임으로 물리 메모리를 분리한다. 페이징을 사용하면 논리 메모리는 물리 메모리에 저장될 때, 연속적으로 저장될 필요가 없어 외부 단편화를 해결할 수 있다는 장점이 있다. 단점은 내부 단편화 문제의 비중이 늘어나게 된다는 것이다.
Segmentation (세그멘테이션)
- 페이징과 다르게 서로 다른 크기의 논리적 단위인 세그먼트로 메모리를 분리한다. 세그먼트 테이블에는 각 세그먼트의 기준(시작 물리 주소)와 한계(길이)를 저장한다. 세그멘테이션을 사용하면 세그먼트들이 메모리에 할당되고 해제되는 과정에서 외부단편화가 발생한다. 자유 공간들이 많은 수의 작은 조각들로 나눠져 쓰지 못하게 될 수도 있기 때문이다.
Q. page fault는 무엇이고 이를 최소화할 수 있는 방법은?
프로그램의 페이지가 물리메모리에 부재 할 수있는데 이것을 페이지 폴트라고 한다. 페이지 폴트가 발생하면, 해당 페이지를 가상 메모리에서 찾아야한다. 이 때 이를 해결하는 과정을 요구 페이징 (Demand Paging)이라고 한다.

- CPU는 물리 메모리를 확인하여 페이지가 없으면 trap을 발생해 OS에 알린다.
- OS는 CPU의 동작을 잠시 멈춘다.
- OS는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단한다.
- 페이지 폴트이면, 현재 물리 메모리에 비어있는 프레임이 있는지 찾는다.
- 비어있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화한다.
- 중단되었던 CPU를 다시 시작한다.
Q. virtual address는 무엇인가?
- 한 프로세스가 메모리에 저장되는 논리적인 모습을 가상 메모리에 구현한 공간이다. 현재 직접적으로 필요하지 않은 메모리 공간은 실제 물리 메모리에 올리지 않는다.
참고 링크프로세스 메모리 구조 운영체제 20장 - 메모리 관리(7) : 세그멘테이션(Segmentation)가상 메모리 요구 페이징(Demand Paging)
'개발일지' 카테고리의 다른 글
Vanilla JS 개발환경 세팅하는 법 (0) | 2024.03.22 |
---|---|
우당탕탕 React Hook 이해기 (useCallback, useMemo, useLayoutEffect) (0) | 2022.11.20 |
11월 1주~3주 회고 (0) | 2022.11.20 |
[Ottichu] 데이터 분석 프로젝트를 마치고 (0) | 2022.11.20 |
2021년 상반기 취업준비 후기 (0) | 2021.06.30 |