본문 바로가기
OS(운영체제)

Main Memory 배경

by 걸어가는 신사 2021. 12. 9.

CPU 스케줄링의 결과로 CPU 이용률과 사용자에 제공하는 컴퓨터 응답속도를 모두 향상할 수 있다.

그러나 이러한 성능 향상을 실현하려면 많은 프로세스를 메모리에 유지해야 한다. 

1. CPU와 Main Memory

(1) CPU의 Main Memory 접근

  • 메인 메모리와 각 처리 코어에 내장된 레지스터들은 CPU가 직접 접근할 수 있는 유일한 범용 저장장치이다. 
  • 모든 실행되는 명령어와 데이터들은 CPU가 직접적으로 접근할 수 있는 메인 메모리와 레지스터에 있어야 한다.
    • 각 CPU 코어에 내장된 레지스터들은 일반적으로 CPU 클록(clock)의 1사이클 내에 접근이 가능
    • 메인 메모리의 접근을 완료하기 위해서는 많은 CPU 클록 틱 사이클이 소요
      • 이 경우 CPU가 필요한 데이터가 없어서 명령어를 수행하지 못하고 지연되는(stall) 현상이 발생
      • 해결방안으로 메모리의 접근을 줄이기 위해 빠른 속도의 메모리인 캐시를 추가한다.

(2) 메모리 공간의 보호

시스템이 올바르게 동작하기 위해서는 사용자 프로그램으로부터 운영체제 영역을 보호해야 할 뿐만 아니라 사용자 프로그램 사이도 보호해야 한다. 

(i) 독립된 메모리 공간 보장

  • 프로그램은 실행을 위해 메모리로 옮겨져서 독립된 공간에 위치
    • 각 프로세스는 분리된 메모리 공간을 확보한다.
    • 기준(base register)과 상한(limit register)는 물리 메모리 내의 프로세스 주소 공간을 결정하는 데 사용된다.
  • 기준 레지스터(Base Register)
    • 가장 작은 물리 메모리 주소를 가진다.
  • 상한 레지스터(Limit Register)
    • 프로세스 주소 공간의 크기를 가진다.

(ii) 주소와 레지스터 비교

  • CPU 하드웨어가 사용자 모드에서 만들어진 모든 주소와 레지스터를 비교한다.
    • 사용자 모드에서 만들어진 모든 주소는 레지스터 범위 안에 있어야 한다.
  • 사용자 모드에서 수행되는 프로그램이 운영체제의 메모리 공간이나 다른 사용자 프로그램의 메모리 공간에 접근하면 트랩(trap)을 발생
  • 기준과 상한 레지스터는 special priviledged instruction(특권 명령)을 사용하는 운영체제에 의해서만 적재된다.
    • 특권 명령은 커널 모드에서만 수행되고, 운영체제만 커널 모드에서 수행된다.

 

2. 주소의 할당 (Address Binding)

(1) 주소의 할당

  • 운영체제가 프로세스를 물리 메모리에 적재한다.
  • 주소들은 여러 가지 다른 표현 방식을 거친다.
    • 원시 프로그램에서 주소는 숫자가 아닌 심볼 형태로 표현
    • 컴파일러는 이 심볼 주소를 재배치 가능 주소로 바인딩
    • 링커나 로더가 재배치 가능 주소를 절대 주소로 바인딩시킨다.

(2) 바인딩이 이루어지는 시점 종류

  • 컴파일 시간(compile time) 바인딩
    • 프로세스가 메모리 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 컴파일러는 절대 코드를 생성
  • 적재 시간(Load time) 바인딩
    • 컴파일 시간에 바인딩이 안 되는 경우 컴파일러는 이진 코드를 재배치 가능 코드로 만든다.
    • 재배칭 가능 코드는 시작 주소가 변경되면 아무 때나 사용자 코드를 다시 적재하기만 하면 된다.
    • 이후 진짜 번지수와의 바인딩은 프로그램이 메인 메모리로 실제로 적재되는 시간에 이루어진다. 
  • 실행 시간(execution time) 바인딩
    • 프로세스가 실행하는 중간에 메모리 내의 한 세그먼트로부터 다른 세그먼트로 옮겨질 수 있다.
      • 바인딩이 실행 시간까지 허용되는 경우에만 가능하다.

 

3. 논리 대 물리 주소 공간 (Logical VS Physical Address Space)

(1) 논리 주소(Logical Address)와 물리 주소(Physical Address)

  • Logical Address
    • CPU가 생성하는 주소
    • 모든 논리 주소 집합 : 논리 주소 공간 (logical address space)
  • Physical Address
    • 메모리가 취급하는 주소 (메모리 주소 레지스터(MAR)에 주어지는 주소)
    • 모든 물리 주소 집합 : 물리 주소 공간 (physical address space)
  • 특징
    • 컴파일 또는 적재 시에 주소를 바인딩하면 논리 주소와 물리 주소가 같다.
    • 실행 시간 바인딩 기번에서는 논리, 물리 주소가 다르다. (논리 주소 = 가상 주소, virtual address)

(2) 메모리 관리 장치 (memory management unit, MMU)

가상 주소를 물리 주소로 바꾸어주는 변환(mapping) 작업을 해주는 하드웨어 장치

  • 기준 레지스터(base register) 기법을 일반화시킨 아주 단순한 MMU 기법의 예시
    • 기준 레지스터(base register) = 재배치 레지스터(relocation register)
  • 논리 주소 : 346, 재배치 레지스터 : 14000 => 물리 주소 : 14346
  • 사용자 프로그램은 실제적인 물리 주소에 접근하지 않는다.
    • 사용자 프로그램은 346에 대한 포인터를 생성하여 저장, 연산 등의 일을 한다.
    • 이후 참조된 논리 주소들은 실행 시간에 실제 메모리에 바인딩된다.

 

4. 동적 적재 (Dynamic Loading)

루틴(Routine)은 실제 호출되기 전까지는 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에서 대기하고 있다.
호출되면 메모리에 적재된다.
  • 메모리 공간의 더 효율적 이용을 위해서 동적 적재를 한다.
  • 필요한 경우에만 적재된다.
    • 실행할 코드가 많은 경우에 특히 유용하다.

 

5. 동적 연결 및 공유 라이브러리 (Dynamic Linking & Shared Libraries)

동적 연결 라이브러리(DLL)

사용자 프로그램이 실행될 때, 사용자 프로그램에 연결되는 시스템 라이브러리
  • 라이브러리 연결을 실행 시기까지 미룬다.
    • 이 기능이 없다면 시스템의 각 프로그램은 실행 가능 이미지에 해당 언어 라이브러리의 사본을 포함해야 한다.
    • 메인 메모리를 낭비할 수도 있다.
  • 라이브러리를 여러 프로세스 간에 공유할 수 있다.
    • 메인 메모리에 DDL 인스턴스가 하나만 있을 수 있다.
    • 공유 라이브러리라고도 한다.
  • 운영체제의 도움이 필요하다.
    • 운영체제가 메모리 주소 공간에 routine이 있는지 확인해준다.
    • 여러 프로세스가 같은 메모리 주소를 공용할 수 있도록 해줄 수 있다.
반응형

댓글