[운영체제] 8강 - 메모리 관리

2026. 4. 7. 13:43·방송통신대학교/⚙️운영체제

✅ 1. 프로세스와 메모리

(1) 프로세스의 동작

  • 프로세스의 동작: 프로그램 카운터(PC)가 가리키는 주소의 다음 명령어를 실행시키는데, 해당 주소는 메모리의 주소를 의미하며, 결국 메모리에 접근해서 명령어를 읽어와 CPU로 명령어를 수행하는 것이 프로세스의 동작임.
  • 캐시 메모리: 자주쓰는 데이터나 프로그램이 있으며, 캐시 메모리에 올려놓고 처리를 함.
  • ** 예를들어, for 문을 1000번 돌리는 과정이 존재하면, 1000번을 결국 돌리는건 자주쓰는 데이터나 프로그램으로 보고, 캐시 메모리에 넣어서 CPU와 상호작용해 빠르게 처리하는 느낌임. **

(2) 기억장치 계층구조

  • 기억장치 계층구조: 레지스터, 캐시메모리, 메모리, 보조기억장치의 기억장치 계층구조가 존재하며, 위로갈수록 접근속도가 빠르지만, 비트당 기억장치 비용이 높으며, 용량이 적어지며, 아래는 그 반대임.
  • ** 적절한 비용으로 높은 성능을 내기 위해서 기억장치 계층구조를 만들었음. **

(3) 메모리 관리

  • 메모리 관리자가 하는 역할에 대한 내용이다.
  • 메모리 호출: 언제 새로운 프로세스를 보조기억장치로부터 메모리에 올려둘 것 인지에 대한 내용임.
  • 메모리 배치: 다음에 실행될 프로세스를 메모리 내의 어느 곳에 배치를 할 것인가에 대한 내용
  • 메모리 교체: 한정된 메모리의 크기로 인해 메모리가 꽉 찬 상태에서 새로운 프로세스를 메모리에 적재해야 할 때, 어떤 프로세스를 제거하고 그 곳에 어떤 새로운 프로세스를 넣을 것인지에 대한 내용
  • 그 외: 메모리를 고정 또는 동적 어떤걸로 분할을 할 것인지와 메모리에 프로세스를 적재할 때 고정된 위치 또는 유동적인 위치에 적재를 할 것인지에 대한 고민이 존재함.

✅ 2. 단일 프로그래밍 환경

  • 과거의 운영체제부터 메모리 관리는 어떻게 변해왔는지에 대한 변천사를 알아볼 것임.

(1) 단일 프로그래밍 이란?

  • 단일 프로그래밍: 하나의 프로세스만 메모리를 전용하는 사용하는 것이며, 쉽게 말해 프로그램 하나만 동작하는 시스템.
  • 연속 메모리 할당: 하나의 프로세스만 동작하기 때문에, 프로세스는 하나의 연속된 블록으로 메모리에 할당이 됨.

(2) 단일 프로그래밍의 문제점

  • 단점1: 메모리의 용량을 초과하는 프로세스는 실행을 못한다는 단점이 존재함.
  • 단점2: 프로세스가 하나만 올라가, 실행이 되는데 실제로 돌아가는 프로세스의 명령어 또는 데이터의 부분은 작을 수 있기 때문에 그 외 나머지 공간은 사용되지 않지만 메모리에 계속 적재되어있는 문제가 있음. ( 메모리 낭비 심함 )
  • 단점3: 주변장치 등 자원의 낭비가 심함. 쉽게 말해, 계산 위주의 프로세스라면 CPU를 많이 사용하지만, 그 외 입출력 장치의 사용이 적기 때문에 비효율적이며, 반대로 입출력 위주의 프로세스라면 입출력 장치를 많이 사용하지만 CPU의 사용이 적기 때문에 입출력 장치 또는 CPU 둘 중 하나가 일을 안하고 쉬는 형태로 될 수 있음.
  • ** 즉, CPU나 입출력 장치가 쉴 때 다른 프로세스에게 자원을 주면 좀 더 효율적으로 많은 처리를 할 수 있다는 의미임. **

✅ 3. 다중 프로그래밍 환경

(1) 다중 프로그래밍 이란?

  • 다중 프로그래밍: 여러 개의 프로세스가 메모리에 동시에 적재되는 것을 의미함.
  • ** 즉, 여러 프로세스가 CPU 연산과 입출력을 서로 안쓸 때 사용하면서 장치들이 쉬지 않고 일을 하는 느낌이며, 이렇게 되면 CPU 이용도와 시스템 처리량이 증가 할 수 있음. **

(2) 메모리 분할

  • 메모리 분할: 다중 프로그래밍 환경에서 여러 프로세스가 메모리에 적재되기 위한 방법을 의미한다.
  • 메로리 분할 초기 방식: 분할 된 메모리 공간에 하나의 프로세스가 적재되는 방식이다.
  • ** 초기 방식에서 메모리를 어떻게 분할 할 것인지에 따라 후기에는 크게 고정 분할, 동적 분할 2가지 종류로 나뉘게 됨. **

(3) 메모리 분할 - 고정 분할

  • 고정 분할: 메모리를 분할 할 때, 고정 된 크기로 분할하는 방식
  • 프로세스 배치 방법1: 고정된 크기로 분할 된 영역마다 큐를 두고, 큐에 들어온 프로세스는 해당 분할영역에만 적재 방식
  • ** 즉, 각각의 프로세스의 크기들이 분할 된 메모리의 크기에 맞게 큐에 들어가서 대기하며, 수행되는 원리임. **
[ 절대 번역 ]
a 주소: 0~100 번지
b 주소: 100~200 번지
c 주소: 200~300 번지

- c 주소에 할당되는 프로세스 내부의 변수들은 200~300 번지 사이에 할당 되어야함.
- 즉, 절대 번역은 컴파일 과정에서 주소 참조 부분을 상수로 못박아버리는 느낌임.
  • 절대 번역 및 적재: 절대 적재는 고정된 크기의 메모리 내 안에서만 적재가 된다는 의미이며, 절대 번역은 메모리를 분할 했을 때, 프로세스 메모리의 시작점을 0으로 잡으면 안되기 때문에, 특정 물리적 위치(예:5000 번지)를 시작점으로 계산하여 코드를 생성하는 특징임. ( 주소 참조 부분을 상수로 못박는 개념 )
  • 효율성 낮음: 절대 적재와 절대 번역을 하게 되면, 해당 분할 된 메모리 내에서만 사용이 되기 때문에 들어갈 큐의 위치가 정해져 있게 됨. 즉, 작업 큐의 이전 프로세스가 돌아가고 있다면 수행이 될 수 없어 대기를 해야하며, 다른 분할 메모리가 사용이 안되고 있어도 그곳을 사용 할 수 없다는 단점이 있음.

  • 프로세스 배치 방법2: 방법1 의 경우 큐가 여러개 있어서 들어갈 메모리의 위치가 정해져 있었다면, 방법2 는 하나의 큐만 사용해, 큐에 들어온 프로세스는 어느 분할영역에든 적재가 될 수 있음.
  • 재배치 가능 번역 및 적재: 분할 된 메모리 공간 어디에 들어갈지 모르기 때문에, 고정된 방식은 불가능하며, 그렇기 때문에 재배치 가능한 컴파일을 통해서 들어갈 곳의 시작 주소값을 더하는 느낌으로 메모리 공간을 할당받아 적재되는 느낌임.
  • ** 쉽게 말해, 프로그래밍 시점에 프로그램 내부의 변수나 함수 주소는 먼저 0번지부터 시작하는 상대적인 주소로 지정이 되며, 추가적으로 실제 시작 주소를 더해서 수정해야 한다는 정보도 기재를 해둠. 이후로, 프로그램이 실제 메모리에 올라갈 때 즉, 적재 시점에 운영체제가 할당 해줄 분할된 메모리의 시작 주소를 더하며, 메모리 공간을 할당해줌. **
  • 복잡함: 효율적으로 메모리를 사용할 수 있지만, 프로그램이 실행될 때마다 주소를 실시간으로 계산해주거나, 적재 시점에 코드를 수정해주기 때문에 복잡함.

  • 내부 단편화: 프로세스의 크기가 분할영역의 크기보다 작아서 분할영역 내에 남게 되는 메모리가 발생 하는 문제를 의미함.
  • ** 그렇기 때문에, 수행할 프로세스의 크기를 미리 알고 그에 맞춰 고정 분할을 하면 좋지만, 현실적으로는 불가능함. **

(4) 메모리 분할 - 동적 분할

  • 동적 분할: 각 프로세스에 필요한 만큼만 메모리를 할당해주는 방식이다. ** 분할경계가 고정되어 있지 않음. **

  • 외부 단편화: 프로세스가 메모리에 할당되고 반환되는 작업이 반복됨에 따라, 메모리 내부의 작은 공백이 생기는 문제
  • ** 쉽게 말해, 프로세스 크기에 맞게 할당이 되는데, 크기가 제각각인 프로세스들이 할당되고 반환이 되면, 프로세스 사이의 중간에 메모리 공백이 생길 수 있는데, 이 공백을 외부 단편화 문제라고 함. **
  • 해결 방법: 통합, 집약을 통해서 문제를 어느정도 해결함.

  • 통합: 인접된 공백을 큰 공백으로 만들어서 외부 단편화를 해결하는 방법임.
  • ** 단, 인접된 공백이 아닌 흩어져 있는 공백은 통합을 못시킴. **

  • 집약: 메모리 내의 모든 공백을 하나로 모아서 큰 공백으로 만들어 외부 단편화를 해결하는 방법임.
  • ** 자세히 말하면, 떨어져 있는 프로세스 A,C,E.. 등을 옮겨서 공백을 인접하게 만들어서 통합하는 개념임. **
  • 단, 집약을 하려면 프로세스를 옮겨야 하는 작업이 필요하며, 그렇기 때문에 프로세스가 크다면 그만큼 복사해서 옮기는데 큰 오버헤드가 발생할 수 있음.

(5) 메모리 보호

  • 다중 프로그래밍 환경에서는 메모리를 잘 보호해줄 필요가 있음.
  • 메모리 보호: 분할 된 메모리 내의 프로세스들은 서로의 할당 영역을 침범하지 않게 해줘야 하는 개념임.
  • 하한-상한 레지스터: 레지스터 두개애 시작 주소와 끝 주소를 넣어 메모리의 크기를 제한하는 것임.
  • 프로세스 자신이 할당 된 분할 메모리의 범위를 넘어가서 영역을 사용해야 한다면, 시스템 호출을 통해서 해결함. 

✅ 4. 메모리 배치기법

(1) 메모리 배치기법 이란?

  • 메모리 배치기법: 동적 분할 다중 프로그래밍에서 새로 반입이 된 프로그램이나 데이터를 메모리의 어느 위치에 배치할 것인가를 결정하는 기법을 의미한다.
  • ** 쉽게 말해, 메모리의 공백중에서 어디에 새로운 프로세스를 배치할 것인가에 대한 기법을 의미함. **
  • 종류: 새로운 프로세스가 어디에 적재가 될지 정하는 방법으로 최초 적합, 후속 접합, 최적 적합, 최악 적합 방법이 있음.

(2) 최초 적합

  • 최초 적합: 프로세스가 적재될 수 있는 빈 공간 중에서 가장 먼저 발견되는 곳에 할당하는 방식임.
  • 예를들면, 프로세스A(35MB) 할당 요청이 들어오면, 공백 1부터 크기를 확인하며 넘어가게 되는데, 공백1은 30MB 짜리 이기 때문에 할당이 불가능하므로, 다음 공백을 확인하고 크기에 맞으면 넣는 방식임.

(3) 후속 적합

  • 후속 적합: 앞선 최소 적합은 리스트의 첫 번째 부터 확인하며, 넘어가는데 후속 적합의 경우 이전에 탐색이 끝난 그다음 부분부터 시작해 사용 가능한 빈 공간을 순서대로 찾는 방식임. ( 즉, 최초 적합의 변형임 )

(4) 최적 적합

  • 최적 적합: 필요한 공간을 제공할 수 있는 빈 공간 중 가장 작은 곳을 최적의 공간으로 보고 선택하여 할당하는 방식임.
  • 큰 빈 공간을 최대한 많이 남겨 놓기 위해 최대한 프로세스 크기에 맞게 넣는 방식이라고 보면 됨.

(5) 최악 적합

  • 최악 적합: 필요한 공간을 제공할 수 있는 빈 공간 중 가장 큰 곳을 선택하여 할당하는 방식임.
  • 가장 큰 공간을 할당하기 때문에, 외부 단편화를 어느정도 개선 할 수 있음.

'방송통신대학교 > ⚙️운영체제' 카테고리의 다른 글

[운영체제] 10강 - 페이지 교체 알고리즘  (0) 2026.04.17
[운영체제] 9강 - 가상 메모리  (0) 2026.04.14
[운영체제] 7강 - 교착상태(2)  (0) 2026.04.02
[운영체제] 6강 - 교착상태(1)  (0) 2026.03.20
[운영체제] 5강 - 병행 프로세스(2)  (0) 2026.03.18
'방송통신대학교/⚙️운영체제' 카테고리의 다른 글
  • [운영체제] 10강 - 페이지 교체 알고리즘
  • [운영체제] 9강 - 가상 메모리
  • [운영체제] 7강 - 교착상태(2)
  • [운영체제] 6강 - 교착상태(1)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    이산수학
    유비쿼터스
    방송통신대학교
    알고리즘
    방송대
    컴퓨터과학과
    자바
    방통대
    spring
    Python
    파이썬
    C언어
    컴퓨터의 이해
    운영체제
    Java
    자료구조
    그래프
    컴퓨터과학 개론
    함수
    배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[운영체제] 8강 - 메모리 관리
상단으로

티스토리툴바