운영체제 - Address Translation

혀누·2024년 1월 4일
0

운영체제

목록 보기
10/10
post-thumbnail
post-custom-banner
  • Memory virtualization takes a similar stratedy known as limited direct execution for efficiency and control
  • In memory virtualization, efficiency and control are attained by hardware support
    ex) registers, TLB, page-table

Address Translation

  • HW와 OS가 virtual address -> physical address로 바꿔준다.
    실제 data는 physical memory에 저장되어 있기 때문이다.
void func()
int x;
...
x = x + 3; // this is the line of code we are interested in

x = x + 3;을 실행할 때 거치는 과정
1. Load a value(x) from memory
2. Increment it by three (ALU)
3. Store a value(x+3) back into memory

  • Assembly code
    Intel (CISC) version이라서 instruction 크기가 일정하지 않다.
128 : movl 0x0(%ebx), %eax ; load 0+ebx into eax
132 : addl $0x03, %eax ; add 3 to eax register
135 : movl %eax, 0x0(%ebx) ; store eax back to mem


135번지의 instruction까지 실행하면 15KB 위치의 3000 -> 3003으로 바뀐다.
위의 그림에 등장하는 모든 주소는 virtual address이다.

Relocation Address Space

  • OS가 physical memory의 어딘가에 process를 위치시킨다. (address 0을 제외하고)

    Relocation에 대한 정보를 base register와 bounds register에 저장한다.
    base register : relocation의 시작 위치 주소값을 저장한다.
    bounds register : address space의 크기를 저장한다.

Q. address space에서 128번지가 physical memory의 어느 위치에 있을까?
A. 32KB + 128
Q. address space가 0KB~16KB인데 18KB의 주소값을 참조하면 어떻게 될까?
A. bounds register에 저장된 값보다 크면 segmentation fault

Dynamic Relocation

  • 프로그램이 실행되면, OS가 physical memory의 어느 위치에 process가 load될 지 결정한다.
    physical address = virtual address + base register value
  • 모든 virtual address는 bounds reigster value보다 클 수 없다.
    0 <= virtual address < bounds register value

128번지를 physical address로 변환하면 32896이고 이 주소에 저장된 instruction을 fetch해서 register에 저장한다.
그리고 15KB를 physical address로 변환하면 47KB이고 이 주소에 저장된 x값을 load하여 register에 저장한다.

Two ways of Bounds register

  1. address space의 size
    virtual address가 bounds register value값을 초과하는지 확인한다.
  2. physical address의 끝 주소
    변환된 physical address가 bounds register value값을 초과하는지 확인한다.

OS Issues for Memory Virtualization

  • Base-Bounds register는 CPU에 1개씩만 존재한다.
    -> 새로운 process가 relocate될 때 기존 register 값이 덮인다.
    -> context switch가 발생하기 전에 base-bounds register 값을 PCB에 저장한다.

  • process가 실행되면 physical memory에 빈 공간을 찾는다.
    OS는 physical memory에 사용하지 않는 memory들을 Free list로 저장하여 관리한다.
    Free list중 하나를 골라 process를 load한다.

  • process가 종료되면 memory를 반환한다.
    process가 종료되면 사용하던 memory 공간을 반환하고 Free list에 추가한다.

  • context switch가 발생하면 base-bounds register value를 PCB에 저장한다.
    context switch라는 것은 register 값만 바꿔주면 되는 것이다.
    register가 모든 정보를 다 저장하고 있기 때문이다.

profile
정리용 블로그
post-custom-banner

0개의 댓글