OS

8. 메모리 관리

깜이오빠 2024. 1. 12. 13:28

0. 메모리 주소

물리 주소 (Physical Address)

  • 데이터와 명령어가 실제로 저장되는 하드웨어 상의 주소
  • 낮은 주소 영역에는 운영체제가, 높은 주소 영역에는 사용자 프로세스가 적재됨

 

논리 주소 (Logical Address)

  • 프로세스마다 독립적으로 가지는 주소 공간 (= 가상 메모리)의 주소
  • 프로세스마다 0번지부터 시작
  • CPU는 물리 주소가 아닌 논리 주소에 근거해 명령어를 해석 및 실행

 

1. 주소 바인딩 (Address Binding)

 

논리 주소를 물리 주소로 변환하는 과정

  • CPU가 메모리와 상호작용하려면 논리 주소는 물리 주소로 변환되어야 하며 이것을 주소 바인딩이라고 함

 

Compile Time Binding

  • 컴파일 시점에 물리 주소가 결정되는 방식
  • 프로그램이 적재된 물리 주소를 변경하고 싶다면 재컴파일이 필요함 

 

Load Time Binding

  • 실행 시점에 물리 주소가 결정되는 방식
  • 프로그램이 종료될 때까지 로더의 책임하에 물리 주소가 고정됨
    → 로더 (Loader) : 사용자 프로그램을 메모리에 적재시키는 프로그램

 

Execution Time Binding (= Run Time Binding)

  • 현대 대부분의 운영체제가 채택
  • 프로그램 실행 중 물리 주소가 변경될 수 있는 방식
  • 그러므로 CPU가 논리 주소를 참조할 때마다 주소 바인딩이 필요
  • 이는 하드웨어적 지원이 필요하므로 MMU가 등장

 

2. MMU (Memory Management Unit)

 

주소 바인딩을 수행하는 하드웨어 장치

  • 베이스 레지스터 (Base Register)
    → 프로세스의 시작 물리 주소를 저장
    → 문맥 교환으로 CPU가 실행 중인 프로세스가 바뀔 때마다 베이스 레지스터의 값을 그 프로세스에 해당하는 값으로 재설정
  • 한계 레지스터 (Limit Register)
    → 논리 주소의 최댓값 즉, 프로세스의 최대 크기를 저장
    → 논리 주소 범위를 벗어나는 명령어 실행으로부터 보호
    → CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 Trap을 발생시켜 해당 프로세스를 강제 종료시킴

 

MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터값을 더하여 논리 주소를 물리 주소로 변환

  • MMU 기법에서 사용자 프로그램이나 CPU는 논리 주소만을 다룰 뿐, 물리 주소는 알지 못하며 알아야 할 필요도 없음 

 

3. 여러 가지 용어

Dynamic Loading

  • 프로세스 전체를 메모리에 미리 다 적재하는 것이 아닌, 해당 루틴이 호출될 때 메모리에 적재하는 것
    → 메모리 이용 효율성 향상
  • 운영체제의 특별한 지원 없이 프로그램 자체에서 구현 가능
    → 운영체제가 라이브러리를 통해 지원

 

Overlays

  • Dynamic Loading과 개념적으로 동일하나, 과거 메모리 용량 부족으로 인해 프로그래머가 직접 구현하던 것을 의미

 

Swapping

  • 사용되지 않는 프로세스를 임시로 보조기억장치의 스왑 영역으로 쫓아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식
  • 일반적으로 Swapper (중기 스케줄러)에 의해 수행됨
    → Swap-In : 메모리 스왑 영역
    → Swap-Out : 메모리 → 스왑 영역
  • Swap Time은 대부분 Transfer Time이 차지

 

Linking

  • 컴파일러가 만들어낸 하나 이상의 목적 파일을 단일 실행 파일로 병합하는 과정
  • Static Linking
    → 라이브러리가 프로그램의 실행 파일 코드에 포함됨
    → 실행 파일의 크기가 커짐
    → 동일한 라이브러리를 각각의 프로세스가 메모리에 적재하므로 메모리가 낭비됨
  • Dynamic Linking
    → 라이브러리가 프로그램 실행 시 연결됨
    → 라이브러리 호출 부분에 해당 라이브러리의 위치를 찾기 위한 Stub이라는 작은 코드 조각이 위치함
    → 라이브러리가 이미 메모리에 적재되어있다면 해당 라이브러리의 라이브러리 루틴 사용
    → 라이브러리가 메모리에 없다면 보조기억장치에서 라이브러리를 읽어와 메모리에 적재 후 라이브러리 루틴 사용
    → 운영체제의 도움이 필요

 

4. 메모리 할당

프로세스는 메모리 내의 빈 공간 (Hole)에 적재되어야 한다. 빈 공간이 여러 개 있다면 프로세스를 어디에 적재할 것인가?

최초 적합 (First Fit)

  • 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견 시 해당 공간에 적재

 

최적 적합 (Best Fit)

  • 운영체제가 메모리 내의 빈 공간을 모두 검색한 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 적재

 

최악 적합 (Worst Fit)

  • 운영체제가 메모리 내의 빈 공간을 모두 검색한 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 적재

 

5. 연속 메모리 할당 & 불연속 메모리 할당

연속 메모리 할당

  • 각각의 프로세스를 메모리의 연속적인 공간에 적재하는 방식

 

연속 메모리 할당 - 고정분할 방식

  • 메모리를 특정 개수의 영구적 분할로 미리 나누어 놓음 (융통성 X)
     분할의 크기는 모두 동일할 수도, 서로 다를 수도 있음
  • 하나의 분할 당 하나의 프로그램을 적재
  • 외부 단편화 O / 내부 단편화 O
     외부 단편화 : 분할 외부에 hole이 발생하는 상황
     내부 단편화 : 분할 내부에 hole이 발생하는 상황

 

연속 메모리 할당 - 가변분할 방식

  • 메모리를 프로그램의 크기를 고려해서 할당하는 방식
  • 분할의 크기 및 개수가 동적으로 변함
  • 외부 단편화 O / 내부 단편화 X
     압축 : 메모리 내의 프로세스를 재배치시켜 흩어져있는 빈 공간을 하나로 모아 외부 단편화를 해결 (오버헤드가 크며 오버헤드 최소화에 대한 명확한 방법을 결정하기 어려움)

 

불연속 메모리 할당

  • 하나의 프로세스를 메모리의 불연속적인 공간에 적재하는 방식
  • 현대 대부분의 운영체제가 채택
  • 예) Paging, Segmentation, Paged Segmentation

 

6. 페이징

메모리의 물리 주소 공간을 프레임이라는 일정한 단위로 자르고, 프로세스의 논리 주소 공간을 페이지라는 프레임과 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 방식

 

단편화

  • 외부 단편화 X (페이지의 크기가 동일하기 때문)
  • 내부 단편화 O (프로세스의 크기가 페이지의 배수라는 보장이 없기 때문)

 

페이지 테이블

 

  • 프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU 입장에서 이를 순차적으로 실행할 수 없음
  • 이를 해결하기 위해 각 페이지 번호에 해당하는 프레임 번호를 매핑시켜주는 페이지 테이블이 존재
     페이지 번호가 곧 페이지 테이블의 인덱스
  • 페이지 테이블은 메모리 내부에 존재하며 프로세스마다 각자의 페이지 테이블을 가짐
  • 페이지 테이블 베이스 레지스터 (Page Table Base Register, PTBR)
     각 프로세스의 페이지 테이블의 시작 주소를 저장
     CPU 내부에 존재
  • 페이지 테이블 길이 레지스터 (Page Table Length Register, PTLR)
     각 프로세스의 페이지 테이블의 크기를 저장
     CPU 내부에 존재

 

MMU의 페이지 테이블을 통한 주소 바인딩 과정

 

  • 페이징 시스템에서는 모든 논리 주소가 기본적으로 <페이지 번호, 변위>의 형식으로 이루어짐
     변위 (Offset) : 접근하려는 주소가 시작 주소로부터 얼마나 떨어져 있는지를 알기 위한 정보
    논리 주소에서의 변위와 물리 주소에서의 변위는 일치
  • 논리 주소 <페이지 번호, 변위>를 페이지 테이블을 통해 물리 주소 <프레임 번호, 변위>로 변환
     페이지 번호 p가 PTLR 값보다 크다면 Trap 발생

 

페이지 테이블의 단점

  • 두 번의 메모리 접근이 필요함
     1. 메모리 내부의 페이지 테이블에 접근
    2. 페이지 테이블을 통해 페이지 번호에 해당하는 프레임에 접근
  • 이를 해결하기 위해 TLB가 등장

 

TLB (Translation Lookaside Buffer)

  • 페이지 테이블의 캐시 메모리
     고속의 하드웨어
     참조 지역성의 원리에 근거하여 엔트리를 캐싱
    문맥 교환 발생 시 새 프로세스의 페이지 테이블을 캐싱하기 위해 flush
  • 페이지 테이블과 TLB에 저장되어있는 정보의 구조는 다름
     페이지 테이블과 달리 프로세스의 모든 페이지에 대한 주소 변환 정보를 가지고 있지 않음
    그러므로 페이지 번호와 이에 대응하는 프레임 번호가 쌍으로 저장되어야 함
  • 또한 특정 페이지에 대한 주소 변환 정보를 확인하기 위해 모든 엔트리를 다 찾아봐야 하는 오버헤드가 발생
     이를 해결하기 위해 병렬 탐색이 가능한 연관 레지스터를 사용

 

MMU의 TLB를 통한 주소 바인딩 과정

 

  • TLB Hit
     논리 주소의 페이지 번호가 TLB에 있을 경우 해당 페이지 번호에 해당하는 프레임 번호를 통해 물리 주소로 변환 
  • TLB Miss
     논리 주소의 페이지 번호가 TLB에 없을 경우 페이지 테이블을 통해 물리 주소로 변환

 

7. 계층적 페이징

페이지 테이블을 페이징하여 여러 단계의 페이지를 두는 방식

  • Inner 페이지 테이블
    여러 개의 페이지로 페이징 된 페이지 테이블
  • Outer 페이지 테이블
     Inner 페이지 테이블을 가리키는 페이지 테이블
  • 더 이상 모든 페이지 테이블 엔트리를 메모리에 유지할 필요가 없음
     Inner 페이지 테이블의 경우 필요 없는 페이지 테이블은 보조기억장치에 저장 후 필요시 메모리에 적재하면 됨
     Outer 페이지 테이블의 경우 항상 메모리에 있어야 함

 

등장 배경

  • 현대의 컴퓨터는 주소 공간이 매우 큰 프로그램을 지원
  • 프로세스의 크기가 커질수록 페이지 테이블의 크기도 커짐
  • 대부분의 프로세스는 자신의 메모리 영역 중 지극히 일부만 사용
  • 그러므로 프로세스를 이루는 모든 페이지 테이블 엔트리를 메모리에 두는 것은 메모리 낭비
  • 계층적 페이징 등장

 

2단계 페이징

 

  • 2단계 페이징 시스템에서는 논리 주소가 <외부 페이지 번호, 내부 페이지 번호, 변위>의 형식으로 이루어짐
     외부 페이지 번호 : Outer 페이지 테이블에서의 변위
     내부 페이지 번호 : Inner 페이지 테이블에서의 변위
  • 주소 바인딩 과정
     1. 외부 페이지 번호를 통해 페이지 테이블의 페이지 (Inner 페이지 테이블)를 찾음
     2. 내부 페이지 번호를 통해 프레임 번호를 찾고 변위를 더함으로써 물리 주소 획득
  • 메모리 낭비를 어떻게 줄이는가?
     사용하지 않는 주소 공간에 대해서는 외부 페이지 테이블의 엔트리를 NULL로 설정

 

다단계 페이징

  • 주소 공간이 더 커지면 다단계 페이징이 필요한 상황이 발생
  • 페이지 테이블의 계층이 늘어날수록 메모리 참조 횟수가 증가
     TLB를 통해 메모리 접근 시간을 줄일 수 있음

 

8. 페이징 - 그 외

페이지 테이블의 엔트리에는 페이지 번호, 프레임 번호 이외에도 다른 중요한 정보들이 있음

 

유효 비트 (Valid Bit)

 

  • 현재 해당 페이지에 접근 가능한지에 대한 여부를 저장
    → 유효 비트 0 : 페이지가 메모리에 적재되어 있지 않은 상황 (+ 프로세스가 해당 페이지를 사용하지 않는 상황)
     유효 비트 1 : 페이지가 메모리에 적재된 상황

 

보호 비트 (Protection Bit)

  • 한 프로세스의 주소 공간은 다른 프로세스에 의해 접근될 수 없으므로 '누구'에 해당하는 접근 권한을 설정할 필요는 없으며, 각 페이지에 대해 '어떠한' 접근을 허용하는지의 정보를 저장
     보호 비트 0 : Read Only
     보호 비트 1 : Read & Write
  • Read Only 페이지에 Write 시도 시 운영체제가 이를 보호
     예) 프로세스 메모리 영역 중 Code 영역은 Read Only 영역

 

그 외에도 참조 비트 (Reference Bit, Dirty Bit), 수정 비트 (Modified Bit) 등이 존재

  • 참조 비트 : CPU가 이 페이지에 접근한 적이 있는지에 대한 여부를 저장
  • 수정 비트 : 해당 페이지에 데이터를 Write한 적이 있는지에 대한 여부를 저장
     페이지가 메모리에서 사라질 때 보조기억장치에 Write를 해야 하는지, 할 필요가 없는지를 판단하기 위해 존재

 

역 페이지 테이블 (Inverted Page Table)

 

  • 페이지 테이블의 역할을 역전시킴
     각 프레임 번호에 해당하는 페이지 번호를 매핑시켜주는 페이지 테이블
     역 페이지 테이블은 메모리 내부에 하나만 존재
  • 장점 : 프로세스 증가가 페이지 테이블의 증가로 이어지지 않아 메모리 활용 효율성 증가
  • 단점 : 최악의 경우 페이지 테이블 전체 탐색이 필요하므로 성능 저하 발생 가능

 

공유 페이지 (Shared Page)

  • 여러 프로세스에 의해 공유되는 공유 코드를 담고 있는 페이지
     공유 코드는 재진입 가능 코드, 순수 코드라고도 불림
    Read Only
     메모리에 하나만 적재되어 효율적
  • 공유 페이지는 자신을 공유하는 모든 프로세스의 논리 주소 공간에서 동일한 페이지 번호를 가져야 함

 

9. 세그멘테이션 (Segmentation)

프로세스의 논리 주소 공간을 의미 단위인 여러 개의 세그먼트로 구성하는 방식

  • 세그먼트는 페이지와 달리 정해진 크기가 아님
  • 일반적으로 Code, Data, Stack 영역을 각각 하나의 세그먼트로 정의
  • 크게는 프로세스 전체를 하나의 세그먼트로 정의
  • 작게는 프로세스를 구성하는 함수를 하나의 세그먼트로 정의

 

단편화

  • 외부 단편화 O (세그먼트의 크기가 동일하지 않기 때문)
  • 내부 단편화 X (세그먼트의 크기가 동일하지 않기 때문)

 

세그먼트 테이블

  • 페이징 기법에서는 모든 페이지의 크기가 동일하므로, 페이지 테이블의 엔트리에 프레임 번호만 유지
  • 세그멘테이션 기법에서는 세그먼트의 크기가 동일하지 않으므로, 세그먼트 테이블의 엔트리에 baselimit (세그먼트 크기)를 유지
  • 세그먼트 테이블 베이스 레지스터 (Segment Table Base Resister, STBR)
     각 프로세스의 세그먼트 테이블의 시작 주소를 저장
     CPU 내부에 존재
  • 세그먼트 테이블 길이 레지스터 (Segment Table Length Resister, STLR)
     각 프로세스의 세그먼트 테이블의 크기를 저장
     CPU 내부에 존재

 

MMU의 세그먼트 테이블을 통한 주소 바인딩 과정

 

  • 세그멘테이션 시스템에서는 모든 논리 주소가 기본적으로 <세그먼트 번호, 변위>의 형식으로 이루어짐
  • 논리 주소 <세그먼트 번호, 변위>를 세그먼트 테이블을 통해 물리 주소 <프레임 번호, 변위>로 변환
     세그먼트 번호 s가 STLR 값보다 크다면 Trap 발생
     변위 d가 limit보다 크다면 Trap 발생

 

장점

  • 세그먼트는 의미 단위이기 때문에 공유보안에 있어 페이징보다 효과적
  • 일반적으로 세그멘테이션이 페이징보다 테이블로 인한 메모리 낭비가 적음

 

10. Paged Segmentation

 

세그멘테이션을 먼저 수행하고 각 세그먼트 별로 페이징을 수행하는 방식

  • 즉, 세그먼트 하나가 여러 개의 페이지로 구성됨

 

단편화

  • 외부 단편화 X
  • 내부 단편화 O

 

이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.

http://www.kocw.net/home/cview.do?cid=3646706b4347ef09

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

 

또한 반효경 교수님의 "운영체제와 정보기술의 원리" 책을 참고하였습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=238716482

 

운영체제와 정보기술의 원리

온라인 공개강좌 KOCW에서 꾸준히 호평받아온 이화여대 반효경 교수의 컴퓨터 입문서이다. 단순히 컴퓨터 관련 전문 지식을 전달하는 것에서 그치지 않고, 복잡한 문제를 효율적으로 풀 수 있는

www.aladin.co.kr