연속 메모리 할당
(가변분할방식 위주의 설명)
연속 메모리 할당
프로세스 A는 A의 크기 만큼 메모리 주소를 할당 받아 연속적으로 배치되고, 프로세스 B는 A 이후에 B의 크기만큼 연속적인 메모리 주소를 할당받아 배치한다.
- 이렇게 프로세스에 연속적인 메모리 공간을 할당하는 방식을
연속 메모리 할당
이라고 한다.
연속 메모리 할당의 문제점
⇒ 이로 인해서 Paging 이 나타남
스와핑(Swapping)
- [실행되지 않은 프로세스, I/O 작업의 요구로 대기 상태가 된 프로세스, 오랫동안 사용되지 않은 프로세스] 들을 임시로 보조기억장치 일부 영역
(스왑영역)
에 쫓아내고 이 빈 공간에 또 사용해야 할 프로세스를 적재하여 실행하는 방식
☑️ 스왑 아웃
: 현재 실행되지 않은 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
☑️ 스왑 인
: 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
➕) 스와핑 장점
- RAM의 메모리가 부족할때, 가상 메모리 공간을 제공해 프로그램이 실행될 수 있도록 해준다.
- “프로세스들이 요구하는 메모리 공간 크기 > 실제 메모리 크기” 인 경우의 문제를 해결해줌
(A,B,C,D) 프로세스 메모리 공간 크기 > 실제 메모리 크기
효율성 증가
: 스와핑을 통해 사용되지 않는 메모리 공간을 디스크로 옮겨 더 중요한 데이터나 프로그램을 위한 RAM공간이 확보된다.
➖) 스와핑 단점
- 스와핑은 디스크 접근 속도가 RAM보다 느리기 때문에
시스템의 성능 저하
를 불러올 수 있다.
메모리 할당 (Memory Allocation)
⇒ 고정 분할 방식에도 적용이 가능하다.
1. 최초 적합(first-fit)
- 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다 적재할 수 있는 공간을 발견하면 최초에 발견된 공간에 프로세스를 배치하는 방식
⇒ 탐색중 발견 즉시 배치하므로, 검색 최소화
,빠른 할당
2. 최적 적합(best-fit)
- 운영체제가 빈 공간을 모두 검색한 다음 , 적재 가능한 가장 작은 공간에 할당
⇒ 효율적인 메모리 공간 사용
3. 최악 적합
- 운영체제가 빈 공간을 모두 검색해본 뒤, 적재 가능한 가장 큰 공간에 할당
Fragmentation(단편화) 외부 단편화 내부 단편화
☑️ 외부단편화
- RAM에서 메모리의 공간이 프로세스를 할당하기 어려울만큼 작은 메모리 공간들로 인해서 메모리가 낭비되는 현상을 의미한다.
✅ 외부 단편화 해결 방법
- 메모리 압축 (compaction) : 여기저기 흩어져 있는 빈공간을 하나로 모으는 방식
→ 😡 문제점 : 메모리의 내용을 옮기는 작업은 많은 오버헤드를 야기함 , 어떤 프로세스를 어떻게 움직여야 오베헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어렵다.
가상 메모리 기법
, 페이징
이 두개가 가장 많이 사용되고 있는 기법이다.
☑️ 내부단편화
- 고정크기로 정해진 메모리 안에서 할당되고 남는 메모리
페이징 & 세그멘테이션
페이징이란? (Paging)
→ 외부 단편화 해결, 내부 단편화 존재
- 프로세스를 일정크기로 자르고, 이를 메모리에 불연속적으로 할당해서 외부단편화 문제를 해결함
- 프로세스의 논리주소 공간을 페이지(page)라는 일정 단위로 자르고,
- 메모리의 물리 주소 공간을 프레임이(frame)이라는 페이지와 동일한 일정한 단위로 자른뒤
- 페이지를 프레임에 할당하는 가상 메모리 관리 기법
🗣️ 메모리 주소 2가지
- 물리적 메모리주소 : 실제 메모리 상에 존재하는 주소를 의미한다.
- 논리적 메모리주소 : 프로세스에 메모리가 할당이 됐을때, 현재 물리메모리 안에서 실행중인 메모리의 위치를 나타내는 주소로, 프로세스 내부에서는 0~끝 까지를 의미하게 되며, 즉, 프로세스 내부에서 사용하는 메모리의 위치를 나타내는 값이다.
페이징의 문제점
: 홀의 크기가 균일하지 않은 문제가 없어지지만, 주소 변환이 복잡해짐
=========================================================
세그멘테이션 (Segmentation)
→ 내부 단편화 해결, 외부 단편화 존재
- 페이징기법에서 가상메모리를 같은 크기의 단위로 분할했지만 세그멘테이션기법에서는 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환을 하게 된다.
- 프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트(Segment)로 분할하여 메모리에 할당
- 각 세그먼트는 연속적인 공간에 저장
- 세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
- 페이징과 마찬가지로 mapping을 위한 segment table 필요(각 세그먼트 항목별 세그먼트 시작주소와 세그먼트의 길이 정보를 가지고 있음)
세그멘테이션 문제점
: 프로세스가 필요한 메모리 만큼 할당해주기 때문에 내부단편화는 일어나지 않으나, 여전히 중간에 프로세스가 메모리를 해제하면 생기는 구멍, 즉 외부 단편화 문제는 여전히 존재한다.
Paging vs Segmentation
- Paging은 고정 크기를 가짐
- Segmentation은 가변 크기를 가짐
- Paging은 내부 단편화 발생 가능, Segmentation은 외부 단편화 발생 가능
☑️ 가변분할방식 vs 고정분할방식
가변분할방식 : 남는공간 재활용 되기때문에 내부 단편화
안일어난다고 본다 .
고정분할방식 : 남는공간을 재활용 안하기때문에 내부 단편화
일어난다.