이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.
프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라고 한다.
스와핑(Swaping)
현재 실행되지 않는 프로세스들을 보조기억장치의 일부 영역으로 쫓아내고, 메모리에 생긴 빈 공간에 새로운 프로세스를 적재시키는 방법
- 스왑 영역(swap space) : 프로세스들이 쫓겨나서 머무는 보조기억장치의 일부 영역
- 스왑 아웃(swap out) : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인(swap in) : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 스왑 아웃되었던 프로세스가 다시 스왑 인이 될 때는 이전 물리 주소와 다른 주소에 적재될 수 있음
스와핑을 이용하면 프로세스들이 요구하는 메모리 공간 크기가 실제 메모리 크기보다 크더라도 모든 프로세스를 동시 실행할 수 있다.
아래 그림은 스와핑을 이용하여 프로세스들을 모두 실행시키는 것을 나타낸 것이고, 검은색 영역은 프로세스를 적재할 수 있는 메모리 영역을 나타낸다.
메모리 할당
프로세스는 메모리의 빈 공간에 할당되어야 한다.
빈 공간이 여러 개 있다면 어떤 공간에 메모리를 할당할지에 대한 방법으로 아래의 세 가지가 있다.
- 최초 적합(first-fit)
- 최적 적합(best-fit)
- 최악 적합(worst-fit)
아래의 설명에서 각 예시들은 모두 200MB 메모리에서 새로 적재할 프로세스가 20MB라고 가정한다.
최초 적합
- 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
- 적재할만한 공간을 찾으면 바로 할당하기 때문에 다른 방식보다 탐색시간이 적고, 빠른 할당이 가능함
최적 적합
- 운영체제가 빈 공간을 모두 검색해 본 뒤, 적재 가능한 가장 작은 공간에 할당하는 방식
최악 적합
- 운영체제가 빈 공간을 모두 검색해 본 뒤, 적재 가능한 가장 큰 공간에 할당하는 방식
단편화(external fragmentation)
- 주기억장치에 프로그램을 할당하고 반납하는 과정에서 발생하는 사용되지 않는 작은 조각 공간을 뜻한다.
- 주기억장치 상에서 빈번하게 기억장소가 할당되고 반납됨에 따라 기억장소들이 조각들로 나누어지는 현상을 뜻하기도 한다.
최초 적합, 최적 적합, 최악 적합 모두 단편화를 피해갈 수 없다.
단편화에는 내부 단편화와 외부 단편화가 있다.
내부 단편화(internal fragmentation)
- 내부 단편화란 주기억장치 내 사용자 영역이 실행 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남게 되는 현상을 말한다.
위와 같이 100MB의 메모리에 80MB 크기의 프로세스를 올리게 되면, 20MB가 남게 된다.
즉, 이렇게 적은 크기의 잔여 메모리가 발생해 해당 메모리를 사용할 수 없게 되는 것을 내부 단편화라고 한다.
외부 단편화(external fragmentation)
- 외부 단편화란 남아있는 총 메모리 공간이 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적(contiguous)이지 않아 발생하는 현상이다.
위와 같이 남아있는 메모리 공간은 50MB + 50MB = 100MB로 요청한 메모리 공간 80MB보다 크지만, 남아있는 공간이 연속적이지 않아서, Process C를 할당할 수가 없게 된다.
따라서 남아있는 메모리 공간이 낭비되게 되는 문제가 발생한다.
이를 외부 단편화라고 한다.
외부 단편화 해결방안 : 압축(compaction)
- 외부 단편화 문제를 해결하기 위해서 압축 기법을 사용할 수 있다.
- 압축 기법은 주기억장치 내 분산되어 있는 단편화된 공간들을 통합하여 하나의 커다란 빈 공간을 만드는 작업을 의미한다.
아래의 그림은 외부 단편화가 발생한 상황을 나타낸 그림이다.
이 상황에서 프로세스 D를 B 밑으로 이동시키면 된다.
즉, 프로세스 A, B, D를 연속적으로 할당시키면 빈 공간이 연속적으로 100MB가 되어 80MB인 프로세스 C를 적재시킬 수 있게 된다.
하지만 압축이 무조건 좋은 점만 있는 것은 아니다. 압축의 단점은 아래와 같다.
- 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 작업을 중지해야 한다.
- 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기가 어렵다.
- 메모리에 있는 내용을 옮기는(압축하는) 작업은 많은 오버헤드를 야기한다.
'컴퓨터 구조 & 운영체제 > 운영체제' 카테고리의 다른 글
[운영체제] 페이지 교체와 프레임 할당 (0) | 2023.07.08 |
---|---|
[운영체제] 페이징을 통한 가상 메모리 관리 (0) | 2023.07.07 |
[운영체제] 교착 상태(Deadlock) 해결 방법 (0) | 2023.07.05 |
[운영체제] 교착 상태(Deadlock)의 개념 (0) | 2023.07.04 |
[운영체제] 프로세스와 스레드의 동기화 기법(뮤텍스 락, 세마포, 모니터) (0) | 2023.07.03 |