메이쁘

[OS - Memory] 2020.11.20. 오늘의 면접 Q&A 본문

면접 대비 CS지식/SELF CS면접 Q&A

[OS - Memory] 2020.11.20. 오늘의 면접 Q&A

메이쁘 2020. 11. 21. 00:43

안녕하세요.

 

CS관련 질문과 면접에 맞는 답변을 작성하면서 지식도 쌓고 면접도 대비하는 시간을 가지려고 합니다.

 

 

틈틈히 게시글을 작성하며 면접 대비 데이터셋을 확보해둔 다음

 

언젠간 면접하게 될 때 모아서 쓰려고 합니다.

 

(실제로 면접에서 들었던 질문이 아니라, 제가 스스로 답을 정해놓고 짜논 질문이라 이렇게 안나올 수 있습니다!!!)

 

 

 

이번 글은 OS - Memory 카테고리 입니다.

 

 

 

 

  -- 질문 목록

 

Q1.  메모리 단편화(Fragmentation) 가 무엇인가요?

Q2.  외부 단편화와 내부 단편화는 무엇을 뜻하나요?

Q3.  외부 단편화를 해결하는 페이징(Paging) 기법에 대해 설명해보세요.

Q4.  내부 단편화를 해결하는 세그멘테이션(Segmentation) 기법에 대해 설명해보세요.


Q1.  메모리 단편화(Fragmentation) 가 무엇인가요?

 

A.  메모리 단편화는, 메모리(RAM)의 공간이 여러 작은 공간으로 나뉘어져 사용되는 바람에 전체로 봤을 때 충분히 사용 가능한 메모리가 있음에도 불구하고 할당을 못하는 상태를 말합니다.

 

 

 

 

Q2.  외부 단편화와 내부 단편화는 무엇을 뜻하나요?

 

A.  외부 단편화는 메모리 단편화의 의미와 비슷한데요. 메모리 할당 / 해제 작업이 계속 진행될 때, 중간중간 사용 가능한 공간이 많이 존재해서 전체적으로 사용 가능한 메모리의 양은 충분하나 실제로 메모리를 할당할 수 없는 상태 를 말합니다.

 

예를 들어, 아래와 같이 메모리가 존재한다고 가정합니다.

메모리의 총량은 50K, 각 10K의 메모리를 소비하는 작업이 4개 가동중이므로

사용 가능한 메모리 총량은 10K가 되지만,

새로 요청하는 작업의 메모리는 5K로 작업을 가동시키기에는 5K의 공간이 없기 때문에 해당 작업을 수행하지 못하게 됩니다.

 

제가 직접 그렸습니다..

 

내부 단편화는 메모리를 할당하는 최소 블록의 크기에 비해 작업에 필요한 메모리의 양이 작은 경우, 남은 공간이 생겨 메모리를 낭비하게 되는 상황을 가리킵니다.

 

예를 들어, 어떤 작업을 위해 10K의 메모리를 할당해줬는데, 해당 작업이 실제 7K만 사용한다면 3K의 메모리 공간이 그저 낭비되고 있습니다. 이걸 모으면 충분한 메모리 양이 생기지만, 그러지 못하게 되는 상황을 가리킵니다.

 

 

 

 

Q3.  외부 단편화를 해결하는 페이징(Paging) 기법에 대해 설명해보세요.

 

A.  우선, 프레임과 페이징에 대해 설명드리겠습니다. 프레임이란 RAM(물리메모리) 를 일정한 크기의 블록으로 나눈 것 을 뜻하고, 페이징논리메모리 또는 가상메모리를 일정한 크기의 블록으로 나눈 것 을 뜻합니다.

 

이렇게 프레임과 페이징에 대해 설명드린 이유는 페이징 기법에 사용되기 때문입니다. 페이징 기법이란 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법입니다. 

이렇게 하기 위해선 프레임과 페이징을 연결해야하는데, 이러한 Page Mapping에 사용하려고 Page Table을 만듭니다.

 

이러한 페이징 기법을 사용하게되면 연속적이지 않은 공간도 연속적으로 활용할 수 있기 때문에 위의 외부 단편화 문제점을 해결할 수 있습니다. 만약 페이지 단위를 작게 하면 내부 단편화 문제도 해결할 수 있지만, 그만큼 Mapping 과정 또한 늘어나기 때문에 Trade-Off 가 발생할 수 있습니다.

 

*** 이러한 페이지 기법의 과정은 다른 게시글에서 다루겠습니다..

 

페이징 기법 (출처 : https://sycho-lego.tistory.com/10?category=628349)

 

 

 

 

Q4.  내부 단편화를 해결하는 세그멘테이션(Segmentation) 기법에 대해 설명해보세요.

 

A.  페이징 기법은 주로 가상 메모리를 물리적으로 일정한 크기의 단위로 분할하였지만, 세그멘테이션 기법가상 메모리를 서로 크기가 다른 세그멘트(Segment)를 논리적 단위로 분할해 사용하는 기법 입니다.

 

페이징 기법과 마찬가지로 세그먼트 테이블이 존재하는데, 이 세그먼트 테이블에는 세그먼트 번호, 시작주소, 세그먼트 크기가 들어있습니다. 

 

그래서 CPU가 세그먼트 테이블에게 테이블 번호, 사용할 메모리 크기를 전달하면, 세그먼트 테이블은 메모리로 가서 해당 테이블 번호의 base(시작주소) 와 limit(세그먼트 크기) 를 비교하여 limit보다 메모리 공간이 작으면 인터럽트를 발생시켜 해당 프로세스를 강제 종료합니다.

 

이러한 세그멘테이션 기법보다는 페이징 기법을 대부분 사용하는데요. 그 이유는 세그멘테이션 기법 또한 크기가 다양한 만큼 다양한 공간이 생기기 때문에 그만큼 메모리 낭비가 존재하기 때문입니다.

 

 

세그멘테이션 기법 (출처 : https://velog.io/@codemcd)

 

 

 

 

이상입니다.

 

감사합니다!

 

Comments