11. 메인 메모리 관리 (Main Memory Management)

썹스·2022년 8월 21일
0

운영체제

목록 보기
11/20

1. 메인 메모리 관리의 개요

과거 수 MB~수십 MB의 용량을 가지던 메모리는 용량이 적으면서 비쌌기 때문에 메모리 관리가 매우 중요했다. 현재 우리가 사용하는 메모리의 용량은 수 GB ~ 수백 GB까지 용량의 크기가 대폭 증가 했음에도 여전히 메모리 관리가 중요하다. 그 이유는 과거에 사용하던 프로그램보다 현재 사용하는 프로그램의 크기가 크기 때문이다.


2. 프로그램을 메모리에 올리기

2-1. 메모리 구조

메모리는 기본적으로 주소(Address)데이터(Data)로 구성되어 있다.

CPU가 메모리의 특정 부분을 읽고 싶을 때 CPU는 메모리에게 주소(Address)를 보내고, 주소를 받은 메모리는 CPU에게 주소 범위의 데이터를 전송한다.

이렇게 주소를 입력 데이터를 출력하는 방법은 2개의 버스가 필요하지만, CPU에서 데이터를 계산한 뒤 메모리에 저장할 때는 쌍방향의 Data Bus 1개만 필요하다.

2-2. 프로그램 개발

프로그램의 개발 과정은 원천 파일(소스 파일) -> 목적 파일 -> 실행 파일 순으로 생성되어 최종적으로 메모리에 적재된다.

  • 원천 파일(Source file)
    고수준 언어 또는 어셈블리 언어로 만들어진 소스 코드 파일
  • 목적 파일(Object file)
    컴파일 또는 어셈블 결과
  • 실행 파일(Executable file)
    링크 결과

위 그림은 프로그램의 빌드 과정을 그림으로 표현한 것이다.
  1. 위 그림에는 없지만 가장 먼저 전처리 과정을 거처야 한다. 전처리 과정은 컴파일 전에 코드를 정리하는 과정으로 컴파일러가 코드를 쉽게 인식할 수 있도록 "#"이 들어간 코드를 재정리한다.
  1. 전처리 과정이 끝나면 컴파일 과정을 거쳐야 한다. 컴파일은 고수준의 언어를 저수준의 언어로 변경하는 일을 한다. (C언어를 어셈블리어로 변경)
    이러한 컴파일 작업은 컴파일러(Compiler)에서 진행한다.
  1. 컴파일 과정이 끝나면 어셈블 과정을 거쳐야 한다. 어셈블은 저수준의 언어를 기계어로 변경하는 일을 한다.
    이러한 작업을 진행하는 프로그램을 어셈블러(Assembler)라고 한다.
  1. 어셈블 과정이 끝나면 링크 과정을 거쳐야 한다. 기계어로 번역된 각각의 파일을 하나로 묶어 필요한 라이브러리들을 연결해주면 최종적으로 하나의 실행파일이 만들어진다.
    이러한 링크 작업은 링커(Linker)에서 진행한다.

2-3. 실행 파일을 메모리에 올리기

프로그램을 메모리에 올릴 때 어느 위치(주소)에 올릴 것인지 고민하는 것은 다행히도 사람이 아닌 운영체제가 처리해준다. 그렇기 때문에 고수준의 언어로 만들어진 프로그램은 주소를 고려하지 않고 개발할 수 있다.

주소를 고려하지 않고 프로그램을 개발하기 때문에 운영체제는 프로그램을 적재할 때 고정적인 자리에 프로그램을 적재하지 않고 상황에 따라 프로그램을 적재한다. 유도리 있게 프로그램을 적재할 수 있도록 도와주는 시스템이 바로 MMU의 재배치 레지스터(Relocation register)이다.

간단한 예제
작업요청이 들어온 A 프로그램은 30번지 주소에서 작업을 진행해야 한다(프로그램 개발 시 지정 주소를 설정함). 하지만 해당 자리에 B 프로그램이 먼저 와서 작업을 진행하고 있으면, A 프로그램은 재배치 레지스터(Relocation register)를 사용하여 작업을 통하여 남는 자리(300번지)에 가서 작업을 실행할 수 있다.

CPU는 A 프로그램이 30번지에서 작업을 하고 있다고 생각하지만, MMU에서 주소를 재배치했기 때문에 실제로는 메모리의 300번지에서 작업을 하고 있다.

즉 CPU는 프로그램이 설정한 주소를 계속 사용하고 있지만 MMU를 통해 실제 메모리에 할당받아 사용하는 주소는 다르게 사용할 수 있다.



Reference

경성대학교 양희재 교수님의 운영체제

profile
응애 나 코린이(비트코인X 코딩O)

0개의 댓글