OS
Logical vs. Physical Address
- Logical address(= virtual address(가상주소) )
- 프로세스마다 독립적으로 가지는 주소 공간
- 각 프로세스마다 0번지부터 시작
- CPU가 보는 주소는 logical address임
- 컴파일된 코드 상의 주소(아래그림에서 A, B의 20, 30의 주소)는 변경될 수 없기 때문에
- Physical address
- 주소 바인딩 : 주소를 결정하는 것, 어떤 프로그램이 물리적인 메모리 어디에 올라갈지 메모리의 주소를 결정하는 것을 말한다.
- Symbolic address : 프로그래머가 프로그램을 만들때는 숫자 주소를 가지고 프로그래밍을 하지않는다. 프로그래머가 메모리를 사용하지만 프로그래머는 입장에서는 숫자(logical, physical)가 아닌 Symbolic address를 사용한다.
주소 바인딩
- compile time binding
- 물리적 메모리 주소(physical address)가 컴파일 시점에 물리적인 주소가 결정됌
- 시작 위치 변경 시 재컴파일
- 컴파일러는 절대 코드(absolute code) 생성
- Load time binding
- 실행이 시작될 때 주소변환이 이루어짐
- Loader의 책임하에 물리적 메모리 주소 부여
- 컴파일러가 재배치가능코드(relocatable code)를 생성한 경우 가능
- Run time binding
- 수행이 시작된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있음
- CPU가 주소를 참조할 때마다 binding을 점검(address mapping table)
- 하드웨어적인 지원이 필요(e.g., base and limit registers, MMU)
MMU(Memory-Management Unit)
- MMU(Memory-Management Unit)
- logical address를 physical address로 매핑해 주는 Hardware device
- 기본적으로 MMU는 레지스터 2개를 사용하여 주소변환을 한다.
- MMU scheme
- 사용자 프로세스가 CPU에서 수행되며 생성해내는 모든 주소값에 대해 base register(=relocation register)의 값을 더한다
- user program
- logical address만을 다룬다
- 실제 physical address를 볼 수 없으며 알 필요가 없다.
Some Terminologies
Allocation of Physical Memory
- 메모리는 일반적으로 두 영역으로 나뉘어 사용
- OS 상주 영역
- interrupt vector와 함께 낮은 주소 영역 사용
- 사용자 프로세스 영역
- 높은 주소 영역 사용
- 사용자 프로세스 영역의 할당 방법
- Contiguous allocation(연속 할당) : 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 것
- Fixed partition allocation
- Variable partition allocation
- Noncontiguous allocation(비연속 할당) : 하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있음
- Paging
- Segmentation
- Paged Segmentation
Contiguous allocation
- 고정분할(Fixed partition) 방식
- 물리적 메모리를 몇 개의 영구적 분할(partition)로 나눔
- 분할의 크기가 모두 동일한 방식과 서로 다른 방식이 존재
- 분할당 하나의 프로그램 적재
- 융통성이 없음
- 동시에 메모리에 load되는 프로그램의 수가 고정됨
- 최대 수행 가능 프로그램 크기 제한
- internal fragmentation 발생(external fragmentation도 발생)
- 가변분할(Variable partition) 방식
- 프로그램의 크기를 고려해서 할당
- 분할의 크기, 개수가 동적으로 변함
- 기술적 관리 기법 필요
- Exteranl fragmentation 발생
- Exteranl fragmentation(외부 조각)
- 프로그램 크기보다 분할의 크기가 작은 경우
- 아무 프로그램에도 배정되지 않은 빈 곳인데도 프로그램이 올라갈 수 없는 작은 분할
- internal fragmentation(내부 조각)
- 프로그램 크기보다 분할의 크기가 큰 경우
- 하나의 분할 내부에서 발생하는 사용되지 않는 메모리 조각
- 특정 프로그램에 배정되엇지만 사용되지 않는 공간
본문 출처 : 운영체제 - 이화여자대학교 반효경