운영체제
13) 주소 공간의 개념
초기 시스템
- 메모리에 오직 하나의 프로세스만 load
- 추상화 없음
- 하나의 프로세스가 전체 메모리를 사용했다.
- poor한 활용(utilization), 효율(efficiency)
- 비싸고 낮은 유틸성
EX
- 0~64kb까지 OS가 사용, 나머지는 현재 프로그램이 사용
멀티프로그래밍, 시분할
- 메모리에 여러 프로세스를 load
- 하나의 프로세스를 짧은 시간안에 실행
- 메모리
안에서
프로세스 스위칭
- utilization과 efficiency를 높임
- protection이 중요한 문제로 화두
- 한 프로세스가 다른 프로세스의 메모리를 사용하는 것을 막아야함
EX
단위 = kb
- 0~63 OS사용, 64~127 free, 128~191 process c, 192~255 process b, 256~319 process A, 320~511 free
가상 메모리(Virtual Memory)
-
메모리는 충분하지 않다
- 프로그램이 돌아가기 위한 최소의 메모리 크기는??
-
메모리에 접근할 때 동작 활용
- 메모리 접근은 순서대로 실행(순차적 주소 사용)
- 메모리 접근은
locality
(인근성??)를 지님
Appendix: Locality
locality로 메모리 예측
원리
프로그램은 최근에 사용했던 주소공간이나 그 근처의 데이터나 인스트럭션을 사용하는 경향이 있음
- Temporal locality
- 최근 접근했던 인스트럭션 or 데이터를 미래에 다시 사용할 것이다.
- Spatial locality
- 프로그램이 어떤 주소 공간에 접근했으면 곧 그 근처 메모리에 접근할 것이다.
EX
sum =0;
for(i=0;i<n;i++>){
sum+=a[i];
}
return sum;
- data
- temporal: sum
- spatial: a[]
- instruction
- temporal: for
- spatial: reference 인스트럭션(메모리 읽고쓰는)
가상 메모리
- 동작중인 프로그램에 OS가 할당하는
추상화
된 주소 공간
- 사용자에게 실제 메모리를 숨긴다 => 가상화
- 프로그램의 부분만 실제 메모리에
- 동작중인 프로그램은 메모리의 특정 주소에 로드되고 큰 공간을 사용한다고 생각한다 => unbounded하게
주소 공간 address space
-
OS는 실제 메모리의 추상화를 생성
-
실제론 프로세스는 전체 메모리를 쓰지 않음
-
logical address(가상 메모리)
-
physical address
-
code
-
heap
-
stack
- return 주소, 값을 저장
- 지역 변수를 포함
실행하는 프로그램의 모든 주소는 가상이다
- OS가 가상 주소를 실제 주소로 변경한다(MMU)
메모리 layout
순서대로 높은 메모리 순(2^n-1 ~ 0)
커널(OS) -> 스택 -> free -> heap -> Static data -> Literals -> instructions -> system reserved
메모리 가상화의 장점
- 프로그래밍하기 쉬움
- Transparency 투명성(인지하기 어렵게)
- 프로그램이 가상메모리를 인지하지 못하도록
- 프로그램이 자신의 전용 물리메모리를 소유한 것 처럼
- Efficiency 효율성, 시간과 공간에 대한
- Time: 성능에 영향을 미치지 않도록
- Space: 가상화에 최소의 공간만 사용하도록
- OS는 하드웨어에 지원을 받아야함
- Protection 보호, 프로세스끼리의 isolation 보장
- 프로세스를 다른 프로세스와 OS로부터 보호해야함
- 프로세스 사이의 isolation
- memory sharing에도 좋아
Summary
- 메모리 가상화의 motivation
- address space
- 물리적 메모리의 추상화, OS가 함
- protection을 준다
- 메모리 가상화
- 추상화와 함께, OS는 메모리를 가상화할 수 있다.
- 목표
- transparency
- efficiency
- protection