메모리 관리

운영체제(OS)의 메모리 관리란 컴퓨터 시스템의 메모리 자원을 효율적으로 관리하고, 프로그램들이 안정적이고 효율적으로 실행되도록 지원하는 기능을 의미합니다.
메모리 관리는 다음과 같은 주요 기능으로 구성됩니다.


1. 메모리 관리의 목적

프로세스 격리

각 프로세스가 서로의 메모리에 영향을 주지 않도록 보호.

효율적인 자원 활용

메모리의 사용을 최적화하여 시스템 성능을 극대화.

빠른 접근

프로그램이 메모리에 빠르게 접근할 수 있도록 지원.

안정성 및 보안

메모리 관리 오류로 인한 시스템 불안정성 및 보안 문제 방지.


2. 메모리 관리 기법

2.1 물리적 메모리와 논리적 메모리

물리적 메모리 (Physical Memory)

실제 RAM의 주소 공간.

논리적 메모리 (Logical Memory)

프로그램이 사용하는 가상 주소 공간.

 

2.2 메모리 할당 방식

연속 메모리 할당 (Contiguous Memory Allocation)

단일 분할: 전체 메모리를 하나의 프로세스가 사용.
다중 분할: 메모리를 여러 프로세스가 연속적으로 사용.
단점: 외부 단편화(프로세스가 종료된 후 남은 작은 메모리 공간)

분할 메모리 할당 (Partitioned Allocation)

고정 분할: 메모리를 크기가 고정된 여러 분할로 나눔.
가변 분할: 필요에 따라 크기가 다른 분할로 나눔.
단점: 고정 분할의 경우 내부 단편화(분할 크기보다 작은 메모리 사용)

 

2.3 가상 메모리 (Virtual Memory)

페이징 (Paging)

메모리를 같은 크기의 페이지로 나누어 관리.
페이지 테이블: 논리적 페이지 번호와 물리적 프레임 번호를 매핑.
장점: 외부 단편화 문제 해결, 메모리 효율성 향상.
단점: 페이지 테이블 관리의 오버헤드.

세그멘테이션 (Segmentation)

메모리를 논리적 단위(세그먼트)로 나누어 관리.
세그먼트 테이블: 세그먼트 번호와 물리적 주소를 매핑.
장점: 프로그램 논리 구조 반영, 효율적 메모리 사용.
단점: 외부 단편화 발생 가능.

페이징과 세그멘테이션 혼합 (Segmented Paging)

세그먼트를 페이지로 나누어 관리.
장점: 세그멘테이션의 논리적 구조와 페이징의 효율성 결합.


3. 메모리 관리 전략

3.1 교체 알고리즘
메모리가 부족할 때, 어떤 페이지를 교체할지 결정하는 방법입니다.

FIFO (First In First Out)

가장 먼저 들어온 페이지를 교체.

LRU (Least Recently Used)

가장 오랫동안 사용되지 않은 페이지를 교체.

LFU (Least Frequently Used)

가장 적게 사용된 페이지를 교체.

Optimal Page Replacement

앞으로 가장 오랫동안 사용되지 않을 페이지를 교체 (이론적 모델).

3.2 스와핑 (Swapping)
프로세스를 메모리에서 디스크로, 디스크에서 메모리로 옮기는 작업.
메모리가 부족할 때 프로세스를 임시로 디스크로 이동시켜 메모리를 확보.

3.3 캐시 메모리
CPU와 메인 메모리 사이에 위치한 고속 메모리.
자주 사용되는 데이터나 명령어를 저장하여 접근 속도를 향상.


4. 메모리 보호

가상 메모리

프로세스가 자신에게 할당된 메모리 외부를 접근하지 못하도록 보호.


5. 메모리 단편화

내부 단편화

고정 크기의 블록 할당 시, 사용되지 않는 공간이 발생.

외부 단편화

가변 크기의 블록 할당 시, 사용되지 않는 작은 블록들이 메모리 공간에 흩어져 발생.

해결 방법

메모리 압축 (Compaction)

메모리 블록을 모아서 연속된 공간을 만듦.

페이징

메모리를 고정 크기의 페이지로 나누어 외부 단편화 문제 해결.

버디 시스템 (Buddy System)

메모리를 2의 제곱 크기로 나누어 효율적으로 할당.


운영체제의 메모리 관리는 복잡하고 중요한 작업으로, 효율적인 메모리 사용과 프로그램 간의 보호를 위해 다양한 기법과 전략이 사용됩니다. 
이러한 기술들은 시스템의 성능과 안정성을 보장하며, 메모리 자원을 최대한 효율적으로 활용할 수 있도록 합니다.

 

프로세스 관리

운영 체제(OS)의 프로세스 관리 방법은 컴퓨터 시스템의 효율성과 안정성을 유지하는 데 중요한 역할을 합니다. 
프로세스 관리는 여러 프로세스가 시스템 자원을 효율적으로 사용할 수 있도록 조정하고 제어하는 것을 포함합니다. 
프로세스 관리의 주요 요소와 방법을 설명하겠습니다.


1. 프로세스 개념

프로세스

실행 중인 프로그램의 인스턴스를 의미합니다. 
프로세스는 코드, 데이터, 스택, 프로세스 제어 블록(PCB) 등으로 구성됩니다.

프로세스 제어 블록(PCB)

운영 체제가 각 프로세스를 관리하기 위해 사용하는 데이터 구조로, 프로세스의 상태, 프로그램 카운터, CPU 레지스터, 메모리 관리 정보 등을 포함합니다.


2. 프로세스 상태 
프로세스는 실행 중에 여러 상태를 거칩니다. 
주요 상태는 다음과 같습니다.

생성(New)

프로세스가 생성되고 있는 상태입니다.

준비(Ready)

실행 준비가 완료되어 CPU 할당을 기다리고 있는 상태입니다.

실행(Running)

CPU를 할당받아 실행 중인 상태입니다.

대기(Waiting)

입출력 작업 등의 이벤트를 기다리는 상태입니다.

종료(Terminated)

프로세스 실행이 완료된 상태입니다.


3. 프로세스 스케줄링
운영 체제는 CPU 시간을 효율적으로 분배하기 위해 프로세스 스케줄링을 수행합니다. 
주요 스케줄링 알고리즘은 다음과 같습니다.

선입선출(First-Come, First-Served, FCFS)

먼저 도착한 프로세스를 먼저 실행합니다.

최단 작업 우선(Shortest Job Next, SJN)

실행 시간이 가장 짧은 프로세스를 먼저 실행합니다.

우선순위(Priority Scheduling)

우선순위가 높은 프로세스를 먼저 실행합니다.

라운드 로빈(Round Robin)

각 프로세스에 동일한 시간 할당량을 주고 순환하며 실행합니다.

다단계 큐(Multi-Level Queue)

프로세스를 여러 큐로 분류하고 각 큐에 다른 스케줄링 알고리즘을 적용합니다.


4. 프로세스 생성과 종료

프로세 생성

fork()

UNIX 시스템에서 새로운 프로세스를 생성하는 시스템 호출입니다. 
부모 프로세스의 주소 공간을 복사하여 자식 프로세스를 생성합니다.

exec()

자식 프로세스가 새로운 프로그램을 실행하도록 합니다.

CreateProcess()

Windows 시스템에서 새로운 프로세스를 생성하는 함수입니다.

프로세스 종료

exit()

프로세스가 종료할 때 호출되는 함수로, 사용한 자원을 반환합니다.

wait()

부모 프로세스가 자식 프로세스의 종료를 기다리게 합니다.

kill()

특정 프로세스를 강제로 종료하는 시스템 호출입니다.


5. 프로세스 동기화
프로세스 간의 상호작용을 조정하기 위해 동기화 기법을 사용합니다.
주요 동기화 기법은 다음과 같습니다.

세마포어(Semaphore)

공유 자원의 접근을 제어하는 정수 변수입니다. 
P(wait)와 V(signal) 연산을 사용하여 접근을 제어합니다.

뮤텍스(Mutex)

상호 배제 기법으로, 한 번에 하나의 프로세스만 임계 구역에 접근할 수 있도록 합니다.

모니터(Monitor)

동기화 문제를 해결하기 위해 고안된 고수준의 추상화입니다.


6. 프로세스 통신
프로세스 간의 데이터 교환과 상호작용을 위해 다양한 통신 기법을 사용합니다.

파이프(Pipe)

단방향 통신 채널로, 한 프로세스에서 다른 프로세스로 데이터를 전달합니다.

메시지 큐(Message Queue)

메시지를 큐에 저장하고, 프로세스 간에 메시지를 교환합니다.

공유 메모리(Shared Memory)

프로세스들이 공통 메모리 영역을 공유하여 데이터를 교환합니다.

소켓(Socket)

네트워크를 통한 프로세스 간 통신을 지원합니다.


운영 체제의 프로세스 관리 방법은 시스템의 효율성과 안정성을 유지하는 데 중요한 역할을 합니다. 
프로세스 생성, 스케줄링, 동기화, 통신 등의 기법을 통해 여러 프로세스가 효율적으로 자원을 공유하고 협력할 수 있도록 합니다. 
이러한 기법들을 이해하고 활용하면 운영 체제의 작동 원리를 깊이 이해하고, 보다 효율적인 시스템을 설계할 수 있습니다.

 

+ Recent posts