여름의 서재
[운영체제] 물리 메모리 관리 본문
💡 메모리 관리의 개요
1. 소스코드의 번역과 실행
- 컴파일러
: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행 ex) 자바, C
- 소스코드에서 오류를 발견하여 실행 시 문제가 없도록 함
- 실행하기 전에 코드를 점검하여 오류를 수정하고 최적화함으로써 작고 빠른 실행 파일을 만듦
- 인터프리터
: 소스코드를 한 행씩 번역하여 실행 ex) 자바스크립트, 파이썬
2. 메모리 관리자의 역할
- 가져오기 작업
: 프로세스와 데이터를 메모리로 가져오는 작업
📌 가져오기 정책
: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
- 배치 작업
: 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업
📌 배치 정책
: 가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정하는 정책
- 재배치 작업
: 꽉 차 있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업
📌 재배치 정책
: 메모리 내에 어떤 프로세스를 내보낼지 결정하는 정책. 앞으로 사용하지 않을 프로세스를 찾아서 내보내는 알고리즘이 교체 알고리즘.
💡 메모리 주소
- 물리 주소 공간
: 하드웨어 입장에서 바라본 주소 공간
- 논리 주소 공간
: 사용자 입장에서 바라본 주소 공간
- 절대주소와 상대주소
구분 | 절대 주소 | 상대 주소 |
관점 | 메모리 관리자 입장 | 사용자 프로세스 입장 |
주소 시작 | 물리 주소 0번지부터 시작 | 물리 주소와 관계없이 항상 0번지부터 시작 |
주소 공간 | 물리 주소(실제 주소) 공간 | 논리 주소 공간 |
📌 재배치 레지스터
: 주소 변환의 기본이 되는 주소값을 가진 레지스터로, 메모리에서 사용자 영역의 시작 주소값이 저장된다.
💡 단일 프로그래밍 환경에서의 메모리 할당
1. 메모리 오버레이
: 프로그램의 크기가 실제 메모리(물리 메모리)보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법
2. 스왑
- 스왑 영역
: 메모리가 모자라서 쫓겨난 프로세스가 모아지는 영역
📌 스왑인 & 스왑아웃
- 스왑인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
- 스왑아웃: 메모리에서 스왑 영역으로 데이터를 내보내는 작업
💡 다중 프로그래밍 환경에서의 메모리 할당
1. 가변 분할 방식 (세그멘테이션 기법)
: 프로세스의 크기에 따라 나누는 방식.
- 장단점
- 장점: 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치
- 단점: 메모리 관리가 복잡하고 외부 단편화가 생김. 메모리 통합 등의 부가적인 작업 필요
📌 단편화
: 빈 영역이 있어도 서로 떨어져 있으면 프로세스를 배정 X. 이로 인해 작은 조각들이 발생하는 현상
이를 해결하기 위해 메모리 배치 방식, 조각 모음을 사용
- 메모리 배치 방식
- 최초 배치: 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫번째로 발견한 공간에 프로세스를 배치
- 최적 배치: 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 배치
- 최악 배치: 빈 공간을 모두 확인한 후 가장 큰 공간에 배치
2. 고정 분할 방식 (페이징)
: 메모리를 같은 크기로 나누는 방식.
- 장단점
- 장점: 메모리를 일정칸 크기로 나누어 관리하기 때문에 메모리 관리 수월. 부가적인 작업 X
- 단점: 쓸모없는 공간으로 인해 메모리 낭비 발생(내부 단편화)
3. 버디 시스템
: 가변과 고정의 중간 구조. 프로세스의 크기에 맞게 메모리를 1/2로 자르고 프로세스를 메모리에 배치, 프로세스가 종료되면 주변을 살펴서 빈 구역을 하나로 합침
- 특징
- 가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨
- 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고, 메모리의 한 구역 내부에 조각이 생겨 내부 단편화 발생
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 관리 (0) | 2021.12.09 |
---|---|
[운영체제] 가상 메모리의 기초 (0) | 2021.12.09 |
[운영체제] 프로세스 동기화 (0) | 2021.12.02 |
[운영체제] CPU 스케줄링 (0) | 2021.12.01 |
[운영체제] 프로세스 & 스레드 (0) | 2021.10.24 |