
인프런 워밍업 클럽 스터디 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(".");
댓글을 작성해보세요.