메모리 관리
메모리 관리는 컴퓨터 시스템의 주 기억 장치를 효율적으로 관리하는 프로세스를 말한다. 이는 운영체제의 중요한 기능 중 하나이며, 다양한 프로그램이 메모리에 효과적으로 할당되고 해제되어 시스템이 원활하게 동작할 수 있도록 보장한다.
프로세스의 주소 공간
각 프로세스는 자체의 가상 주소 공간을 가지먀, 이 주소 공간은 코드, 데이터 스택 등으로 나뉜다.
가상 주소 공간은 물리적인 메모리 주소와 매핑되어야한다.
- 코드 영역
- 프로그램 코드가 저장되는 부분으로, CPU에 직접 실행된다.
- 데이터 영역
- 전역 변수와 정적 변수가 저장되는 부분으로, 초기화된 데이터와 초기화되지 않은 데이터로 나뉜다.
- 스택 영역
- 함수 호출과 관련된 정보를 저장하는 부분으로, 후입선출 구조를 가지고 있다.
- 힙 영역
- 동적으로 할당된 메모리가 저장되는 부분으로, 프로그램이 실행 중에 동적으로 메모리를 할당하거나 해제할 때 사용된다.
위 영역들은 가상의 주소로 구성되어 있고, 운영체제의 메모리 관리 기능에 의해 물리적인 주소로 매핑된다.
주소 바인딩
프로그램이 메모리 상에서 실행될 때, 프로그램의 변수나 명령어가 실제 물리적인 메모리 주소에 어떻게 매핑되는지 결정하는 과정을 의미한다.
논리적인 주소 - CPU에 의해 생성된 가상의 주소
물리적 주소 - 논리적 주소에 대응되는 메모리 공간에서의 위치
주소 바인딩은 크게 3가지 유형으로 나뉜다.
- 컴파일 타임 바인딩
- 로드 타임 바인딩
- 런타임 바인딩
컴파일 타임 바인딩
- 컴파일러가 소스 코드를 기계어 코드로 변환하는 단계에서 변수와 주소가 결정된다. - 메모리 주소가 컴파일 시 결정된다.
- 프로그램이 메모리에 로드되기 전에 주소가 이미 알려져 있으므로 런타임에는 주소의 재할당이 발생하지 않는다.
- 현재 컴퓨터 상황을 파악하지 않고 물리적 주소를 사용하게 되면, 다른 프로세스가 할당되기 어려울 수 있다.
- 정적 바인딩이라고도 불린다.
로드 타임 바인딩
- 프로그램이 메모리에 로드되는 동안, 로더가 주소를 할당하는 방식이다.
- 컴파일 시간에는 상대적인 주소를 사용하고, 로더가 실제 메모리 주소를 반환한다.
- 실행 파일이 메모리에 로드되면 주소가 확정되고 런타임에는 재 할당이 없다.
- 프로그램 실행시마다 매핑을 하게 되면, 메모리를 로딩할 때 시간이 오래 걸린다.
런 타임 바인딩
- 프로그램이 실행되는 동안 변수와 주소가 동적으로 결정된다. - 실행 후에도 물리적 주소가 변경될 수 있다.
- 주로 동적 메모리를 할당하는 경우에 해당되며, 예를 들어 C언어의 'malloc'함수를 통해 메모리를 할당하는 경우가 이에 해당된다.
- 동적 바인딩이라고도 불린다.
컴파일 타임 바인딩과 로드 타임 바인딩은 정적인 바인딩의 한 형태이며, 런 타임 바인딩은 동적 바인딩의 한 형태이다.
연속 메모리 할당

- 프로세스가 실행되기 위해 필요한 메모리 공간을 연속적으로 할당하는 메모리 할당 방식을 의미한다.
- 프로세스가 하나의 연속된 메모리 블록에 적재된다.
- 주로 단일 프로그램이 메모리를 독점적으로 사용하는 경우나 다중 프로그래밍 환경에서 프로세스들이 서로 간섭하지 않는 경우에 사용된다.
- 단편화 문제를 낳게 된다.
연속 메모리 할당의 특징
- 단일 파티션 방식
- 전체 메모리를 하나의 파티션으로 나누고, 각 프로세스는 하나의 파티션에 할당된다.
- 하나의 프로세스가 메모리를 독점적으로 사용하는 방식이다.
- 프로세스 크기가 메모리 크기보다 작을 때 효율적이다.
- 다중 파티션 방식
- 메모리를 여러 개의 파티션으로 나누고, 각 파티션에 하나의 프로세스를 할당한다.
- 파티션의 크기는 일정하지 않을 수 있다.
- 외부 단편화 문제가 발생할 수 있다.
- 고정 분할
- 메모리를 사전에 정해진 크기의 고정된 파티션으로 나눈다.
- 각 파티션에 하나의 프로세스를 할당한다.
- 파티션 크기에 따라 메모리 낭비가 발생할 수 있다.
- 가변 분할
- 메모리를 동적으로 할당하여 파티션을 생성한다.
- 프로세스의 크기에 따라 파티션을 동적으로 조절할 수 있다.
- 외부 단편화 문제가 발생할 수 있다.
연속 메모리 할당은 간단하고 효율적이지만, 외부 단편화 문제와 프로세스 크기의 제한으로 인해 실제로는 사용이 제한적이다.
단편화
메모리 관리에서 발생하는 현상으로, 할당된 메모리 영역이 조각나거나 남아 있음에도 불구하고, 공간이 흩어져 있어 새로운 프로세스가 할당될 수 없는 상태를 의미한다.
주로 외부 단편화와 내부 단편화, 두 가지 유형으로 구분된다.
내부 단편화
- 남은 메모리 공간이 너무 작아 새로운 프로세스를 할당할 수 없는 상태이다.
- 메모리 블록 내에서 일부 공간이 사용되지 않고 남아 있는 경우 발생한다.
- 주로 동적 할당이나 가변 크기의 할당에서 발생한다. 예를 들어, 메모리 블록이 정해진 크기로 할당되는데 프로세스가 그 크기보다 작은 양만 사용하는 경우 내부 단편화가 발생할 수 있다.

외부 단편화
- 메모리가 해제되어 빈 메모리 공간이 있음에도, 새로운 프로세스를 할당할 수 없는 상태이다.
- 프로세스가 할당되고 해제됨에 따라서 발생할 수 있다.
- 외부 단편화는 프로세스들이 메모리에 적재되는 순서나 크기에 따라 발생하는데, 이로 인해 연속 메모리 할당에서 적재할 수 있는 프로세스의 크기가 제한될 수 있다.

단편화 해결 방법
단편화를 해결하기 위해서는 여러 가지 방법이 존재하는데, 주로 외부 단편화를 내부 단편화로 최소화하거나 완하 하기 위한 기법들이 사용된다.
페이징 (Paging)

- 메모리를 고정된 크기의 작은 블록으로 나누고, 프로세스는 이러한 단위로 할당된다.
- 페이지는 물리적 메모리에 연속적으로 위치하지 않아도 되기 때문에 외부 단편화 문제를 완화한다.
- 내부 단편화가 증가한다.
메모리 압축 (Memory Compaction)

- 메모리에서 사용 중인 영역과 비어있는 영역을 조정하여 단편화를 최소하하는 방법이다.
- 프로세스가 종료되거나 메모리가 해제될 때 비어 있는 영역을 묶어서 큰 연속된 공간을 만든다.
- 최초 적합(First fit) : 가장 먼저 발견한 공간에 메모리를 배치한다.
- 최고 적합(Best fit) : 빈 공간의 크기와 프로세스의 크기의 차가 가장 적은 곳에 배치한다.
- 최악 적합(Worst fit) : 빈 공간의 크기와 프로세스의 크기의 차가 가장 큰 곳에 배치한다.
- 메모리가 이동하는 과정에서 오버헤드가 일어날 가능성이 높다.
세그멘테이션 (Segmentation)

- 프로세스를 논리적인 단위로 나누어 메모리에 할당한다.
- 각 세그먼트는 크기가 다를 수 있으며, 세그먼테이션은 외부 단편화 문제를 해결하고 프로세스의 논리적 구조를 반영할 수 있다.
- 외부 단편화가 증가한다.
가상 메모리 (Virtual Memory)
- 프로세스는 물리적 메모리보다 큰 가상 주소 공간을 가지고 있다.
- 필요한 부분만 물리적으로 메모리에 로드되며, 가상 메모리를 통해 프로세스 간에 메모리를 공유하고 외부 단편화를 감소시킨다.
동적 할당 알고리즘 변경
- 메모리를 동적으로 할당하는 알고리즘을 최적화하여 단편화를 최소화한다.
- 앞서 이야기했던 메모리 압축 부분에서 나왔던 최적 적합, 최초 적합, 최악 적합과 같은 할당 전략이 포함된다.
'Theory' 카테고리의 다른 글
HTTP란 무엇인가? (0) | 2023.11.24 |
---|---|
웹 브라우저와 동작 원리 (1) | 2023.11.21 |
DNS 서버의 종류 (1) | 2023.11.11 |
DNS 개념과 동작 원리 (0) | 2023.11.10 |
인터넷은 어떻게 동작하는가? (1) | 2023.11.09 |
메모리 관리
메모리 관리는 컴퓨터 시스템의 주 기억 장치를 효율적으로 관리하는 프로세스를 말한다. 이는 운영체제의 중요한 기능 중 하나이며, 다양한 프로그램이 메모리에 효과적으로 할당되고 해제되어 시스템이 원활하게 동작할 수 있도록 보장한다.
프로세스의 주소 공간
각 프로세스는 자체의 가상 주소 공간을 가지먀, 이 주소 공간은 코드, 데이터 스택 등으로 나뉜다.
가상 주소 공간은 물리적인 메모리 주소와 매핑되어야한다.
- 코드 영역
- 프로그램 코드가 저장되는 부분으로, CPU에 직접 실행된다.
- 데이터 영역
- 전역 변수와 정적 변수가 저장되는 부분으로, 초기화된 데이터와 초기화되지 않은 데이터로 나뉜다.
- 스택 영역
- 함수 호출과 관련된 정보를 저장하는 부분으로, 후입선출 구조를 가지고 있다.
- 힙 영역
- 동적으로 할당된 메모리가 저장되는 부분으로, 프로그램이 실행 중에 동적으로 메모리를 할당하거나 해제할 때 사용된다.
위 영역들은 가상의 주소로 구성되어 있고, 운영체제의 메모리 관리 기능에 의해 물리적인 주소로 매핑된다.
주소 바인딩
프로그램이 메모리 상에서 실행될 때, 프로그램의 변수나 명령어가 실제 물리적인 메모리 주소에 어떻게 매핑되는지 결정하는 과정을 의미한다.
논리적인 주소 - CPU에 의해 생성된 가상의 주소
물리적 주소 - 논리적 주소에 대응되는 메모리 공간에서의 위치
주소 바인딩은 크게 3가지 유형으로 나뉜다.
- 컴파일 타임 바인딩
- 로드 타임 바인딩
- 런타임 바인딩
컴파일 타임 바인딩
- 컴파일러가 소스 코드를 기계어 코드로 변환하는 단계에서 변수와 주소가 결정된다. - 메모리 주소가 컴파일 시 결정된다.
- 프로그램이 메모리에 로드되기 전에 주소가 이미 알려져 있으므로 런타임에는 주소의 재할당이 발생하지 않는다.
- 현재 컴퓨터 상황을 파악하지 않고 물리적 주소를 사용하게 되면, 다른 프로세스가 할당되기 어려울 수 있다.
- 정적 바인딩이라고도 불린다.
로드 타임 바인딩
- 프로그램이 메모리에 로드되는 동안, 로더가 주소를 할당하는 방식이다.
- 컴파일 시간에는 상대적인 주소를 사용하고, 로더가 실제 메모리 주소를 반환한다.
- 실행 파일이 메모리에 로드되면 주소가 확정되고 런타임에는 재 할당이 없다.
- 프로그램 실행시마다 매핑을 하게 되면, 메모리를 로딩할 때 시간이 오래 걸린다.
런 타임 바인딩
- 프로그램이 실행되는 동안 변수와 주소가 동적으로 결정된다. - 실행 후에도 물리적 주소가 변경될 수 있다.
- 주로 동적 메모리를 할당하는 경우에 해당되며, 예를 들어 C언어의 'malloc'함수를 통해 메모리를 할당하는 경우가 이에 해당된다.
- 동적 바인딩이라고도 불린다.
컴파일 타임 바인딩과 로드 타임 바인딩은 정적인 바인딩의 한 형태이며, 런 타임 바인딩은 동적 바인딩의 한 형태이다.
연속 메모리 할당

- 프로세스가 실행되기 위해 필요한 메모리 공간을 연속적으로 할당하는 메모리 할당 방식을 의미한다.
- 프로세스가 하나의 연속된 메모리 블록에 적재된다.
- 주로 단일 프로그램이 메모리를 독점적으로 사용하는 경우나 다중 프로그래밍 환경에서 프로세스들이 서로 간섭하지 않는 경우에 사용된다.
- 단편화 문제를 낳게 된다.
연속 메모리 할당의 특징
- 단일 파티션 방식
- 전체 메모리를 하나의 파티션으로 나누고, 각 프로세스는 하나의 파티션에 할당된다.
- 하나의 프로세스가 메모리를 독점적으로 사용하는 방식이다.
- 프로세스 크기가 메모리 크기보다 작을 때 효율적이다.
- 다중 파티션 방식
- 메모리를 여러 개의 파티션으로 나누고, 각 파티션에 하나의 프로세스를 할당한다.
- 파티션의 크기는 일정하지 않을 수 있다.
- 외부 단편화 문제가 발생할 수 있다.
- 고정 분할
- 메모리를 사전에 정해진 크기의 고정된 파티션으로 나눈다.
- 각 파티션에 하나의 프로세스를 할당한다.
- 파티션 크기에 따라 메모리 낭비가 발생할 수 있다.
- 가변 분할
- 메모리를 동적으로 할당하여 파티션을 생성한다.
- 프로세스의 크기에 따라 파티션을 동적으로 조절할 수 있다.
- 외부 단편화 문제가 발생할 수 있다.
연속 메모리 할당은 간단하고 효율적이지만, 외부 단편화 문제와 프로세스 크기의 제한으로 인해 실제로는 사용이 제한적이다.
단편화
메모리 관리에서 발생하는 현상으로, 할당된 메모리 영역이 조각나거나 남아 있음에도 불구하고, 공간이 흩어져 있어 새로운 프로세스가 할당될 수 없는 상태를 의미한다.
주로 외부 단편화와 내부 단편화, 두 가지 유형으로 구분된다.
내부 단편화
- 남은 메모리 공간이 너무 작아 새로운 프로세스를 할당할 수 없는 상태이다.
- 메모리 블록 내에서 일부 공간이 사용되지 않고 남아 있는 경우 발생한다.
- 주로 동적 할당이나 가변 크기의 할당에서 발생한다. 예를 들어, 메모리 블록이 정해진 크기로 할당되는데 프로세스가 그 크기보다 작은 양만 사용하는 경우 내부 단편화가 발생할 수 있다.

외부 단편화
- 메모리가 해제되어 빈 메모리 공간이 있음에도, 새로운 프로세스를 할당할 수 없는 상태이다.
- 프로세스가 할당되고 해제됨에 따라서 발생할 수 있다.
- 외부 단편화는 프로세스들이 메모리에 적재되는 순서나 크기에 따라 발생하는데, 이로 인해 연속 메모리 할당에서 적재할 수 있는 프로세스의 크기가 제한될 수 있다.

단편화 해결 방법
단편화를 해결하기 위해서는 여러 가지 방법이 존재하는데, 주로 외부 단편화를 내부 단편화로 최소화하거나 완하 하기 위한 기법들이 사용된다.
페이징 (Paging)

- 메모리를 고정된 크기의 작은 블록으로 나누고, 프로세스는 이러한 단위로 할당된다.
- 페이지는 물리적 메모리에 연속적으로 위치하지 않아도 되기 때문에 외부 단편화 문제를 완화한다.
- 내부 단편화가 증가한다.
메모리 압축 (Memory Compaction)

- 메모리에서 사용 중인 영역과 비어있는 영역을 조정하여 단편화를 최소하하는 방법이다.
- 프로세스가 종료되거나 메모리가 해제될 때 비어 있는 영역을 묶어서 큰 연속된 공간을 만든다.
- 최초 적합(First fit) : 가장 먼저 발견한 공간에 메모리를 배치한다.
- 최고 적합(Best fit) : 빈 공간의 크기와 프로세스의 크기의 차가 가장 적은 곳에 배치한다.
- 최악 적합(Worst fit) : 빈 공간의 크기와 프로세스의 크기의 차가 가장 큰 곳에 배치한다.
- 메모리가 이동하는 과정에서 오버헤드가 일어날 가능성이 높다.
세그멘테이션 (Segmentation)

- 프로세스를 논리적인 단위로 나누어 메모리에 할당한다.
- 각 세그먼트는 크기가 다를 수 있으며, 세그먼테이션은 외부 단편화 문제를 해결하고 프로세스의 논리적 구조를 반영할 수 있다.
- 외부 단편화가 증가한다.
가상 메모리 (Virtual Memory)
- 프로세스는 물리적 메모리보다 큰 가상 주소 공간을 가지고 있다.
- 필요한 부분만 물리적으로 메모리에 로드되며, 가상 메모리를 통해 프로세스 간에 메모리를 공유하고 외부 단편화를 감소시킨다.
동적 할당 알고리즘 변경
- 메모리를 동적으로 할당하는 알고리즘을 최적화하여 단편화를 최소화한다.
- 앞서 이야기했던 메모리 압축 부분에서 나왔던 최적 적합, 최초 적합, 최악 적합과 같은 할당 전략이 포함된다.
'Theory' 카테고리의 다른 글
HTTP란 무엇인가? (0) | 2023.11.24 |
---|---|
웹 브라우저와 동작 원리 (1) | 2023.11.21 |
DNS 서버의 종류 (1) | 2023.11.11 |
DNS 개념과 동작 원리 (0) | 2023.11.10 |
인터넷은 어떻게 동작하는가? (1) | 2023.11.09 |