본 포스팅은 '면접을 위한 CS 전공지식 노트'를 기반으로 작성되었습니다.
메모리 계층
- 레지스터, 캐시, 메모리, 저장장치로 구성
- CPU는 그저 메모리에 올라와있는 명령어를 실행할뿐
- 계층 위로 올라갈 수록 가격은 비싸지고 용량은 작아지며 속도는 빨라진다.
- 레지스터: CPU안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 용량이 가장 적음
- 캐시: L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 용량 적다.
- 주기억장치: RAM을 가리킴. 휘발성, 속도 보통, 용량 보통
- 보조기억장치: HDD, SSD 비휘발성, 속도 낮음, 용량 많음
캐시(Cache)
- 데이터를 미리 복사해 놓는 임시 저장소
- 빠른 장치와 느린 장치에서의 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
지역성의 원리
- 캐시를 직접 설정할 경우 자주 사용하는 데이터를 기반으로 설정해야 함.
- 자주 사용하는 데이터에 대한 근거 -> 지역성
- 시간 지역성(temporal locality)과 공간 지역성(spatial locality)으로 나뉨.
시간 지역성
- 최근 사용한 데이터에 다시 접근하려는 특성
공간 지역성
- 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성
캐시 히트와 캐시 미스
- 캐시 히트: 캐시에서 원하는 데이터를 찾은 것
- 캐시 미스: 해당 데이터가 없다면 주메모리로 가서 데이터를 찾아오는 것
캐시 매핑
- 캐시가 히트되기 위해 매핑하는 방법
- CPU의 레지스터와 주메모리(RAM) 간에 데이터를 주고받을 때를 기반으로 설명
웹 브라우저의 캐시
- 미리 저장하면 좋을 정보들을 웹브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰임.
쿠키
- 만료기한이 있는 key-value 저장소
로컬 스토리지
- 만료기한이 없는 key-value 저장소
- 10MB까지 저장 가능.
- 웹 브라우저를 닫아도 유지되며 도메인 단위로 저장, 생성.
- 클라이언트에서만 수정 가
세션 스토리지
- 만료기한이 없는 key-value 저장소
- 탭 단위로 세션 스토리지 생성
- 탭을 닫을 때 해당 데이터 삭제
- 5MB까지 저장가능, 클라이언트에서만 수정가능
DB의 캐싱계층
- DB 시스템 구축할 때도 메인 DB위에 레디스 DB계층을 캐싱 계층으로 두어 성능을 향상시키기도 한다.
메모리 관리
가상 메모리(virtual memory)
- 메모리 관리 기법 중 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것
- 이 때 가상적으로 주어진 주소를 가상 주소(logical address)라고 함
- 실제 메모리 상에 잇는 주소를 실제 주소(physical address)라고 함
- 가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 된다.
- 페이지 테이블: 가상 주소와 실제 주소가 매핑 되어 있고 프로세스의 주소 정보가 들어 있는 것
스와핑(swapping)
- 만약 가상 메모리에는 존재하지만 실제 메모리 RAM에 없는 데이터나 코드에 접근할 경우 페이지 폴트 발생
- 이 때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것
페이지 폴트( Page fault)
- 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우에 발생.
페이지 폴트와 스와핑의 과정
- CPU는 물리 메모리 확인 후 해당 페이지가 없으면 트랩을 발생시켜 OS에게 알림
- 운영체제는 CPU의 동작을 잠시 멈춤
- 운영체제는 페이지 테이블을 확인하여 가상메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단하고 현재 물리 메모리에 비어있는 프레임이 있는지 찾음. 물리 메모리에도 없다면 스와핑이 발동.
- 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블 최신화
- 중단되어있던 CPU 다시 시작
페이지
- 가상 메모리를 사용하는 최소 크기 단위
프레임
- 실제 메모리를 사용하는 최소 크기 단위
스레싱(thrashing)
- 메모리의 페이지 폴트율이 높은 것을 의미
- 이는 컴퓨터에 심각한 성능 저하 초래
- 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생
- 페이지 폴트가 일어나면 CPU 이용률이 낮아짐
- CPU 이용률이 낮아지면 운영체제는 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올림
- 이같은 악순환이 일어나며 스레싱이 일어남
- 운영체제에서 해결할 수 있는 방법은 작업 세트와 PFF
작업 세트(working set)
- 프로세스의 과거 사용 이력인 지역성(locality)를 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것
- 미리 메모리에 로드하면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있습니다.
PFF(Page Fault Frequency)
- 페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법
- 상한선에 도달하면 프레임을 늘리고 하한선에 도달한다면 프레임을 줄임.
메모리 할당
- 메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당
- 연속 할당, 불연속 할당으로 나뉨.
연속 할당
- 메모리에 연속적으로 공간을 할당하는 것을 말함.
- 이는 다시 고정 분할 방식과 가변 분할 방식으로 나뉨.
고정 분할 방식(fixed partition allocation)
- 메모리를 미리 나누어 관리하는 방식
- 내부 단편화 발생
가변 분할 방식(variable partition allocation)
- 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용.
- 내부 단편화는 발생하지 않고 외부 단편화 발생ㄱ ㅏ능
- first fit, best fit, worst fit 이 있다.
불연속 할당
- 메모리를 연속적으로 할당하지 않음
- 현대 운영체제가 쓰는 방법으로 페이징 기법이 있다.
- 메모리를 동일한 크기의 페이지로 나누고 프로그램마다 페이지 테이블을 두어 이를 통해 메모리에 프로그램을 할당.
- 페이징 기법 외에도 segmentation, paged segmentation의 방법 존재
페이징(paging)
- 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당
- 홀의 크기가 균일하지 않은 문제가 없어지지만 주소변환이 복잡해짐
세그멘테이션(segmentation)
- 페이지 단위가 아닌 의미 단위인 세그먼트(segment)로 나누는 방식
- 프로세스를 이루는 메모리는 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 이루어짐
- 코드와 데이터를 나누거나 코드 내의 작은 함수를 세그먼트로 놓고 나눌 수도 있다.
- 공유, 보안 측면에서 장점을 가지지만 홀 크기가 균일하지 않은 단점이 있다.
페이지드 세그멘테이션(paged segmentation)
- 프로그램을 의미 단위인 세그먼트로 나누고 동일 한 크기의 페이지 단위로 나누는 것.
페이지 교체 알고리즘
- 스와핑이 일어나면 효율적이지 못하기 때문에 스와핑이 최소가 되는 방향으로 설계되어야 함.
offline algorithm
- 가장 이상적인 알고리즘
- 미래에 참조되는 페이지와 현재 할당 페이지를 바꾸는 알고리즘
- but, 미래를 예측할 순 없다.
FIFO(First In First Out)
- 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
LRU(Least Recently Used)
- 참조가 가장 오래된 페이지를 바꿈
- 오래된 페이지를 파악하기 위해 페이지마다 계수기, 스택을 두어야하는 문제
NUR(Not Used Recently)
- 일명 clock algorithm
- 0(참조 되지 않음)과 1(최근에 참조되었음)을 가진 비트를 둠.
- 시계 방향으로 돌면서 0을 찾고 0을 찾은 순간 해당 프로세스 교체, 1로 바꿈.
LFU(Least Frequetly Used)
- 가장 참조 횟수가 적은 페이지를 교체
- 많이 사용되지 않은 것을 교체
'CS 기본 > OS' 카테고리의 다른 글
CPU 스케줄링 알고리즘 (0) | 2023.09.24 |
---|---|
프로세스와 쓰레드 (0) | 2023.09.24 |
운영체제와 컴퓨터 (0) | 2023.09.14 |