주소 공간

컴퓨팅에서 주소 공간(住所 空間)은 물리 메모리나 가상 메모리, 레지스터, 네트워크 호스트, 주변 기기, 디스크 섹터, 다른 논리적 실체나 물리적 실체에 대응되는 주소의 범위를 정의한 공간을 말한다. IANA는 수많은 다양한 레지스트리들을 할당함으로써 이들이 각각 고유의 특정한 주소 공간을 관리할 수 있게 한다.

메모리 주소는 컴퓨터 메모리의 물리 위치를 파악하며, 데이터가 저장되는 위치를 가리킨다. 이러한 주소는 마을의 거리 주소와 비슷하다. 집주소에 빗대어 볼 때, 주소 공간은 이웃, 마을, 도시, 국가와 같은 위치의 지역이 될 수 있다. 두 개의 주소가 숫자로 볼 때는 같지만 소속된 주소 공간이 다른 경우에는 다른 위치를 일컫는다. 이를테면, 어느 한 사람의 집 주소가 "32번지"일 때, 다른 마을이나 국가에 사는 다른 사람의 집 주소도 "32번지"일 수 있다.

프로세스와 주소공간 

일반적으로 운영 체제는 하나의 프로세스에 대하여 하나의 주소공간을 제공하며, 프로세스 내의 사용자 스레드들은 주소공간을 공유한다.

C/C++ 등으로 프로그램을 하고 컴파일 과정과 링크되면 실행 파일이 만들어진다. 실행 파일의 메모리 맵은 데이터 특성에 따라 나누어 저장되어 실행되도록, 그리고 하나의 메모리 공간이라고 규정하고 차례로 배치된다. OS에 의해 메모리에 적재되어 실행이 되려면 우선 해당 메모리의 공간을 할당 받고 적재되어야 한다. 메모리 공간을 할당할 때, 메모리 자원을 할당하는 물리적 주소는 프로그램의 실행 파일에서 제시된 메모리 맵의 주소값과 다른것이 보통인데 이를 중개하는 것이 MMU이다. OS에 의해 할당된 물리적 주소는 전체 CPU 입장에서의 주소 공간이므로 프로세서의 논리 주소와는 액세스 단위로 변환이 이루어져야 하므로 논리회로에 의해 고속 변환이 이루어져야 한다. 그리고 한 개의 프로세스라도 물리적 메모리에 순차적으로 적재되지 않을 수 있다.

주소공간의 크기 

주소공간의 크기는 CPU(마이크로프로세서)의 주소 버스의 크기에 따라 결정된다. 만약 주소 버스가 32비트인 시스템에서는 개의 서로 다른 주소에 대한 식별자를 만들 수 있으므로 0부터 까지의 주소범위를 제공할 수 있다.

8비트 마이크로프로세서의 주소공간은 대부분 16비트를 갖는다. 액세스 단위는 8비트이다. 그러나 8비트 MCU의 많은 경우는 한개의 CPU 내에서도 8 또는 16비트의 주소 공간을 갖는다. 이런 주소 공간은 C 프로그램의 경우 구별할 수 있는 수단을 제공 하고, 개발자가 지정할 수가 있다.

주소 공간의 예 
 거리 주소의 주택 번호
 마을의 거리 주소
 메인 메모리
 가상 메모리
 입출력 포트 공간
 네트워크
 특히 IP 주소
 하드 드라이브의 실린더 헤드 섹터 구조
리눅스 커널의 경우 다음과 같은 예를 들 수 있다:
 커널 가상 주소 공간
 사용자 가상 주소 공간, copy_to_user(), copy_from_user()와 비슷한 기능을 통하여 커널이 접근함
 입출력 메모리, readb(), writel(), memcpy_toio()와 같은 것을 통해 접근

각주

같이 보기 
 가상 주소 공간

컴퓨터 메모리
컴퓨터 구조
공간