운영체제 - 18

KOCW 운영체제 18강

양희재 교수님 강의를 듣고 쓴 글입니다.


Main Memory Management

OS에서 CPU자원은 process management 에서 관리한다. 그리고 주기억장치 관리는 Main Memory Management 에서 관리한다.


[지난 시간 마지막 내용] 프로그램을 메모리에 load하기

  1. 실행 파일(executable file)을 memory에 올리기

    • 메모리 몇 번지에?

      → OS의 loader가 알아서 고민해준다.

    • 다중 프로그래밍 환경에서는?

  2. MMU(Memory Management Unit) 사용

    • Relocation register

      예시) CPU입장에서는 test.c가 0번지에서 시작하는 것으로 인지. 그러나 실제 main memory에서는 500번지에서 시작.

      MMU가 주소를 다시 결정해준다. 따라서 relocation register값을 바꿔줌으로써 실제로 main memory에 어디에 있는지는 상관없이 똑같이 실행시켜 준다는 것.

  3. 주소 구분

    물리주소 vs 논리주소


MMU(Memory Management Unit)

CPU가 address 보낼 때 MMU의 limit, base 사이의 주소가 아니면 CPU로 interrupt 신호가 발생하여 CPU는 현재 하는 일을 중단하고 OS의 interrupt routine으로 점프하게 된다.

이번 포스팅에서 말할 기능은 relocation register에 관한 것이다.

따라서 context switching이 일어나면 relocation register의 값만 바꿔주면 우리가 실행하는 프로그램으로 CPU가 접근할 수 있는 것이다.


메모리 낭비 방지


Dynamic Loading

load : 만들어진 실행 파일을 main memory에 올리는 것.

프로그램 실행에 반드시 필요한 루틴/데이터만 load. 실행 시 필요하면 그 때 해당 부분을 메모리에 올린다.


Dynamic Linking

예전에는 메모리가 부족해서 라이브러리 전체를 load하는건 부담이 컸다+항상 사용되는 것도 아니다. → 사용될 때만 load시키는 것으로 해결. 프로그램 실행 시 필요하면 그 때 해당 부분을 메모리에 load하는 것이다.

→ 메모리를 절약하는 방법


Swapping

메모리에 load되어 있으나 현재 사용되지 않고 있는 프로세스 이미지.