대학원 일기

운영체제 7장 본문

School/Operation System

운영체제 7장

대학원생(노예) 2022. 6. 9. 10:01

1. 메모리 관리의 개요

메모리 주소

  • 메모리 한 칸은 1Byte의 크기를 가짐.
  • 1Byte로 나눈 메모리의 영역을 메모리 주소로 구분(0번지부터 시작)
  • CPU는 메모리에 있는 내용가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터(MAR) 사용

메모리 관리의 복잡성

  • 메모리는 폰 논이만 구조의 컴퓨터에서 유일한 작업 공간이며, 모든 프로그램은 메모리에 올라와야지만 실행 가능함
  • 일괄처리 시스템은 한 번에 하나의 프로그램만 실행시키므로 메모리 관리가 단순
  • 시분할 시스템은 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와 실행되므로 메모리가 관리가 복잡

메모리 관리의 이중성

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

언어 번역 프로그램의 종류

  • 컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후, 한 번에 실행
  • 인터프리터: 소스코드를 한 행씩 번역하면서 실행 -> 에러 찾기가 어렵고, 최적화하기 힘듦

- 컴파일 과정

  1. 소스코드 작성 및 컴파일
  2. 목적 코드와 라이브러리 연결
  3. 동적 라이브러리를 포함하여 최종 실행

메모리 관리자(Memory Manage Unit, MMU): 메모리 관리를 담당하는 하드웨어

- 메모리 관리자의 작업

  • 가져오기 작업: 프로세스와 데이터를 메모리로 가져옴
  • 배치 작업: 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정
  • 재배치 작업: 꽉 차 있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보냄

- 메모리 관리자의 정책(MMU의 작업을 위한 정책)

  • 가져오기 정책: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올 지 결정하는 정책
  • 배치 정책: 가져온 프로세스를 메모리의 어떤 위치의 올려놓을지 결정하는 정책
  • 재배치 정책: 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼 지 결정하는 정책

 

2. 메모리 주소

CPU의 비트(bit)

  • 한 번에 다룰 수 있는 데이터의 최대 크기 = 1word(워드)
  • 32 bit CPU는 한 번에 다룰 수 있는 데이터의 최대 크기가 32bit임 (32bit = 4byte = 1word)
  • 32bit CPU레지스터 크기는 전부 32bit, 산술논리 연산장치와 대역폭도 32bit

Byte -> Kbyte -> Mbyte -> Gbyte -> Tbyte

  • 32bit CPU메모리 크기: 메모리 주소의 범위 = $0$ ~ $2^{32} - 1$, 총 $2^{32}$개 표현
  • 64bit CPU의 메모리 크기: 메모리 주소의 범위 = $0$ ~ $2^{64} - 1$, 총 $2^{64}$개 표현

물리 주소 공간: H·W 입장에서 바라본 주소 공간으로 컴퓨터마다 크기가 다름(절대 주소 사용)

논리 주소 공간: 사용자 입장에서 바라본 주소 공간(상대 주소 사용)

 

단순 메모리 구조

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

- 단순 메모리 구조에서 사용자 프로세스 적재

  • 사용자 프로세스는 운영체제 영역을 피하여 메모리에 적재
  • 사용자 프로세스가 운영체제의 크기에 따라 매번 적재되는 주소가 달라지는 것은 번거로움
  • 위 사항을 개선하여 사용자 프로세스를 메모리의 최상위부터 사용
  • 그러나, 메모리를 거꾸로 사용하기 위해 주소를 변경하는 일이 복잡하기 때문에 잘 쓰이지 않음

경계 레지스터

  • 운영체제 영역과 사용자 영역 경계 지점의 주소를 가진 레지스터
  • CPU 내에 있는 경계 레지스터가 사용자 영역이 운영체제 영역으로 침범하는 것을 막아줌
  • 메모리 관리자(MMU)는 사용자가 작업을 요청할 때마다 경계 레지스터의 값을 벗어나는지 검사하고, 만약 경계 레지스터를 벗어나는 작업을 요청하는 프로세스가 있으면 그 프로세스를 종료함.

절대 주소와 상대 주소

- 절대 주소(물리 주소 공간)

  • 실제 물리주소를 가리키는 주소
  • 메모리 주소 레지스터(MAR)가 사용하는 주소
  • 컴퓨터에 꽂힌 램(RAM) 메모리의 실제 주소
  • 운영체제 영역을 포함함

- 상대 주소(논리 주소 공간)

  • 사용자 영역이 시작되는 번지를 메모리로 변경하여 사용하는 주소
  • 사용자 프로세스 입장에서 바라본 주소
  • 절대주소와 관계없이 항상 0번지부터 시작
  • 프로세스 입장에서 상대주소가 사용할 수 없는 영역의 위치를 알 필요없고, 주소가 항상 0번지부터 시작하기 때문에 편리함

 

- 상대 주소를 절대 주소로 변환하는 과정

  • 메모리 접근 시 상대 주소를 사용하면 절대주소로 변환해야 함
  • 메모리 관리자(MMU)는 사용자 프로세스가 상대 주소를 사용하여 메모리에 접근할 때마다 상대 주소값에 재배치 레지스터 값을 더하여 절대 주소를 구함
  • 재배치 레지스터는 주소 변환의 기본이 되는 주소값을 가진 레지스터로, 메모리에서 사용자 영역의 시작 주소값이 저장

 

3. 단일 프로그래밍 환경에서의 메모리 할당

메모리 오버레이

  • 프로그램의 크기가 실제 메모리(물리 메모리)보다 클 때, 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져옴
  • 메모리 오버레이를 사용하면 물리 메모리보다 더 큰 프로그램도 실행이 가능함

- 메모리 오버레이의 작동방식

  • 프로그램이 실행되면 필요한 모듈만 메모리에 올라와 실행

- 메모리 오버레이의 의미

  • 한정된 메모리에서 메모리보다 큰 프로그램 실행 가능
  • 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능

스왑

- 스왑 영역

  • 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
  • 메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리

- 스왑인과 스왑아웃

  • 스왑인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
  • 스왑아웃: 메모리에서 스왑영역으로 데이터를 내보내는 작업

 

4. 다중 프로그래밍에서의 메모리 할당

메모리 분할 방식: 메모리에 여러 개의 프로세스를 배치하는 방법

 

가변 분할 방식

- 프로세스의 크기에 따라 메모리를 나누는 것 -> 외부 단편화, 페이징 기법

  • 프로세스의 크기에 맞게 메모리가 분할
  • 메모리의 영역이 각각 다름
  • 연속 메모리 할당 방식

장점: 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속적 공간에 배치함

단점: 비어있는 공간을 하나로 합쳐야하며, 이 과정에서 다른 프로세스의 자리도 옮겨야 하므로 자리가 부족함

 

외부 단편화: 메모리에서 프로세스가 나간 빈 공간에 큰 프로세스가 들어가지 못해 남아있는 작은 빈 공간

- 외부 단편화 해결 방법

  • 메모리 배치 방식: 작은 조각이 발생하지 않도록 프로세스를 배치하는 것
  • 조각 모음: 조각이 발생했을 때, 작은 조각들을 모아서 하나의 큰 덩어리로 만드는 작업

메모리 배치 방식 

- 최초 배치(first fit): 프로세스를 메모리의 빈 공간에 배치할 때, 제일 처음 만난 빈 공간에 들어감

  • 빈 공간을 찾아다닐 필요 x

- 최적 배치(best fit): 프로세스를 메모리의 빈 공간에 배치할 때, 들어갈 수 있는 제일 작은 공간에 들어감

  • 빈 공간을 모두 확인하는 부가적인 작업이 있지만 딱 맞는 공간을 찾을 경우, 단편화가 발생하지 않음
  • 딱 맞는 공간이 없을 땐 아주 작은 조각을 만들어내는 단점이 있음 -> 외부 단편화

- 최악 배치(worst fit): 프로세스를 메모리의 빈 공간에 배치할 때, 제일  큰 공간에 들어감

  • 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있음
  • 빈 공간의 크기가 클 때는 효과적이지만, 빈 공간의 크기가 줄어들면 최적 배치처럼 작은 조각을 만듦 -> 외부 단편화

 

조각 모음

- 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만드는 작업

- 조각 모음 순서

  1. 조각 모음을 하기 위해 프로세스의 동작을 멈춤
  2. 프로세스를 적당한 위치로 이동(프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꿈)
  3. 작업을 다 마친 후 프로세스 다시 시작

 

고정 분할 방식

- 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것 -> 내부 단편화, 세그멘테이션 기법

  • 프로세스의 크기에 상관없이 메모리가 같은 크기로 나뉨
  • 큰 프로세스가 메모리에 올라오면 여러 조각으로 나누어 배치
  • 비연속 메모리 할당 방식

장점: 메모리를 일정한 크기로 나누어 관리하기 때문에 메모리 관리가 수월(가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없음)

단점: 쓸모없는 공간으로 인해 메모리가 낭비

 

내부 단편화: 프로세스를 배치하고 공간이 남는 현상

- 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상

 

외부 단편화와 내부 단편화의 차이

  • 외부 단편화: 빈 공간보다 프로세스의 크기가 커서 결국 메모리에 적재되지 못하는 현상
  • 내부 단편화: 프로세스를 배치하고 공간이 남는 현상

 

버디 시스템

- 버디 시스템의 작동 방식

  1. 프로세스의 크기에 맞게 메모리를 $frac_{1}{2}$로 자르고 프로세스를 메모리에 배치
  2. 나뉜 메모리의 각 구역에는 프로세스 1개만 들어감 -> 여러 프로세스 못들어감
  3. 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만듦

- 버디 시스템의 특징

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

 

컴파일

컴파일 과정

컴파일러와 변수

  • 컴파일러는 모든 변수에 대해 메모리를 확보하고, 오류를 찾기 위해 심벌 테이블 유지
  • 컴파일러는 변수를 사용할 때마다 사용 범위를 넘는지 점검
  • 컴파일러는 모든 변수를 메모리 주소로 바꾸어 기계어로 된 실행 파일을 만듦
  • 컴파일러에 의해 만들어진 변수의 주소는 상대주소임

심벌 테이블

'School > Operation System' 카테고리의 다른 글

운영체제 연습문제(6, 7, 8, 9장)  (0) 2022.06.11
운영체제 8장  (0) 2022.06.09
운영체제 6장  (0) 2022.06.08
Chapter 05 프로세스 동기화  (0) 2022.04.16
Chapter 04 CPU 스케줄링  (0) 2022.04.14
Comments