 
    인프런 워밍업 클럽 스터디 3기 - CS 전공지식 (운영체제, 자료구조, 알고리즘) 미션
운영체제 2주차 과제
- FIFO 스케줄링의 장단점이 뭔가요? 
-> 장점은 구현이 쉽다는 것이고 단점은 앞에 긴작업이 있으면 뒤에서 오래 기다려야 합니다.
- SJF를 사용하기 여러운 이유가 뭔가요? 
-> 실행시간을 예측하기가 어렵고 계산의 정확도가 떨어지기 때문입니다.
- RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요? 
-> 오버헤드가 커져서 프로세스가 실행되는 것보다 전환되는 시간이 더 오래걸릴 수 있습니다.
- 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요? 
-> CPU Bound Process는 낮은 우선순위의 큐로 이동되고, I/O Bound 프로세스는 실행을 일찍하고 높은 우선순위를 유지합니다.
- 공유자원이란무엇인가요? 
-> 여러 프로세스들이 모두 사용할 수 있는 자원이고 경쟁이 발생할 수 있습니다.
- 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요? 
-> 상호배제와 비선점, 점유와 대기, 원형대기가 필요조건이다.
알고리즘 2주차 과제
- 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요? 
-> 기저조건이 없거나 설정이 잘못되면 재귀가 무한으로 반복됩니다. 또한 함수가 종료되지 않고 계속 호출되어서 오버플로우가 발생하며 프로그램이 정상적으로 작동되지 않는 문제가 발생합니다.
- 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요. 
function sumOdd(n) {
  // 재귀 로직
  if(n<=0) return 0;
  return (n%2 !==0 ? n : 0) + sumOdd(n-1);
}
console.log(sumOdd(10));- 다음 코드는 매개변수로 주어진 파일 경로(.는 현재 디렉토리)에 있는 하위 모든 파일과 디렉토리를 출력하는 코드입니다. - 다음 코드를 재귀 함수를 이용하는 코드로 변경해보세요. 
const fs = require("fs"); // 파일을 이용하는 모듈
const path = require("path"); // 폴더와 파일의 경로를 지정해주는 모듈
function traverseDirectory1(directory) {
    const files = fs.readdirSync(directory); // 디렉토리의 파일 목록 불러오기
    for (const file of files) {
        const filePath = path.join(directory, file);
        const fileStatus = fs.statSync(filePath);
        if (fileStatus.isDirectory()) {
            console.log('디렉토리:', filePath);
            traverseDirectory(filePath); // 디렉토리인 경우에는 재귀 호출
        } else {
            console.log('파일:', filePath);
        }
    }
}
traverseDirectory1(".");
댓글을 작성해보세요.
