여러분들, 제가 대박사실 하나 알려드릴까요?
평소에 유튜브로 영상보면서 카톡도 하시고 인스타도 하시잖아요?
여러분들은 "동시에"한다고 생각하지만
실은 여러가지 프로세스가 각각 따로따로 실행되는거 알고있나요?
아마 컴퓨터 공학을 배우지 않은 사람들은
"이건 또 뭔소리래?"하면서 의아해하실 겁니다.
사실 우리가 쓰는 CPU는 여러가지 프로그램들을 관리하면서
효율적으로 자원을 관리하고 있습니다.
프로세스는 어떤 식으로 관리가 이뤄질까?
우리는 한정된 자원으로 컴퓨터를 활용합니다.
그리고 그 안에는 다양한 프로세스가 있습니다.
제 컴퓨터 안에 돌아가는 프로세스입니다.
어떤 거는 제가 잘 쓰지도 않는 것들도 상당히 많습니다.
(이런게 왜 깔려있지??싶은 것도 있고)
이 많은 자원을 언제 어떻게 써야할까?
내가 잘 안쓰는 프로세스는 용량을 적게 쓰고
가장 많이 쓰는 것 위주로 하면 어떨까?
이런 고민은 OS를 개발하는 사람들이 많이 하는 고민이고
이런 고민들이 모여 지금같이 편안한 컴퓨터를 쓸 수 있게 되었습니다.
프로세스는 PCB(Process Control Block)에서 관리가 이뤄집니다.
크게 3가지 상태로 나눌 수 있는데
Ready ->실행전 or 실행초과되서 원상태로
Run->CPU에서 실행
Block->실행준비 중. 다른 거 쓰느라 막아둠
(더 세세하게 나눠서
Ready waiting running terminated 이런 식으로 나누는 경우도 있음.
중요한 것은 프로세스제어를 위해
상태에 따라 흐름을 제어한다는 것)
저 상태에 따라서 프로세스는
'스케쥴링' 과정을 통해
프로세스를 관리합니다.
이 관리 방식도 선점,비선점이냐에 따라서 나누는데
분류해서 하나하나 접근하는 건 머리가 아프니
일부만 소개를 하겠습니다.
말그대로, 프로세스 우선순위에 따라서
프로세스 동작을 수행하는 방식입니다.
우선순위가 높은 프로세스에 대한 동작을 차례대로 수행하는 식.
이렇게 관리를 진행하다보면
우선순위가 낮은 프로세스의 동작이 후순위로 계속 미뤄집니다.
이 그림에서는 프로세스 5개만 들어올 때를 가정했는데,
새롭게 우선순위가 높은 프로세스가 계속 PCB에 들어온다면
낮은 우선순위를 가진 프로세스는 무한대기를 해야합니다.
(이런 상태를 '기아상태'라고 부릅니다)
이걸 해결하는 방식이 '에이징'으로,
후순위의 우선순위를 조금씩 높여주어서
어떻게든 동작시키도록 만들어주도록 유도합니다.
모든 프로세스가 공평하게 CPU에서 동작하는 방법입니다.
PCB에 들어온 프로세스가
동일한 시간단위동안 한번씩 사용되는 식입니다.
이 관리방법의 장점은
모든 프로세스가 동작이 가능하기 때문에
우선순위에서 문제가 된 기아상태가 발생하지 않습니다.
여기서 시간간격을 어떻게 나눠야하는지가 관건인데
너무 짧게 나누면 context Switching이 자주일어나서 오버헤드가 발생하고
너무 길게 나누면 선입선출 관리처럼 먼저 온 프로세스가 먼저 실행되는 구조로 되어 의미가 퇴색됩니다.
(시간단위를 8초로 나눴다고 가정해보자.
현재 프로세스 완료시간이 가장 큰 게 4초라면
들어온 순서대로 4초수행하고 끝내는 식이라
라운드로빈 방식의 의미가 퇴색)
마감시간(Deadline)전까지 프로세스를 수행하도록 만드는 기법입니다.
과제가 뭉탱이로 많이 남아있을 때,
"당장 제출기한 닥친 거 부터 끝내자"라고 생각해
급한 거 먼저 끝내는 것과 유사합니다.
급한 순서대로 동작을 수행할 수 있지만
deadline을 지키지 못하는 경우가 생기면
timeout을 시켜버릴 수 있습니다.
예를들면 deadline이 8초인데
현재 시간에서 동작시키면 10초가 되어버려
deadline을 넘겨버리게 된다고 가정해봅시다.
이것도 방식마다 차이가 있는데,
어떤 경우에는 "dead line못지키니깐 terminated시킨다"라면서
동작 수행을 안하는 경우가 생깁니다.
https://m.blog.naver.com/audrl1010/120180587148
https://yoons2owo.tistory.com/27
git은 왜 쓰는 걸까?? (0) | 2023.07.29 |
---|---|
비동기식 프로그래밍이 필요한 이유 (0) | 2023.07.25 |
SW테스트에 대해서 알아보자 (0) | 2023.07.19 |
함수형 프로그래밍은 왜 필요할까? (0) | 2023.07.18 |
객체지향은 왜 필요할까? (2) | 2023.07.17 |
댓글 영역