[OS] 메모리

rg.log·2022년 5월 15일
0
post-thumbnail

메모리에 대해 공부해 보고, 메모리 관련 용어들을 정리해보려 한다.

메모리 계층 구조

먼저, 메모리(기억장치)의 종류는 레지스터, 캐시, 메인 메모리, 보조 기억장치로 구분할 수 있다.

위와 같이 계층 구조를 갖게 된 이유는 I/O bottlenect(I/O 병목 현상)을 해소하기 위해서다.

  • I/O 병목 현상은 시스템의 입력/출력 성능이 충분하게 빠르지 않은 문제이다.

CPU는 작은 메모리에 더 빨리 접근이 가능하고, 자주 사용하는 데이터는 자주 사용하지 않는 데이터에 비해 자주 쓰인다는 특징들을 고려하여 설계된 메모리 계층 구조를 통해 디코딩 속도는 증가하고, 경제적으로 메모리를 구성할 수 있게 되었다.

메모리 계층 구조 간 데이터를 전달할 때에는 아래 그림과 같이 각각 전송 단위가 있다.

  • Block은 보조기억장치와 주기억장치 사이 데이터 전송 단위로 1-4KB 크기이다.
  • Word는 주기억장치와 레지스터 사이의 데이터 전송 단위로 16-64bits 크기이다.

Address Binding 이란

Address Binding은 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 작업으로, binding 시점에 따라 3가지 방법으로 나뉜다. 구분된 3가지 시점은, 아래와 같이 소스코드를 짜서 메모리에 올려 실행되기까지의 과정 안에 존재한다.

  • Compile time binding
    프로세스가 메모리에 적재될 위치를 compiler가 완벽히 알 수 있는 경우에 사용할 수 있고, 적재될 위치가 변하지 않는다는 한계가 있다. 또한 프로그램 전체가 메모리에 올라가야 한다.
  • Load time binding
    compile time에, 메모리 적재 위치를 모르면 상대 주소를 생성하고, load time에 실제 시작 주소를 반영해 주소를 재설정한다. 이 또한 프로그램 전체가 메모리에 올라가야 한다.
  • Run time binding
    memory에 올린 상태까지도 두었다가 실제 수행될 때(process가 ready 상태에서 running 상태로 갔을 때) 주소를 정해준다. 해서 프로세스가 수행 도중 block 상태가 된다면 다른 메모리 위치로 이동될 수 있다. 이를 위해서는 HW(MMU)의 도움이 필요하다. 대부분의 OS가 이 방법을 택하고 있다.

Dynamic Loading 이란

Dynamic Loading은 모든 루틴(함수)을 교체 가능한 형태로 디스크에 저장해놓고, 실제로 process가 해당 루틴을 호출하면 그 때 함수를 메모리에 올리는 방식이다. 해서 루틴 호출 시점에 address binding이 수행되고, 메모리 공간을 효율적으로 사용할 수 있다.

0개의 댓글