메모리 영역 종류
👉 메모리 영역 4가지
- Code : 실행 명령과 코드를 포함
- Data : 전역변수, 정적변수 (Static 변수나 Global 변수)
- Heap : 사용자가 동적으로 할당한 메모리를 위함
- Stack : 지역변수, 매개변수, 반환값 등 일시적인 값
👉 메모리 계층 비교
- 레지스터 : 속도 빠름 / 용량 작음 / CPU 안에 있는 매우 빠른 임시 기억장치(휘발성)로 데이터를 저장할 방법이 없는 CPU는 레지스터를 거쳐 데이터를 전달함
- 캐시 : 속도 빠름 / 용량 작음 / CPU와 주기억장치 간의 메모리 사용 속도 향상을 위해 사용하는 메모리 (L1, L2 캐시)
- 주기억장치 : 속도 보통 / 용량 보통 / RAM과 같은 현재 CPU에서 활동되고 있는 메모리
- 보조기억장치 : 속도 낮음 / 용량 많음 // HDD, SDD와 같은 데이터 영구 보관 저장소
메모리 관리 전략
👉 메모리 관리 전략이란?
여러 프로세스를 돌리기 위해 주 기억장치를 동적 분할하여 메모리 관리하는 작업
👉 메모리 관리 전략 방법 갈래
고정 크기 : 페이징(Paging)
가변 크기 : 세그먼테이션(Segmentation)
페이징 : 외부단편화 x , 내부 단편화 o
세그먼테이션 : 외부단편화 o, 내부 단편화 x
👉 가상 메모리란?
메모리가 가진 물리적 한계를 극복하기 위해, 프로세스의 필요 자원이 메모리에 다 올라와 있는 것 처럼 사용 하는 것 (필요한 부분만 올려서 사용하는 것이 핵심 - ex. Page Table로 ㅡDisk에 있는 것을 메모리로 가져옴)
실제 주기억장치(RAM)보다 큰 메모리 영역을 제공하는 방법으로 사용
👉 페이지 폴트란?
가상메모리 공간에는 존재하지만 시스템의 RAM에는 존재하지 않는 상태 (메모리로 가져와 PageFault 없는 것 처럼 처리)
👉 페이징 vs 세그먼테이션 하는 이유
페이지 폴트 발생을 최소화 하기 위해 메모리를 나눠 놓는 방식
내부 단편화가 존재함 / 세그먼테이션은 메모리를 가변적인 크기로 나누어 관리, 내부 단편화는 없지만 외부단편화 존재
👉 페이징 vs 세그먼테이션
가상 메모리 방식 (둘다 해당) : 필요시 자동 호출하므로 메모리에 다 로드할 필요 x
- 페이징 : 외부 단편화 X, 소량의 내부 단편화 O, 복잡한 메모리 관리로 오버헤드 발생
- 세그먼테이션 : 내부 단편화 X, 외부 단편화 O 메모리 사용 효율 개선, 동적 분할을 통한 오버헤드 감소 (페이징이 주기적으로 교체 되는 것에 대한)
👉 페이지 교체 알고리즘이란?
남아 있는 페이지 부재로 기존의 할당된 페이지의 정보를 교체하는 것을 결정하는 알고리즘
- FIFO 알고리즘 : First-in First-out, 메모리에 먼저 올라온 페이지를 교체하는 알고리즘
- OPT 알고리즘 : Optimal Page Replacement 알고리즘, 앞으로 가장 사용하지 않을 페이지를 교체하는 알고리즘
- LRU 알고리즘 : Least-Recently-Used, 최근에 사용하지 않은 페이지를 교체하는 알고리즘
👉 메모리 운용 과정
1. 평소 하드 드라이브에 전체 데이터 저장
2. 사용시 일부 데이터를 RAM으로 옮김
3. RAM의 매우 작은 메모리 부분의 데이터를 L1 캐시, L2 캐시로 옮겨서 사용
4. CPU에서 L1, L2, RAM을 활용하여 연산
캐시 메모리
👉 캐시 메모리(Cache Memory) 란?
자주 쓰이는 데이터를 미리 저장해고 요청시 빠르게 사용할 수 있게 하는 것
👉 캐시 메모리(Cache Memory) 종류
CPU 캐시 : CPU와 RAM 사이에 위치, CPU에서 자주 사용되는 메모리 영역을 Cache로 저장하여 속도 항샹 (ex. CPU 와 L1, L2, L3 Cache)
in-memory 캐시 (redis, memcached) : 인 메모리 캐시로 구조 상 RAM과 L3 Cache 사이에 위치
웹 캐시 : 브라우저 캐시 (private, shared), 웹 서버 내의 게이트웨이 캐시, CDN, 프록시 캐시
👉 CPU 캐시란?
CPU와 주기억장치(RAM) 사이에 위치하여 메모리 사용 속도 향상을 위해 사용하며, 자주 사용되는 메모리 영역을 Cache로 저장하여 속도 항샹 (ex. CPU 와 L1, L2, L3 Cache)
ex1) CPU 코어와 메모리 사이의 병목 현상 완화
ex2) 웹 브라우저 캐시 파일은, 하드디스크와 웹페이지 사이의 병목 현상을 완화
👉 웹 브라우저의 캐시 예시
쿠키 : expire 있는 key-value 저장소로 만료기한은 주로 서버에서 설정
로컬 스토리지 : 만료 기한 없는 key-value 저장소 (~10MB) 브라우저 닫아도 유지됨, HTML5, Client 관리
세션 스토리지 : 만료 기한 있는 key-value 저장소 (~5MB) 브라우저 닫으면 삭제됨, HTML5, Client 관리
👉 캐시 사용하면 좋은 경우
데이터가 변경이 적은 대신 자주 호출 되는 경우
👉 캐시 사용 적절성 판단 기준
- 데이터가 변경에 민감한지?
- 캐시로 저장하는 작업의 연산이 비싼지?
- 데이터 정합성 여부 (데이터 정합성에 민감한 금용권은 Redis사용 권장 X)
👉 캐시 메모리에 저장되는 기준
시간 지역성 : for, while 반복문 등에 한번 참조된 데이터는 루프 간 자주 참조될 가능성이 높다는 것
공간 지역성 : A[0], A[1]과 같은 연속 접근 시, 참조된 데이터 근처의 있는 데이터가 가능성 높다는 것
👉 주기억장치 vs 보조기억장치 vs 캐시
주기억장치 : RAM, ROM 등의 현재 CPU에서 활용하고 있는 메모리 (ex. CPU가 일하는 책상)
보조기억장치 : SSD, HDD 등의 데이터 영구 보관 장소
캐시 : CPU와 주기억장치 사이의 기억장치
명령어 처리, System Call
👉 System Call 이란?
운영체제가 커널에 접근하기 위한 interface (도구 느낌)로 유저가 OS의 서비스를 받기 위해 커널 함수 호출시 사용
👉 명령어 처리 과정
fetch cycle(인출사이클)과 execute cycle(실행사이클) 두개로 나뉨
fetch cycle (인출 사이클)
- PC에 저장된 주소를 MAR로 전달하고 해당 주소에서 명령어를 인출
- 해당 명령어를 버퍼 레지스터(MBR)에 저장하고 PC값을 1증가
- 마지막으로 명령어를 명령어 레지스터(IR) 에 전달하여 인출 사이클이 완료
execute cycle (실행 사이클)
- 데이터를 인출하고 데이터 처리
- 처리된 데이터를 저장하는 과정을 거쳐서 완료
I/O 작업, 대기, 동기-비동기
👉 동기 I/O , 비동기 I/O 차이
I/O 대기 : 쓰기 연산이 진행 되는 동안 아무 작업도 하지 않고 완료 신호를 기다리는 상태
비동기 I/O : I/O 대기와 같은 유휴시간을 활용하기 위해, 기존 요청을 필요시 꺼낼 수 있는 dispatch 메커니즘을 Event loop 형태로 만들어 놓고, 다른 작업을 진행 중에, 데이터가 준비 되면 통지(notification) 수신
👉 동기 I/O , 비동기 I/O 차이
멀티 Process/Thread I/O 대기 중이여도, CPU가 Multi-tasking 특성을 사용해 프로세스를 계속 진행
멀티 프로세스를 실행하고 각각의 프로세스는 필요시 비동기 I/O를 활용하여 Event-Driven (이벤트 중심)으로 모델링 함으로서 컴퓨터 자원을 최대한 활용한다.
👉 DB의 잦은 I/O에 대한 병목이 발생시 해결 방법은?
- Batch로 일괄처리해서 한번에 db에 집어넣음 (파이프라인)
- asyncio.sleep을 통해 event loop에 넘겨 따로 작업을 실행하도록 함
이전 글
[기술면접 대비] Operating System 1 - Process, Thread
https://yubi5050.tistory.com/192
[기술면접 대비] Operating System 2 - Mutex, Semaphore, DeadLock
https://yubi5050.tistory.com/232
'기술 정리 & CS > 기술면접 대비' 카테고리의 다른 글
[기술 면접 대비] Operating System 4 - CPU Scheduling (1) | 2024.09.22 |
---|---|
[기술면접 대비] Operating System 2 - Mutex, Semaphore, DeadLock (1) | 2024.06.16 |
[기술면접 대비] Operating System 1 - Process, Thread (2) | 2024.06.16 |
[기술면접 대비] Python & 자료구조 (0) | 2023.06.18 |
[기술면접 대비] Database 3 - Index, Replication (1) | 2022.12.13 |