[OS] Operating System - Main Memory

2024. 2. 11. 20:17CS/OS

[OS] Operating System - Main Memory

 

이전까지 다룬 기존의 프로세스의 정의는 프로그램이 실행이 되는 것을 의미하며 이는 메인 메모리에 저장이 된 일련의 명령어 집합이다. 

 

이때 메모리는 각각의 고유한 주소를 가진 방대한 바이트 배열로 구성이 된다. CPU는 PC - 프로그램 카운터를 사용하여 메모리에서 명령어를 가져오며, 명령어는 메모리에서 데이터를 로드하거나 저장할 수 있다. 프로그램은 이러한 과정을 통해 실행이 되며 운영체제와 하드웨어의 상호작용을 나타내게 된다.

 

메모리 이미지

 메모리의 구조는 다음과 같다. 각각의 프로세스들은 메모리의 공간을 나눠서 존재하게 된다. 이때 base / limit 두 개의 레지스터를 사용하는 데 base 레지스터의 경우 프로세스의 메모리 공간의 시작 주소를, limit의 경우 프로세스가 접근할 수 있는 메모리 주소의 범위를 지정한다.


 이때 프로세스가 접근할 수 있는 메모리 주소를 넘어가게 되면 우리가 아는 segment exception이 발생하게 된다. CPU에서 메모리에 접근을 하려면 접근하려는 주소가 다음과 같은 조건을 통과하면 메모리에 접근을 하고, 실패를 하면 주소와 관련된 해당 에러들을 발생시킨다.

 

 

접근 과정

 

segment exception

 

 프로세스가 비허용된 메모리 구역에 접근할 때 발생하는 오류이다. 일반적으로 프로세스는 자신에게 할당되지 않는 메모리 영역에 접근하면 안되는데 해당 사항을 어기고 할당되지 않는 메모리 영역을 접근 및 할당, 참조를 할 때 발생한다. 해당 예외는 운영체제가 시스템의 안전을 보호하기 위해 발생시키는 것이며, 운영체제는 접근하는 프로세스를 중단시키고 오류 메시지를 보낸다. 


 

Address Binding

 프로그램의 변수나 명령어가 메모리 주소에 할당되는 과정을 의미한다. 

 

 프로그램은 처음에 디스크 상의 이진 실행 파일로 존재하는것에서 시작이 된다. 프로그램을 실행하기 위해서는 디스크에서 메모리로 실행파일을 가져와야 한다. 이때 프로세스의 주소는 00000000에서 시작되지는 않는다. 소스 코드 내의 주소는 일반적으로 정해진 주소가 아니다. 컴파일러는 정해진 주소가 아닌 symbolic 주소를 실제로 이동 가능한 주소로 바인딩 하는 작업을 수행한다. 또한 링커, 로더는 이동 가능한 주소를 절대 주소로 바인딩을 한다. 이러한 과정을 통해 프로그램은 디스크에 존재하던 이진 실행 파일에서 실제 메모리 주소에 할당되어 실행이 된다.

프로그램의 실행과정

 

논리적 주소 공간과 물리적 주소 공간

 

논리적 주소 공간

  • CPU에서 생성된 모든 논리적 주소의 집합
    • 논리적 주소는 프로그래밍 실행되는 동안 CPU에 의해 사용되는 주소
  • 사용자 프로그램에 의해 생성이 되며, 프로그램 내에서 사용되는 주소

물리적 주소 공간

  • 메모리 단위에 의해 인식되는 모든 물리적 주소의 집합
    • 물리적 주소는 실제 메모리 주소 레지스터에 로드되는 주소
  • 논리적 주소에 해당하는 실제 메모리의 위치를 나타낸다

MMU -  Memory Management Unit

 

논리적 주소를 물리적 주소를 물리적 주소로 매핑하는 하드웨어 장치이다. 프로세스가 생성한 가상 주소(논리적 주소)를 실제 메모리의 물리적 주소로 변환하는 역할을 수행하며, 해당 과정이 존재하기에 메모리 보호 및 가상 메모리 시스템의 구현이 가능하다. MMU는 효율적인 메모리 관리와 접근 제어를 가능하게 하여 시스템의 전반적인 성능과 안정성을 향상한다.

MMU