[운영체제] 메모리 관리

2019. 9. 20. 21:21

 

1. 메모리 구조

 

 - 주소(Address) + 데이터(Data)

 

 

 

 

2. 프로그램 개발단계의 파일 종류

 

 

- 원천파일(Source file) : 고수준 언어 또는 어셈블리언어로 작성된 파일

 

(컴파일러, 어셈블러)

 

 

- 목적파일(Object file) : 컴파일 또는 어셈블 결과

 

(링커 )

 

 

- 실행파일(Executable file) : 링크(라이브러리와 목적파일의 연결) 결과

 

(실행파일을 로더를 통해 메인메모리에 올림)

 

 

 

3. 프로그램 실행단계의 메모리 영역

 

 

 - code(기계어로 된 로직이 있는 영역) + data(연산을 위한 데이터가 있는 영역) + stack(지역변수, 돌아올 지점 저장)

 

 

 

 

4. MMU(Memory Management Unit)

 

 - base register

 - limit register

 

 - relocation register

 

    cpu가 지정한 주소(logical address)에 mmu가 숫자를 더해서 만든 주소(physical address)에 할당(address translation)

    -> 실행파일이 어떤 번지에 있더라도 상관없게 해준다.

 

 

 

 

5. 메모리 낭비 방지

 

 1) Dynamic Loading(동적 적재)

  - 프로그램 실행에 반드시 필요한 루틴 / 데이터만 적재한다.

    ex) 소스코드에 쓰여진 오류처리 루틴은 오류가 발생할 때만 필요하므로 오류가 발생할 때 메모리에 로드하는게 경제적임

 

 2) Dynamic Linking(동적 연결)

  - 공통 라이브러리 루틴이 메모리에 중복으로 올라오는 것은 메모리 낭비를 초래하므로 실행파일을 만들면서 연결을 하지 않고 하나의 라이브러리 루틴만 메모리에 올려놓은 상태로 어플리케이션 실행 시 루틴과 연결하게 한다.

(리눅스에서는 shared library, 윈도우에서는 Dynamic Linking Library 이라고 부름)

 

 3) Swapping

  - swap out

  메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스 이미지를 사용 중이던 상태로 하드디스크의

  특정부분(backing store)  으로 내린다.  (이미 존재하던 .exe 파일과는 구분된다.)

 

  - swap in

    swap out 된 이미지를 다시 메인메모리로 올린다.(프로세스의 크기가 클수록 하드디스크에 써야하는 크기가 커져서

   입출력에 따른 부담이 있음.)

 

BELATED ARTICLES

more