OS-9) 메인 메모리 할당

topics 700-컴퓨터과학 704 운영체제
types 이론 학습
tags

메인 메모리 할당

  • 프로그램이 실행되기 위해서는 메모리에 저장되어 프로세스 내에 배치되어야 한다
  • 메인 메모리와 레지스터는 CPU가 직접 접근할 수 있는 유일한 저장장치
  • 메모리 하드웨어는 주소 + 읽기 요청 or 주소 + 데이터 쓰기 요청만 가능
  • 메인 메모리 접근에는 많은 사이클이 필요하고 stall이 발생한다
용어 설명
논리(logical) 주소 = 가상(virtual) 주소 = 재할당(relocatable) 주소
Symbolic 주소 프로그래머가 코드에서 사용하는 상징적인 이름을 주소로 사용하는 것

프로세스 수행과 메인 메모리

프로그램이 실행되기 위해서 메모리에 저장되어 프로세스 안에 배치되어야 한다 (== 프로세스 수행하려면 메모리 접근이 필요함).

메모리 공간 보호

Base & limit 레지스터는 프로세스의 논리적(logical) 주소의 범위를 지정한다.

레지스터 설명
base (= relocation) 레지스터 프로세스의 시작 메모리 주소를 저장
limit 레지스터 프로세스가 사용할 수 있는 메모리 공간의 크기를 저장

CPU H/W는 사용자 모드에서 생성된 모든 주소를 레지스터와 비교해서 사용자 기준과 상한 범위에 속하는지 검사해야 한다.

물리 주소를 가지고 있으면:

논리 주소를 가지고 있으면:


메모리 주소 바인딩 (할당)

CPU가 만든 논리 주소를 물리 주소에 할당하는 것을 말한다.

시점에 따른 바인딩

시점 상황 설명
Compile time 메모리 위치를 미리 알고 있음 절대 주소(absolute)가 생성될 수 있다
Load time 컴파일할 때 주소를 알 수 없음 재배치 가능 주소가 생성되어야 한다. 후에 loader에 의해 재배치 주소가 절대 주소로 변환
Execution time 프로세스가 메모리 세그먼트 위치를 변경할 수 있음 바인딩이 실행 시간까지 연기됨. 주소 맵을 유지하기 위한 하드웨어 지원이 필요. 메모리 참조가 일어날 때 바인딩된다

현재 OS가 대부분 Execution time 방식 사용

  • MMU(Memory Management Unit) 장치에 의해 논리 주소를 물리 주소로 변환
  • MMU는 논리 주소를 물리 주소로 매핑하는 하드웨어 장치

MMU 동작

Dynamic Relocation

프로세스에 의해 생성된 주소 + 재배치(base) 레지스터 값을 더하여 요청한다.

300

Dynamic Linking

프로세스 실행 중 필요할 때 라이브러리를 링크하는 방식이다. 메모리 절약 가능하고 유지보수가 용이하다.

  • linking과 로더가 시스템 라이브러리와 프로그램 코드를 결합하여 이진 프로그램 이미지가 생성
  • **스텁(stub)**이 상주 라이브러리 루틴의 위치를 찾기 위해 사용됨
    • 자기 자신을 루틴의 주소로 대체하여 라이브러리 루틴 실행
    • 상주 라이브러리 == shared libraries

Swapping

용어 설명
swap out 메인 메모리 → 보조 저장장치
swap in 보조 저장 장치 → 메인 메모리
  • 스왑 시간의 대부분은 전송 시간
  • 디스크에 메모리 이미지를 가진 ready-to-run 프로세스로 구성된 준비 큐를 유지
  • roll out, roll in: 우선순위 스케줄링 알고리즘에서 사용되는 스와핑의 변형
  • 다음에 실행시킬 프로세스가 없다면 하나를 swap out하고 하나를 swap in 해야 함
    • 시간: swap in 시간 + swap out 시간 + 디스크 입력 지연 * 2
  • 현재 OS들은 수정 버전을 사용

모바일에서의 Swapping

플랫폼 방식
iOS 자발적으로 메모리 반환을 요구
Android 가용 메모리가 적으면 앱 종료. 빠르게 재시작시킬 수 있도록 앱 상태를 기록

모바일에서는 swapping을 사용하지 않지만 페이징은 지원한다.


메모리 분할 할당

분할 방식 설명
Fixed partition (고정 분할) 고정된 크기로 분할
Variable partition (가변 분할) 가변적인 크기로 분할
  • 분할 개수가 다중 프로그래밍 정도를 제한함
  • hole: 가용 메모리 블록 (= 가용 분할)
  • 종료되는 프로세스는 자신의 분할을 반환하고 인접한 가용 분할과 합쳐짐
  • 운영체제는 할당된 분할, hole의 정보를 유지한다

Hole을 찾는 알고리즘

알고리즘 설명
First-fit (최초 적합) 충분히 큰 최초의 hole을 할당
Best-fit (최적 적합) 충분히 큰 가장 작은 hole을 할당. 크기 순으로 정렬되어 있지 않다면 리스트 전체를 탐색해야 함. 가장 작은 hole을 남김
Worst-fit (최악 적합) 가장 큰 hole을 할당. 크기 순으로 정렬되어 있지 않다면 리스트 전체를 탐색해야 함. 공간 이용률이 좋지 않음

단편화

종류 설명
내부 단편화 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 메모리 공간이 낭비되는 현상
외부 단편화 메모리가 할당 및 해제 작업의 반복으로 메모리 중간중간에 사용하지 않는 메모리가 생기고 이를 합쳤을 때는 메모리가 충분하지만 실제로는 할당할 수 없는 상황


해결 방법

방법 설명
Compaction (압축) 메모리 내용을 이동시켜 모든 가용 메모리가 하나의 커다란 블록이 되도록 만듦. 재할당이 동적이고 실행 시간에 완료될 때만 가능. 외부 단편화를 해결
Paging and Segmentation OS-10) 가상 메모리-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC.html) 참조

관련 문서