본문 바로가기

전공/운영체제

메모리 1 - 구조 / 종류 / 관리 / 정책 / 단편화

1. 메모리

- 컴퓨터에서 작업을 수행하기 위해 처리 대상이나 결과 등을 저장하기 위한 공간

- 프로그램을 실행하기 위한 정보들은 메모리에 저장되어 처리

 

 

2. 메모리 구조

  • Code, Data, Heap, Stack의 네 가지 영역으로 나누어져 있으며, 이들 각각을 세그먼트라고 함
  • Code : 실행할 프로그램 코드가 저장되는 영역. 프로세스가 종료될 때까지 유지 (정적 세그먼트)
  • Data : 프로그램의 전역 변수와 정적 변수가 저장되는 영역. 프로세스가 종료될 때까지 유지 (정적 세그먼트)
  • Heap : 동적으로 사용할수 있는 영역.  Heap 영역에 메모리를 할당하는 것을 동적 할당이라고 함 (동적 세그먼트)
  • Stack : 지역 변수, 매개 변수, 복귀 주소 등이 저장되는 영역. 프로세스 종료 시 반환 (동적 세그먼트)

 

3. 메모리 관리 종류

1) 메인 메모리(Main Memory, Physical Memory, 주기억장치)

- CPU가 직접 접근할 수 있는 기억장치

- 프로세스가 실행되려면 프로그램이 메모리에 올라와 있어야 함

 

 

2) 가상 메모리(Virtual Memory)

- 필요한 이유 : 물리 메모리의 한계 (프로그램 용량이 메인 메모리보다 크다면? )

  • 프로그램 코드 전부를 물리 메모리에 올려야한다
  • 그래서 메모리 용량보다 큰 프로그램은 실행시킬 수 없다
  • 여러 프로그램을 메모리에 다 올리기에는 용량의 한계가 있다
  • 프로그램을 교체하면서 올리자니 메모리 교체 성능 문제가 발생한다

 

- 가상 메모리란

  • 각 프로그램에 실제 주소가 아닌 가상의 주소를 주는 것
  • 프로세스는 필요한 부분만 메모리에 올림으로써 메인 메모리에 올라가는 프로세스의 크기를 줄인다.

 

- 가상 메모리의 장점

  • 프로그램 용량이 실제 물리 메모리보다 커도 된다
  • 전체 프로그램이 물리 메모리에 올라와있지 않아도 된다
  •  물리 메모리 크기에 제약을 받지 않는다
  • 따라서 더 많은 프로그램을 동시에 실행 할 수 있다
    • 응답시간은 유지
    • CPU 이용률과 처리율은 증가

 

- 가상 메모리 구현

  • 운영 체제는 물리 메모리의 제약을 갖고 있는 주 기억 장치를 보조하기 위해 디스크를 보조 기억 장치(Paging Space)로 사용
  • 메인 메모리(주 기억 장치)와 디스크의 페이징 스페이스(보조 기억 장치)를 묶어 하나의 메모리처럼 동작

 

- Swapping

  • 메모리에 프로세스 이미지가 적재되어 실행하다가, 더이상 실행되지 않을 경우 다시 디스크로 내려 보내는 방법
  • 현재 실행되고 있지 않은 프로세스는 메모리를 차지하지 않고 디스크에 존재
  • 디스크 전송 시간이 들기 때문에 메모리 공간이 부족할 때 Swapping이 이루어짐
  • 이때 CPU가 직접 접근할 수 있는 메모리를 활성 가상 메모리(Active Virtual Memory), 페이징 스페이스를 비활성 가상 메모리(Inactive Virtual Memory)라고 부른다
  • 스와핑 불가
    • 컴파일 또는 적재 시간에 바인딩을 하면 프로세스를 보조 기억장치 등으로 이동할 수 없어 스와핑이 불가
    • 입출력 버퍼가 사용자 메모리를 비동기적으로 엑세스하면 입출력 대기중이라도 스와핑 불가
  • 스와핑 가능
    • 오직 실행 시간에 바인딩을 할 때 
    • 입출력 동작이 있는 프로세스

 

 

4. 메모리 관리

1) 필요한 이유

  • 모든 프로그램은 메모리에 적재가 되어야 실행이 가능하다. 그렇기때문에 한정된 메모리를 여러 프로세스가 함께 효율적으로 사용하기위해 메모리 관리 방법이 필요
  • 메모리를 할당하고 제거하며 보호하는 활동을 메모리 관리

 

2) 메모리 관리 정책

  • 적재 정책(fetch policy) : 디스크에서 메모리로 프로세스를 적재하는 시기를 결정하는 정책
    • 요구 적재 : 요청에 따라 프로세스를 메모리에 적재하는 방법
    • 예상 적재 : 요청을 예상해서 미리 프로세스를 메모리에 적재하는 방법
  • 배치 정책(placement policy) : 프로세스를 메모리 어느 위치에 저장을 할 것인지 결정하는 정책
    • 최초 적합(first fit) : 크기가 충분한 첫번째 공간에 배치
    • 최적 적합(best fit) : 프로세스 크기와 가장 비슷한 공간에 배치
    • 최악 적합(worst fit) : 가장 큰 공간에 배치
  • 대치 정책(replacement policy) : 현재 메모리에 적재된 프로세스 중 제거할 프로세스를 결정하는 정책
    • FIFO 대치 알고리즘
    • 최근 최소 사용(LRU, Least Recently Used) 대치 알고리즘

 

3) 메모리 적재 방법  

  • 연속 메모리 적재
    • 가변 분할
    • 고정 분할
  • 비연속(분산) 메모리 적재
    • 가변 분할 : 세그먼테이션
    • 고정 분할 : 페이징

 

3-1) 연속 메모리 할당(Continuous Memory Allocation)

프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 하는 정책

  • 고정 분할 기법 : 메모리를 고정된 파티션으로 분할 → 내부 단편화 발생
  • 동적 분할 기법 : 파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재 → 외부 단편화 발생

 

3-1-2) 단편화(Fragmentation)

- 주기억장치에 프로그램을 할당하고 반납하는 과정에서 발생하는 사용되지 않는 작은 조각 공간

 

내부 단편화

  • 메모리 파티션 크기 > 프로세스 크기
  • 프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이

외부 단편화

  • 남은 메모리 크기 > 프로세스 크기 
  • 중간중간에 생긴 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황
  • 메모리 공간 중 사용하지 못하게 되는 부분.  연속된 메모리 공간이 아니므로 프로세스에게 메모리를 할당 X

 

 

 

 

단편화 해결 방법

  1. 압축(compaction)
    • 메모리에 존재하는 단편화 영역들을 한 곳으로 밀착시켜 모음
    • 프로그램의 재배치가 필요함
  2. 통합(coalescing)
    • 인접한 단편화 영역들을 합침
    • 프로그램 재배치가 필요하지 않음
  3. 페이징
    • 가상 메모리를 같은 크기의 블록으로 나누고, 그 단위는 페이지(page)라고 한다.
    • 주기억장치를 나눈 조각을 프레임(frame)이라고 한다.
    • 외부 단편화는 해결 되지만, 내부 단편화는 해결되지 않는다.
  4. 세그멘테이션(Segmentation)
    • 페이징 기법과 유사
    • 같은 크기로 나누지 않고 서로 다른 크기로 나누고, 그 단위는 세그먼트(segment)라고 한다.
    • 내부 단편화는 해결 되지만, 외부 단편화는 해결되지 않는다.
  5. 메모리 풀(Memory Pool)
    • 메모리의 일정 공간을 미리 할당하고, 동적 할당을 해 그 공간을 채워주는 기법.
    • 할당 받았던 메모리 공간 사용이 끝나면 반납하기 때문에 외부 단편화가 생기지 않는다.
    • 필요한 크기만큼 할당을 해놓기 때문에 내부 단편화 또한 생기지 않는다.
    • 내부 단편화, 외부 단편화 둘 다 해결 가능

 

3-2) 분산 메모리 할당(Non-continuous allocation)

  • 페이징 시스템 (외부 단편화 해소)
  • 세그먼트 시스템 (내부 단편화 해소)
  • 하이브리드리 페이징/세그먼트 시스템

- 프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법

 

 

 

4. 정리

1. 메모리란 컴퓨터에서 작업을 수행하기 위한 대상 및 결과등을 저장하는 공간이다.

 

2. 메모리의 구조

- Code : 실행할 프로그램의 코드 / 정적 세그먼트

- Data : 전역변수 와 정적변수가 저장/ 정적 세그먼트

- Heap : 동적으로 사용하는 영역 / 동적 세그먼트

- Stack : 지역변수, 매개변수, 복귀 주소 등이 저장 / 동적 세그먼트

 

3. 메모리 관리 종류

- 메인 메모리 : CPU가 직접 접근가능한 기억 장치. 프로세스가 실행되기 위해 저장되어야 하는 공간

- 가상 메모리 :  물리 메모리의 한계를 극복하기 위해, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식

 

4. 가상 메모리의 장점

- 프로그램 용량이 실제 물리 메모리보다 커도 된다

- 물리 메모리 크기에 제약을 받지 않는다

 

5. Swapping

-  가상 메모리를 활용한 메모리 관리 중, 메모리에 프로세스 이미지가 적재되어 실행하다가 더이상 실행되지 않을 경우 다시 디스크로 내려 보내는 방법

 

6. 메모리 관리 정책 

-모든 프로그램은 메모리에 적재가 되어야 실행이 가능하기때문에 한정된 메모리를 여러 프로세스가 함께 효율적으로 사용하기위해 메모리 관리 방법이 필요

  • 적재 정책(fetch policy) : 디스크에서 메모리로 프로세스를 적재하는 시기를 결정하는 정책
  • 배치 정책(placement policy) : 프로세스를 메모리 어느 위치에 저장을 할 것인지 결정하는 정책
  • 대치 정책(replacement policy) : 현재 메모리에 적재된 프로세스 중 제거할 프로세스를 결정하는 정책

 

7. 메모리 적재 방법

  • 연속 메모리 적재
    • 가변 분할 : 메모리를 고정된 파티션으로 분할 → 내부 단편화 발생( 메모리 파티션 크기 > 프로세스 크기)
    • 동적 분할 : 파티션들이 동적 생성되며 자신의 크기와 같은 파티션에 적재 → 외부 단편화 발생 ( 사용 가능한 총 메모리 > 프로세스 크기 이지만, 사용 불가능)
  • 단편화 해결 방안
    • 압축 : 단편화 영역을 한곳으로 밀착
    • 통합 : 인접한 단편화 영역 합침
    • 분산 메모리 적재 (페이징, 세그멘테이션)

 

 

4. 출처

https://github.com/alstjgg/cs-study/blob/main/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/Paging%20%26%20Segmentation.md

https://ddb8036631.github.io/question/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-2/

https://dct-wonjung.tistory.com/entry/%EB%A9%B4%EC%A0%91%EC%A4%80%EB%B9%84-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

https://chelseashin.tistory.com/41

https://ddb8036631.github.io/question/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-2/

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

[OS과제] SYS  (0) 2022.04.26
[운영체제,OS] 전공 필기시험 정리  (0) 2022.04.01
파일 시스템  (0) 2021.12.14
[2장] 운영체제 개요  (0) 2020.06.29