운영체제 메모리 관리

고장난 고양이·2022년 7월 7일
1

운영체제

목록 보기
4/21
post-custom-banner

메모리 관리의 복잡성

오늘날의 시분할 시스템에서는 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와 실행되기 때문에 메모리 관리가 매우 복잡하다. 이는 도마 하나의 구역을 나누어 여러재료를 올려놓고 요리하는 것에 비유할 수있다.

이처럼 복잡한 메모리 관리는 메모리 관리 시스템이 담당한다.

메모리 관리자의 역할

  • 가져오기 작업
    프로세스와 데이터를 메모리로 가져오는 작업

  • 배치 작업
    가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업

  • 재배치 작업
    새로운 프로세스를 가져와야 하는데 메모리가 꽉 찼다면 메모리에 있는 프로세스를 하드디스크로 옮겨놓아야 새로운 프로세스를 메모리에 가져올 수 있다.

  • 가져오기 정책
    프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
    일반적으로 프로세스의 요청이 있을 때 가져 오지만, 필요하다고 예상이 되는 경우에도 데이터를 미리 가져오는 경우도 있다.

  • 배치정책
    가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정하는 정책
    메모리를 같은 크기로 자르는 것을 페이징, 프로세스의 크기에 맞춰 자르는 것을 세그먼테이셔이라고 한다.

  • 재배치 정책
    메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정하는 정책이다.

메모리주소

32bit & 64 bit

구분32bit CPU64bit CPU
주소 범위0~2^32-1 번지0~2^64-1 번지
총 크기약 4GB약15,777,216TB

메모리의 주소 공간을 물리주소 공간이라고 한다. 물리주소공간은 하드웨어 입장에서 바라본 주소공간으로 컴퓨터마다 다르다.
이와 반대로 사용자 입장에서 바라본 주소 공간은 논리 주소 공간이다.

절대주소 & 상대주소

구분절대 주소상대 주소
관점메모리 관리자 입장사용자 프로세스 입장
주소 시작물리주소 0번지부터 시작물리 주소와 관계없이 항상 0번지 부터 시작
주소 공간물리 주소(실제 주소) 공간논리 주소 공간

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

상대주소를 사용하면 상대 주소를 실제 메모리 내의 물리 주소, 즉 절대 주소로 변환해야만 한다.

가상메모리

가상메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말합니다.

  • 애플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 애플리케이션의 나머지는 디스크에 남게 됨. 즉, 디스크가 RAM의 보조 기억장치(backing store)처럼 작동하는 것임.

  • 결국 빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것임.

  • 가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야만 함. ⇒ 바로 MMU(Memory Management Unit) 메모리 관리 장치

예전에는 MMU가 이와 같이 따로 분리된 하드웨어였지만 최근의 아키텍처에서는 프로세서와 같은 칩에 회로로 삽입된다. (출처: 위키백과)

  • MMU는 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행함.
  • MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행됨.
  • 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리함.
  • 페이지 및 주소 번역 정보를 기억하는 작업이 가상 메모리를 구현하는 데 있어 결정적인 절차임.

참고한 부분

TLB

메모리와 cpu 사이에 있는 주소 변환을 위한 캐시이다. 페이지 테이블에 있는 리스트를 보관하여 cpu가 페이지 테이블까지 가지 않도록 속도를 향상시킬 수 있는 캐시 계층이다.

  • TLB는 일종의 주소 변환 캐시라고 할 수 있음.
    - 참고: 캐시 메모리(cache memory)란?
    • 캐시 메모리란, 속도가 빠른 장치와 느린 장치 사이에서 속도 차에 따른 병목 현상을 줄이기 위한 범용 메모리를 의미함.
    • 예를 들어, CPU에서의 캐시 메모리는 CPU 코어(고속)와 메모리(CPU에 비해 저속) 사이에서 속도 차에 따른 병목 현상을 완화하는 역할을 함.
    • 또한, 인터넷 웹 브라우저에는 캐시 파일이라는 개념이 있는데 캐시 파일은 웹 페이지 상의 이미지 등을 하드디스크에 미리 저장해두고, 다음 번에도 해당 웹 페이지에 접근할 때 해당 사이트에 이미지를 다시 요청하는 게 아니라 하드디스크에서 이미지를 불러들여 로딩 속도를 높이는 역할을 함. 즉 캐시 파일은 비교적 속도가 빠른 하드디스크과 상대적으로 느린 웹 페이지 가운데서의 병목을 줄이는 역할을 함.
  • TLB 사용 이점: 물리주소를 갖고 있으면 메모리(RAM)에 두 번 들릴 필요없이, 바로 해당 물리주소(in 메모리)를 찾아갈 수 있음.

참고한 부분

스와핑

메모리는 크기가 크지 않기 때문에 프로세스를 임시로 디스크에 보냈다가 다시 메모리에 로드해야 하는 상황이 생긴다. 이때 디스크로 내보내는 것을 swap out, 메모리로 들여보내는 것을 swap in이라고 한다.

일반적으로 중기 스케줄러에 의해 swap out 시킬 프로세스를 선정하며, 우선순위에 따라 어떤 프로세스를 swap in/out 할지 결정한다. 우선순위가 낮은 프로세스를 swap out 시키고, 높은 프로세스를 메모리에 올려놓는 방식이다. 

출처: https://rebro.kr/178 [Rebro의 코딩 일기장:티스토리]

페이지 폴트(page fault)

페이지 폴트란 프로그램이 자신의 주소 공간에는 존재하지만 시스템의 RAM에는 현재 없는 데이터나 코드에 접근 시도하였을 경우 발생하는 현상을 말합니다.

페이지 폴트가 발생하면 운영 체제는 그 데이터를 메모리로 가져와서 마치 페이지 폴트가 전혀 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 해줍니다.

  1. cpu는 물리 메모리를 확인하여 해당페이지가 없으면 트랩을 발생해서 운영체제에 알립니다.
  2. 운영체제는 cpu의 동작을 잠시 멈춥니다.
  3. 운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단후 현재 물리 메모리에 비어 있는 프레임이 있는지 찾습니다. 물리 메모리에도 없다면 스와핑이 발동됩니다.
  4. 비어있는 프레임에 해당 페이지를 로드 후 페이지 테이블을 최신화 합니다.
  5. 중단되었던 cpu를 다시 시작합니다.

스레싱(thrashing)

메모리의 페이지 폴트율이 높은 것을 의미, 컴퓨터의 심각한 성능 저하를 초래합니다.

작업세트

작업 세트는 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것입니다. 미리 메모리에 로드하면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있습니다.

PFF

PFF는 페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법입니다. 만약 상한선에 도달하면 페이지를 늘리고 하한선에 도달하면 페이즈를 줄입니다.

메모리 할당

메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데 연속 할당과 불연속 할당으로 나누어진다.

연속 할당

연속할당은 메모리에 연속적으로 공간을 할당하는 것을 의미합니다.
가변 분할 방식과 고정 분할 방식이 존재 합니다.

고정 분할 방식

프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것이다. 메모리를 미리 나누어 있기 때문에 융통성이 없습니다.

장점

  • 고정분할 방식에서는 메모리를 일정한크기로 나누어 관리하기에 메모리 관리가 수월하다.
  • 가변 분할 방식의 메모리 통합과 같은 부가적인 작업 필요없음

단점

  • 고정 분할 방식에서는 쓸모없는 공간으로 인해 메모리 낭비가 발생할 수 있다. 예를 들어 20kb크기로 나눈 메모리 조각에 18kb프로세스가 배치되면 남은 공간은 사용할 수가 없다.
  • 내부 단편화 : 메모리를 나눈 크기 보다 프로그램이 작아서 낭비되는 공간이 많이 발생하는 현상

가변 분할 방식

매시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용합니다.

가변분할 방식 종류

이름설명
최초적합위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당
최적적합프로세스의 크기 이상인 공간 중 가장 작은 홀 부터 할당합
프악적합프로세스의 크기와 가장 많이 차이가 나는 홀에 할당

장점

  • 가변분할 방식에서는 프로세스를 한덩어리로 처리해서 하나의 프로세스를 연속된 공간에 배치한다.

단점

  • 가번 분할 방식은 메모리 관리가 복잡하다.
  • 외부단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상. ex) 100MB를 55MB,45MB로 나눴지만 프로그램의 크기는 70MB일때 들어가지 못하는 것을 말한다.

불연속 할당

메모리를 연속적으로 할당하지 않는 불연속 할당은 현대 운영체제가 쓰는 방법으로 페이징 기법이 있습니다.
또한 세그멘테이션, 테이지드 세그멘테이션이 존재합니다.

profile
개발새발X발일지
post-custom-banner

0개의 댓글