Address Translaton

rokky·2023년 10월 17일
0

운영 체제

목록 보기
10/10

효율성과 제어를 위한 메모리 가상화

  • 메모리 가상화는 효율성과 제어를 위한 limited direct execution(LDE)를 이용한다.
  • 메모리 가상화에서 효율성과 제어는 하드웨어 지원을 통해서 얻어진다.
    • 레지스터, TLB(Translation Look-aside Buffer)s, 페이지 테이블

Address Translation

  • 하드웨어는 가상 주소를 실제 주소로 변경한다.
    • 우리가 요구하는 정보는 실제로 물리적 주소에 저장되어 있다.
  • OS는 하드웨어를 setup하기 위해 키 포인트에 포함되어 있어야한다.
    • OS는 신중하게 메모리에 개입하여 메모리를 관리해야한다.

address translation 예시

  • C언어 코드
void func()
	int x;
    ...
    x = x+3;
  • 메모리로 부터 값을 Load

  • 3만큼 증가

  • 메모리에 다시 이 값을 저장해준다.

  • 어셈블리어(Intel assembly language)

128 : movl 0x0(%ebx), %eax // 0+ebx를 eax로 Load
132 : addl $0x03 %eax // eax register에 3을 추가한다.
135 : movl %eax , 0x0(%ebx) // 다시 메모리 공간에 저장

// ARM 어셈블리
ldr r0, [r1]
add r0, r0, #3
str r0, [r1]
  • eax register안으로 주소값을 Load
  • eax register에 3을 추가
  • eax의 값을 다시 메모리로 저장

  1. 128번 주소에 지시사항을 fetch
  2. 이 지시사항을 수행한다. (15KB 주소부터 load)
  3. 132번 주소에서 지시사항을 Fetch
  4. 이 지시사항을 수행한다. (참조할 메모리가 존재하지 않음)
  5. 135번 주소에서 지시사항을 Fetch
  6. 이 지시사항을 수행 (15KB 주소에 저장)
  • Fetch : memory -> 프로세서
  • Decode : 번역
  • execute : 실행

address space 재배치

  • OS는 0번지가 아닌 물리적 공간의 어느 지점에 프로세스를 위치시키고 싶어한다.
    • address space의 시작 주소는 0이다.

Single relocated process

Base and Bound Register

Dynamic(Hardware base) Relocation

  • 프로그램이 작동하기 시작할 때 OS는 어느 물리적공간에 프로세스가 load될지를 결정한다.(재배치 정보 : base, bound)
    • base 레지스터의 값을 지정한다.
      물리적 주소 = 가상주소 + base (63kB = 15kB + 48kB)
    • 모든 가상 주소는 bound 보다 크거나 음수가 되면 안된다.
      0 <= 가상 주소 < bound

재배치와 Address Translation

128 : movl 0x0(%ebx), %eax

  • 위의 가상 메모리의 base = 32KB, bound = 16KB

  • 128번 주소에서 의 지시 사항을 Fetch
    32896 = 128 + 32KB(base)

  • 이 지시 사항을 수행

    • 15KB 주소에서 Load
      47KB = 15KB + 32KB(base)

Bound Register의 두가지 방법

  • 물리적 주소 = 가상 주소 + 가상 주소의 base(< bound)

  • address space에서의 bounds = 가상 주소 공간의 크기
  • 물리적 메모리에서의 bounds = 실제 메모리에서의 address space의 끝 부분

메모리 가상화에서의 OS 문제

  • OS는 base-and-bounds 접근을 이용한다.
  • 세가지 중요한 순간
    • 프로세스의 작동이 시작할 때(relocation)
      • 실제 메모리에서 address space의 공간을 찾는다.
    • 프로세스가 끝났을 때
      • 이용중이던 메모리를 회수한다.
    • context switch가 발생한다면
      • base-and-bounds 쌍을 저장하고 복구한다.

OS문제 : 프로세스 작동 시작 시

  • OS는 새로운 address space를 위한 공간을 찾아야 한다.
    • Free list : 사용중이지 않은 물리적 메모리의 리스트범위

OS문제 : 프로세스 작동이 종료되었을 때

  • OS는 메모리를 free list에 넣어야 한다.
    • free list : 이용되지 않는 physical memory의 range

OS문제 : Context Switch가 발생 한다면?

  • OS는 프로세스 구조 또는 프로세스 제어 블럭(PCB)에서 base-and-bound 쌍을 저장하고 복구해야 한다.

  • A -> B로의 Context switch가 발생 했을 때 PCBA에 A의 base랑 bound를 저장해두고 PCBB에서의 base랑 bound를 프로세서에 제공해 주어야 한다.

0개의 댓글