본문 바로가기
CS(Computer Science)/운영체제

[운영체제] 메모리

by whdgus928 2023. 2. 20.

메모리에 대해 알아보자 

논리적 주소

- 프로세스마다 독립적으로 가지는 주소 공간

- 각 프로세스마다 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

- 라이브러리가 이미 메모리에 있으면 루틴 주소로 가고 없으면 디스크에서 읽어옴

반응형

댓글