Q: 페이징에 대해서 설명해주세요.
A: 페이징은 물리적 메모리를 고정 크기의 페이지로 나누고 가상 메모리를 동일한 크기의 페이지로 분할하는 방식입니다. 가상 주소 공간은 페이지 번호와 오프셋으로 표현되며, 페이지 번호는 페이지가 물리 메모리에 어디에 위치하는지를 나타내고, 오프셋은 페이지 내에서 실제 데이터의 위치를 나타냅니다. 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제 해결할 수 있으나, 페이지의 크기가 클수록 내부 단편화가 커지는 단점이 있습니다.
Q: 세그먼테이션에 대해 설명해주세요.
A: 세그먼테이션은 가상 메모리를 논리적인 블록인 세그먼트로 나누는 방식입니다. 각 세그먼트는 다른 세그먼트와는 독립적으로 크기와 보호 속성을 가질 수 있으며, 프로세스의 주소 공간은 세그먼트 식별자와 오프셋으로 나타내집니다. 프로세스가 필요한 메모리 공간만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않지만, 중간에 메모리를 해제하면 생기는 외부 단편화 문제가 발생합니다.
Q: 그렇다면 외부 단편화와 내부 단편화는 무엇인가요?
A: 외부 단편화는 물리적 메모리 공간 내에서 사용 가능한 메모리 공간들이 작은 조각들로 나뉘어 있어, 큰 프로세스나 데이터를 할당하기 어렵게 만드는 현상을 말합니다. 메모리에 여유 공간이 있지만 그 공간이 연속적이지 않아서 큰 덩어리의 메모리를 할당할 수 없을 때 발생합니다.
반면에 내부 단편화는 할당된 메모리 덩어리 내에 사용되지 않는 공간이 존재하는 현상을 나타냅니다. 주로 고정 크기의 메모리 할당 단위를 사용할 때 발생하며, 할당된 메모리가 실제로 필요한 메모리보다 더 큰 경우에 발생합니다.
내부 단편화는 주로 고정 크기 할당을 사용하는 메모리 관리 기술에서 발생하며, 동적 메모리 할당에서도 발생할 수 있습니다.