OS - 메모리(Memory)

코난·2024년 2월 25일
0

CS 면접 정리

목록 보기
31/67

메모리란?

메인 메모리, RAM, 주기억장치를 뜻한다. 프로그램 실행 시 필요한 주소, 정보들을 저장하고 가져다 사용할 수 있게 만드는 공간이다. 즉 작업을 위해서 사용되는 공간이라고 할 수 있다. 하드디스크에 비해 속도가 매우 빠르고 컴퓨터가 꺼지면 저장된 모든 데이터가 날아가는 휘발성 장치이다.

보통 CPU 레지스터와 캐시, 메인메모리를 묶어서 주기억장치라고 부른다.

  • 레지스터 : 가장 빠른 메모리로 자주 이용하는 데이터를 보관함. CPU 계산과정의 일부로 작동.
  • 캐시 : SRAM. CPU 부근에서 비교적 느린 메인메모리에 저장된 데이터와 인스트럭션들의 부분집합에 대한 준비장소. 레지스터 다음으로 빠름.
  • 메인메모리 : DRAM. SSD, HHD에 비해서는 월등히 빠르지만 레지스터나 캐시에 비해서는 느림. 크고 느린 디스크들에 저장된 데이터를 준비하는데에 사용함.

MMU

주소

  • 물리 주소
    • 메모리 입장에서 바라본 주소
    • 말 그대로 정보가 실제로 저장된 하드웨어상의 주소
  • 논리 주소
    • CPU와 실행중인 프로그램 입장에서 바라본 주소
    • 실행중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소
    • 각 프로세스마다 독립적으로 가지는 주소 공간

프로그램 시작시에 드라이브에서 프로그램을 읽고, 메모리에 로드하고, 메모리에 있는 정보를 CPU에서 가져다 쓴다. CPU는 메모리에 접근할 때, 페이지 테이블을 사용한다. 가상주소를 물리주소로 바꾸기위해 페이지 테이블을 이용해서 메모리에 접근하는 것이다. 이때 CPU 내부에서 미리 자주 사용하는 주소는 가지고 있자는 아이디어를 통해 캐시에 저장해놓기도 한다.

주소 바인딩

  • Compile time binding
    • 논리 메모리가 물리 메모리 그대로 올라감
    • 물리 메모리 주소가 컴파일시 알려짐
    • 시작 위치 변경시 재컴파일해야함
    • 컴파일러는 절대 코드를 생성함
    • 프로그램이 실행되면 컴파일시 입력된 해당 메모리 주소에 코드가 올라감. (메모리 위치 변경시 재컴파일 필요)
  • Load time binding
    • 논리 메모리는 물리 메모리의 비어있는 부분으로 올라감
    • Loader의 책임 하에 물리적 메모리 주소를 부여함
    • 컴파일러가 재배치가능코드를 생성한 경우 가능함 (상대적 주소만 설정)
  • Execution time binding(Runtime binding)
    • 실제 명령어 실행 시점에 주소 변환을 함
    • 수행이 시작된 이후에도 프로세스의 메모리상 위치를 옮길 수 있음
    • CPU가 주소를 참조할 때마다 binding을 점검
    • 하드웨어적인 지원이 필요함 (MMU)

MMU란?

MMU(Memory Management Unit)는 CPU 내부에 탑재되어 논리 주소를 실제 메모리의 물리 주소로 변환해주는 하드웨어이다.

  • 주소 변환
    Execution time binding은 실제로 명령어를 실행하는 시점에 주소 변환을 하는 Address binding 기법이다.
    위 사진에서 0x198000번지에 저장되어 있는 data에 10을 저장하기 위해 store #98000, 10 명령어를 사용하고 있다. 하지만 명령어의 주소를 보면 알 수 있듯이 98000번지를 참조한다고 작성되어 있지만, 이는 상대 주소 즉 논리 주소로 실제 data의 물리 주소가 아니다. 그렇기에 CPU는 명령을 실행할 때, MMU를 거쳐서 상대주소에 프로그램의 시작 주소를 base로 더하여 물리 주소를 필요한 순간마다 변환한다. (Base + 논리 주소)
    이런 방식은 Load time binding과 달리, 메모리에 프로그램을 올릴 때 주소 변환을 한 번에 하지 않기 때문에 메모리 적재 시 오버헤드가 감소한다.
    이 MMU는 Contiguous allocation 즉, 연속 할당을 사용하는 과정에서만 논리 주소를 물리 주소로 변환해줄 때 사용된다.

  • 메모리 보호 (Memory protection fault)

    주소 변환 뿐만 아니라 논리 주소가 올바른 메모리 주소를 참조하려고 하는가에 대해서도 검증하는 역할을 수행한다. 논리 주소가 Base address보다 크거나 같은지, Base + Limit보다 작은지 확인하는 과정을 통해 메모리에서 프로세스의 범위를 벗어나지 않는지 검증하고 변환한 값을 CPU의 PC로 가져오는 것이다.
    만약 범위를 벗어나면 CPU가 자신에게 발생시키는 interrupt인 Memory protection fault를 발생시킨다. 이를 OS가 대신 처리하도록 요청하는 것이다. 이를 Exception이나 trap이라고도 부른다.


참고

https://dapsu-startup.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COperating-System-%EB%A9%94%EB%AA%A8%EB%A6%ACMemory
https://blog.naver.com/hope5872/221852325167
https://itstory1592.tistory.com/99
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Memory.md
https://xn--velog-vo7u.io/@ayoung0073/OS-Memory-Management

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글