Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

생각자리

[7장] 물리 메모리 관리 본문

CS/Operating System

[7장] 물리 메모리 관리

Manze 2022. 5. 23. 16:51
더보기

쉽게 배우는 운영체제 (조성호 著, 한빛아카데미) 참고하여 작성했습니다 

메모리 관리의 이중성 

메모리를 관리하는 방법에 있어서 프로세스와 메모리 관리자의 입장차

현대 메모리 관리 시스템 (MMS(Memory Management System)) 은 프로세스와 메모리 관리자의 상충되는

요구사항을 비교적 완벽히 처리하지만, 때문에 메모리 관리자의 작업은 더욱 복잡해졌다.

메모리 관리자의 역할

메모리 관리 유닛(MMU(Memory Management Unit)) 를 메모리 관리자로 일컫는다.

  1. 가져오기 : 프로세스와 데이터를 메모리로 가져옴 (데이터의 일부만 가져오거나, 미리 가져오는것도 가능)
    1-1. 가져오기 정책 : 프로세스가 필요로 하는 데이터를 언제 가져올지 결정하는 정책
    1-2. prefetch : 데이터를 미리 가져오는 방법
  2. 배치 : 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정
    2-1. 배치 정책 : 가져온 프로세스를 메모리의 어떤 부분에 올려놓을지 결정하는 정책
                         효율적인 메모리 사용은, 페이징과 세그먼테이션을 잘 이용하는 것이다. 
    2-2. 페이징(paging) : 메모리를 같은 크기로 자름 
    2-3. 세그먼테이션(segmentation) : 메모리를 프로세스의 크기에 맞게 자르는 것 

  3. 재배치 : 메모리 용량이 꽉 차 있는 경우, 신규 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업 
    3-1. 재배치 정책 : 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼 지 결정하는 정책 
    3-2. 교체 알고리즘 : 앞으로 사용하지 않을 프로세스를 찾아서 내보내는 알고리즘 

메모리 영역의 구분 

단순 메모리 

 

운영체제 영역 + 사용자 영역으로 구분 

사용자 프로세스는 운영체제 영역에 접근할 수 없으므로 해당 영역을 피하여 메모리 할당. 

운영체제의 크기에 따라 매번 적재되는 주소가 달라지므로, 번거로움. 

 

상위 메모리 

사용자 프로세스를 메모리의 최상위 부터 사용.
메모리를 거꾸로 사용하기 위해 주소를 변경하는 일이 복잡하므로 잘 사용되지 않음.

 

경계 레지스터

운영체제 영역을 사용자 영역이 침범하는 것을 막으려면 하드웨어의 도움이 필요 → CPU 내의 경계레지스터가 담당!

(경계 레지스터란? 운영체제 영역과 사용자 영역 경계 지점의 주소를 가진 레지스터) 

메모리 관리자는 사용자가 작업을 요청할 때마다 ① 경계 레지스터의 값을 벗어나는지 확인하고

② 만약 경계 레지스터를 벗어나는 작업이 있다면, 그 프로세스를 종료한다.


물리 주소 공간

하드웨어 입장에서 바라본 주소 공간으로 컴퓨터마다 그 크기가 다름

 

논리 주소 공간

사용자 입장에서 바라본 주소 공간

 

매핑(mapping)

논리적 주소와 물리적 주소의 연결

 

바인딩(binding)

매핑시켜 주는 작업 

 


절대주소와 상대주소 

절대 주소

물리 주소 공간을 사용하는 주소 공간 

메모리 관리자 입장에서 바라본 주소  

메모리 주소 레지스터가 사용

컴퓨터에 꽂힌 램 메모리의 실제 주소

 

상대 주소

논리 주소 공간을 사용하는 주소 공간

사용자 영역이 시작되는 번지를 0번지로 변경하여 사용하는 주소

사용자 프로세스 입장에서 바라본 주소

절대 주소와 관계없이 항상 0번지부터 시작

프로세스 입장에서 상대 주소가 사용할 수 없는 영역의 위치를 알 필요가 없고, 주소가 항상 0번지부터 시작하므로 편리함

메모리 접근 시 상대 주소를 절대 주소로 변환하는 방법

절대 주소는 별도 변환 과정 없이 메모리 접근 가능 

상대 주소는 절대 주소로 변환해야 메모리에 접근 가능  

 

사용자 프로세스가 CPU에 40번지에 있는 데이터를 요청

CPU 는 메모리 관리자에게 40번지에 있는 내용을 가져오라고 명령

메모리 관리자는 재배치 레지스터를 사용하여 상대주소 40번지를 절대 주소 400번지로 변환하고,
메모리 400번지에 저장된 데이터를 가져옴. 

 

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

                                메모리에서 사용자 영역의 시작 주소값이 저장됨. 

 

상대주소(논리 주소 공간)를 절대주소(물리 주소 공간)로 변경하려면 재배치 레지스터를 사용한다. 


메모리 할당

메모리 오버레이 

프로그램의 크기가 실제 메모리(물리 메모리)보다 클 때, 프로그램을 적당한 용량으로 배분하여 가져오는 기법.

물리 메모리보다 더 큰 프로그램도 실행 가능하다.

프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능하다.

실행하려는 프로그램이 메모리보다 클 때는 당장 필요하지 않은 프로그램의 일부는 중첩(오버레이) 가능

프로그램이 실행될 때, 미리 분리해둔 모듈(Ex. 그림판, 맞춤법 검사기..) 을 메모리에 불러온다.

어떤 모듈을 가져오거나 내보낼지 결정하는 것은, 프로그램 카운터(PC) 가 결정한다. 

 

스왑 

스왑 영역 : 메모리가 모자라서 쫓겨난 프로세스를 모아두는 곳 

스왑인 : 스왑 영역에서 물리 메모리로 데이터를 가져오는 작업 

스왑아웃 : 물리 메모리에서 스왑 영역으로 데이터를 내보내는 작업

스와핑 : 스왑하는 과정, 즉 메모리를 교체하는 과정을 일컫는다 

 

스왑 영역의 크기 = 메모리의 크기

사용자는 실제 메모리의 크기와 스왑 영역의 크기를 합쳐서 전체 메모리로 인식하고 사용할 수 있다.

스왑 영역은 하드디스크에 존재하나 메모리 관리자가 관리하는 영역으로, 가상 메모리의 구성 요소 중 하나임


메모리 할당에서의 분할 방식과 단편화

가변 분할 방식
프로세스의 크기에 따라 메모리를 나눔

메모리 영역이 각각 다름

한 프로세스가 연속된 공간에 배치되므로 연속 메모리 할당이라고 함

메모리 관리가 복잡

프로세스를 한 덩어리로 처리하여 프로세스를 연속된 공간에 배치

 

고정 분할 방식

프로세스의 크기와 상관없이 메모리를 같은 크기로 나눔  

큰 프로세스가 메모리에 올라오면 여러 조각으로 나누어 배치

한 프로세스가 분산되어 배치되므로 비연속 메모리 할당이라고함

메모리 관리가 수월하다

쓸모없는 공간으로 메모리 낭비가 발생할 수 있다 (일정하게 분리된 공간보다 작은 프로세스가 올 경우 메모리 낭비 발생)

 

단편화

메모리의 빈 영역이 서로 떨어져 있을 경우 프로세스를 배정하기가 어려워 발생하는 문제

 

외부 단편화

메모리 자체에 여유 공간은 있지만 공간이 비연속적이므로 프로세스를 할당할 수 없음

여유 메모리 공간이 비연속적이기 때문에 발생됨

메모리 배치 방식이나 조각 모음등을 통해 해결

 

메모리 배치 방식

가변 분할 방식에서의 외부 단편화 문제를 해결하기 위한 방법

작은 조각이 발생하지 않도록 프로세스 배치

  1. 최초 적합 방법
    프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가
    첫 번째로 발견한 공간에 프로세스를 배치하는 방법
    공간 활용률이 떨어질 수 있음
    빈 공간을 탐색할 필요가 없음

  2. 최적 적합 방법
    메모리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법
    사용 가능 공간을 계속 정렬하는 과정이 필요하므로 비효율적
    빈 공간을 모두 탐색해야 하지만, 딱 맞는 공간이 있을 경우 단편화가 일어나지 않음
    딱 맞는 공간이 없을 경우 아주 작은 조각을 만드는 단편화가 일어남
  3. 최악 적합 방법
    빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방법
    가장 큰 사용 가능 공간에 할당하므로 최적 적합 보다 메모리 활용면에서 유용
    빈 공간의 크기가 클 때는 효과적이지만 빈 공간의 크기가 점점 줄어들면서 작은 조각을 만들어냄

조각모음

발생된 작은 조각(빈 공간)을 옆으로 옮겨 하나의 큰 덩어리로 만듦

조각 모음을 하려면 프로세스를 중지시키고, 이동하고, 주소를 바꾸고, 다시 시작하는 작업을 해야하므로

많은 시간이 걸린다.

 

메모리 통합 방법

하나의 작업이 끝났을 때 다른 빈 공간과 인접해 있는지 점검하여 하나로 합침

 

메모리 압축 방법

메모리의 내용을 적절히 움직여 사용 가능 공간을 큰 블록 하나로 만드는 것

압축하는 동안 모든 일을 중지해야한다

압축 작업을 자주 요구하며 시스템 자원의 소모가 크다

 

내부 단편화

여유 메모리의 크기가 너무 작아 다른 프로세스가 들어가지 못하게 되어 발생하는 낭비현상

버디 시스템

가변 분할 방식이지만 고정 분할 방식과 유사 (외부 단편화를 완화하는 방법으로 사용)

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

 

프로세스의 크기에 맞게 메모리를 ½로 자르고 프로세스를 메모리에 배치

나뉜 메모리의 각 구역에는 프로세스가 1개만 들어감

프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만듦

 

가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨

고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고,

메모리의 한 구역 내부에 조각이 생겨 내부 단편화 발생

비슷한 크기의 조각이 서로 모여 작은 조각을 통합하여 큰 조각을 만들기 쉬움

'CS > Operating System' 카테고리의 다른 글

[10장] 입출력 시스템과 저장장치  (0) 2022.06.12
[9장] 가상 메모리 관리  (0) 2022.06.11
[8장] 가상 메모리 기초  (0) 2022.06.08
CPU 의 구성과 동작  (0) 2022.05.18
하드웨어의 구성과 용어  (0) 2022.05.18
Comments