개념공부/컴퓨터구조와 운영체제
06장 - 2 : 메모리의 주소 공간
Cadi
2025. 4. 14. 19:56
목표 : 주소의 종류인 물리 주소 & 논리 주소의 학습
명령어의 주소에는 물리 주소와 논리 주소가 있다.
물리 주소 & 논리 주소
물리 주소 ( Physical Address)
- 실제 메모리 하드웨어 (주기억장치,RAM 등)가 사용하는 주소표 : 주소의 종류인 물리 주소 & 논리 주소의 학습
- 메모리 셀에 실제로 접근할 때 사용되는 주소
- 사용자가 직접 보는 것이 아닌, 시스템 내부에서 사용
논리 주소 (Logical Address)
- CPU와 실행중인 프로세스(프로그램)가 사용하는 주소
- 일반적으로 0번지부터 시작함
- 사용자가 프로그래머가 직접 보게 되는 주소
- 가상 주소 (Virtual Address)라고도 부름
왜 두 개의 주소를 사용할까 ?
- 운영체제는 여러 개의 프로그램(프로세스)을 동시에 메모리에 적재해야 한다.
- 각 프로그램이 자신만의 0번지부터 시작하도록 해서 충돌을 피해야 한다.
- 실제 메모리의 주소는 실행될 때마다 다르므로, 프로그램은 논리 주소만 알면 되고, 실제 위치는 운영체제가 변환하여 알려준다
주소를 변환하는 방법은 ?
- MMU(Memory Mange Unit) 를 사용해서 베이스 레지스터의 값과 논리 주소의 값을 더해서 메모리 상의 물리 주소를 구한다.
- 예시 ) 베이스 레지스터 : 1000 / 논리 주소 : 004 > > > 물리 주소 : 1004
메모리 보호 기법
- 실행 중인 프로그램이 자신의 주소 영역을 벗어난 값을 수정하게 된다면 오류가 발생할 수 있음
- MMU는 한계 레지스터를 사용하여 허용된 최대 주소 범위를 지정
- CPU가 접근하려는 주소가 이 범위를 벗어나면 인터럽트(예외)를 발생시켜 차단
질문 : 한계 레지스터, 베이스 레지스터는 언제 저장되는 것인가 ?
만일 0번지에서 MMU의 한계 레지스터/베이스 레지스터를 저장한다면
여러 프로그램이 동시에 실행될 때, 그 값이 다른 값으로 변해 제대로 된 동작이 되지 않을것 같았다.
그렇다고 명령어 혹은 메모리에 저장되는 것은 매우 비효율적인 방법인 것 같아서 어떻게 효율적으로 처리하고 있는지 궁금했다.
찾아보니 베이스 레지스터, 한계 레지스너는 하드웨어 레지스터로써 각 프로세스가 실행되기 전에
운영체제(OS)가 해당 프로세스 전용 값들을 이 레지스터에 로드(적재) 한다.
운영체제가 문맥 교환(Context switch) 시, 현재 실행할 프로세스에 맞게 레지스터를 교체한다.