블로그

하얀종이개발자

인프런 워밍업 클럽 2기 - CS전공지식 스터디 미션 02 입니다.

CS전공지식 미션 2운영체제FIFO 스케줄링의 장단점이 뭔가요?FIFO (First In First Out) 스케쥴링은 말그대로 먼저 들어온 프로세스가 먼저 CPU를 할당 받는 방식을 말합니다.장점은 단순하게 들어온 순서대로 처리하기 때문에 이해와 구현이 쉽고, 프로세스가 작업이 완료될때까지 지속적으로 실행되기 때문에 CPU의 사용률을 높다는 것에 있습니다.단점으로는 진행되고 있는 프로세스가 완전히 끝나야만 다음 프로세스에 CPU를 할당할 수 있기 때문에, 만약 작업시간이 긴 프로세스가 먼저 실행되고 작업시간이 작은 프로세스가 다음에 실행된다고 한다면, 작은 프로세스는 계속 기다리는 상황이 생길 수 있습니다. 또한 도중에 I/O작업이 발생하면 CPU작업이 필요없는데도 I/O작업이 끝날때까지 CPU가 대기하는 비효율도 발생하게 됩니다.SJF를 사용하기 여러운 이유가 뭔가요?  SJF(Shortest Job First)는 짧은 작업시간을 가진 프로세스에 먼저 CPU를 할당하는 방식입니다. 그러나, 이론적으로는 FIFO보다 빠르지만 사용하기 어려운 이유가 있습니다.첫번째는 짧은 작업시간을 가진 프로세스를 선별해야 하는데 실제 어떤 프로세스가 얼마나 실행될지 예측이 어렵다는 점 입니다. 운영체제는 작업의 소요 시간을 사전에 예측하기 힘들며, 이를 정확히 판단하는 것은 거의 불가능합니다.두번째는 작업시간이긴 프로세스의 우선순위가 계속 뒤로 밀리면서 실행되지 못하고, 기아(starvation) 상태에 빠질 가능성이 있습니다. 이러한 문제들로 인해 SJF는 현실적으로 사용될 수 없습니다.RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?RR(Round Robin)는 FIFO 스케쥴링의 단점을 해결하기위해 시간을 균등하게 분배하여 각 프로세스나 작업에 순차적으로 CPU를 할당하는 방식을 말합니다.타임슬라이스가 아주 작으면 타임슬라이스 마다 CPU가 할당되는 프로세스가 변경되는 만큼 컨텍스트 스위칭이 발생하기 때문에 처리량이 늘어날 수 있는 문제가 있습니다. 만약 프로세스의 처리량보다 컨텍스트 스위칭의 처리량이 커진다면 배보다 배꼽이 더 큰 상황이 될 수 있습니다.운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?MLFQ (Multi Level Feedback Queue)는 프로세스의 우선순위를 동적으로 조절하여 CPU를 효율적으로 할당하는 방식을 말합니다. MLFQ는 CPU Bound Process는 타임슬라이스를 크게 주고 I/O Bound Process는 타임슬라이스를 적게 주는 방식으로 동작하는데, 프로세스가 동작하면서 주어진 타임슬라이스를 모두 사용하고 운영체제에 의해 CPU를 빼앗기면 CPU Bound Process로 간주하여 우선순위를 낮춰 다음 실행될 때 더 큰 타임슬라이스를 부여하도록 하고, I/O작업이 발생하여 스스로 CPU를 반납하면 I/O Bound Process로 간주하여 우선순위를 높여 작은 타임슬라이스가 주어지도록 합니다.공유자원이란무엇인가요?공유자원은 여러 프로세스나 스레드가 동시에 접근할 수 있는 자원을 말합니다. 예를 들어, 파일, 프린터, 메모리 등이 있습니다. 공유자원은 여러 프로세스 혹은 스레드가 공유하고 있기 때문에 각 프로세스의 접근 순서에 따라 결과가 달라질수 있어 조심해야 합니다. (동기화 문제)교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야할까요?교착상태 (데드락)은 두개 이상의 프로세스들이 서로가 가진 자원을 기다리다 아무도 작업을 진행하지 못하는 상태를 말합니다. 교착상태에 빠질 수 있는 조건은 4가지인데 모두 충족해야 교착상태에 빠질 수 있습니다.상호 배제 : 어떤 프로세스가 한 리소스를 점유했다면 그 리소스는 다른 프로세스에게 공유되면 안됨비선점 : 프로세스 A가 리소스를 점유하고 있으면 다른 프로세스가 리소소를 빼앗을 수 없음점유대기 : 어떤 프로세스가 리소스 A를 가지고 있는 상태에서 리소스 B를 원하는 상황원형대기 : 점유와 대기를 하는 프로세스의 관계가 원형을 이루고 있음 자료구조와 알고리즘재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?재귀함수는 자기 자신을 다시 호출하는 함수를 말하는데, 문제를 반복적으로 더 작은 문제로 분해하여 해결하는데 사용됩니다. 이때 계속 자기 자신을 호출하므로 어느순간에는 호출을 멈춰야 하는데, 기저조건이 이 역할을 하게 됩니다.만약 기저조건을 만들지 않거나 잘못설정하면, 함수가 계속해서 자신을 호출하여, 스택오버 플로우가 발생하여 프로그램이 비정상적으로 종료 될 수 있습니다.2.0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.자바스크립트 코드function sumOdd(n){ // 기저조건 : n이 0보다 작으면 0을 반환 if (n <= 0) return 0; // 홀수일 때는 n을 더하고, 짝수일 때는 n-1을 재귀호출 if(n % 2 !== 0) { return n + sumOdd(n - 2); } else { return sunOdd(n - 1); } } console.log(sumOdd(10)) // 25자바 코드개인적으로 자바를 사용하고 있어서 자바코드로도 작성해봤습니다.public class SumOddNumbers { // 0부터 n까지 홀수의 합을 구하는 재귀 함수 public static int sumOdd(int n) { // 기저 조건: n이 0 이하일 때 0을 반환 if (n <= 0) { return 0; } // n이 홀수인 경우 n을 더하고, 짝수인 경우 n-1로 재귀 호출 if (n % 2 != 0) { return n + sumOdd(n - 2); // n이 홀수일 때 } else { return sumOdd(n - 1); // n이 짝수일 때 다음 홀수로 } } public static void main(String[] args) { int n = 10; int result = sumOdd(n); System.out.println("0부터 " + n + "까지 홀수의 합: " + result); // 출력: 25 } }

백엔드인프런워밍업클럽2기cs전공지식스터디미션2주차감자

채널톡 아이콘