CS 미션 2
1. FIFO 스케줄링의 장단점은 무엇인가요?
답변:
장점: 구현이 매우 간단하며, 프로세스가 도착한 순서대로 처리되므로 공정성이 보장됨.
단점: 긴 작업이 먼저 도착하면 뒤에 있는 짧은 작업들이 오래 기다리는 Convoy Effect가 발생할 수 있으며, 대기 시간이 길어져 비효율적일 수 있음.
2. SJF(Shortest Job First)를 사용하기 어려운 이유는 무엇인가요?
답변:
SJF는 프로세스의 실행 시간을 미리 알아야 하는데, 실제로 프로세스가 얼마나 걸릴지 정확히 예측하기 어렵기 때문에 사용이 까다로움. 또한, 선점형이 아닌 경우 긴 작업이 먼저 실행되면 짧은 작업이 뒤로 밀리게 되어 성능 저하가 발생할 수 있음.
3. RR(Round Robin) 스케줄링에서 타임 슬라이스가 너무 작으면 어떤 문제가 발생하나요?
답변:
타임 슬라이스가 너무 작으면 Context Switching이 너무 자주 발생하여, CPU가 프로세스 교체에 많은 시간을 사용하게 됨. 이로 인해 실제 작업 처리보다 스위칭 비용이 커져서 성능이 저하되고 처리율이 낮아질 수 있음.
4. MLFQ(Multi-Level Feedback Queue)에서 CPU Bound와 I/O Bound 프로세스를 어떻게 구분하나요?
답변:
MLFQ는 I/O Bound 프로세스가 CPU를 짧게 사용하고 자주 입출력을 요청하는 특성으로 인해 높은 우선순위를 부여하며, CPU Bound 프로세스는 CPU를 오래 사용하므로 점차 우선순위가 낮아져 더 낮은 큐로 이동함.
5. 공유 자원이란 무엇인가요?
답변:
공유 자원은 여러 프로세스나 쓰레드가 동시에 접근하여 사용할 수 있는 자원으로, 대표적으로 메모리, 파일, 프린터 등이 있음. 여러 프로세스가 동시에 접근할 경우 자원 충돌 문제가 발생할 수 있어 동기화가 필요함.
6. 교착 상태(Deadlock)에 빠질 수 있는 조건은 무엇인가요?
답변:
교착 상태가 발생하려면 다음 네 가지 조건을 모두 충족해야 함:
상호 배제: 자원이 한번에 하나의 프로세스만 사용할 수 있음.
점유와 대기: 자원을 점유한 상태에서 다른 자원을 기다림.
비선점: 자원을 강제로 뺏을 수 없음.
순환 대기: 자원이 순환적으로 대기 상태에 있음.
자료구조와 알고리즘 문제
7. 재귀 함수에서 기저 조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생하나요?
답변:
기저 조건이 없으면 재귀 함수가 끝없이 호출되어 무한 재귀가 발생함. 이로 인해 스택 메모리가 가득 차면서 Stack Overflow가 발생할 수 있고, 시스템이 비정상 종료될 수 있음.
8. 0부터 입력 n
까지 홀수의 합을 더하는 재귀 함수를 작성하세요.
javascript코드 복사function sumOdd(n) {
// 기저 조건: n이 0보다 작으면 0을 반환
if (n <= 0) return 0;
// n이 홀수면 n을 더하고, 짝수면 다음 홀수를 더하기 위해 n - 1을 호출
if (n % 2 !== 0) return n + sumOdd(n - 2);
else return sumOdd(n - 1);
}
console.log(sumOdd(10)); // 25
답변:
이 재귀 함수는 0부터 n
까지의 홀수 합을 계산함. n
이 홀수일 경우, 그 값을 더한 후 n-2
에 대해 다시 재귀 호출을 하며, 짝수일 경우에는 다음 홀수를 계산하기 위해 n-1
을 호출함.
댓글을 작성해보세요.