전공 수업 내용 정리 (문제 발생시 비공개합니다.)
메모리 관리
운영체제의 핵심 기능 중 하나인 메모리 관리는 프로세스가 실행되기 위해 필요한 메모리를 적절히 할당하고 관리하는 역할
1. 페이징 (Paging) = 분산적재
페이징은 프로세스의 주소 공간을 동일한 크기의 블록으로 나누어 메모리에 분산하여 적재하는 방법
- 페이지(Page): 프로세스의 주소 공간을 동일한 크기의 블록으로 나눈 단위.
- 프레임(Frame): 실제 물리적 메모리를 페이지와 동일한 크기로 나눈 블록.
특징
- 외부 단편화 없음: 모든 페이지와 프레임의 크기가 동일하기 때문에 외부 단편화 문제가 발생하지 않음
- 주소 변환 필요: 논리 주소를 물리 주소로 변환하기 위해 페이지 테이블을 사용해야함
- 논리 주소 구조:
- 페이지 번호 (p): 논리 주소에서 상위 비트로, 페이지 테이블에서 프레임 번호를 찾는 인덱스로 사용된다.
- 오프셋 (d): 논리 주소에서 하위 비트로, 페이지 내의 특정 위치를 나타낸다.
- 주소 변환 과정:
- 논리 주소에서 페이지 번호(p)와 오프셋(d)을 추출합니다.
- 페이지 테이블에서 페이지 번호(p)에 해당하는 프레임 번호를 가져옵니다.
- 물리 주소는 프레임 번호와 오프셋을 결합하여 계산됩니다.
장점
- 외부 단편화가 발생하지 않음
- 메모리 관리가 단순해짐.\
단점
- 내부 단편화가 발생할 수 있다.
- 추가적인 주소 변환 시간이 필요
2. 세그멘테이션 (Segmentation)
프로세스의 논리적 단위(코드, 데이터, 스택 등)를 가변적인 크기의 세그먼트로 나누어 메모리에 적재하는 방식
특징
- 가변 크기 블록: 세그먼트의 크기는 각 세그먼트의 필요에 따라 다릅니다.
- 주소 변환 필요: 세그먼트 테이블을 사용하여 논리 주소를 물리 주소로 변환합니다.
- 논리 주소 구조:
- 세그먼트 번호 (s): 세그먼트 테이블에서 해당 세그먼트의 시작 주소와 길이를 찾는 인덱스.
- 오프셋 (d): 세그먼트 내의 특정 위치를 나타냅니다.
- 주소 변환 과정:
- 논리 주소에서 세그먼트 번호(s)와 오프셋(d)을 추출합니다.
- 세그먼트 테이블에서 세그먼트 번호(s)에 해당하는 베이스 주소와 길이(limit)를 가져옵니다.
- 오프셋(d)이 세그먼트의 길이(limit)보다 크면 오류를 발생시킵니다.
- 물리 주소는 베이스 주소와 오프셋을 합하여 계산됩니다.
장점
- 프로그램의 논리적 구조를 반영하므로 공유 및 보호에 유리
- 메모리 사용의 유연성이 높다.
단점
- 외부 단편화가 발생할 수 있다.
- 복잡한 메모리 관리
3. 가상 메모리 (Virtual Memory)
실제 메모리(RAM)의 크기보다 큰 주소 공간을 프로세스에 제공하여 메모리 활용을 극대화한다.
특징
- 프로세스의 일부분만 메모리에 적재: 전체 프로그램이 아닌 필요한 부분만 메모리에 로드합니다.
- 메모리 효율성 향상: 여러 프로세스를 동시에 메모리에 적재할 수 있습니다.
- 주소 공간 확장: 프로세스는 마치 더 큰 메모리를 사용하는 것처럼 동작합니다.
동작 방식
- 필요한 데이터나 코드가 메모리에 없을 때 디스크에서 해당 페이지를 가져오는 방식으로 동작합니다.
- 페이지 부재(page fault)가 발생하면 운영체제가 필요한 페이지를 메모리에 로드합니다.
4. 페치 정책 (Fetch Policy)
필요한 페이지나 세그먼트를 언제 메모리에 가져올지를 결정한다.
종류
- 요구 페이징 (Demand Paging)
- 페이지가 실제로 필요할 때 메모리에 로드
- 초기에는 페이지 부재가 빈번하지만 시간 경과에 따라 안정됨
- 현재 대부분의 운영체제에서 사용되는 방식
- 선행 페이징 (Prepaging)
- 예상되는 필요 페이지를 미리 메모리에 로드한다.
- 예상이 맞으면 효율적이지만, 불필요한 페이지를 로드하면 오버헤드가 증가한다.
장단점
- 요구 페이징
- 장점: 메모리 사용을 최소화한다.
- 단점: 초기 성능 저하가 발생할 수 있음
- 선행 페이징
- 장점: 페이지 부재 횟수를 줄일 수 있다
- 단점: 잘못된 예측 시 성능 저하가 발생
5. 배치 정책 (Placement Policy)
메모리에서 새로운 페이지나 세그먼트를 어느 위치에 배치할지를 결정한다.
현대 시스템에서의 중요성
- 현대적인 시스템에서는 페이징을 많이 사용하고, 프레임의 크기가 동일하므로 배치 정책은 큰 의미가 없다.
- 외부 단편화 문제가 없어서 주로 세그멘테이션에서 중요하게 고려된다.
6. 교체 정책 (Replacement Policy)
메모리가 가득 차서 새로운 페이지나 세그먼트를 적재할 공간이 없을 때, 어떤 것을 메모리에서 제거할지 결정한다.
필요성
- 제한된 메모리 공간에서 여러 프로세스를 효율적으로 관리하기 위해 필요하다.
- 시스템 성능에 직접적인 영향을 미칩니다.
일반적인 접근 방식
- 가까운 미래에 사용되지 않을 페이지를 교체: 이상적이지만 미래를 알 수 없으므로 과거의 메모리 사용 패턴을 기반으로 예측한다.
주요 알고리즘
- 최적 교체 알고리즘 (Optimal Replacement Algorithm)
- 정의: 이론적으로 가장 적은 페이지 부재를 발생시키는 알고리즘으로, 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체한다.
- 한계: 미래를 정확히 예측해야 하므로 실제 구현은 불가능하며, 성능 평가의 기준으로 사용된다.
- 선입선출 (FIFO: First-In First-Out)
- 정의: 메모리에 가장 먼저 들어온 페이지를 교체
- 장점: 구현이 간단하다.
- 단점:
- 벨라디의 모순 현상: 프레임 수를 늘렸는데도 불구하고 페이지 부재가 증가하는 현상이 발생할 수 있다.
- 사용 빈도를 고려하지 않다.
- 최소 최근 사용 (LRU: Least Recently Used)
- 정의: 가장 오랫동안 사용되지 않은 페이지를 교체한다.
- 장점:
- 실제 사용 패턴을 반영하여 성능이 우수하다.
- 벨라디의 모순 현상이 발생하지 않는다.
- 단점:
- 구현이 복잡하고, 메모리 참조마다 시간 정보를 저장해야 하므로 오버헤드가 큰다.
- 클록 알고리즘 (Clock Algorithm, Second Chance)
- 정의: 페이지마다 한 개의 레퍼런스 비트를 사용하여 최근 사용 여부를 판단하는 알고리즘
- 동작 방식:
- 페이지들이 원형(환형)으로 연결되어 있습니다.
- 포인터가 가리키는 페이지의 레퍼런스 비트를 확인합니다.
- 레퍼런스 비트가 0이면 해당 페이지를 교체합니다.
- 레퍼런스 비트가 1이면 0으로 리셋하고 포인터를 이동합니다.
- 교체할 페이지를 찾을 때까지 이 과정을 반복합니다.
- 장점:
- LRU에 비해 구현이 간단하고 오버헤드가 적다.
- 단점:
- 모든 페이지의 레퍼런스 비트가 1인 경우 포인터가 전체를 한 바퀴 돌아야 하므로 지연이 발생할 수 있다.
- 정확한 LRU를 반영하지 못한다.
'CS > OS' 카테고리의 다른 글
[운영체제] 동기화 (0) | 2025.01.29 |
---|---|
[운영체제] 스레드 (0) | 2025.01.29 |
[운영체제] 프로세스 스케줄링 (0) | 2025.01.28 |
[운영체제] 프로세스 관리 (0) | 2025.01.28 |
[운영체제] 프로세스 (0) | 2025.01.28 |