🎁 모든 강의 30% + 무료 강의 선물🎁

[인프런 워밍업 클럽 3기] CS - 2주차 미션

[인프런 워밍업 클럽 3기] CS - 2주차 미션

2주차 미션


운영체제

  1. FIFO 스케줄링의 장단점이 뭔가요?

    • 장점 : 먼저 들어온 작업을 먼저 처리하는 방식으로 구현이 단순하고 직관적

    • 단점 : 작업시간이 긴 작업이 앞에서 발생한다면 이 작업이 끝날때 까지 완전 끝날때 까지 뒤에 있는 작업들이 비효율적으로 대기시간이 길어짐. 대기시간이 길어지면 응답 시간이 길어질 수 있음.


  2. SJF를 사용하기 여러운 이유가 뭔가요?

    • 실행 시간 예측이 불가능 하고, burst time이 긴 프로세스가 아주 오랫동안 실행이 되지 않을 수 있음. burst time이 짧은 프로세스가 중간에 계속 들어오면 burst time이 긴 프로세스는 계속 뒤로 밀림.


  3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?

    • 컨텍스트 스위칭이 많이 발생해 오버헤드가 증가함.


  4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?

    • CPU를 사용하는 프로세스가 실행하다가 스스로 CPU를 반납하면 CPU 사용이 적은 것이므로 I/O Bound Process라고 취급한다.

    • 반대로 타임 슬라이스 크기를 오버하여 CPU 스케줄러에 의해 강제로 CPU를 뺏기는 상황이면 CPU Bound Process라고 취급한다.


  5. 공유 자원 이란 무엇인가요?

    • 여러 프로세스가 동시 접근하여 사용하는 자원 (EX 파일)

    • 여러 프로세스가 사용하기에 Race Condition , Deadlock 등의 문제가 발생 할 수 있음

    • 문제 해결을 위해 여러 프로세스가 동시에 사용되면 안되는 구역인 임계구역을 설정하고 관리 해야함.,


  6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?

    상호 배제(Mutual Exclusion)

    • 한 번에 한 프로세스만 자원을 사용할 수 있어야 함.

    점유와 대기(Hold and Wait)

    • 이미 자원을 가진 프로세스가 추가 자원을 기다려야 함.

    비선점(No Preemption)

    • 프로세스가 자원을 강제로 빼앗길 수 없어야 함.

    순환 대기(Circular Wait)

    • 프로세스들이 원형으로 자원을 점유한 채 서로 기다려야 함.


자료구조와 알고리즘

  1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?

    • 기저조건이 없으면 무한 루프에 빠져 스택 오버 플로우가 발생할 수 있고 , 불필요한 연산이 증가 하여 성능이 저하됨.


  1. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.

function OddSum(n){
  if (n <= 0) return 0; // 기저 조건 (n이 0 이하이면 종료)
  if (n % 2 === 0) return sumOdd(n - 1); // 짝수면 n-1로 이동
  return n + sumOdd(n - 2); // 홀수면 더하고 n-2로 이동
}

console.log(sumOdd(10)) // 결과 값 : 25

  1. 다음 코드는 매개변수로 주어진 파일 경로(.는 현재 디렉토리)에 있는 하위 모든 파일과 디렉토리를 출력하는 코드입니다. 다음 코드를 재귀 함수를 이용하는 코드로 변경해보세요.

const fs = require("fs"); // 파일을 이용하는 모듈
const path = require("path"); // 폴더와 파일의 경로를 지정해주는 모듈

function traverseDirectory2(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);
        }
    }
}

traverseDirectory("."); // 현재 경로의 모든 하위 경로의 파일, 디렉토리 출력

댓글을 작성해보세요.


채널톡 아이콘