본문 바로가기

프로그래밍/운영체제

[운영체제] Memory Management

메모리는 주소를 통해 접근을 하는 매체

 

메모리는 주소가 매겨진다.

주소의 종류가 2가지가 있다.

1.논리적인 주소

- 프로그램이 가지고 있는 독립적인 주소 공간

 

 

2.물리적인 주소

- 물리적인 메모리의 주소.

0번지부터 통으로 관리된다.

 

독자적인 주소공간들을 물리적인 메모리 어딘가로 옮겨가야되고 , 주소 변환이 일어난다. (주소 바인딩이라 한다)

 

주소 바인딩이 언제 일어나는가

 

3가지 주소 바인딩의 시점 그림

컴파일이 되어서 실행파일로 만들어지게 되면

Symbolic address 가 숫자로 된 주소로 변경되게 된다.

프로그램마다 가지고 있는 주소라 로지컬 어드레스가 된다.

 

이제 이게 실행이 되려면 물리적인 메모리로 올라가야한다.

이 물리적인 메모리로 올라가는걸 주소 바인딩이라 하는것

 

그 중 제일 위 컴파일 타임 바인딩은?

컴파일 시점에 이미 물리적인 메모리 주소가 결정되는것.

논리적인 주소가 이미 물리적인 주소로 결정된다.

- 굉장히 비효율적인 방법.

컴퓨터 1대에서 1개의 프로세스만 쓸때 사용되던 방법

 

두번째는 로드타임 바인딩 방법

프로그램이 실행되서 메모리에 올라갈때 

물리적인 메모리 주소가 결정.

메모리를 보니 500부터 비어있더라 하면, 0번을 500부터 올린다 는 방식

 

세번째는 런타임 바인딩 방법은?

로드 타임 처럼 실행시점에 결정되지만,

이 주소가 실행 도중에 바뀔수도 있다는것.

- 현재 컴퓨터들은 거의 다 런타임 바인딩을 지원한다.

 

 

CPU 가 물리주소를 볼 것 같지만 사실 물리주소를 보고있다.

 

실행파일을 만들게 되면 , CPU 가 인스트럭션들을 수행하려면?

컴파일된 코드 자체의 주소를 바꿀 수 없다.

물리 메모리에 올라가도 논리주소는 바뀌지 않는다.

 

 

런타임 바인딩을 하기 위해선 하드웨어 장치가 필요하다.

 

주소 변환용 하드웨어

리로케이션 레지스터와 리밋 레지스터로 주소 변환을 해준다.

프로세스 p1 의 0번지 부터 346번지 떨어진 명령어를 CPU 가 요청한 상황이다.

이 주소가 물리주소에서는 14000번째부터 올라가있는상황

주소변환을 어떻게 해주냐 하면

14000 물리주소의 시작번지부터 346번지를 더한 곳의 내용을 읽어서 CPU 에 갖다주면 된다.

리밋 레지스터에는 프로그램의 최대 크기 를 적어둔다.

- 다른 프로세스의 주소로 넘어가지 않도록 하기 위해서

 

용어 설명들을 봐보자

Dynamic  Loading

프로세스 전체를 메모리에 올리는게 아니라 , 동적으로 올리게 된다.

필요할때마다 메모리에 올리는 로딩작업

 

다이나믹 로딩과 내용은 거의 같다

다이나믹 로딩과 다른점은? 

초창기 컴퓨터 에서 메모리가 너무 작기 때문에 프로그래머가 

메모리의 올리때는 메모리를 쪼개서 이쪽부분 실행 시키고 이렇게 수작업으로 했던 방식

 

프로세스를 메모리에서 하드디스크로 쫒아내는 방식

CPU 우선순위가 낮은 프로그램을 swap out 한다.

 

 

 

이제 물리적인 메모리의 관리를 알아보자

물리적인 메모리의 관리

낮은 주소 부분의 커널이 항상 상주해있다.

 

사용자 프로세스를 크게 2가지로 나눌수있다.

1. 연속 할당

프로세스가 메모리에 통째로 올라가는 형태

 

2. 불 연속 할당

프로그램의 주소 공간을 잘게 쪼개서 , 위치가 불연속 적이게 할당한다.

현대는 다 불연속 할당 사용한다.

 

불연속 할당은 MMU로 주소 변환이 복잡해진다

 

 

연속 할당을 먼저 알아보자

 

연속 할당 방식

 

고정 분할 방식 - 미리 파티션으로 나눠 놓는다.

사용자 프로그램이 들어갈 곳을 미리 나눠 놓음 ..

a 프로그램이 실행되면 1번에 넣어놨다.

프로그램 b 가 실행되려고 했는데 크기가 2번 분할 보다 크다.

그래서 분할 3번에 들어감

 

낭비되는 메모리 조각이 발생 -

내부 조각은 들어가고 남은 공간

외부조각은 프로그램의 크기보다 작아서 못 올린경우

 

가변 분할 방식 - 프로그램이 실행될때마다 메모리에 차곡차곡 올려놓는다.

b가 끝나고 D가 실행되면 빈공간이 발생하게 된다.

내부 조각은 발생하지 않고 외부조각만 발생한다.

 

가변 분할 방식에서 가장 적절한 hole 을 찾는 문제

First- fit  : 그냥 최초 n 이상인 hole 찾아서 할당

Best- fit  : n 이상 크기 중 가장작은걸 찾는다

 

hole들을 한곳으로 모아서 큰 hole을 만든다.

매우 비용많이 드는 작업