[CS] 페이징과 스와핑을 활용한 가상 메모리 관리 기법 이해하기
컴퓨터 시스템에서 프로세스는 작업을 처리하기 위해 반드시 데이터를 메모리에 저장해야 한다. 하지만 물리적인 메모리 용량은 제한적이기 때문에, 모든 프로세스가 동시에 메모리에 상주할 수는 없다.
이를 해결하고자 운영체제는 다양한 메모리 관리 기법을 통해 메모리 자원을 효율적으로 배분하고 활용한다. 이러한 기법들은 프로세스의 메모리 사용량을 최적화하고, 실행 속도를 보장하며, 시스템의 안정성을 유지하는 데 중요한 역할을 한다.
오늘은 그중에서도 연속적 메모리 할당, 스와핑, 페이징 등 현대 운영체제에서 흔히 사용되는 메모리 관리 기법들을 자세히 살펴보며, 각각의 장단점과 적용 사례에 대해 알아보자.
이 과정을 통해 컴퓨터 시스템이 어떻게 메모리 자원을 관리하고, 이를 통해 성능을 극대화하는지 이해할 수 있을 것이다.
연속적 메모리할당
- 프로세스 영역에 연속적으로 프로세스를 할당해 놓은 것을 의미한다.
- 메모리를 차곡차곡 쌓아놓은 형태
- 이러한 방식은 비효율적이며 후에 페이징이라는 방식으로 프로세스를 관리하는 것이 좋다.
스와핑
- 현재 사용하지 않는(휴면상태)인 프로세스를 보조기억장치에넘겨서 효율적으로 메모리를 관리하는 기법
- 스왑아웃 : 무직백수 프로세스를 부조기억장치로 내쫓는 작업
- 스왑 인 : 할일이 생긴 프로세스를 다시 메모리에 들여보내는 작업
- 스왑 영역 : 무직백수 프로세스들이 모여지낼 보조기억 장치의 일부 공간
스와핑의 장점
- 내가 로아, 마크, 림월드 같은 큰 메모리를 필요로 하는 프로세스를 동시에 띄어 놓아야 하는 상황이있다.
- 하지만 프로그램들의 메모리 용량은 물리 메모리의 허용된 용량보다 큰데 그럴때 빛을 발한다.
- 실제로 사용하지 않는 프로세스는 보조기억장치에 넘기고 해당 자리에 다른 프로세스를 넣어서 모든 프로세스가 돌갈 수 있게 해준다.
명령어
연속 메모리 할당 방법
최초 적합(first-fit)
- 프로세스를 적재할 공간을 발견하자마자 해당 공간에 적재하는 방식
- Greedy Algorithm같은 방식이다.
- 빠르게 할당 가능하다.
최적 적합(best-fit)
- 빈공간들 중 프로세스가 들어설 수 있는 가장 작은 공간에 할당하는 방
최악 적합(worst-fit)
- 가장 큰 공간에 할당하는 방법
- 외부 단편화문제 때문에 효율 낭비가 심한 방법이다.
외부 단편화
- 외부 단편화란 메모리 중간중간 작은 빈 공간이 생겨나는 것을 뜻한다.
- 이 현상의 단점은 CS MemoryStream과 같이 큰 용량의 프로세스는 여러개의 작은 공간에 할당 할 수 없는 문제가 생긴다.
해결법1 : 컴팩션
- Garbage Collector의 메모리 컴팩션과 같은 원리다.
- 띄엄띄엄 놓여진 프로세스 메모리들을 압축해서 하나로 연결한다.
단점
- 오버헤드가 심하다.
- 컴팩션중 프로세스 이용이 불가하다.
해결법2: 페이징
- 가상 메모리 기법으로 현대 운영체제 대부분이 사용하는 메모리 관리 기법이다.
14-2 페이징을 이용한 가상 메모리 관리
페이징(paging)이란
- 페이징이란 하나의 프로세스를 잘게 나눠서 외부 단편화된 메모리 공간에 프로세스를 할당함으로써 비연속적인 메모리 공간을 효율적으로 사용할 수 있게 해주는 메모리 관리 기법이다.
- 좀 더 문서체로 말하자면 다음과 같다.
- 프로세스의 논리 주소 공간을 페이지(page) 단위로 자른다.
- 페이지 단위는 일정하나 일부 운영 체제에서는 Huge page라고 큰 용량의 페이지를 할당하는 경우도 있다.
- 메모리의 물리 주소 공간을 프레임(frame)라는 단위로 페이지와 같은 크기로 자른다.
- 그리고 페이지를 프레임에 끼워 맞추는 방법이다.
- 프로세스의 논리 주소 공간을 페이지(page) 단위로 자른다.
페이지 스와핑
- 페이지를 스와핑 한다고? 그럼 프로그램이 제대로 돌아가지 않는거 아닌가?
- 그렇지 않다. 사실 프로세스가 실행되는 데는 모든 페이지가 필요한 것이아니다.
- 일부 페이지를 보조기억 장치로 아웃시킴으로 써 논리 메모리 용량이 물리 메모리 용량 보다 더 크게 프로세스를 할당 할 수 있다.
페이지 테이블
- 페이지 방식의 메모리 관리 기법은 불연속적으로 메모리가 존재한다.
- 그럼 CPU에서는 해당 메모리 주소들을 어떻게 관리할까?
- 분명 주소가 있어야 하는데 어디에 주소를 넣어놓는거지??
- 그것이 바로 페이지 테이블(Page table)
- 페이지와 프레임 주소를 연결 시켜준다.
내부 단편화
- 그런데 이런 페이지도 단점이 있다!
- 바로 프로세스를 페이지로 자를 경우 마지막 페이지 부분이 프로세스 크기와 딱 맞아 떨어지지 않아서 빈 공간이 생기는 현상이다.
- 외부 단편화가 물리 메모리주소에 단편화 현상이 발생한 거라면 내부 단편화는 프로세스 자체에 단편화 현상이 발생한 것이다.
- 페이지 크기 명령
Process Table Base Register(PTBR)
- 페이지 테이블의 위치를 가리키는 주소
- 이것은 메모리가 아니라 [[CPU]]에 저장되어있다.
뭔가…? 비효율 적인데
- 원하는 페이지에 접근하려면 페이지 테이블 > 페이지 이렇게 두번 접근해야 한다.
- 이는 굉장히 비효율적이다.
혼자 공부하는 컴퓨터구조+운영체제
댓글남기기