물리 메모리 관리

2023. 6. 1. 01:06운영체제

728x90

목차

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)
  • 단점: 쓸모없는 공간으로 인한 메모리 낭비 발생
  • 내부 단편화: 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상

c2가 들어갈 공간이 없으므로 c2는 스왑 영역으로 옮겨짐

 

 

 

4-2 버디 시스템

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

특징

  • 가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨
  • 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고 
    메모리의 한구역 내부에 조각이 생겨 내부 단편화 발생
  • 비슷한 크기의 조각이 서로 모여 작은 조각을 통합하여 큰 조각을 만들기 쉬움

 

728x90

'운영체제' 카테고리의 다른 글

가상 메모리  (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