인프런 워밍업 클럽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는 들을 때 예? 하면서 한 번씩 다시들었다.
사실 공부했던 건데 큐와 큐사이를 이동할 수 있는 알고리즘임~ 하고 외워버리기만하고 이렇게 자세하게 보지 않았던 것 같다.
댓글을 작성해보세요.