매주 진행하는 면접스터디에서 아래의 질문들에 대한 정리를 모은 글입니다.
Interview_Question_for_Beginner/OS
[운영체제]Swapping 스와핑(Swap 스왑)이란?
각각의 프로세스는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있다. 단지, 운영체제만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않는다.
Swap이라는 용어는 두 개의 값을 맞바꾼다는 의미이다.
메모리 관리를 위해 사용되는 기법이다. 표준 스와핑 방식으로는, Round-Robin과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스 메모리를 보조 기억장치(ex. 하드디스크)로 보내고 다른 프로세스의 메모리를 불러 들일 수 있다.
이 과정을 Swap(스왑시킨다)라고 한다. 주 기억장치(RAM)으로 불러오는 과정을 Swap-In, 보조 기억장치(ex. 하드디스크)로 내보내는 과정을 Swap-Out이라 한다. 이 과정은 큰 디스크 전송시간이 필요하기 때문에 현재에는 메모리 공간이 부족한 경우에 이루어진다.
하드디스크에 있던 것을 메모리에 다시 로딩시켜야 하니까 문맥 교환 시간이 길지만, 부족한 메모리에 더 많은 프로세스를 실행할 수 있다는 장점이 존재한다.
두 개념은 비슷하다. 가상 메모리란, 메인 메모리가 8기가라면 10기가짜리 프로그램을 돌릴 수 있게 해주는 방법이다. 8기가만 일단 메모리에 올려 놓고 2기가는 하드디스크에 저장하고 있다가 필요하면 부분적으로 바꾼다.
프로세스들이 메모리에 적재되고 제거되는 일이 반복되다보면, 프로세스들이 차지하는 메모리 틈 사이에 사용하지 못할 만큼에 작은 자유공간들이 늘어나느데, 이를 단편화라고 한다. 단편화에는 2가지 종류가 있다.
메모리 공간 중 사용하지 못하게 되는 일부분을 의미한다. 물리 메모리(RAM)에서 사이사이 남는 공간들이 있는 것을 의미한다.
프로세스가 사용하는 메모리 공간에 포함된 남는 부분을 의미한다. 예를 들어, 메모리 분할 자유 공간이 10,000B가 있고, 프로세스1이 9,000B를 사용한다면 1000B를 사용하지 않게 된다.
외부 단편화를 해결하기 위한 방법이다. 프로세스가 사용하는 공간들을 한쪽으로 몰아 충분한 자유공간을 확보한다. 그러나 작업효율이 좋지 않다.
하나의 프로세스가 사용하는 메모리 공간이 연속적이여야 한다는 제약을 없앤 메모리 관리 방법으로 외부 단편화와 압축 작업을 해소한다. 물리 메모리는 Frame이라는 고정 크기로 분리되어 있고, 프로세스가 점유하는 논리 메모리는 페이지라고 불리는 고정 크기의 블록으로 분리된다.
페이징 기법을 사용함으로써 논리 메모리는 물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배체됨으로서 외부 단편화를 해결한다. 하나의 프로세스가 사용하는 공간은 여러 페이지로 나뉘어서 관리되고, 개별 페이지는 순서에 상관없이 물리 메모리에 있는 프레임에 mapping되어 저장된다.
내부 단편화 문제가 있다. 예를 들어, 페이지가 1024B이고 프로세스가 1025B의 메모리를 요구한다고 가정한다면 1023B가 남게 된다.
페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할한다.
서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되다보면, 외부에 여러 조각들이 생기게 된다.