CS/운영체제

[운영체제] 주소 바인딩과 MMU

happy_life 2022. 7. 18. 21:24

[운영체제] 주소 바인딩

 

목차

1. 논리 메모리와 물리 메모리

2. 주소 바인딩

3. MMU

4. 관련 용어 정리

논리 메모리와 물리 메모리

1. 논리 메모리 주소와 물리 메모리 주소

logical vs physiscal

 

논리 메모리 주소는 각 프로세스마다 독립적으로 가지는 주소 공간으로 0번지부터 시작한다. 논리 메모리 주소는 프로그램이 실행 중일 때 CPU에 의해 참조되는 메모리 주소이다. 논리 메모리 주소는 가상의 주소로서 실제로 존재하지 않는다. 그래서 가상 메모리라고 흔히 알려져 있다.CPU는 이를 참조해 실제 물리 메모리의 위치에 접근하게 된다. 

 

물리 메모리 주소는 실제 물리적으로 존재하는 메모리의 주소이다. 사용자는 직접 물리적 메모리에 접근하지 못하고, 논리 메모리로 우회해서 접근할 수 있다. 따라서 논리 메모리는 물리 메모리와 매핑되어야 하는데 이를 주소 바인딩이라고 한다. 이를 위해선 MMU라는 하드웨어가 필요하다.

 

 

 

주소 바인딩의 종류

1. Compile time binding

물리적 메모리 주소가 컴파일 시 지정된다. 과거의 이야기이며 현재는 사용되지 않는다.

 

 

2. Load time binding

메모리에 프로그램을 올린 뒤 실행되고 이는 운영체제의 메모리 관리자인 Loader의 책임 하에 실행된다. 이 경우 프로그램의 논리 메모리는 적용되어 메모리에 올라갈 때까지 물리적 메모리와 매핑되지 않는다. 로드 타임의 경우 메모리에 로딩할 때 상대 주소를 한번에 할당하는데, 이 메모리 로딩이 처음에 overhead가 너무 크기 때문에 로드 타임은 잘 사용되지 않고 있다.

 

 

3. Execution time binding(= Runtime binding)

바인딩이 런타임까지 지연된다. 프로그램이 실행 중일 때도, 주소가 계속 바뀔 수 있다.

 

SuperClass superClass1 = new SuperClass();
SuperClass superClass2 = new SubClass();
...

superClass1.someMethod(); // SuperClass version is called
superClass2.someMethod(); // SubClass version is called

예를 들어 위와 같은 코드일 때, someMethod()가 누구의 메서드인지는 런타임 때만 알 수 있다. 런타임 중 주소를 바꾸는 것은 소프트웨어가 아닌 하드웨어가 컨트롤 하는데 이것이 MMU이다.

 

 

MMU

logical address와 physical address를 매핑해주는 하드웨어 장치

사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소에 대해 base register값을 더한다.

 

동작 방식

동작방식

 

만약 논리 메모리가 0~3000 사이인데 346번째 메모리를 CPU가 참조한다면, basic register의 값 14000을 더해 물리 메모리의 14346을 참조하게 된다. limit register도 있는데 이는 논리 메모리의 최대 크기를 갖고 있다. 만약 프로세스 메모리의 최대 크기인 3000보다 큰 위치를 프로세스가 참조하면, 체크해서 참조를 거부하는 역할을 한다.

 

 

관련 용어 정리

1.Dynamic Loading

프로세스 전체를 메모리에 미리 다 올리는 것이 아니라, 해당 루틴이 불릴 때 메모리에 로딩하는 것. 예를 들어 main 함수와 sub함수가 있다고 할 때, 둘을 동시에 메모리에 올리는 것이 아니라, 각각이 호출될 때 그제서야 메모리에 로딩을 하게 되는 것이다.

 

2.Overlays

메모리에 프로세스 부분 중 실제 필요한 정보만을 올린다. 이러한 점에선 Dynamic Loading과 차이가 없다. 다만 Dynamic Loading는 OS라이브러리를 통해 지원이 가능하지만, Overlays는 프로그래머가 직접 구현해야 한다는 점에서 차이가 있다.

 

 

3.Swapping

프로세스를 일시적으로 메모리에서 backing store로 쫓아내는 것으로 일반적으로 중기 스케줄러에 의해 swap out될 프로세스가 결정된다. Excecution time binding에서는 추후 빈 메모리의 영역에 다시 swap in 할 수 있음.

 

 

4. Dynamic Linking

라이브러리가 프로그램의 실행 파일 코드에 포함되어 있는 것이 아니라, 라이브러리가 실행 시 연결되는 것이다. 라이브러리는 따로 파일로 저장해두고, 참조할 수 있는 포인터만 가지고 있는 것이다. 라이브러리가 이미 메모리에 있으면 그 루틴의 주소로 가고, 없으면 디스크에서 읽어오게 된다.

 

 

 

 

 

 

 

 

 

 

 

 

본 포스팅은 kowc 이화여대 반효경 교수님 운영체제 강의를 바탕으로 작성하였습니다.