주소 지정이란 컴퓨터에서 데이터를 저장하거나 불러올 때, 데이터가 위치한 메모리의 주소를 지정하는 것입니다.
메모리는 일련의 바이트로 구성되어 있으며, 각 바이트에는 고유한 번호가 부여됩니다. 이 번호를 주소라고 합니다.
주소 지정에는 절대 주소 지정과 상대주소 지정 두 가지 방식이 있습니다.
절대 주소 지정은 데이터가 위치한 메모리의 실제 주소를 사용하는 방식입니다.
예를 들어, 데이터가 100번지에 저장되어 있다면, 100이라는 숫자를 사용하여 주소를 지정합니다.
상대주소 지정은 데이터가 위치한 메모리의 상대적인 위치를 사용하는 방식입니다.
예를 들어, 데이터가 현재 실행 중인 명령어의 다음 바이트에 저장되어 있다면, 1이라는 숫자를 사용하여 주소를 지정합니다.
운영체제에서 절대 주소 지정과 상대주소 지정을 하는 이유는 프로그램의 특성과 요구사항에 따라 적절한 메모리 관리 방법을 선택하기 위함입니다.
예를 들어, 실행 시간이 중요한 프로그램은 절대 주소 지정을, 메모리 공간이 중요한 프로그램은 상대 주소 지정을 사용할 수 있습니다.
사용자 입장에서 절대 주소를 사용하게 되면 불편하기도 하고 위험합니다.
절대 주소를 사용하게 되면 사용자 프로세스 입장에서는 운영체제 영역은 사용할 수 없는 공간이지만 매번 운영체제 영역을 확인해야 하는 불편함이 존재합니다.
상대 주소를 사용하면 운영체제 영역의 절대 위치를 알 필요가 없고 주소가 항상 0번지부터 시작하기 때문에 편리해집니다.
또한, 상대 주소를 사용하게 되면 사용자가 운영체제 영역의 주소를 실수나 고의적인 조작으로 접근할 수 있는 위험을 방지할 수 있습니다.
상대주소를 절대 주소로 변환하는 과정은 다음과 같습니다.
프로그램이 실행될 때, 운영체제는 프로그램의 시작 주소를 기억하는 레지스터인 베이스 레지스터(base register)에 값을 저장합니다.
이 값은 프로그램이 실제로 할당된 메모리의 시작 주소입니다.
프로그램이 상대주소를 사용하여 메모리에 접근하려고 할 때, 운영체제는 베이스 레지스터의 값과 상대주소를 더하여 절대 주소를 계산합니다. 이렇게 하면 프로그램은 실제 메모리의 올바른 위치에 접근할 수 있습니다.
프로그램이 종료되면, 운영체제는 베이스 레지스터의 값을 초기화하고, 다른 프로그램을 위해 메모리를 재할당합니다.
상대주소를 절대 주소로 변환하는 방법은 운영체제가 메모리를 효율적으로 관리하고, 다중 프로그래밍과 가상 메모리와 같은 기능을 구현할 수 있게 해줍니다.