메모리에 대해 알아보자
논리적 주소
- 프로세스마다 독립적으로 가지는 주소 공간
- 각 프로세스마다 0번지부터 시작
- CPU가 보는 주소는 논리적 주소다
물리적 주소
- 메모리에 실제 올라가는 위치
※ 주소 바인딩: 주소를 결정하는 것
상징적 주소 -> 논리적 주소 -> 물리적 주소
주소 바인딩이 언제 이뤄지는가

1. Compile time binding
- 논리적 주소를 바탕으로 올린다
- 논리적 주소와 물리적 주소가 같다
- 컴파일러는 절대 코드 생성
- 시작 위치 변경시 재컴파일
- 지금은 사용하지 않는다
2. Load time binding
- 메모리에 올라갈떄 물리적 주소가 결정된다
- 컴파일러가 재배치가능코드를 생성한 경우 가능
3. Execution(Run) time binding
- 메모리 주소가 실행도중 바뀔 수 있다
- CPU가 주소를 참조할때마다 바인딩을 점검
- 하드웨어적인 지원이 필요
MMU(Memory-Management Unit): 논리적 주소에서 물리적 주소로 주소변환을 지원해주는 하드웨어
- 논리적 주소만을 다룬다

논리적 주소 346을 요청한다. 두가지 레지스터를 이용해서 주소를 변환한다. limit register를 통해 메모리 주소를 제한한다
용어
Dynamaic Loading
- 프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 메모리에 load하는것
- 가끔씩 사용되는 많은 양의 코드의 경우 유용
- 메모리 사용량 향상
Overlays
- 메모리에 프로세스의 부분 중 실제 필요한 정보만을 올림
- 프로세스의 크기가 메모리보다 클 때 유용
- 운영체제의 지원없이 사용자에 의해 구현
- 작은 공간의 메모리를 사용하던 초창기 시스템에서 수작업으로 프로그래머가 구현 =Manual Overlay
Swapping
- 프로세스를 일시적으로 메모리에 backing store로 쫓아내는 것
- Backing store: 많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장공간
- swap in: 메모리로 다시 올라가는것
- 우선순위가 낮은 프로세스를 swapped out 시킴
- swap time은 양이 많기 때문에 대부분 transfer time이다
Dynamic Linking
- Linking을 실행시간까지 미루는 기법
static linking
- 라이브러리가 프로그램의 실행 파일 코드에 포함됨
- 실행 파일의 크기가 커짐
- 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비
Dynamic linking
- 라이브러리가 실행시 연결됨
- 라이브러리를 찾을수있는 stub
- 라이브러리가 이미 메모리에 있으면 루틴 주소로 가고 없으면 디스크에서 읽어옴
'CS(Computer Science) > 운영체제' 카테고리의 다른 글
[운영체제] Paging (1) | 2023.03.13 |
---|---|
[운영체제] 메모리 관리 (0) | 2023.02.20 |
[운영체제] 교착상태(deadlock) (0) | 2023.02.18 |
[운영체제] Concurrency Control 병행 제어 (0) | 2023.02.15 |
[운영체제] 프로세스 동기화의 고전적인 문제 (0) | 2023.02.08 |
댓글