인프런 워밍업 클럽 스터디 2기 CS 2주차 미션
**운영체제**
1. FIFO 스케줄링의 장단점이 뭔가요?
FIFO 알고리즘의 장점은 우선 로직이 간단하다는 겁니다. 들어온 순서대로 Job을 수행하면 됩니다.
허나 단점은 정말 단순히 순서대로 작업을 수행하기 때문에 앞에 수행 시간이 엄청 오래 걸리는 Job이 있고 바로 뒤에 잠깐이면 끝나는 Job이 있어도 예외 없이 뒤의 Job은 앞의 Job의 오랜 수행 시간을 모두 기다리고 나서 수행되기 때문에 Job 입력 순서에 따라 비효율적일 수 있습니다.
2. SJF를 사용하기 여러운 이유가 뭔가요?
어떤 Job이 먼저 끝날지, 즉 어떤 Job이 가장 짧을지 예측하는 것이 불가능하기 때문입니다. 우리가 컴퓨터를 사용할 때 어떤 프로세스를 이때 종료하겠다고 정해 놓고 사용하지 않습니다. 따라서 SJF은 단순히 다른 알고리즘의 성능 측정 용도로 사용됩니다.
3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?
Round Robin 알고리즘에서 타임 슬라이스가 너무 작으면 Job을 실행하는 시간에 비해 컨택스트 스위칭을 하는 시간이 너무 많아지게 됩니다. 즉 오버헤드가 너무 커지게 됩니다. 따라서 운영체제는 사용자가 끊김을 느끼지 않을 만큼 작게 타임 슬라이스를 설정하고, 또 오버헤드가 너무 커지지 않도록 크게 타임 슬라이스를 정해서 적절한 타임 슬라이스를 정해야 합니다. (window는 20ms라고 했었나?)
4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?
우선 운영체제가 프로세스를 관찰하면서 CPU를 계속 사용해서 운영체제가 CPU 사용권을 뺏어야 하는 상황이 오면 그 프로세스를 CPU Bound Process 라고 인식합니다. I/O Bound Process는 프로세스가 I/O 요청을 자주하고, CPU를 사용하다가 CPU 권한을 양보하는 경우가 잦은 경우 운영체제가 I/O Bound Process라고 판단합니다.
5. 공유자원이란무엇인가요?
여러 프로세스간 또는 여러 쓰레드 간 서로 공유하는 자원입니다.
6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?
상호배제 - 어떤 프로세스가 리소스를 점유했으면, 그 리소스는 다른 프로세스와 공유할 수 없습니다.
비선점 - 프로세스가 리소스를 점유하고 있을 때, 다른 프로세스가 그 리소스를 빼앗을 수 없어야 합니다.
점유와 대기 - 어떤 프로세스가 리소스를 가지고 있는 상태에서 다른 리소스를 원하는 상태여야 합니다.
원형 대기 - 점유와 대기를 하고 있는 프로세스의 관계가 원형을 이루어야 합니다.
이 네 가지 중 하나라도 충족하지 않을 시, 교착 상태는 발생하지 않습니다.
**자료구조와 알고리즘**
1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?
재귀 함수 탈출 조건인 기저 조건이 없으면 재귀 함수를 탈출하지 못하고 계속해서 재귀 함수를 반복 호출 할 수 있어서 stack 메모리 초과가 발생해서 프로세스가 강제 종료될 수 있습니다.
2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.
```js
function sumOdd(n){
if (n == 0) return; // 기저 조건
if (n % 2 == 1) return n + sumOdd(n - 1); // 홀수면 + 하고 하향식 호출
return sumOdd(n - 1); // 짝수면 그냥 하향식 호출만
}
console.log(sumOdd(10)) // 25
```
댓글을 작성해보세요.