컴퓨터 시스템의 메모리는 실제로 여러 셀
이라는 많은 작은 단위로 구성된다.
각 셀들은 고정된 양의 데이터를 저장 할 수 있으며 고유한 주소로 식별된다.
고유한 주소로 식별되는 셀에 저장된 데이터를 컴퓨터 프로세서는 셀에 담긴 값ㅂ을 빠르게 조회 할 수 있다.
표준 메모리 셀의 기본 크기는 1 byte (8 bit)
로 한 셀에 256개의 다른 값을 저장하는 것이 가능하다.
각 셀들은 1 byte
단위로 고유한 주소를 가지고 있음며 1 byte
단위로 값들을 저장한다.
메모리의 주소들은
1byte
단위로 구성되지만
1byte
이상의 값들도 연속된 메모리 공간에 저장함으로서 많은 용량의 값도 메모리에 저장 할 수 있다.마찬가지로 프로세스에서도
1byte
의 값만 메모리에서 조회가능한 것이 아닌 더 많은 값을 조회하는 것도 가능하다.
종종 운영체제나 프로세스를 다운받다 보면 32비트 , 64 비트 프로세스 등에 대한 이야기가 나올 때가 있다.
이는 각 프로세스가 지정 , 조회 할 수 있는 메모리 주소의 범위를 의미한다.
32비트 프로세스는 메모리의 주소를 32비트를 이용해 조회한다는 것을 개의 메모리 주소를 조회하는 것이 가능하다.
이는 약 4GB
의 메모리 용량까지 사용이 가능하단 것이고
64비트는 개의 메모리 주소를 조회하는 것이 가능한 것으로 엄청나게 많은 용량의 메모리가 호환 가능하단 것을 의미한다.
메모리의 기본 구성 정리
- 메모리는
1 byte
단위로 고유한 주소를 갖는 셀들의 연속적인 배치로 이뤄져있다.- 각 셀들은 고유한 주소를 갖기 때문에 프로세스들은 메모리의 주소들만을 이용해 안에 담긴 값을 빠르게 조회하는 것이 가능하다.
- 셀의 기본 데이터 저장 단위는
1byte
이지만 연속적인 공간이기 때문에1byte
이상의 값들 (여러 개의 셀)을 조회하는 것도 가능하다.- 프로세스가
32bit , 64bit
라는 것은CPU
에서 메모리의 주소를 저장, 조회하기 위한 용량이다.32bit
프로세스는 ,64bit
프로세스는 개의 메모리 주소를 조회 가능하다.
Memory Allocation
메모리의 기본 구성을 알아봤으니
메모리의 셀 공간들에 어떻게 데이터를 할당하는지 알아보자
메모리 할당 (Memory Allocation
) 에는 두 가지 방법이 있는데 이번에는
Continuouus memory allocation
, 연속적 데이터 할당에 대해서만 알아보도록 하자
연속적 데이터 할당은 메모리에 올리고자 하는 데이터를 연속된 메모리 공간에 할당하는 정책을 의미한다.
예를 들어 10 byte
의 데이터를 메모리에 할당시키고자 한다면
메모리 주소가 0번인 셀부터 10 byte
만큼의 공간에 해당 데이터를 할당 시키는 방법을 의미한다.
프로세스가 실행되기 위해선 메인 메모리에 프로세스가 할당 되어야 CPU
에서 실행이 가능하다.
그럼 프로세스가 메모리에 연속적으로 할당되는 경우들을 살펴보자
Uni-programming
Uni-programming
은 한 메모리 당 하나의 프로세스만 올라가는 것을 의미한다.
Uni-programming
방식은 메모리의 용량이 매우 작아서 한 메모리 당 여러 프로세스를 올리지 못하는 경우나
특수 단일적인 목적으로 만들어진 하드웨어가 아닌 이상 잘 사용되지 않는 프로그래밍 방식이다.
요즘 시대에 큰 용량의 메모리에 하나의 프로세스만 올리는 것은 비효율적이기 때문이다.
다만 해당 프로그래밍 방식은 메모리의 용량이 프로세스의 용량보다 크기만 하다면
다른 문제는 신경쓰지 않고 빠르게 프로세스를 실행하는 것이 가능하단 장점이 있다.
만약 프로세스의 용량이 메모리 용량보다 커 메모리에 적재가 안되는 경우에는
Oberlay structure
방식이라고 프로세스에서 공통된 로직만을 메모리에 적재하고
현재 사용해야 하는 부분만 메모리에 할당 , 사용이 종료되면 메모리에서 제거 하는 등의 방식을 통해 실행시키는 것이 가능하다 .
메모리에는 프로세스가 할당될 영역외에도 커널이 차지하고 있는 영역도 존재하기 때문에
커널 영역을 침범하지 않도록 Boundary register
를 둬 프로세스가 바운더리 레지스터 이상을 침범하지 않는 영역까지만 할당되도록 한다.
Multi-programming
멀티 프로그래밍 방식은 메모리에 여러 프로세스들을 올리는
요즘 시대에 가장 적합한 프로그래밍 방식이다.
현재는 Multi-programming
방식을 Continuous Allocation
방식으로 공부하고 있으니
여러 프로세스들을 메모리 공간에 연속적으로 배치하는 2가지 경우를 살펴보자
Fixed(static) partition multi-programming (FPM)
FPM
방식은 메모리를 여러 용량 별로 파티션을 정적으로 나눠두고
프로세스가 메모리에 할당 될 때 적절한 파티션에 해당 프로세스를 파티션에 할당한다.
파티션 별 프로세스들은 파티션 테이블이나 스테이트 테이블을 통해 관리되며
해당 테이블을 통해 운영체제는 각 프로세스가 어느 메모리 영역에 적재되어 있는지 확인한다.
각 파티션 별로 바운더리 레지스터를 둠으로서
프로세스들이 메모리의 커널 영역이나, 다른 프로세스의 영역을 침범하는 것을 막는다.
Fagmentation
(단편화)Fragmentation
은 Memory Allocation
을 하다보면 발생할 수 있는 문제들이다.
Internal fragmentation , External fragmentation
두 가지 종류가 있다.
Internal fragmentation
내부 단편화는 Partition
크기가 Process
의 크기보다 작을 때 발생한다.
예를 들어 파티션의 크키가 10MB
일 때 적재된 프로세스의 크기가 6MB
라면 4MB
만큼의 메모리 용량이 단편화되어
사용되지 못하고 낭비된다는 것이다.
External fragmenation
외부 단편화는 Internal fragmentation
들과 남은 메모리들의 총 합을 의미한다.
위 예시에서는 내부 단편화로 인해 24MB
만큼의 메모리 용량이 남아있고 상위 파티션에 20MB
의 용량이 남아있을 때
크기가 21MB
인 프로세스가 메모리에 적재되고자 할 때 연속된 공간이 그만큼 남아있지 않아 적재 될 수 없다.
이처럼 외부 단편화는 남은 메모리 용량의 공간이 프로세스의 용량보다 큼에도 불구하고 메모리에 적재할 수 없는 상황을 의미한다.
Fixed Partition Multi programming
정리미리 파티션의 용량을 구획해두는
FPM
방식은 메모리 관리가 간편하다는 장점이 있지만
Fragmentation
등과 같은 시스템 자원이 낭비 될 수 있다는 단점이 있다.