2023. 6. 1. 01:06ㆍ운영체제
목차
1. 메모리 관리의 개요
2. 메모리 주소
3. 단일 프로그래밍 환경에서의 메모리 할당
4. 다중 프로그래밍 환경에서의 메모리 할당
1. 메모리 관리
1-1 메모리 관리
CPU는 메모리에 있는 데이터를 가져오거나 메모리에 저장하기 위해 메모리 주소 레지스터를 사용
1-2 소스코드의 번역과 실행
- 컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행
-> 오류 발견, 코드 최적화 쉬움 - 인터프리터: 소스코드를 한 행씩 번역하여 실행 (자바스크립트, 베이직 등)
-> 에러찾기가 어렵고 최적화 하기 힘듬
* 컴파일 과정
1. 소스코드 작성 및 컴파일
2. 목적 코드와 라이브러리 연결
3. 동적 라이브러리를 포함하여 최종 실행
1-3 메모리 관리자의 역할
메모리 관리자(Memory Manage Unit)
: 메모리 관리를 담당하는 하드웨어
메모리 관리자의 작업
- 가져오기: 프로세스와 데이터를 메모리로 가져옴
- 배치: 가져온 것들을 메모리의 어떤 부분에 올려놓을지 결정
- 재배치: 꽉 차 있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보냄
2. 메모리 주소
2-1 32 bit CPU
word: 한번에 다룰 수 있는 데이터의 최대 크기
32bit cpu
-> 1 word=32bit=4byte
-> 레지스터, ALU, 버스의 대역폭 모두 32bit
-> 표현할 수 있는 메모리 주소의 범위가 0~ 2^31-1, 총 2^32개
-> 메모리 크기 약 2^32B, 약 4GB
2-2 절대 주소와 상대 주소
경계 레지스터
- 운영체제 영역과 사용자 영역 경계 지점의 주소를 가진 레지스터
- CPU 내에 있는 경계 레지스터가 사용자 영역이 운영체제 영역으로 침범하는 것을 막아줌
- 메모리 관리자는 사용자가 작업을 요청할 때마다 경계 레지스터의 값을 벗어나는지 검사하고
만약 경계 레지스터를 벗어나는 작업을 요청하는 프로세스가 있으면 그 프로세스를 종료
절대 주소: 실제 물리주소
상대 주소: 사용자 영역이 시작되는 번지를 0번지로 생각하고 사용하는 주소
사용자 입장에서 바라본 주소
논리 주소라고도 함
상대 주소를 절대 주소로 변환하는 과정
-> 상대 주소값에 재배치 레지스터 값을 더함
* 재배치 레지스터: 메모리에서 사용자 영역의 시작 주소값이 저장.
3-1 메모리 오버레이
프로그램의 크기가 물리 메모리 보다 클 때 전체 프로그램을 메모리에
가져오는 대신 적당한 크기로 잘라서 가져오는 기법
-> 물리 메모리보다 더 큰 프로그램도 실행 가능
-> 필요한 모듈만 메모리에 올라와 실행
-> 일부만 올라와도 실행 가능
3-2 스왑
스왑영역
: 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
메모리에서 쫓겨났다가 공간이 되면 다시 돌아가는 데이터가 머무는 곳
사용자는 실제 메모리의 크기와 스왑 영역의 크기를 합쳐져 전체 메모리로 인식하고 사용
스왑인
: 스왑 영역에서 메모리로 데이터를 가져오는 작업
스왑아웃
: 메모리에서 스왑 영역으로 데이터를 내보내는 작업

4-1 메모리 분할 방식
가변 분할 방식
- 프로세스의 크기에 맞게 메모리를 나누는 것
- 연속 메모리 할당
- 메모리 단위: 세그멘테이션
- 단점: 비어 있는 공간을 하나로 합쳐야 하며 이 과정에서 다른 프로세스의 자리도
옮겨야 하므로 메모리 관리가 복잡함 - 외부 단편화: 남아있는 공간보다 큰 프로세스가 들어오면 메모리를 배정하지 못함.
이 때 작은 빈 공간을 외부 단편화라고 함.
외부 단편화 해결방법
- 메모리 배치 방식
1. 최초 배치(first fit): 순서대로 찾다가 첫번째 빈 공간에 배치
2. 최적 배치(best fit): 넣으려는 프로세스 크기와 가장 근접한 빈 공간에 배치
-> 딱 맞으면 단편화가 일어나지 않음. 아닐 땐 아주 작은 조각 발생
3. 최악 배치(worst fit): 가장 큰 빈 공간에 배치
-> 빈 공간의 크기가 클 때는 효과적 - 조각 모음
: 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만드는 작업
1. 이동할 프로세스 멈춤
2. 프로세스를 적당한 위치로 이동(상대 주소값을 바꿈)
3. 프로세스 다시 시작

고정 분할 방식
- 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것
- 메모리 단위: 페이징
- 비연속 메모리 할당
- 나누려는 크기보다 큰 프로세스라면 여러 조각으로 나누어 배치
- 장점: 메모리 관리가 수월(가변 분할 방식처럼 부가적인 작업 필요 x)
- 단점: 쓸모없는 공간으로 인한 메모리 낭비 발생
- 내부 단편화: 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상

4-2 버디 시스템
1. 프로세스의 크기에 맞게 메모리를 ½ 로 자르고 프로세스를 메모리에 배치
2. 나뉜 메모리의 각 구역에는 프로세스가 1 개만 들어감
3. 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만듦

특징
- 가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨
- 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고
메모리의 한구역 내부에 조각이 생겨 내부 단편화 발생 - 비슷한 크기의 조각이 서로 모여 작은 조각을 통합하여 큰 조각을 만들기 쉬움
'운영체제' 카테고리의 다른 글
| 가상 메모리 (0) | 2023.06.02 |
|---|---|
| 교착상태 (deadlock) (1) | 2023.05.29 |
| 5. 프로세스 동기화 (0) | 2023.04.14 |
| 4. CPU 스케줄링 (0) | 2023.04.14 |
| 3. 프로세스와 스레드 (2) | 2023.04.13 |