시냅스

주메모리의 관리 Main Memory 본문

운영체제

주메모리의 관리 Main Memory

ted k 2022. 5. 20. 17:31

주메모리의 관리, Main Memory

 

https://www.cs.csustan.edu/~john/classes/previous_semesters/cs3750_operatingsys_i/2019_02_Spr/Notes/Chap09/09_MainMemory.html

  • memory에 Load된 program -> process
  • 메모리는 바이트로 이뤄진 주소를 배열로 한다.
  • PC(Programcounter) -> 주소 -> 명령어, 필요하면 더 데이터를 더 가져오거나 내보낼 수도 있다.

 

기본 하드웨어 Basic HardWare

  • 메모리
    • CPU는 각 처리 코어에 내장된 레지스터와 메인 메모리에만 접근할 수 있다.
    • 명령어와 데이터들은 CPU가 접근할 수 있는 레지스터와 메인 메모리에 있어야 한다.
  • 캐시
    • CPU 코어에 내장된 레지스터에는 CPU가 빠르게 접근할 수 있다.
    • 다만 메모리에 접근하는 속도는 상대적으로 느리다.
    • CPU와 메모리 사이에 캐시라는 빠른 속도의 메모리를 추가하여 자주 접근하는 데이터를 캐시에 둠으로써 속도 차이 문제를 해결할 수 있다.
  • 프로세스의 메모리 구역을 보장하는 방법
    • Base register <= process < limit register, 프로세스의 메모리 영역 지정
    • 위 구역을 벗어나면 Trap 으로 segmentation fault

 

주소의 할당 Address Binding

  • 프로그램이 실행되기 전 위와 같은 과정을 거치는데, 각 단계를 거치는 동안 메모리 주소들은 여러가지 다른 표현 방식을 가진다.
  • 최초 주소는 숫자가 아닌 심볼 형태로 표현된다.
  • 컴파일러는 이 심볼 주소를 재배치 가능한 주소로 바인딩하고, 다음에 링커나 로더가 재배치 가능 주소를 절대 주소로 바인딩 시킨다.
  • 아래는 시점에 따른 주소의 바인딩에 관한 구분이다.
  • 컴파일 시간, compile time
    • 프로세스가 메모리에 들어갈 위치를 컴파일 시간에 미리 알고 있다면 컴파일러는 절대 코드 (absolute code)를 생성할 수 있다.
    • 그러나 만약 위치가 변경된다면 이 코드는 다시 컴파일 되어야 한다.
  • 적재 시간, load time
    • 컴파일 시점에 메모리의 어떤 위치에 올라올지 모른다면 컴파일러는 일단 이진 코드를 재배치 가능 코드(realocatable code, 컴파일 시간에  수 없는 경우 재배치 가능한 상대 주소)로 작성한다.
    • 재배치 가능 코드는 시작 주소가 변경되면 코드를 다시 적재하기만 하면 된다.
  • 수행 시간 excution time
    • 수행 도중에 메모리 내 위치가 옮겨질 수 있는 경우
  • symbolic address -> 컴파일 -> logical address -> 실행시작 -> physical address
  • 정리하면, disk에 binary로 저장 돼 있다가 process가 되면 메모리를 할당한다.
  • compiler가 symbolic하게 할당한다.
    • 정확히는 Linker, Loder는 Logical address를 physical address로 바꾸는 역할을 한다.

 

Logical vs Physical address

  • 논리 주소 Logical address : cpu가 생성한 address
  • 물리 주소 Physical addree : Memory register 에 로딩된 주소
  • 논리주소가 물리적 주소와 다르다면 가상 주소라고 한다.
  • MMU는 Logical 주소와 Physical 주소가 동일하지 않게 맵핑하는 역할을 한다.
    • 재배치 레지스터, realocation register == base register
    • 논리 주소가 346, MMU가 14000 이라면 물리 주소는 14346이 된다.

 

Dynamic Loading

  • 메모리 공간을 효율적으로 사용하기 위해 각 루틴을 필요할 때에만 메모리에 올린다.
  • 호출하면 재배치 가능 연결 적재기 (relocatable linking loader)에 반영한다.

 

동적 연결 및 공유 라이브러리 Dynamic Linking & shared Libraries

  • DLL : Dynamically Linked Libraries
    • 동적 연결, 프로그램이 실행되는 중에 linking
  • 프로세스 간에 공유할 수 있다.
  • shared library == DLL

 

Hole

  • 메모리를 반납하면 남는 공간
  • 위를 해결하기 위해
  • 최초 적합 First fit : 가장 첫 공간 할당
  • 최적 적합 Best fit : 가장 작은 공간 할당
  • 최악 적합 worst fit : 가장 큰 공간 할당

 

단편화 Fragmentation

  • 빈 공간이나 자료가 여러 개의 조각으로 나뉘는 현상
  • 내부 단편화 : 4만큼 할당 받았는데 3만 쓸 때
  • 외부 단편화 : process 7인데 메모리가 4만 남아있을 때
Comments