가상 메모리란?
• 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이다.
◦ 가상 메모리를 사용하면 물리적 메모리 공간보다 큰 프로세스를 수행할 수 있다.
◦ 예) 100MB 메모리 공간에서 200MB 크기의 프로세스를 수행할 수 있음
• 어떻게 가능한가?
◦ 프로세스를 실행할 때 프로세스 전체가 아닌, 실행에 필요한 일부(페이지 단위)만 메모리에 올린다.
◦ 이를 Demanding Paging 기법이라고 한다. (현재 필요한 페이지만 메모리에 올리는 것)
• 운영 체제는 물리 메모리의 제약을 갖고 있는 주기억장치를 보조하기 위해 디스크를 보조기억장치(Paging Space)로 사용한다.
◦ 주기억장치와 보조 기억 장치를 묶어 하나의 가상 메모리를 구현한다.
◦ 프로세스는 할당 받은 메모리가 실제 메모리인지, Swap 영역인지 모른다.
◦ Swap 영역은 실제 메모리가 아니기 때문에 지연시간이 발생하므로 가급적이면 사용하지 않는 것이 좋다.
만약 Swap 영역의 사용일 계속해서 증가한다면 메모리 누수를 의심해 봐야 한다.
• 가상 메모리 사용의 장점
◦ 더 많은 프로그램을 동시에 수행할 있어 CPU 이용률과 처리율이 높아진다.
◦ 프로그래머는 메모리 크기에 관한 문제를 염려할 필요 없이 쉽게 프로그램을 작성할 수 있다.
◦ 프로그램을 교체할 때 발생하는 메모리 교체 성능 문제를 최소화할 수 있다.
• 이런 가상 메모리 기법은 불연속 할당 기법인 페이징과 세그멘테이션 기법에 활용할 수 있다.
페이징 기법
• 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식
• 단순 페이징
◦ 각 프로세스를 일정한 길이의 페이지로 나눈다. 이 때 페이지의 길이는 프레임과 같은 길이가 되도록 한다.
- 페이지 : 고정 사이즈의 가상 메모리 내 프로세스 조각
- 프레임 : 페이지 크기와 같은 주 기억 장치의 메모리 조각
◦ 외부 단편화 (발생 X), 내부 단편화 (발생 O)
• 가상 메모리를 활용한 페이징
◦ 단순 페이징과 달리 프로세스 페이지 전부를 로드할 필요가 없다.
- 필요한 페이지가 있으면 나중에 자동으로 불러온다.
◦ 복잡한 메모리 관리로 인한 오버헤드 발생할 수도 있다.
• 장점
◦ 논리 메모리가 물리 메모리에 저장될 때 연속되어 저장될 필요가 없고, 물리 메모리의 남는 프레임에 적절히 배치되기 때문에
외부 단편화가 생기지 않는다.
• 단점
◦ 내부 단편화 문제가 발생할 수 있다. 페이지 단위를 작게하면 해결할 수 있지만, 페이지 매핑 과정이 복잡해져 비효율적이다.
세그멘테이션 기법
• 세그멘트 : 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것
• 세그멘테이션 기법 : 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위로 분할해서 메모리에 적재하는 방식
◦ 페이징 : 소고기를 같은 크기로 잘라서 보관하는 것
◦ 세그멘테이션 : 소고기를 부위 별로 잘라서 보관하는 것
• 의미가 같지 않는 논리적 내용을 기준으로 프로그램을 분할하기 때문에 각 조각의 크기가 동일하지 않다.
• 이러한 분할 방식을 제외하면 페이징과 동일하기 때문에, 매핑 테이블의 동작 방식은 페이징 기법과 동일하다.
• 단순 세그멘테이션
◦ 각 프로세스는 여러 세그멘트로 나뉨
◦ 외부 단편화 (발생 O), 내부 단편화 (발생 X)
◦ 메모리 사용 효율 개선 및 동적 분할을 통한 오버헤드 감소 효과가 있다.
• 가상 메모리를 활용한 세그멘테이션
◦ 필요하지 않은 세그멘트는 로드되지 않음. 필요한 세그멘트는 나중에 자동으로 불러들여짐
◦ 복잡한 메모리 관리로 인한 오버헤드 발생할 수 있다.
• 장점
◦ 내부 단편화 문제가 해소된다.
◦ 보호와 공유 기능을 수행할 수 있다. 프로그램의 중요한 부분과 중요하지 않은 부분을 분리하여 저장할 수 있고,
같은 코드 영역은 한 번에 저장할 수 있다.
• 단점
◦ 외부 단편화 문제가 생길 수 있다.
참고자료
'CS Knowledge > 운영체제' 카테고리의 다른 글
[OS] 페이지 교체 알고리즘 (0) | 2022.09.26 |
---|---|
[OS] 운영체제와 메모리 관리 (0) | 2022.09.22 |
[OS] 교착 상태(Deadlock) 개념 (6) | 2022.09.22 |
[OS] 인터럽트 개념과 이중모드 (0) | 2022.09.16 |
[OS] CPU 스케줄링 알고리즘 (0) | 2022.09.16 |