 
    인프런 워밍업 클럽2 cs <day6>
DAY 6 과제
운영체제 -섹션 3유닛 5,6,7 SJF,RR, MLFQ
알고리즘 - 섹션 3 유닛 1 재귀
알고리즘
- 재귀함수란 자기 자신을 호출하는 함수 
- 콜스택에 자리를 많이 차지하여 메모리효율에 떨어진다. - 콜스택 : 프로세스에서 코드,데이터, 힙,스택 으로 메모리 영역이 있다. 그 중 하나 
- 콜스택은 함수가 First In Last Out으로 처음 들어가는 함수가 나중에 나온다. 
- 재귀함수가 호출될 때마다 콜스택에 계속 쌓이는데 거기서 메모리 효율이 떨어진다. 
 
- 그럼에도 불구하고 사용하는 이유 - 팩토리얼을 표현하기 편리하다. 
- 팩토리얼 : 1부터 n까지 모두 곱하여 표현하는 것 (표기 5!) 
 5! =5*4*3*2*1
 
function facto(num){
   if(num == 1 || num == 0){
     return 1;
   }else{
     return num * fac(num-1);   //5 * fac(4)= 5 * 4 * fac(3)....
   }
}운영체제
SJF
- Short Job First 
- FIFO 의 단점을 보안해보려고 만든 알고리즘이지만 
 brustTime(대기시간)이 너무 긴 프로세스에게는 계속 밀려나서 불리한 알고리즘
- 프로세스의 실행시간을 예측하기도 어렵기 때문에 
->실패해버린 알고리즘 ㅜㅜ
RR
- Round Robin 
- 실행시간이 다끝날 때까지 기다리는 FIFO 과 SJF 단점을 보안해서 
 타임 슬라이스를 부여해서 일정 시간이 지나면 프로세스가 cpu 할당하는 것을 끊고
 맨 뒤로 보내버리는 알고리즘- RR 대기시간 = FIFO 대기시간 -> RR은 비효율적인 방식! 
 RR은 컨텍스트 스위칭에 시간을 더 많이 사용하기 때문
 
- RR은 타임슬라이스의 크기에 따라 효율이 달라진다. - 타임 슬라이스⬇, 컨텍스트 스위칭⬆ -> 배보다 배꼽이 더 커진다. 
- 타임 슬라이스 ⬆, 사용자가 여러 프로세스를 같이 사용할 때 버벅임을 느낄 수있다. 
- 하지만 실제 타임슬라이스는 1ms으로 설정되어 있다~ 
 
MLFQ
- Multi Level Feedback Queue 
- RR 업그레이드 버전 
- 타임 슬라이스의 크기에 따라 달라지는 알고리즘 이다. 
- CPU Bound Process : - cpu 사용률과 처리량을 제일 중요 시 여긴다. 
 I/O Bound Process : 입출력 장치 사용률과 처리량을 제일 중요 시 여긴다.

- 타임 슬라이스 크기 차이에 따라 i/o 사용률이 확연히 다른 걸 볼 수있지만, 
 오른쪽 p1은 컨텍스트 스와칭⬆, 오버헤드도 ⬆
- p1과 같이 실행시간이 긴 애들은 오버헤드와 같은 불공평을 견뎌야한다... 
 ->MLFQ를 사용해서 불공평을 없애보자!
- cpu 바운드프로세스와 입출력 바운드 프로세스 각각 다른 타임 슬라이스를 부여한다.->구분해야된다. 
- 구분하는 방법! - cpu 바운드 프로세스 일 경우 cpu 사용하는 프로세스가 타임슬라이스 크기를 오버해 cpu 스케줄러에 의해 강제로 cpu를 빼앗기는 상황이 생긴다. 
- 반대로 입출력 바운드 프로세스는 스스로 cpu를 반납하려는 상황이 생긴다.(cpu 사용률 적음) 
 
- 이 방법을 토대로 우선순위와 타임슬라이스에 따른 큐를 준비한다.👇  
- 1. 프로세스가 우선순위 1큐에 들어간다. 
 2. 타임슬라이스 크기를 오버해 강제로 CPU를 뺏긴다-> 우선순위 2 큐로 우선순위가 낮은 큐로 이동
 => 우선순위에 밀릴수록 타임 슬라이스크기가 커지고 CPU를 효율적으로 사용할 수 있는 환경이 된다.
다른 알고리즘은 되게 친근했는데 MLFQ는 들을 때 예? 하면서 한 번씩 다시들었다.
사실 공부했던 건데 큐와 큐사이를 이동할 수 있는 알고리즘임~ 하고 외워버리기만하고 이렇게 자세하게 보지 않았던 것 같다.
댓글을 작성해보세요.
