메모리는 각각 주소가 할당된 일련의 바이트들로 구성된다. CPU는 PC가 지시하는 대로 메모리로 다음 수행할 명령어를 가져온다.
- CPU자원, 메모리 자원은 중요하기에 어떻게 할당해주어야 할지(스케줄링) 알아야 한다.
- 어떤식으로 메모리에 적재되는지(프로세스에게 메모리를 얼마나 할당해줘야 하는지)
Background
- CPU가 직접적으로 접근할 수 있는 메모리 공간 Cache까지 Protection이 필요
- base register: process가 시작하는 지점
- limit register: 시작하는 지점부터 얼마만큼까지 메모리에 접근할 수 있는지 나타내는 지점
- 주소는 base 보다 크거나 같고 base+limit보다 작아야 한다.
Address Binding
- binding: 주소를 이해하는 프로세스(CPU와 OS가 이 process가 메모리의 어떤 주소에 있는지 알아가는 과정)
- 메모리 상 실질적 주소
- CPU가 매긴 주소
- 메모리에 어디 올라갈지 아는 경우와 그렇지 않은 경우
- compile time binding:
- load time binding:
- execution time binding: 매번 실행시킬 때마다 주소가 어떻게 되는지를 확인하고 최적의 주소에 적재시키는 과정 → demand paging을 사용한다면 꼭 필요하다.
- 요약:
프로그램은 동작하기위해 메모리에 적재되어야 한다. 어디에 ? 메모리 특정 주소에만 올라가야 하는 경우, 어디든 상관 없는 경우 특정 주소: 프로그램 자체에 어떤 주소에 넣어달라고 명시(OS는 이대로 실행) compile할 때 정해짐 어디든 상관 없는 경우: 한 번 load시키면 끝까지 그곳에서 계속 load되는 경우와 실행될 때마다 위치가 계속 바뀌는 경우
프로그램에 따라 3가지 경우 중 하나가 적용됨.
- Logical address(virtual address): CPU가 생성
- Physical address: 메모리에서 보여지는 실제 주소 둘은 1 : 1 mapping 존재 compile time과 load time -> 실행 전에 수행되는 단계들로, 실행하기 전에 주소가 정해지기에 logical = physical
- compile time binding & load time binding
- program이 종료될 때까지 바뀌지 않음, logical=physical이기에 변경사항이 그대로 적용됨.
- 일관성을 위해 logical이 있다고 생각하면 된다.
- execution time binding인 경우는 실행될 때마다 physical 주소가 바뀔 수 있기에 logical 주소를 고정된 값으로 가질 수 없음. 두 주소를 다르게 관리 logical과 physical 사이에 mmu가 이를 통역해줌. - logical은 보통 0부터 시작, logical 범위에서만 관리하면 계속 바뀌는 physical 주소를 신경쓰지 않아도 변경사항이 적용된다. - MMU: memory 관리의 핵심 - physical과 logical 사이의 mapping을 담당 - CPU의 부담을 덜어줌
Swapping
실행되지 않은 프로세스를 뺐다가 그 자리에 실행되는 프로세스를 넣는 방식, 제한된 메모리를 사용하기 위함이다. 제한된 메모리에서 많은 응용 프로그램을 실행시키기위해 필요하다.
- backing store : 모든 메모리 복사본을 수용하기에 충분히 큰 빠른 디스크로 메모리에 직접 접근이 가능