코딩

Memory 본문

CS

Memory

ssooyn_n 2022. 12. 19. 20:59

✔️ Paging이란?

process가 할당 받은 메모리 공간을 일정한 page단위로 나누어, 물리적 메모리에 연속되지 않는 서로 다른 위치에 저장하는 메모리 관리 기법. 주소 바인딩을 위해 모든 프로세스가 각각의 주소 변환을 위한 page table이 필요하다.

메모리 단편화 문제 중 하나인 ‘내부 단편화’가 일어날 수 있다. (필요한 메모리보다 더 많은 page공간을 할당 받게 된다.)

 

논리적 주소
process가 memory에 적재되기 위한 독자적인 주소 공간인 논리적 주소가 생성된다.
논리적 주소는 각 Process마다 독립적으로 할당, 0번지 부터 시작
물리적 주소
물리적 주소는 process가 실제로 메모리에 적재되는 위치
주소 바인딩
CPU가 기계어 명령을 수행하기 위해 process의 논리적 주소가 실제 물리적 메모리의 어느 위치에 매핑되는지 확인하는 과정

✔️ Segmentation이란?

process가 할당받은 메모리 공간을 논리적 의미 단위(segment)로 나누어, 연속되지 않는 물리 메모리 공간에 할당될 수 있도록 하는 메모리 관리 기법.

일반적으로 Code, Data, Heap, Stack 등의 기능 단위로 segment를 정의하는 경우가 많다. (segment마다 크기가 다름)

segmentation 기법에서는 주소 바인딩을 위해 모든 process가 각각의 주소 변환을 위한 segment table을 갖는다.

메모리 단편화 중 하나인 ‘외부 단편화’문제가 발생할 수 있다. (메모리 상에서 200만큼의 segment가 해제되면 후에, 그 공간에 200만큼 딱 떨어지는 segment가 들어갈 확률이 작다. 따라서 더 작은 segment가 들어가면서 빈공간이 생긴다.)

✔️ Paged segmentation

segmentation을 기본으로 하되, 이를 다시 동일 크기의 page로 나누어 물리 메모리에 할당하는 메모리 관리 기법.

이를 통해 외부 단편화 문제를 해결하고, segment단위로 process 간의 공유나 process 내의 접근 권한 보호가 이루어지도록 해서 paging 기법의 단점을 해결 한다.

✔️ ⭐️가상 메모리

process 전체가 메모리에 올라오지 않더라도 실행이 가능하도록 하는 기법. 프로그램이 물리적 메모리보다 커져도 실행이 가능하다는 장점이 있다.

실제의 물리 메모리 개념과 논리 메모리 개념을 분리. 운영체제는 가상 메모리 기법을 통해 프로그램의 논리적 주소 영역에서 필요한 부분만 물리적 메모리에 적재, 직접적으로 필요하지 않은 메모리 공간은 디스크(Swap 영역)에 저장

✔️ 요구 페이징(demand paging)

당장 사용될 주소 공간을 page 단위로 메모리에 적재하는 방법.

특정 page에 대해 cpu의 요청이 들어온 후에 해당 page를 메모리에 적재. 당장 필요한 page만 메모리에 적재하기 때문에, 메모리 사용량이 감소하고 프로세스 전체를 메모리에 적재하는 입출력 오버헤드도 감소

→ 유효/무효 비트를 두어 각 page가 메모리에 존재하는지 표시

✔️ Page fault

CPU가 무효 비트로 표시된 page에 엑세스하는 상황을 page fault라고 한다.

CPU가 무효 page에 접근하면 주소 변환을 담당하는 MMU가 page fault trap을 발생시키게 되고, 다음과 같은 순서로 page fault를 처리

  1. CPU가 페이지 N을 참조
  2. page table에서 페이지 N이 무효 상태임을 확인
  3. MMU에서 page fault trap 발생
  4. 디스크에서 페이지 N을 빈 프레임에 적재하고 page table 업데이트

page 교체 알고리즘

page fault가 발생되면 디스크에서 메모리로 page를 가져오게 되는데, 이 때 물리적 메모리 공간이 부족할 수 있으므로 메모리에 있는 page를 디스크로 옮겨서 공간을 확보해야한다. 이 때, page를 선택하는 알고리즘을 써야하는데 최대한 page fault가 적게 일어나도록 해야한다. 앞으로 참조될 가능성이 적은 page를 선택한다.

  1. FIFO
  2. 최적 페이지 교체 - 앞으로 가장 오랫동안 사용되지 않을 page를 찾아 교체, 구현이 어렵다.
  3. LRU(Least Recently Used)
  4. LFU(Least Frequently Used)

'CS' 카테고리의 다른 글

동기화와 교착상태(Deadlock)  (0) 2022.12.19
자료구조  (0) 2022.12.12
Process와 Thread  (0) 2022.12.12
[인프런강의] 스프링입문(MVC패턴과 API방식)  (0) 2022.07.06
[인프런 강의] - 스프링입문(스프링 설치 및 빌드)  (0) 2022.07.04
Comments