본문 바로가기

전공/운영체제

[운영체제]7장 물리 메모리 관리

728x90
책 "쉽게 배우는 운영체제"를 참고하여 쓴 글입니다

 

메모리 관리의 개요

메모리 이해하기

메모리: 폰노이만 구조에서의 유일한 작업 공간

주소: 1B로 나뉜 각 영역, 데이터를 가져오거나 작업 결과를 메모리에 저장하기 위해 사용

캐시: CPU와 메모리의 속도 차이 극복 위해 CPU안에 캐시를 만들어두고 메모리의 일정부분을 미리 가져와(prefetch) 작업

 

메모리 관리의 이중성

메모리 관리 시스템(MMS): 메모리 관리 담당

 

메모리 관리의 이중성

  • 프로세스 입장: 메모리 독차지
  • 메모리 관리자 입장: 관리를 효율적으로

소스코드의 번역과 실행

소스코드의 번역 방식: 프로그램은 프로그래밍 언어로 만들고 프로그램은 컴파일러를 사용하여 실행 가능한 코드로 변경

  • 저급언어: 기계어, 어셈블리어
  • 고급언어: C언어, 자바

언어번역 프로그램

  • 컴파일러: 소스코드를 기계어로 번역한 후 한꺼번에 실행
  • 인터프리터: 소스코드를 한 행씩 번역하여 실행

컴파일러 방식: 변수 먼저 선언 후 코드 작성

- 소스코드-> 컴파일러 -> 목적 코드-> 링커-> 실행

  • 오류발견: 심벌 테이블 사용
  • 소스코드 최적화: 필요하지 않은 변수 삭제, 작업 변경

 

동적 라이브러리: 실행할 때 삽입되는 함수를 가진 라이브러리

DLL: 윈도우에서의 동적 라이브러리 파일

 

메모리 관리 작업

가져오기, 배치, 재배치

1. 가져오기: 실행할 프로세스와 데이터를 메모리로 가져오는 작업

2. 메모리 배치: 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업

  • 메모리를 어떤 크기로 자를것인가
    • 페이징: 메모리를 같은 크기로 자르는 것
    • 세그먼테이션: 프로세스의 크기에 맞게 자르는 것

3. 메모리 재배치: 꽉 찬 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업

 

메모리 주소

CPU를 나타낼 때의 bit: CPU가 한 번에 다룰 수 있는 데이터의 최대 크기

 

메모리 주소 공간

  • 물리 주소 공간: 하드웨어 입장에서 바라본 주소 공간
  • 논리 주소 공간: 사용자 입장에서 바라본 주소 공간

논리 주소와 물리 주소

논리 주소 공간: 0번지~컴퓨터가 허용하는 최대의 주소 크기

물리 주소 공간: 0번지~실제로 설치된 메모리의 크기

메모리 관리 유닛(MMU): 논리 주소로 이루어진 프로세스를 실행하면 물리 주소로 변환하는 작업을 담당

  • 재배치 레지스터: 주소 변환의 기본이 되는 주소 값을 가진 레지스터

 

단일 프로그래밍 환경의 메모리 할당

메모리 오버레이

메모리 오버레이: 프로그램의 크기가 실제 메모리 보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법

  • 메모리보다 큰 프로그램을 실행할 수 있다
  • 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행할 수 있다.

 

스왑

스왑 영역: 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 공간에 모아두는 영역

사용자 입장-> 스왑 영역+메모리 크기 = 전체 메모리 크기 로 인식 한다

 

다중 프로그래밍 환경의 메모리 할당

메모리 분할 방식

가변 분할 방식

  • 프로세스 크기에 따라 메모리를 나눈다
  • 연속 메모리 할당
  • 장점: 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공강에 배치할 수 있다
  • 단점: 메모리 관리가 복잡

고정 분할 방식

  • 프로세스의 크기와 상관없이 메모리를 같은 크기로 나눈다
  • 하나의 프로세스가 여러 개로 나뉘어 배치
  • 비연속 메모리 할당
  • 장점: 메모리 관리 쉽다
  • 단점: 하나의 프로세스가 여러 곳으로 나뉠 수 있다

 

단편화: 프로세스들이 메모리에 올라와 작업하다가 종료되었을때 생기는 빈 공간

 

가변 분할 방식의 메모리 관리

프로세스의 크기에 맞춰 메모리를 할당하는 방법으로 세그먼테이션 메모리 관리 기법이라고 함

외부 단편화: 조각이 프로세스의 바깥쪽에 위치

  • 메모리 배치 방식: 작은 조각이 발생하지 않도록 프로세스를 배치(전처리)
    • 최초 배치: 단편화를 고려하지 않음. 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 첫 번째로 발견한 공간에 프로세스를 배치
    • 최적 배치: 메모리의 빈 공간을 모두 확인한 후 크기가 가장 비슷한 곳에 프로세스를 배치
    • 최악 배치: 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치

  • 조각 모음: 조각이 발생했을때 작은 조각들을 모아서 하나의 큰 덩어리로 만듦(후처리)
    • 이동할 프로세스의 동작을 멈춤
    • 프로세스를 적당한 위치로 이동, 프로세스의 논리 주소 값을 바꾼다
    • 앞의 작업을 다 마친 후 프로세스를 다시 시작

 

고정 분할 방식의 메모리 관리

프로세스 크기에 상관없이 메모리를 같은 크기로 나누기 때문에 페이징 메모리 관리 기법이라고도 함

  • 단점: 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간이 생긴다
  • 내부 단편화: 같은 크기로 나뉜 공간의 내부에서 각 메모리 조각에 프로세스를 배치하고 공간이 남는다
    • 조각 모음 할 수 없고, 남는 공간을 다른 프로세스에 배정할 수도 없다

 

버디 시스템

외부 단편화를 완화하는 방법

가변 분할 방식과 고정 분할 방식의 중간 구조

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