TIL 220902

강지훈·2022년 9월 1일
0

[가상메모리와 스와핑, 페이지폴트 그리고 스레싱]
가상 메모리(virtual memory)는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말합니다.
물리적 메모리 부족을 보완하며 실제 마치 큰 메모리를 기반으로 멀티태스킹을 하게 할 수 있음.
이때 가상적으로 주어진 주소를 가상 주소(logical address 또는 virtual address)라고 하며, 실제 메모리상에 있는 주소를 실제 주소(physical address)라고 합니다.

*가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 됩니다.

가상메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어있는 '페이지 테이블'로 관리됩니다
이때 속도 향상을 위해 TLB를 씁니다.
TLB: 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시이다. 페이지 테이클에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록해 속도를 향상시킬 수 있는 캐시 계층이다.

스와핑
만약 가상 메모리에는 존재하지만 실제 메모리인 RAM에는 현재 없는 데이터나 코드에 접근할 경우 페이지 폴트가 발생합니다.
이 때 메모리의 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 '마치 메모리처럼' 불러와 쓰는 '스와핑'을 통해 마치 페이지폴트가 발생하지 않은 것처럼 만듭니다

페이지: 가상 메모리를 사용하는 최소 크기 단위
프레임: 실제 메모리를 사용하는 최소 크기 단위

페이지폴트
페이지폴트(page fault)란 프로세스의 주소 공간에는 존재하지만 지금 이컴퓨터의 RAM에는 없는
데이터에 접근했을 경우에 발생하고 그 이후 스와핑이 작동하는데 자세한 과정은 다음과 같습니다.
1. CPU는 물리 메모리를 확인하여 해당 페이지가 없으면 트랩을 발생해서 운영체제에 알립니다.
2. 운영체제는 CPU의 동작을 잠시 멈춥니다.
3. 운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단하고 현재 물리 메모리에 비어 있는 프레임이 있는지 찾습니다. 물리 메모리에도 없다면 스와핑이 발동됩니다.
4. 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화합니다.
5. 중단되었던 CPU를 다시 시작합니다.

스레싱
스레싱(THRASHING)은 메모리의 페이지 폴트율이 높은 것을 의미하며, 이는 컴퓨터의 심각한 성능 저하을 초래합니다.
스레싱은 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생하는 것이다 페이지 폴트가 일어나면 CPU 이용률이 낮아집니다. CPU 이용률이 낮아지게 되면 운영체제는 "CPU가 한가한가?"라고 생각하여 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올리게 됩니다.
이와 같은 악순환이 반복되며 스레싱이 일어나게 됩니다.
이를 해결하기 위한 방법으로는 메모리를 늘리거나, HDD를 사용한다면 HDD를 SDD로 바꾼느 방법이 있습니다. 이외에 운영체제에서 이를 해결할 수 있는 방법은 작업 세트와 PFF가 있습니다.

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

PFF(PAGE FAULT FREQUENCY)는 페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법입니다. 만약 상한선에 도달한다면 프레임을 늘리고 하한선에 도달한다면 프레임을 줄이는 것이죠.

[네트워크를 이루는 장치 #1 애플리케이션 계층]
L7 스위치
스위치는 여러 장비를 연결하고 데이터 통신을 중재하며 목적지가 연결된 포트로만 전기신호를 보내 데이터를 전송하는 통신 네트워크 장비입니다.

L7 스위치는 로드밸런서라고도 하며, 서버의 부하를 분산하는 기기입니다.
클라이언트로부터 오는 요청들을 뒤쪽의 여러 서버로 나누는 역할을 하며 시스템이 처리할 수 있는 트래픽 증가를 목표로 합니다.
URL, 서버,캐시,쿠키들을 기반으로 트래픽을 분산합니다. 또한, 바이러스,불필요한 외부 데이터등을 걸러내는 필터링 기능 또한 기지고 있으며 응용프로그램 수준의 트래픽모니터링도 가능합니다.
만약 장애가 발생한 서버가 있다면 이를 트래픽 분산 대상에서 제외해야 하는데, 이는 정기적으로 헬스 체크를 이용하여 감시하면서 이루어집니다.

*헬스체크: L4 스위치 또는 L7 스위치 모두 헬스 체크를 통해 정상적인 서버 또는 비정상적인 서버를 판별하는데, 헬스 체크는 전송 주기와 재전송 횟수 등을 설정한 이후 반복적으로 서버에 요청을 보내는 것을 말합니다. 예를 들어 TCP요청을 보냈는데 3-웨이 핸드셰이크가 정상적으로 일어나지 않았다면 정상이 아닌 것이죠.

네트워크는 여러 개의 네트워크 기기를 기반으로 구축됩니다. 네트워크 기기는 계층별로 처리 범위를 나눌 수 있습니다.
상위 계층을 처리하는 기기는 하위 계층을 처리할 수 있지만 그 반대는 불가합니다. 예를 들어 L7 스위치는 애플리케이션 계층을 처리하는 기기로, 그 밑의 모든 계층의 프로토콜을 처리할 수 있습니다. 하지만 AP는 물리계층 밖에 처리하지 못합니다.

로드밸런서를 이용한 서버 이중화
로드밸런서는 대표적인 기능으로 서버 이중화를 들 수 있습니다. 서비스를 안정적으로 운용하기 위해서는 2대 이상의 서버는 필수적입니다. 에러가 발생하여 서버 1대가 종료되더라도 서비스는 안정적으로 운영되어야 하기 때문이죠.
로드밸런서는 2대 이상의 서버를 기반으로 가상 IP를 제공하고 이를 기반으로 안정적인 서비스를 제공합니다

이외에도 클라이언트가 호스트에 직접 접촉하는 것을 방지하여 내부 네트워크 구조를 숨기고 클라이언트가 호스트와 직접 상호 작용하는 것을 방지하는 보안 이점이 있습니다.

profile
never stop

0개의 댓글