[CPU 스케줄링 알고리즘(비선점형,선점형)]
CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당합니다.
프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정합니다. 이 알고리즘은 CPU 이용률은 높게, 주어진 시간에 많은 일을 하게, 준비 큐(ready queue)에 있는 프로세스는 적게, 응답 시간은 짧게 설정하는 것을 목표로 합니다.
비선점형 방식
비선점형 방식(non-preemptive)은 프로세스가 스스로 CPU 소유권을 포기하는 방식이며, 강제로 프로세스를 중지하지 않습니다. 따라서 컨텍스트 스위칭으로 인한 부하가 적습니다.
FCFS
FCFS(First Come First Served)는 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘입니다. 길게 수행되는 프로세스 때문에 '준비 큐에서 오래 기다리는 형상(convay effect)이 발생하는 단점이 있습니다.
SJF
SJF(Shortest Job First)는 실행 시간이 짧은 프로세스를 가장 먼저 실행하는 알고리즘입니다. 긴 시간을 가진 프로세스가 실행되지 않는 현상(starvation)이 일어나며 평균 대기 시간이 가장 짧습니다.
하지만 실제로는 실행 시간을 알 수 없기 때문에 과거의 실행했던 시간을 토대로 추측해서 사용합니다
우선순위
기존 SJF 스케줄링의 경우 긴 시간을 가진 프로세스가 실행되지 않는 현상이 있었습니다.
이는 오래된 작업일수록 '우선 순위를 높이는 방법(aging)'을 통해 단점을 보완한 알고리즘을 말합니다.
선점형 방식
선점형 방식(preemptive)은 현대 운영체제가 쓰는 방식으로 지금 사용하고 있는 프로세스를 알고리즘에 의해 중단시켜 버리고 강제로 다른 프로세스에 CPU 소유권을 할당하는 방식을 말합니다.
라운드로빈
라운드 로빈(RR, Round Robin)은 현대 컴퓨터가 쓰는 스케줄링인 우선순위 스케줄링(priority scheduling)의 일종으로 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비큐(ready queue)의 뒤로 가는 알고리즘입니다.
예를 들어 q만큼의 할당 시간이 부여되었고 n개의 프로세스가 운영된다고 하면 (n-1)*q 시간이 지나면 자기 차례가 오게 됩니다.
할당 시간이 너무 크면 FCFS가 되고 짧으면 컨텍스트 스위칭이 잦아져서 오버헤드, 즉 비용이 커집니다.
일반적으로 전체 작업 시간은 길어지지만 평균 응답 시간은 짧아진다는 특징이 있습니다.
또한, 이 알고리즘은 로드밸런서에서 트래픽 분산 알고리즘으로도 쓰입니다.
SRF
SJF는 중간에 실행 시간이 더 짧은 작업이 들어와도 기존 짧은 작업을 모두 수행하고 그 다음 짧은 작업을 이어나가는데, SRF는 중간에 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘입니다.
다단계 큐
다단계 큐는 우선순위에 따른 준비 큐를 여러 개 사용하고, 큐마다 라운드 로빈이나 FCFS 등 다른 스케줄링 알고리즘을 적용한 것을 말합니다. 큐 간의 프로세스 이동이 안되므로 스케줄링 부담이 적지만 유연성이 떨어지는 특징이 있습니다.
[데이터베이스의 핵심, 스토리지엔진(innoDB, MyISAM, wiredtiger 차이]
Innodb: MySQL 8.0 defefault 엔진, but MyISAM으로 변경 가능
2.행, 인덱스 조회 캐싱: MyISAM은 파일 시스템 블록 캐시에 의존하는 반면 InnoDB는 엔진 자체내에서 행 캐시와 인덱스 캐시를 결합하여 이 작업을 수행합니다.
4.MyISAM은 항상 테이블에 ROW COUNT를 가지고 있어 조회 쿼리시 빠르다.
5.InnoDB는 트랜잭션 처리, 대용량 데이터를 다루기에 좋고 트랜잭션이 필요없고 조회기능이 많을 때 MyISAM이 좋다.
wirediger 엔진: MongoDB의 default 엔진 wiredTiger 엔진은 LSM
Tree(로그 기반 병합트리)를 이용하여 읽기 성능을 포기하고 그만큼 저장 성능을 향상시 키고 느린 읽기 성능을 보완하기 위해 블룸 필터를 사용한 엔진입니다.
체크포인트
MongoDB는 60초 간격으로 체크포인트를 생성 또한 MongoDB가 종료되거나 새로운 체크포인트를 작성하는 동안 오류가 발생하더라도 다시 시작하면 MongoDB는 마지막 유효한 체크포인트에서 복구할 수 있습니다.
체크포인트를 기반으로 복구가 가능
저널링
로그라고 부를 수 있는 저널링이 가능, 체크포인트 간의 모든 데이터 수정 사항을 유지합니다. MongoDB가 체크포인트 사이에 종료되면 저널을 사용하여 마지막 체크포인트 이후 수정된 모든 데이터를 재생산 할 수 있음.
압축
WiredTiger를 통해 MongoDB는 모든 컬렉션 및 인덱스에 대한 압축을 지원합니다.
메모리
약 50%의 메모리를 차지 예를들어 총 4GB의 RAM이 있는 시스템에서 WiredTiger캐시는 1.5GB의 RAM을 사용합니다 (0.5 (4GB-1GB)=1.5GB)
반대로 1.25GB의 RAM이 있는 시스템은 WiredTiger 캐시에 256MB를 할당합니다. 이는 전체 RAM의 절반에서 1기가바이트를 뺀 값 ( 0.5 (1.25GB -1GB) = 128MB < 256 MB) 이기 때문입니다.