[CS] 영상후기 - [10분 테코톡] 🧚🏻 배럴의 가상 메모리

세상을 바꾸는 개발자·2023년 3월 12일
0

movie

가상메모리를 이해하기 위해서 알아야 할 사전 배경 지식

컴퓨터 구조

CPU가 연산을 하려면 메모리의 값을 참조해야한다.

  • 레지스터 값 참조 → 용량이 작으면 → 메인메모리 값 참조 → 용량이 작으면 → 보조저장장치의 값 참조
  • CPU는 메인메모리까지의 값만 참조할 수 있기 때문에 보조저장자치의 값을 참조하려면 OS의 도움을 받아서 입출력 작업을 진행한다.

레지스터
매우 빠르지만 용량이 매우 작음

메인 메모리
빠르지만 용량이 작고, 휘발성의 특징을 가짐

외부저장장치(DISK)
느리지만 용량이 크고, 비 휘발성의 특징을 가짐

용어 정리

  • main memory == physical memory == 물리 메모리 == (메모리)
  • 외부저장장치 == 보조저장장치 == DISK
  • 운영체제 == OS == Operating System == (커널)
  • IO작업 == 입출력 작업



프로그램이 실행되는 것이란?

- 프로그램이 실행되는 것이란 CPU가 일을 하는 것

CPU가 일을 하기위해서는 프로그램의 정보가 메모리에 올라와야 한다.

  • 일반적으로 프로그램은 DISK에 이진 실행 파일 형식으로 존재
  • 프로그램을 실행하면 해당 이진 실행 파일이 물리메모리에 올라옴
    - 실행되기 위해서는 프로그램의 정보가 CPU가 참조할 수 있는 형태로 물리메모리에 올라가야 함
    • 실행파일을 실행하면 fork 요청으로 새 프로세스를 생성하고 exec 요청으로 로더를 호출
    • 로더는 새로 생성된 프로세스의 주소공간을 사용하여 지정된 실행 파일을 메모리에 올리는 데 사용
  • 프로그램을 실행하면 디스크에 존재하던 실행파일이 메모리에 올라오고 CPU가 해당 정보를 참조할 수 있게 되는 것


주소바인딩

  • CPU가 일을 하기 위해서는 논리 주소가 메인 메모리상에 올라와 있어야 한다.
  • 논리 주소가 물리적 메모리의 특정위치로 맵핑 되는데 이 작업을 주소바인딩이라고 한다.
  • 주소 바인딩 방식 (물리적 메모리 주소가 결정되는 시기에 따라)
    - 컴파일 바인딩
    - 로드 타임 바인딩
    - 실행 시간 바인딩
  • 가상 메모리를 사용하기 위해서는 실행 시간 바인딩이 지원되어야 한다.
    - 실행 시간 바인딩을 사용하면, 논리주소와 물리주소의 값이 달라지게 됨
    - 실행시간 바인딩을 하기 위해서 CPU가 주소를 참조할 때 마다 주소 매핑 테이블 이용해 바인딩을 점검이 필요한데, 그러기 위해서는 메모리 관리 장치(MMU) 라는 하드웨의 지원이 필요

용어 정리

  • 논리주소 : CPU가 생성하는 주소
  • 물리주소 : 메모리가 취급하는 주소



시분할 방식

  • CPU가 한 개라고 가정했을 때, 일할 수 있는 자원은 한 개 이지만, 마치 여러 개의 프로그램을 동시에 실행되는 것처럼 실행
  • CPU가 짧은 시간 단위로 프로세스를 바꿔가며 사용하는 것


스왑영역

  • 여러 개의 프로그램이 메모리에 올라와서 메모리 공간이 부족해지면 스왑 영역을 사용
  • 스왑 공간은 외부저장장치에 존재하지만 물리메모리의 확장개념
  • 물리메모리에 공간이 부족하기 때문에 실행중인 프로세스의 주소 공간을 일시적으로 디스크로 내려놓는 것
  • 스왑 영역은 디스크에 존재하지만, 파일 시스템과는 별도로 존재
    - 메모리에서 스왑 영역으로의 이동을 Swap In, Swap Out이라고 함
    - 스왑 영역도 외부저장장치에 저장하기 때문에 OS에 의해 I/O작업이 일어남
    - 하지만 공간 효율성보다는 시간효율성을 고려한 저장이 일어나서 일반적으로 파일시스템에 접근하는 것보다 빠른 접근이 가능



가상메모리

메모리 관리 기법중 하나로, 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

가상메모리의 장점

  • 사용자 프로그램이 물리 메모리의 제약에서 벗어남
    - 사용자 프로그램이 물리 메모리보다 커져도 됨

    • 프로그래머는 물리 메모리 크기를 신경쓰지 않아도 되기 때문에 실제 해결하고자 하는 문제에 집중 가능
  • 각 프로그램이 더 작은 메모리르 차지하기 때문에 더 많은 프로그램을 동시수행 가능(한 것처럼 보임)
    - 프로세스 당 메모리 사용량이 감소하고, 더 많은 프로세스를 수용가능

    • 응답시간(response time, turn around time)은 느지 않으면서 CPU 이용률과 처리률이 높아짐
  • 프로그램을 메모리에 올리고 swap하는데 필요한 IO 횟수가 줄어듦
    - IO가 적게 일어나므로 더 빨리 실행 가능


가상메모리가 필요한 이유

  • 물리 메모리에 다른 프로세스를 올려야 해서 공간이 부족해진다면, 기존 프로세스를 스왑 영역으로 내쫓고 필요한 프로세스가 물리 메모리에 올라와야 함 → 이러한 방법은 빈번하게 스왑영역과 I/O가 발생할 것
  • 물리 메모리의 크기를 벗어나는 프로세스라면 실행 조차 불가능


요구 페이징 기법(Demand Paging)

  • 가상 메모리를 사용하면 프로세서 전체의 내용을 메모리에 올릴 필요없이 필요한 부분만 메모리에 올려 실행이 가능한데, 필요한 부분만 올리는 방법을 요구 페이징 기법이라고 한다.
profile
초심 잃지 않기

0개의 댓글