물리 메모리 관리

메모리 관리

 

폰노이만 구조에서 메모리는 유일한 작업 공간이며 모든 프로그램은 메모리에 올라와야 실행할 수 있다.

 

메모리는 1바이트 크기로 나뉜다. 1바이트마다 주소가 주어지며 0번지부터 시작한다.

메모리에 있는 데이터가 cpu로 오기까지 과정은 다음과 같다.

접근하려는 메모리 주소를 메모리 주소 레지스터에 저장한다.

주소가 버스를 통해 메모리에 전달되면 해당 주소의 값을 버스를 통해 메모리 버퍼 레지스터로 보낸다.

 

운영체제를 포함하여 여러 작업을 동시에 처리할 때, 메모리를 관리하는 시스템을 메모리 관리 시스템(MMS)라고 한다.

 

소스코드의 번역과 실행

 

컴퓨터에서 작동하는 응용 프로그램은 프로그래밍 언어로 만들며, 실행 가능한 코드로 변경한다.

언어 번역 프로그램은 고급언어로 작성한 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한다.

대표적으로 컴파일러와 인터프리터가 있다.

컴파일러는 소스 코드를 기계어로 한번에 번역한다. 반면에 인터프리터는 소스 코드를 한 줄씩 번역한다.

 

컴파일러 방식

심벌 테이블을 사용하여 소스 코드에서 오류를 발견할 수 있다. 

심벌 테이블이란 변수 선언부에 명시한 각 변수의 이름과 종류를 모아놓은 테이블이다.

또한, 소스 코드를 최적화한다. 반복되는 구문을 한번에 처리하고 사용하지 않는 변수를 삭제한다.

 

컴파일 과정

컴파일러는 오류를 점검하고 최적화를 한다.

이렇게 생성된 코드가 목적 코드이고 기계어로 구성된다. 하지만 실행할 수 있는 기계어 코드랑은 차이가 있는데,

외부 컴파일에 의해 생성된 코드와 연결해야 하기 때문이다. 대표적으로 라이브러리를 목적 코드에 삽입하여 최종 실행 파일을 만든다.

 

오늘날의 프로그래밍에서는 라이브러리 구문을 비워놓고 컴파일한 이후에 비워둔 실행코드를 라이브러리에서 가져와 실행한다.

이렇게 실행할 때 삽입하는 함수를 가진 라이브러리를 동적 라이브러리라고 한다.

 

메모리 관리 작업

 

메모리 가져오기, fetch

실행할 프로세스와 데이터를 메모리로 가져오는 작업이다.

 

메모리 배치, placement

가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업이다.

메모리를 같은 크기로 자르는 것을 페이징이라 하고, 프로세스에 맞춰 자르는 것을 세그멘테이션이라고 한다.

 

메모리 재배치, replacement

새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업을 재배치 작업이라고 한다.

사용하지 않은 프로세슬르 찾아서 내보내는 알고리즘을 교체 알고리즘이라고 한다.

 

메모리 주소

 

메모리에 접근하기 위해서 주소를 사용한다.

메모리 주소는 물리 주소논리 주소(가상 주소)로 나뉜다.

 

cpu bit는 cpu가 한 번에 다룰 수 있는 데이터의 최대 크기를 의미한다.

cpu 내부 부품은 모두 이 비트를 기준으로 제작되기 때문에

만약 cpu가 32bit라면, 메모리 주소 버퍼 레지스터도 32bit이기 때문에 메모리로 사용할 수 있는 최대 공간이 약 4GB이다.

 

메모리의 주소 공간을 하드웨어 입장에서 바라보면 물리 주소 공간(physical address space)이라고 한다.

반대로 사용자 입장에서 바라본 주소를 논리 주소 공간(logical address space)라고 한다.

 

논리 주소와 물리주소

 

우선, 메모리 구조를 통해 메모리 관리를 설명하자.

위 그림에서 주목해야할 부분은 kernel space와 user space이다.

운영체제는 시스템을 관리하는 중요한 역할을 하기 때문에 사용자가 침범할 수 없도록 영역을 분리하여 관리한다.

그 영역이 위 그림의 kernel space이다.

 

물리 주소는 하드웨어 관점에서 바라본 주소로, 램 메모리의 실제 주소를 가리킨다. 프로그램이 실행될 때마다 매번 바뀐다.

논리 주소는 항상 0번지부터 시작하며 컴퓨터가 허용하는 최대의 주소 크기를 가진다.

그리고 프로세스를 실행하면 논리 주소를 사용하기 때문에, 물리 주소로 변화하는 작업이 필요하다.

메모리 관리 유닛이 담당하며, cpu 안에 존재하고 프로세스가 논리 주소에 접근할 때마다 물리 주소로 변환한다.

 

출처

 

쉽게 배우는 운영체제 2판 - 한빛아카데미

https://stackoverflow.com/questions/55443733/linux-kernel-memory-layout

'컴퓨터과학' 카테고리의 다른 글

[운영체제] 페이징 (2)  (0) 2024.03.17
[운영체제] 페이징 (1)  (1) 2024.03.16
[전공 복습] 3. 데이터베이스  (0) 2024.03.13
[전공 복습] 2. 네트워크  (1) 2024.03.13
[전공 복습] 1-2. 운영체제  (1) 2024.03.13