프로그램 성능 최적화, 자원 활용도 향상, 시스템 안정성을 위해 효율적인 메모리 관리가 필요
프로세스와 메모리
프로세스의 실행과 관련된 메모리 관리는 시스템의 성능과 안정성을 결정하는 핵심적인 부분이다.
프로세스
실행 중인 프로그램을 의미하며 코드, 데이터 및 현재의 실행 상태(레지스터 값, 프로그램 카운터 등)를 포함한다.
여러 프로세스가 동시에 실행될 때 각 프로세스에게 충분한 메모리 공간을 제공하고, 다른 프로세스의 메모리 영역을 침범하지 않도록 보호하는 것이 중요하다.
메모리
고속의 저장 공간으로 프로세스는 주 메모리에 로드되어 실행 코드와 데이터를 저장한다.
운영체제는 메모리를 효율적으로 분배하고 관리하며, 필요에 따라 메모리를 할당/해제하는 역할을 한다.
메모리 영역 관리
시스템 안정성을 유지하기 위해 프로세스가 자신에게 할당되지 않은 메모리 영역에 접근하는 것을 방지해야 한다.
메모리 보호 및 주소 변환의 핵심적인 역할을 수행하기 위해 Base Register, Limit Register가 사용된다.
Base Register
프로세스에 할당된 메모리 영역의 시작 주소를 갖고 있다.
프로세스가 메모리에 접근할 때, 이 레지스터에 저장된 주소 값을 기준으로 메모리 접근을 시작하게 된다.
Limit Register
프로세스에 할당된 메모리 영역의 크기(또는 종료 주소)를 갖고 있다.
프로레스가 메모리의 어느 범위까지만 접근할 수 있는지를 나타낸다.
작동 원리
할당된 메모리 영역 범위 외에 프로세스의 비정상적인 접근이 감지되면 트랩(Trap)이 발생한다.
트랩이 발생되면 해당 프로세스는 중지되고 실행중인 프로세스의 상태와 정보는 PCB에 저장된다.
운영체제의 트랩 핸들러 또는 인터럽트 핸들러가 해당 상황을 처리하여 프로세스를 종료하거나 에러 메시지가 출력된다.
PCB(Process Control Block)
프로세서의 상태, 프로그램 카운터, CPU 레지스터들의 값, CPU 스케쥴링 정보, 메모리 관리 정보 등 프로세스에 관한 모든 정보를 담고 있는 구조체이다. Base Register와 Limit Register의 값도 PCB에 저장된다.
메모리 주소(Memory Address)
메모리 주소는 컴퓨터 메모리 내의 특정 위치를 참조하는 데 사용되는 숫자 값 또는 식별자이다.
메모리 주소는 논리적 주소(Logical Address)와 물리적 주소(Physical Address)로 분류할 수 있다.
논리적 주소(Logical Address)
프로세스의 관점에서 보는 메모리 주소로, 자체 주소 공간 내에서 데이터나 명령어를 참조한다.
물리적 주소(Physical Address)
메모리의 실제 위치를 나타내는 주소로, 데이터의 읽거나 쓸 때 이 주소를 사용한다.
주소 바인딩(Address Binding)
프로그램의 논리적 주소를 메모리의 실제 물리적 주소와 결합(Binding)하는 과정이 필요하다.
주소 바인딩은 프로그램의 여러 단계 및 시점에서 발생할 수 있다.
Compile Time Binding
프로그램이 컴파일될 때 실제 메모리 주소가 결정되는 방식으로, 메모리에서 실행될 위치를 미리 알고 있다는 것을 의미한다.
만약 프로그램이 실행될 예정인 시작 주소에 다른 프로그램이나 작업이 존재한다면, 프로그램은 다시 컴파일되어야 한다.
Load Time Binding
프로그램이 메모리에 로드될 때 실제 메모리 주소가 결정되는 방식이다.
컴파일 시점에서는 실제 메모리 주소를 알 필요가 없으며, 로더가 실행 시간에 실제 메모리 주소를 바인딩한다.
프로그램이 메모리 내의 어느 위치에든지 로드될 수 있으며, 로드될 때마다 다른 위치에 존재할 수 있다.
Execution Time Binding
프로그램이 메모리에서 실행되는 동안 바인딩이 이루어지는 방식으로, 주로 가상 메모리에서 사용된다.
프로그램은 가상 주소를 사용하여 실행되며, 이 가상 주소는 실행중에 MMU(Memory Management Unit)에 의해 실제 물리적 메모리 주소로 변환된다.
MMU(Memory Management Unit)
컴퓨터 하드웨어의 구성 요소로, CPU와 주 메모리 사이에서 주소 변환과 메모리 관리를 담당하는 역할을 한다.
MMU의 주요 목적은 논리적 주소를 물리적 주소로 변환하며, 이를 통해 프로세스들이 독립된 가상의 메모리 공간에서 실행될 수 있게 지원한다.