메인 메모리는 CPU가 직접 접근할 수 있는 기억 장치
프로세스가 실행되려면 프로그램이 메모리에 올라와야 함
주소가 할당된 일련의 바이트들로 구성되어 있음
CPU는 레지스터가 지시하는대로 메모리에 접근하여 다음에 수행할 명령어를 가져옴
명령어 수행 시 메모리에 필요한 데이터가 없으면 해당 데이터를 우선 가져와야 함
이 역할을 하는 것이 바로 MMU.
어..? 근데 레지스터가 정확히 뭐야?
레지스터란?
컴퓨터 과학에서 레지스터는 컴퓨터의 중앙 처리 장치(CPU)의 일부인 빠른 저장 요소를 가리킵니다. CPU가 직접 처리할 수 있는 명령어나 데이터를 보유하도록 사용됩니다.
여러 종류의 레지스터가 있으며, 다음과 같습니다:
- 누산기 레지스터: 산술 및 논리 연산에 사용됩니다.
- 데이터 레지스터: 논리적 또는 산술 연산의 피연산자를 보유합니다.
- 주소 레지스터: 데이터 및 명령어의 메모리 주소를 보유합니다.
- 일반 목적 레지스터: 다양한 목적으로 사용됩니다.
- 명령 레지스터: 현재 실행되고 있는 명령을 보유합니다.
- 상태 레지스터 또는 플래그 레지스터: 프로세서의 상태를 나타냅니다. 예를 들어, 결과가 0, 캐리 또는 대출 등의 경우를 표시합니다.
각 레지스터에는 일정한 너비가 있으며, 이는 보통 비트로 측정됩니다. 레지스터의 너비는 CPU의 성능과 속도에 중요한 요소입니다. 예를 들어, 32비트 레지스터는 32비트의 데이터 또는 명령을 저장할 수 있고, 64비트 레지스터는 64비트를 저장할 수 있습니다.
고수준 프로그래밍 언어에서는 레지스터가 종종 추상화되지만, 어셈블리어 프로그래밍 및 CPU 자체의 설계에서는 레지스터의 사용과 기능이 중요한 고려사항입니다.
어셈블리어 프로그래밍이란?
어셈블리어(Assembly Language)는 컴퓨터 프로그래밍 언어 중 하나로, 기계어와 일대일로 대응되는 저수준 프로그래밍 언어입니다. 어셈블리어는 특정 컴퓨터 아키텍처에 대한 기계어 명령의 가독 가능한 표현을 제공하며, 메모리 주소 지정, 레지스터 사용, 명령어 세트 등과 같이 하드웨어와 매우 밀접한 작업을 수행하기 위해 사용됩니다.
어셈블리어
는 기계어 코드를 인간이 이해하기 쉬운 기호 및 단어로 변환하므로, 복잡한 시스템에서 성능을 최적화하거나 특정 하드웨어를 직접 제어해야 하는 경우 유용합니다.
논리 주소를 물리주소로 변환해 준다.
메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어임
메모리의 공간이 한정적이기 때문에, 사용자에게 더 많은 메모리를 제공하기 위해 '가상 주소 = (Logical address or Virtual address)'라는 개념이 등장 (가상 주소는 프로그램 상에서 사용자가 보는 주소 공간이라고 보면 됨)
가상주소 (MMU가 필요한 이유..!)
가상 주소(Virtual Address)는 가상 메모리 시스템에서 사용하는 주소입니다.
컴퓨터 시스템에서, 프로세스는 자신이 사용하는 메모리 공간을 주소를 통해 참조합니다.
그러나 가상 메모리 시스템에서는 각 프로세스가 자신만의 독립적인 가상 주소 공간을 가지고, 이 주소 공간을 통해 메모리를 참조하게 됩니다. 이 때 사용되는 주소가 가상 주소입니다.프로세스는 이 가상 주소를 통해 메모리에 접근하며, 이 가상 주소는 메모리 관리 유닛(Memory Management Unit, MMU)에 의해 실제 물리적인 메모리 주소로 변환됩니다. 이런 방식은 각 프로세스가 자신만의 독립적인 메모리 공간을 가진 것처럼 보이게 하므로, 프로세스 간 메모리 충돌을 방지하고 메모리 관리를 효율화하는 데에 큰 도움을 줍니다.
이 가상 주소에서 실제 데이터가 담겨 있는 곳에 접근하기 위해선 빠른 주소 변환이 필요한데, 이를 MMU가 도와주는 것
즉, MMU의 역할은 다음과 같다고 말할 수 있다.
MMU가 지원되지 않으면, physical address를 직접 접근해야 하기 때문에 부담이 있다.
MMU는 사용자가 기억장소를 일일이 할당해야 하는 불편을 없애준다.
프로세스의 크기가 실제 메모리의 용량을 초과해도 실행될 수 있게 해준다.
또한 메인 메모리의 직접 접근은 비효율적이므로, CPU와 메인 메모리 속도를 맞추기 위해 캐시가 존재함
프로세스는 독립적인 메모리 공간을 가져야 되고, 자신의 공간만 접근해야 함
따라서 한 프로세스에게 합법적인 주소 영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호함
base와 limit 레지스터를 활용한 메모리 보호 기법
base 레지스터는 메모리상의 프로세스 시작주소를 물리 주소로 저장
limit 레지스터는 프로세스의 사이즈를 저장
이로써 프로세스의 접근 가능한 합법적인 메모리 영역(x)은
base <= x < base+limit
이 영역 밖에서 접근을 요구하면 trap을 발생시키는 것
안전성을 위해 base와 limit 레지스터는 커널 모드에서만 수정 가능하도록 설계 (사용자 모드에서는 직접 변경할 수 없도록)