Cohe

7장 물리 메모리 관리 본문

운영체제

7장 물리 메모리 관리

코헤0121 2023. 6. 6. 15:47
728x90

메모리 관리의 개요

메모리 이해하기

  • 메모리 주소
    • 1B로 나뉜 메모리의 각 영역은 메모리 주소로 구분하는데 보통 0번지부터 시작
      • 1kb 메모리의 경우 8bit(행)*공간(열) : 8bit 씩 저장공간이 1k(0~1023)개 있다
        • 256워드가 있다. → 주소를 짧은 bit로 표현이 가능하다. trade off해서 주소변환이 가능하다. 순서의 상관을 쓰지 않는다.
        • 주소: 16진법을 쓴다.
        • 주소는 8bit 단위 32bit = 1word
    • CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 주소를 사용
  • 메모리 관리의 복잡성
    • 메모리는 폰노이만 구조의 컴퓨터에서 유일한 작업 공간이며 모든 프로그램은 메모리에 올라와야 실행 가능(운영체제도 마찬가지)
    • 일괄처리 시스템은 한번에 하나의 프로그램만 실행시킴으로 메모리 관리가 단순함
    • 시분할 시스템에서는 운영체제를 포함한 실행중인 모든 프로세스가 메모리에 적재되어 있기 때문에 메모리 관리가 복잡함

메모리 관리의 이중성

  • 프로세스 입장에서는 메모리를 독차지하려 하고,
  • 메모리 관리자 입장에서는 되도록 관리를 효율적으로 하고 싶어하는 성질
  • 운영체제는 이 두가지 충돌을 타협하여 메모리 관리

소스코드의 번역과 실행

  • 언어 번역 프로그램의 종류
    • 컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행(C 언어, 자바 등)
    • 컴파일러의 목적에는 코드 최적화 포함
  • 인터프리터: 소스코드를 한 행씩 번역하여 실행(자바스크립트, 파이썬 등)
  • 컴파일 과정
    1. 소스코드 작성 및 컴파일
      • 오류찾기(문법오류)와 최적화
    2. 목적 코드와 라이브러리 연결
      • 링커가 연결해준다.
    3. 동적 라이브러리를 포함하여 최종 실행
      • 동적 라이브러리는 실행 시에 포함됨으로 컴파일 필요 없음
        • exe 파일이 커지지 않는다. 작업환경에 저장된다.
        • 실행하려면 load(적재)되어야 하는데 이를 loader가 해준다.

메모리 관리 작업

  • 메모리 관리자는 가져오기, 배치, 재배치 작업시, 각각의 정책을 수립하여 관리함.
  • 메모리 가져오기(fetch)
    • 실행할 프로세스와 데이터를 메모리로 가져옴
    • 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
  • 메모리 배치(placement)
    • 가져온 프로세스와 데이터를 메모리의 어떤 부분과 위치에 올려놓을지 결정하거나 결정하는 정책
    • ex) 라이브러리
  • 메모리 재배치(replacement)
    • 꽉 찬 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보냄
    • 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책

 

메모리 주소

32bit CPU와 64bit CPU의 차이

  • CPU의 비트
    • 비트(bit)는 한 번에 다룰 수 있는 데이터의 최대 크기
    • 32bit CPU는 한 번에 다룰 수 있는 데이터의 최대 크기가 32bit
    • 32bit CPU 내의 레지스터 크기는 전부 32bit, 산술논리 연산장치와 대역폭도 32bit
  • 32bit CPU의 메모리 크기
    • 표현할 수 있는 메모리 주소의 범위가 0~2³²-1, 총 개수가 2³²
    • 16진수로 나타내면 00000000~FFFFFFFF, 총크기는 2³²B(약 4GB)
  • 64bit CPU의 메모리 크기
    • 0~2⁶⁴-1번지의 주소 공간을 제공
    • 총크기가2⁶⁴B, 약 16,777,216TB로 거의 무한대에 가까운 메모리 사용 가능
  • 물리 주소 공간(physical address space)
    • 하드웨어 입장에서 바라본 주소 공간으로 컴퓨터마다 크기가 다름
  • 논리 주소 공간(logical address space)
    • 사용자 입장에서 바라본 주소 공간
    • 내가 물리적으로 1k만 사서 왔어! → 사용자는 가상메모리 기법으로 2k처럼 사용한다!!

논리 주소와 물리 주소

  • 메모리 영역의 구분
    • 단순 메모리 구조는 한 번에 한 가지 일만 처리하는 일괄 처리 시스템에서 볼 수 있음
    • 메모리를 운영체제 영역과 사용자 영역으로 나누어 관리

  • 경계 레지스터
    • 운영체제 영역과 사용자 영역 경계 지점의 주소를 가진 레지스터
    • CPU 내에 있는 경계 레지스터가 사용자 영역이 운영체제 영역으로 침범하는 것을 막아줌
    • 메모리 관리자는 사용자가 작업을 요청할 때마다 경계 레지스터의 값을 벗어나는지 검사하고, 만약 경계 레지스터를 벗어나는 작업을 요청하는 프로세스가 있으면 그 프로세스를 종료
  • 물리 주소(physical address)
    • 메모리 입장에서 바라본 주소
    • 메모리 주소 레지스터가 사용하는 주소
    • 컴퓨터에 꽂힌 램 메모리의 실제 주소
  • 논리 주소(logical address)
    • 사용자 프로세스 입장에서 바라본 주소
    • 프로세스 입장에서 상대 주소가 사용할 수 없는 영역의 위치를 알 필요가 없고, 주소가 항상 0번지부터 시작하기 때문에 편리
    • 메모리 영역이 프로세스마다 나뉘어져 있다. 컴파일 당시 메모리에 적재되지 않을 때다. → 주소를 0번지부터 시작으로 가정 → 변수 값 계산이 수월하다.
    • 메모리의 접근해야 할 물리주소와 다르며 논리주소는 프로그래밍 시 사용하는 주소
  • 논리 주소를 물리 주소로 변환하는 과정
    • ① 사용자 프로세스가 논리 주소 40번지에 있는 데이터 요청
    • ② CPU는 40번지에 있는 내용을 가져오라고 메모리 관리 유닛에 명령
    • ③ 메모리 관리 유닛은 재배치 레지스터를 사용해 메모리 400번지에 저장된 데이터 가져옴

 

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

메모리 오버레이

  • 메모리 오버레이(memory overlay)
    • 프로그램의 크기가 실제 메모리(물리 메모리)보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법
    • 작동방식- 프로그램이 실행되면 필요한 모듈만 메모리에 올라와 실행
  • 메모리 오버레이의 의미
    • 한정된 메모리에서 메모리보다 큰 프로그램 실행 가능
    • 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능
    • 운영체제의 기능이 아닌 사용자가 직접 설정해야 한다.

 

스왑

  • 스왑 영역(swap area)
    • 메모리가 모자라 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
      • 가상 메모리의 개념 → HW에서
      • 저장장치는 장소만 빌려주고 메모리 관리자가 관리
    • 사용자는 실제 메모리와 스왑 영역의 크기를 합쳐서 전체 메모리로 인식, 사용
    • 스왑인(swap in): 스왑 영역에서 메모리로 데이터를 가져오는 작업
    • 스왑아웃(swap out): 메모리에서 스왑 영역으로 데이터를 내보내는 작업

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

메모리 분할 방식

  • 메모리에 여러 개의 프로세스를 배치하는 방법
    • 가변 분할 방식(variable-size partitioning): 프로세스 크기에 맞게 메모리 나누는 것
    • 메모리의 영역이 각각 다름
    • 연속 메모리 할당
  • 고정 분할 방식(fixed-size partitioning): 프로세스 크기 상관없이 같은 크기로 메모리 나누는 것
    • 큰 프로세스가 메모리에 올라오면 여러 조각으로 나누어 배치
    • 비연속 메모리 할당
     
  가변 분할 고정 분할
장점 프로세스를 한 덩어리로 처리, 하나의 프로세스를 연속된 공간에 배치 메모리를 일정한 크기로 나누어 관리하기 때문에 메모리 관리가 수월(가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없음)
단점 빈 공간을 하나로 합쳐야 하며, 이 과정에서 다른 프로세스의 자리도 옮겨야 하므로 메모리 관리가 복잡함 쓸모없는 공간으로 인해 메모리 낭비가 발생할 수 있음

 

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

  • 가변 분할 방식의 특징
    • 세그먼테이션(segmentation) 메모리 관리 기법이라고 함
    • 프로세스를 하나의 연속된 주소로 다룬다는 것이 장점
    • 프로세스들이 메모리에 올라와 작업하다가 종료되면 빈 공간이 생김(외부 단편화(external fragmentation))
    • 메모리 배치 방식: 작은 조각이 발생하지 않도록 프로세스를 배치하는 것 (선처리)
    • 조각 모음: 작은 조각을 모아 하나의 큰 덩어리로 만드는 작업 (후처리)
    • 가변 분할 방식에서 메모리 배치 방식은 선처리, 조각 모음은 후처리에 해당외부 단편화 문제 해결하기 방법
  • 메모리 배치 방시
    • 최초 배치(first fit)
      • 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법
    • 빈 공간을 찾아다닐 필요 없음→ 간단하며 first fit이라고 한다.
    • 최적 배치(best fit)
      • 메모리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법
      • 빈 공간을 모두 확인하는 부가적인 작업이 있지만 딱 맞는 공간을 찾을 경우 단편화가 일어나지 않음
      • 딱 맞는 공간이 없을 때는 아주 작은 조각을 만들어내는 단점이 있음
    • 최악 배치(worst fit)
      • 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방법
      • 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있음
      • 빈 공간의 크기가 클 때는 효과적이지만 빈 공간의 크기가 점점 줄어들면 최적 배치처럼 작은 조각을 만들어냄
  • 조각 모음(defragmentation)
    • 이미 배치된 프로세스를 옆으로 옮겨 빈 공간을 하나의 큰 덩어리로 만드는 작업
    • 시간이 정말 많이 든다!!
    ① 조각 모음을 위해 이동할 프로세스의 동작을 멈춤
  • ② 프로세스를 적당한 위치로 이동(프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꿈)
  • ③ 작업을 다 마친 후 프로세스 다시 시작

 

고정 분할 방식의 프로세스 배치

  • 고정 분할 방식으로 물리 메모리를 나누는 방식을 페이징(paging) 메모리 관리 기법이라고 함
  • 현대의 메모리 관리는 페이징이 기본
  • 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비 공간 생기는 것이 단점
  • 각 메모리 조각에 프로세스를 배치하고 공간이 남는 것을 내부 단편화(internal fragmentation)
  • 고정 분할 방식에서 내부 단편화를 줄이려면 메모리를 어떤 크기로 나눌지 신중히 결정 (중요 문제!)

버디 시스템

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

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

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

12장 네트워크와 분산 시스템  (1) 2023.06.07
11장 파일 시스템  (0) 2023.06.07
10장 입출력 시스템과 저장 장치  (1) 2023.06.07
9장 가상 메모리 관리  (0) 2023.06.07
8장 가상 메모리의 기초  (0) 2023.06.06