메모리 / 메모리 계층

임준성·2023년 4월 24일
1

CS

목록 보기
7/9
post-thumbnail

메모리

저장장치 구조

  • 다양한 저장장치 시스템 간의 주요 차이점은 속도, 크기 및 휘발성에 있다.

레지스터

  • CPU 안에 있는 작은 메모리, 휘발성, 속도가 가장 빠름, 기억 용량이 가장 적다.

캐시

  • 휘발성, 속도 빠름, 기억 용량이 적다.

메인 메모리

  • cpu가 명령을 직접 적재하는 메모리
  • 휘발성(전원이 꺼지거나 손실될 때 내용이 손실됨)
  • RAM(random-access-memory) 이라고 부른다.

보조저장장치

  • 메인 메모리의 확장, 대량의 데이터를 영구히 보존할 수 있어야 한다.
  • 비휘발성 메모리나 하드디스크를 예로들 수 있다.

3차 저장 장치

백업 사본을 저장하기 위해 특수 목적으로만 사용하기에매우 느리고 충분히 큰 장치

https://blog.kakaocdn.net/dn/OJjWW/btrxoXb6LbZ/TKNk5Gmpk2LvHjOMj0ImhK/img.jpg

캐시

  • 데이터를 미리 복사해 놓은 임시 저장소이다.
  • 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리



지역성의 원리

시간 지역성

최근 사용한 데이터에 다시 접근 하려는 특성

공간 지역성

최근 접근한 데이터를 이루고 있는 공간이나 가까운 공간에 접근하는 특성

캐시히트와 캐시미스

캐시에서 원하는 데이터를 찾으면 캐시히트라 하며, 해당 데이터가 없으어 주 메모리로 가서 데이터를 찾아오면 캐시미스라고 한다.

캐시 매핑

캐시가 히트되기 위해 매핑하는 방법




쿠키

  • 쿠키는 상태가 유지되지 않는 HTTP에서 사용자의 브라우저에 저장되는 정보 파일이다.
  • 서버가 쿠키를 생성하고 클라이언트가 쿠키를 보관하여 서버에 요청을 할 때 쿠키를 전송하여 특정한 권한이 있음을 서버에게 알려준다.


쿠키의 동작 순서

로그인 상황

  1. 클라이언트가 로그인을 요청
  2. 서버에서 로그인이 성공하고, 쿠키를 생성
  3. 서버는 응답에 쿠키를 포함시켜 응답
  4. 클라이언트는 쿠키를 저장
  5. 클라이언트는 다음 요청을 보낼 때 쿠키를 보내 로그인한 사용자라는 것을 서버에게 알림

로컬 스토리지

만료기한이 없는 키-값 저장소이다.

데이터를 사용자가 지우지 않으면 계속 브라우저에 남아있다.

세션 스토리지

탭이나 브라우저가 닫히기 전까지 저장하는 키-값 저장소이다.

실제 프로그램 전체를 메모리에 올릴 필요는 없다. 보통 일부분만 사용하며 실질적으로는 거의 발생하지 않는 실행되지 않는 코드들이 많다. 즉 매번 프로세스 전부를 물리 메모리에 적재하는 것은 비효율적이다.

프로그램의 일부분만 메모리에 올려놓을 수 있다면 다음과 같은 장점이 있다.

  • 물리 메모리 크기에 제약을 받지 않아도 된다.
  • 프로그램이 차지하는 메모리 가 작아져 다 많은 프로그램을 수행할 수 있다.
  • 프로그램을 메모리에 올리고 스왑 하는데 필요한 I/O 횟수가 줄어 프로그램 실행이 빨라진다.




가상 메모리(Virtual Memory)

프로세스를 실행할 때 필요한 메모리만 물리 메모리에 적재하며 작은 메모리로 가지고도 프로세스를 수행하게 해주는 기법이다.

페이징(Paging)

물리 주소 공간이 연속되지 않는 방식이다.

주소가 연속하였을 때 생기는 외부 단편화와 압축의 비효율성을 피할 수 있다.

물리 메모리는 프레임, 논리 메모리는 페이지라는 고정 크기의 블록으로 나뉜다.

https://blog.kakaocdn.net/dn/0UC6k/btrLii9i3VB/W1z95CyL5BvElUE0hkx3fk/img.png

CPU에서 만들어진 주소는 페이지 번호와 페이지 오프셋의 두 개의 부분으로 나뉜다.

페이지 번호는 프로세스 페이지 테이블에 접근할 때 사용한다.

페이지 테이블은 물리 메모리의 프레임의 시작 주소를 저장하고 있다.

오프셋은 프레임 안에서의 위치를 나타낸다.

이 두 개를 합하여 물리 메모리 주소를 구한다.

https://blog.kakaocdn.net/dn/cAjga8/btrLg8sYeam/GemDmYSvxZSZF16zhUCiX0/img.png

페이지 테이블은 크기가 커 구현하기 위해 빠른 레지스터를 사용하는 것은 부적절하다.

따라서 대부분의 페이지 테이블을 메인 메모리에 저장하고  PTBR로 페이지 테이블을 가리키도록 한다.

https://blog.kakaocdn.net/dn/BXTng/btrLhtwRQ8G/mUofKKxn8AJI43ybAb2PtK/img.png
요구 페이징(Demand paging)

프로그램 실행 중 필요할 때만 페이지가 적재되는 가상 메모리 시스템에서 사용되는 방식이다.

필요할 때만 페이지를 메모리에 적재하기 때문에 valid-invalid bit 기법으로 valid면 페이지가 메모리에 있고, invalid면 페이지가 메모리에 없다는 뜻이다.

프로세스가 메모리에 올라와 있지 않는 페이지에 접근하려면 페이지 폴트를 발생시킨다.


페이지 폴트를 처리하는 과정

  1. 프로세스가 내부 테이블을 검사하여 메모리 참조가 유효한지 무효한 지 검사한다.

  2. 무효한 페이지만 프로세스를 중단한다. 유효한 페이지가 아직 메모리에 올라오지 않았다면, 보조장치로부터 가져온다.

  3. 빈 프레임을 찾는다.

  4. 보조 저장장치에 새로 할당된 프레임으로 페이지를 읽어 들인다.

  5. 보조 저장장치에서 페이지를 메모리에 적재하면 페이지 테이블을 갱신하고 내부 테이블을 수정한다.

  6. 중단되었던 명령어를 다시 수행한다.

https://blog.kakaocdn.net/dn/bkHe9w/btrLu1scDDg/snjGhW11S8QOOXY8SNm6f0/img.png

페이지 교체

  • 가상 메모리 사용한다고 해서 물리 메모리가 항상 여유로운 것은 아님.

  • 페이징 폴트가 계속 발생하여 메모리 초과 할당되어 위 과정에서의 3번 빈 프레임을 찾을 수 없다.

  • 이러한 문제를 해결하기 위해 물리 메모리에 존재하는 페이지를 백업 저장장치에 보내고 새로운 페이로 교체하는 페이지 교체 기법이 필요하다.

https://blog.kakaocdn.net/dn/bt5fjy/btrLtZhBm7i/hYQ6XMDkIZKOcYMKcx0KT0/img.png




페이지 교체 알고리즘

기본적으로 페이지 교체는 다음과 같은 과정을 거친다.

  • 보조 저장 장치에서 필요한 페이지를 찾는다.
  • 빈 프레임이 없어 희생될 프레임을 고르기 위해 페이지 교체 알고리즘을 사용한다.
  • 교체될 페이지를 보조 저장장치에 기록하고, 테이블을 수정한다.
  • 페이지 폴트가 발생한 지점부터 프로세스를 지속한다.

https://blog.kakaocdn.net/dn/CbLk5/btrLukZ2cuX/HvhZFkickiO0Qnzaf28d60/img.png




FIFO(First In First Out)

가장 오래된 페이지를 교체하는 방법이다.

가용 프레임이 증가하여도 오히려 페이지 폴트율이 증가하는 경우가 있는데 이 현상을 Belady's anomaly라 한다.

https://blog.kakaocdn.net/dn/Fv0SI/btrLouvSFcI/T29bL3cZWxkDpK66F56g7k/img.png



OPT(Optimal)

앞으로 가장 사용되지 않을 페이지를 교체하는 방법이다.

미래에 어떻게 참조될지 모두 알기는 어렵기 때문에 실제로 사용하기는 어렵다.

https://blog.kakaocdn.net/dn/bfWpAh/btrLsqmc58F/WYjxRE1C4I9Oj66a284GI0/img.png



LRU(Least Recently Used)

가장 사용되지 않은 페이지를 교체하는 방법이다.

https://blog.kakaocdn.net/dn/oCgoe/btrLoubyfKy/NcKtZ2XWbnwD9qTSOd3psK/img.png



프레임 할당

프레임은 가용 프레임보다 많이 할당할 수 없으며 최소한의 할당을 해야만 한다.

균등 할당: 모든 프로세스에 같은 크기의 프레임을 할당하는 방법

비례 할당: 각 프로세스의 크기 비율에 맞추어할 달 하는 방법

전역 교체 : 프로세스가 교체할 프레임을 다른 프로세스의 속한 프레임까지 모두 대상으로 찾는 방법

지역 교체 : 프로세스가 자기에게 할당된 프레임만 교체 대상으로 찾는 방법


스레싱(Thrashing)

프로세스가 수행을 위한 충분한 프레임을 할당받지 못할 경우 페이지 폴트를 과하게 하여 프로세스 실제 실행보다 페이지 스와핑에 많은 시간을 사용하는 경우를 말한다.

https://blog.kakaocdn.net/dn/cdnue1/btrLqcPfHX2/u3JY8jDpEQW8DSLtKQzwEk/img.png


스와핑(Swapping)

프로세스가 실행 중에 백업 장치로 내보내어졌다가 다시 메모리에 되돌아올 수 있다.

모든 프로세스의 물리 주소 공간의 총합이 실제 물리 메모리보다 커도 스와핑을 사용하여 동시에 실행하는 것이 가능하다.

백업 저장장치로 이동하는 것을 스왑 아웃이라 하고 메모리에 되돌아오는 것을 스왑인 이라 한다.

https://blog.kakaocdn.net/dn/ydhrF/btrLlFJdzKS/a3yMtKxXbx0ziLcDNlNk50/img.png
작업 집합 모델(Working-Set Model)

작업 집합 모델은 지역성 모델을 기반으로 한다.

지역성이란 프로세스가 실행될 때 특정 지역에서 메모리를 집중적으로 참조함을 뜻한다.

  • 최근 n번만큼의 페이지를 참조하며 서로 다른 페이지의 집합인 작업 집합을 만든다.
  • 페이지는 마지막 참조 후 n번만큼 사용되지 않으면 작업 집합에서 제외된다.
  • 프로세스는 작업 집합 크기에 맞는 프레임을 할당하여 프로세스를 수행한다.

https://blog.kakaocdn.net/dn/vyc7Z/btrLu2kleLp/kDXkk2vkqxUTF0AZCGANak/img.png



PFF(Page-Fault Frequency)

페이지 폴트율에 상한 과 하한을 정하여 폴트율이 상한을 넘으면 프로세스에 프레임을 더 할당해 주고, 하한보다 낮아지면 프로세스의 프레임 수를 줄이는 방법이다.

https://blog.kakaocdn.net/dn/mDRXG/btrLqWZYKxO/8QxGjWkwdGcqciplkqBuJK/img.png


주소 할당(Address Binding)

논리 주소(logical address) : CPU가 생성하는 주소

물리 주소(physical address) : 실제 메모리에서 취급되는 주소


프로세스를 물리 메모리에 적재하는 방법

바인딩하는 시점에 따라 구분된다.


컴파일 시간(Compile time)

  • 컴파일할대 때 프로세스의 물리적 주소가 정해진다.

  • 프로세스가 메모리 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 절대 코드를 생성한다.

  • 컴파일 시간 바인딩은 주소가 고정되어 메모리에 빈 공간이 많이 생긴다.


    적재 시간(Load time)

  • 프레스가 메모리 내 어디로 적재될지 컴파일 시점에서 모르면 컴파일러는 재배치 가능 코드를 만든다.

  • 바인딩은 프로그램이 메인 메로리에 실제로 적재되는 시간에 이루어진다.


    실행 시간(Execution time)

  • 프로세스가 실행 중에 메모리 주소를 변경한다.

  • 실행시간 중에 주소를 할당하려면 MMU라는 하드웨어를 이용하여야 한다.

https://blog.kakaocdn.net/dn/TMLiM/btrLkvNA1m4/1vjeIwD5HFF2ig0wxKcvGk/img.png

컴파일 또는 적재 시간에 바인딩을 하면 논리 주소와 물리 주소가 같다.

실행 시간에 바인딩을 하면 논리, 물리 주소가 다르며 이때 논리 주소를 가상 주소라 한다.


연속 메모리 할당(Contiguous Memory Allocation)

각 프로세스는 다음 프로세스가 적재된 영역과 인접하여 연속적이게 메모리 영역에 적재되는 방식이다.


Hole

  • 할당할 수 있는 비어 있는 메모리 공간이다.

고정 파티션 기법

  • 메모리를 미리 나누어 관리하는 방식이다.
  • 내부 단편화가 생긴다.

가변 파티션 기법

  • 사용 가능한 메모리와 사용 중인 메모리 부분을 파악하는 테이블 관리 기법이다.
  • 초기에는 하나의 큰 사용 가능한 메모리 블록을 hole로 간주한다.
  • 운영체제는 프로세스가 메모리를 요구하고 사용 가능한 메모리 공간을 고려하여 할당한다.
  • 이 과정에서 다양한 크기에 hole들이 생겨난다.

https://blog.kakaocdn.net/dn/c2kfbe/btrLhgYDGMM/xwRfTQQgzUrXRuaki4SuJk/img.png

동적 메모리 할당 문제(Dynamic storage allocation problem)

크기가 n인 프로세스가 가용 가능한 hole에 적절히 적재시키는 문제를 말한다.


최초 적합(First-fit)

첫 번째 사용 가능한 공간에 할당을 하는 방법이다.


최적 적합(Best-fit)

사용 가능한 공간 중에 가장 작은 것을 택하는 방법이다.


최악 적합(Worst-fit)

사용 가능한 공간 중에 가장 큰 것을 택하는 방법이다.

단편화(Fragmentation)

외부 단편화(External Fragmentation)

프로세스가 메모리에 적재되고 제거되는 일이 반복되면서 가용 공간이 연속하지 않고 작은 조각들로 분산되어 있을 때를 말한다.


내부 단편화(Internal Fragmentation)

프로세스가 요구한 공간보다 프로세스에 할당된 공간보다 커 메모리에 남는 부분이 발생하는 경우를 말한다.








출처
면접을 위한 CS 전공 지식 노트
정보통신 기술본 책자
KGITBANK 원격평생교육원
Google API 문서
Google 위키백과
https://dduddublog.tistory.com/28
https://velog.io/@rlaghdtlr012/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%86%A0%ED%8F%B4%EB%A1%9C%EC%A7%80-%EB%B3%91%EB%AA%A9%ED%98%84%EC%83%81
https://nearhome.tistory.com/129
https://edmblackbox.tistory.com/732
https://blog.voidmainvoid.net/201
https://blog.naver.com/PostView.naver?blogId=lool2389&logNo=220775214964&redirect=Dlog&widgetTypeCall=true&directAccess=false
https://imbf.github.io/computer-science(cs)/2020/08/21/What-is-The-Operating-System.html
https://judo0179.tistory.com/21

profile
아무띵크 있이

0개의 댓글