[운영체제] 운영체제 반효경 교수님 2017년 - 8. 메모리 관리 I

June·2021년 5월 4일
0

메모리 관리

프로그램이 실행되면 그 프로그램만의 0번부터 시작하는 독자적인 논리적인 주소를 갖는다. 이를 가상 메모리라한다. 이것을 실제 물리 메모리에 올라갈때, 가상 주소에서 물리적인 주소로의 주소 변환이 필요하다.

Logical vs. Physical Address

symbolic address는 프로그래머가 변수를 다루는 것을 말한다.

cpu가 보는 것은 logical address이다. 밑밑의 그림을 보면 각 도형 앞에 주소는 바뀌었지만, 안의 내용은 바뀌지 않는다. cpu는 기계어를 실행하는데, 기계어가 보는 주소는 컴파일된 논리적인 주소다. 그래서 cpu가 메모리에 접근할 때마다 binding을 확인해야 한다.

주소 바인딩 (Address Binding)

주소 바인딩은 운영체제가 아닌 하드웨어가 해준다.

0번은 주로 OS가 사용하는 시작 주소기 때문에 주소 바인딩이 필요하다. 예전에 범용 컴퓨터가 아닌 전용 컴퓨터에는 오직 프로그램이 하나만 돌아가기 때문에 실제 0번부터 바로 사용해도 문제가 안됐다. load time binding과 run time binding으로 주소 변경을 한다.

load time binding과 run time binding 차이는 load time binding은 프로그램이 시작되는 시점에 주소가 생기고 바뀌지 않는다. run time binding은 실행 도중에 주소가 바뀔 수도 있다.

Memory-Management Unit (MMU)

Dynamic Relocation

mmu가 레지스터 두 개를 이용해서 하나는 시작 위치, 하나는 프로그램의 크기 (끝 범위)를 가지고 있다.

Hardware Support for Address Translation

주소 공간 내에 범위를 만족하면 메모리 주소 변환을 해주고 그렇지 않으면 악의적인 프로그램일 수 있으므로 trap을 발생시킨다.

Dynamic Loading

좋은 프로그램은 예외 처리 코드가 많은데 예외 처리코드는 거의 사용되지 않는다. 따라서 사용될 때만 로딩하면 된다.

Overlays

dynamic loading과 의미는 같다. 역사적인 의미가 있는 것인데 초기에는 메모리가 크기가 아주 작았다. 예전에는 프로그래머가 수작업으로 메모리에 올리고 내리고 했는데 이를 뜻한다.

Swapping

메모리에서 디스크로 쫓아내는 것을 의미한다.
CPU에서 우선 순위가 낮은 것을 쫓아낸다.
swapping이 온전히 빈 메모리 공간을 온전히 잘 사용하려면 run time binding이 돼야한다.

현대적인 OS는 통째로 내쫓는 것이 아니라 필요한 부분만 갖고오고 필요 없는 부분을 쫓아낸다.

Schematic View of Swapping

메모리에서 swap out되면 suspended 상태가 된다.

이렇게 일부 페이지만 쫓아낸 것은 정확히 swap out은 아니지만, 페이지가 swap out 됐다고 부르기도 한다.

Dynamic Linking

프로그램을 만들 때, 컴파일돼고, 링킹된다. 예를 들어 외부 라이브러리와 내가 만든 프로그램을 연결하는 것이다.

static linking은 라이브러리가 실행 파일에 포함되어 있는 것이다.

dynamic linking은 내가 만든 실행 프로그램에 포함되지 않고, 필요할 때 파일 형태로 찾아서 필요할 때 올리는 것을 말한다. dll은 dynamic linking library이다.

Allocation of Physical Memory

연속할당은 통째로 메모리에 올라가는 것이다.

Contiguous Allocaation

현대 운영체제에서는 실제로 거의 쓰고 있지 않다.

고정 분할 방식
프로그램 A가 1번에 들어갈 크기면 분할 1에 넣고, 프로그램 B는 분할 2에 못들어가니 분할3에 넣는다. 남는 크기가 있는데 이를 내부 조각이라 한다.

외부조각은 프로그램 크기보다 작아서 활용되지 않는 것을 말한다.

가변 분할 방식
프로그램 B가 종료되고 D를 올리려는데 B가 있던 공간보다 작으면 외부조각이 된다.

나중에는 여분의 공간들이 많은데 흩어져 있어 연속할당 방식에서 프로그램이 못들어갈 수 있다. 이런 hole들을 관리를 해야 한다.

hole들이 여러개 있을 때 어디에 올릴지 정하는 문제다.

first-fit은 가장 빠르게 결정할 수 있다는 것이다.

best-fit은 큰 것 중에 가장 작은 것을 고르는 것이다.
hole들을 다 찾아봐야하니 탐색의 over-head가 발생한다.

외부조각들을 모아서 하나의 큰 홀을 만들어주는 것이다. 메모리를 이동시켜야 하기 때문에 많은 비용이 드는 작업이다.

0개의 댓글