CS
[면접을 위한 CS 전공지식 노트] 3.2. 메모리 - 메모리 관리
yes_truly
2024. 3. 4. 02:14
728x90
🔑 가상 메모리
- 메모리 관리 기법 중 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화 해 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것
- 가상주소와 실제 주소가 매핑되어있고 프로세스의 주소 정보가 들어있는 페이지 테이블로 관리
- 속도 향상을 위해서 TLB를 사용함
- 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시
- 페이지 테이블에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록 속도를 향상시킬 수 있는 캐시 계층
- 스와핑(swaping)
- 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근 시 페이지 폴트가 발생함
- 메모리에서 당장 사용하지 않는 영역을 하드 디스크에 옮기고 하드 디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 스와핑이라고 함
- 페이지 폴트가 일어나지 않은 것처럼 만듦
- 페이지 폴트(page fault)
- 프로세스의 주소 공간에 존재하지만 지금 컴퓨터의 RAM에는 없는뎅터에 접근했을 때 발생함
- 페이지 폴트 - 스와핑 과정
- CPU는 물리 메모리를 확인해 해당 페이지가 없으면 트랩을 발생해 운영체제에 알림
- 운영체제는 CPU의 동작을 잠시 멈춤
- 운영체제는 페이지 테이블을 확인해 가상 메모리에 페이지가 존재하는지 확인하고 없으면 프로세스를 중단하고현재 물리 메모리에 비어있는 프레임이 있는지 찾음.
없을 경우 스와핑이 발동됨 - 비어있는 프레임에 해당 페이지 롣, 페이지 테이블 최신화
- 중단되었던 CPU는 다시 시작됨
🔑스레싱(Thrashing)
- 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생하는 것
- 메모리의 페이지 폴트율이 높은 것을 의미하고 컴퓨터의 심각한 성능 저하를 초래함
- 해결방법 : 메모리 늘림, HDD를 SSD로 교체, 작업세트, PFF
- 작업세트(working set)
- 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드하는 것
- 미리 메모리에 로드하면 탐색에 드는 비용과 스와핑을 줄일 수 있음
- PFF(Page Fault Frequency)
- 페이지 폴트 빈도를 조절함
- 상한선과 하한선을 만들어 상한선에 도달 시 프레임을 늘리고, 하한선에 도달 시 프레임을 줄임
- 작업세트(working set)
🔑메모리 할당
- 연속 할당
- 메모리에 공간을 연속적으로 할당
- 고정 분할 방식
- 메모리를 미리 나누어 관리
- 융통성이 없고 내부 단편화가 발생함
- 가변 분할 방식
- 매 시점 프로그램의 크기에 맞춰 동적으로 메모리를 나눠 사용함
- 외부 단편화 발생이 가능함
- 최초 적합 : 위쪽이나 아래쪽부터 시작해 홀을 찾으면 바로 할당
- 최적 적합 : 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당
- 최악 적합 : 프로세스의 크기와 가장 많이 차이가 나는 홀에 할당
- 내부 단편화 : 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상
- 외부 단편화 : 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
- 홀 : 할당할 수 있는 빈 메모리 공간
- 불연속 할당
- 메모리를 불연속적으로 할당
- 페이징(paging)
- 메모리를 동일 크기의 페이지 단위로 나눠 메모리의 서로 다른 위치에 프로세스 할당
- 홀의 크기가 균일하지 않은 문제가 없어지지만 주소 변환이 복잡해짐
- 세그멘테이션(segmentation)
- 의미 단위인 세그먼트로 나누는 방식
- 공유와 보안 측면에서 장점을 가지나 홀 크기가 균일하지 않음
- 페이지드 세그멘테이션(paged segmentation)
- 프로그램을 의미 단위인 세그멘트로 나눠 공유나 보안 픅면에 강점을 두고 임의의 길이가 아닌 동일 크기의 페이지 단위로 나누는 것
🔑페이지 교체 알고리즘
- 스와핑은 많이 일어나지도 적게 일어나지도 않게 설계되어야 하는데, 페이지 교체 알고리즘을 기반으로 스와핑이 일어남
- 오프라인 알고리즘
- 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘
- 미래에 사용되는 프로세스를 알 수 없어 사용할 수 없는 알고리즘임
- 그러나 다른 알고리즘과의 성능 비교에 대한 상한 기준을 제공하기 때문에 가장 좋은 알고리즘이라고 볼 수 있음
- FIFO(First In First Out)
- 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
- 선입선출 방법
- LRU(Least Recentle Used)
- 참조가 가장 오래된 페이지를 바꿈
- 참조가 가장 오래된 페이지를 파악하기 위해 각 페이지마다 계수기, 스택을 둬야 함.
- 보통 해시테이블과 이중 연결 리스트로 구현함
- 해시 테이블 : 이중 연결 리스트에서 빠르게 찾을 수 있도록 사용
- 이중 연결 리스트 : 한정된 메모리를 나타냄
- NUR(Not Used Recnetly)
- LRU에서 발견한 알고리즘으로 일명 Clock알고리즘
- 0과 1을 가진 비트를 두고 1이면 최근에 참조된 것, 0이면 참조되지 않은 것
- 시계 방향으로 돌면서 0을 찾고, 0을 찾은 순간 해당 프로세스를 교체하고 1로 바꿔줌
- LFU(Least Frequently Used)
- 가장 참조횟수가 적은 페이지를 교체 = 가장 많이 사용되지 않은 페이지를 교체
728x90