일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 맥 shift f6 안됨
- rename 단축키 안됨
- 윈도우 shift + f6 안됨
- 한국은행 블록체인
- CPU
- 금핵본위제
- cbdc 개인정보
- 인텔리제이 shift f6 안됨
- 이진탐색트리 c
- 금화본위제
- 인텔리제이 리네임
- 화폐시스템의 변천
- 메모리 기법
- 메모리 할당 방법
- cbdc 하는 이유
- 스왑 영역 확인
- shift f6
- 암호화폐 배경
- 시프트 에프6
- 한국은행 CBDC
- 맥 시프트 에프6 안됨
- 인텔리제이 변수명 한꺼번에
- securitize
- 블록체인 배경
- cbdc 도입 이유
- 은행 신용창조
- 최초적합
- cbdc 반대 청원
- 비트코인 배경
- 한국은행 코인
- Today
- Total
진강이의 성장일지
[운영체제] 운영체제의 메모리 관리법 - 스와핑, 메모리 할당 방법, 외부단편화 본문
운영체제의 가장 핵심적인 역할은 아래 두 가지다.
1. 프로세스 관리
2. 메모리 관리
운영체제가 어떻게 메모리를 관리하는지에 따라 프로그램 실행 양상과 컴퓨터 전체의 성능이 좌우된다.
이번에는 운영체제의 2. 메모리 관리 에 대해서 알아보고자 한다.
연속 메모리 할당
기본적인 메모리 관리 기법인 스와핑과
메모리에 프로세스를 할당하는 방식,
연속 메모리 할당의 부작용인 외부 단편화에 대해 학습해보자.
스와핑
스와핑은 메모리에서 사용되지 않는 일부 프로세스를
보조 기억장치로 내보내고
실행할 프로세스를
메모리로 들여보내는 메모리 관리 기법이다.
메모리에 적재된 프로세스 들 중에 현재 실행되지 않는 프로세스도 있다.
이러한 프로세스들을 임시로 보조기억장치의 일부 영역인 스왑 영역으로 쫓아내고,
그렇게 해서 생긴 메모리의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다.
- 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리 -> 스왑영역으로 옮겨지는 것
- 스왑 인 : 스왑 영역에 있던 프로세스가 스왑 영역 -> 매모리로 옮겨 오는 것
스왑 아웃 되었던 프로세스가 다시 스왑 인 될 때는 이전의 물리 주소와는 다른 주소에 적재될 수 있다.
스와핑을 이용하면
프로세스들이 요구하는 메모리 주소 공간의 크기 > 실제 메모리 크기 여도
프로세스들을 동시에 실행할 수 있다.
<스왑 영역 확인하기>
맥 OS에서는 top 명령어로 스왑 정보를 확인할 수 있다.
(리눅스에스는 free 명령어로 바로 확인이 가능하다)
top
- swapins: 디스크에서 메모리로 데이터를 다시 불러온 횟수 (→ 스왑을 "사용한" 횟수)
- swapouts: 메모리에서 디스크로 데이터를 내보낸 횟수 (→ 스왑을 "썼던" 횟수)
- 스왑인이 77,600회 발생했고
- 스왑아웃이 220,624회 발생했다.
메모리가 부족해질 때 macOS가 디스크를 임시 메모리처럼 활용하고 있음을 알 수 있다.
++) 더 편하게 스왑, 메모리 등 확인하는 방법
- Activity Monitor (활동 모니터) 실행 (맥 기준)
→ Applications > Utilities > Activity Monitor - 상단 탭에서 Memory(메모리) 선택
- 하단에 Swap Used 항목 확인
→ 실제로 디스크에서 스왑이 얼마나 사용되고 있는지 GB 단위로 확인할 수 있다
메모리 할당 방법
프로세스는 메모리 내의 빈 공간에 적재되어야 한다.
만약 메모리 내에 빈 공간이 여러 개 있다면, 프로세스들을 어디에 배치해야 할까?
여기에는 대표적으로
최초 적합 : 최초로 발견한 적재 가능한 빈 공간에 프로세스 배치
최적 적합 : 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치
최악 적합 : 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치
이 세 가지 방식이 있다.
프로세스를 메모리에 연속적으로 배치하는 연속 메모리 할당은 메모리를 효율적으로 사용하는 방법이 아니다.
왜냐하면 연속 메모리 할당은 외부 단편화 라는 문제를 내포하기 때문이다.
외부 단편화
외부 단편화는 프로세스를 할당하기 어려울만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상을 말한다.
이게 무슨 의미인지, 그림을 통해 살펴보자.
첫번째 메모리 그림은 아무런 프로세스도 적재되지 않은 상태다.
커널 영역에는 운영체제가 적재되어 있다.
이제 사용자 영역에 프로세스1(30MB) 프로세스2(20MB) 프로세스3(50MB) 프로세스4(10MB) 들을 하나씩 적재해보자.
연속적으로 메모리를 할당하면 두번째 메모리 그림처럼 적재할 수 있다. (사용자 영역의 크기는 110MB)라고 가정한다.
그런데 프로세스 1과 3의 실행이 끝나고 메모리를 떠나면
세번째 그림처럼 빈 공간이 띄엄띄엄 생기게 된다.
현재 남아있는 빈 공간의 총합은 20 + 10 = 30MB지만
30MB 크기의 프로세스5를 적재할 수 있을까? 불가능하다. 총합이 30이어도 어느 빈 공간에도 50이 들어갈 자리가 없다.
프로세스들이 연속적으로 할당되는 환경에서는 위와 같은 문제가 발생한다.
프로세스 바깥에 빈 공간이 생기고, 그 공간보다 큰 프로세스를 적재하기 어려운 상황을 초래하고, 결국 메모리 낭비가 된다.
이 현상이 바로 외부 단편화다.
외부 단편화를 해결할 수 있는 방안으로 메모리를 압축하는 방법이 있다.
흩어져 있는 빈 공간을 하나로 모으는 방식이다.
하지만 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 하고, 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 발생시켜 비효율적이다.
이에 외부 단편화를 없앨 수 있는 다른 해결방법이 등장했는데 그것이 바로
가상 메모리 기법, 페이징 기법이다.
페이징 기법에 대해서는 다음 글에서 다루겠다.
'소프트웨어학' 카테고리의 다른 글
[맥/윈도우] 인텔리제이 Shift + F6 안됨 해결 방법! (IntelliJ 변수명 한 번에 바꾸기 단축키 안 됨) (0) | 2025.03.31 |
---|---|
터미널,콘솔,셸,커널,운영체제,리눅스 헷갈리는 개념 정리!!! (0) | 2025.01.25 |