스레드란? FCFS/SJF/HRN 알고리즘
스레드란? FCFS/SJF/HRN 알고리즘 — #정보처리기사 #개발자의도구들 #스레드 #스레드란 #thread #thread란 24년도 1회차 정보처리기사 필기 시...
#정보처리기사 #개발자의도구들 #스레드 #스레드란 #thread #thread란
24년도 1회차 정보처리기사 필기 시험대비 공부를 진행하였습니다.
\* 본글은 PC버전에 최적화 되어있습니다.
**\\ **공부방법론은 가장 첫글에 있습니다. 참고하실 분들은 참고하세요! \\ - 개발자의도구들
\\ 정보처리기사 전체 총 정리는 여기 있습니다!! \\
4과목, 프로그래밍 언어 활용
view
스레드(Thread)
스레드는 프로세스 내에서의 작업 단위로 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위입니다.
스레드가 하나인 프로세스를 단일 스레드, 두개 이상의 스레드가 존재하는 경우를 다중 스레드라고 부릅니다.
me) 스레드는 자원만 공유하는 하나의 새로운 프로그램으로 이해하면 좋습니다.
프로세스의 일부 특성을 가지기 때문에 경량(Light Weight) 프로세스라고도 합니다.
스레드 기반 시스템에서 스레드는 독립적인 스케쥴링의 최소 단위로 프로세스 역할을 수행합니다.
동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능합니다.
스레드의 분류
사용자 수준의 스레드: 사용자가 만든 라이브러리를 사용하여 스레드를 운용할 수 있겠습니다만, 구현이 어렵습니다.
커널 수준의 스레드: 운영체제의 커널에서 스레드를 운용할 수 있습니다. 구현이 쉽지만 성능이 안좋다고 합니다.
스레드의 장점
하나의 프로세스를 여러 개의 스레드로 생성하여 병행성을 증진시킬 수 있습니다. 전체적인 하드웨어, 운영체제, 프로그램 등의 성능이 향상됩니다.
또한 실행환경에서 메모리 특정 부분을 공유하기 때문에 메모리 낭비가 줄어들고, 응답시간이 빠릅니다.
스레드는 속도와 효율적인 측면에서 매우 뛰어난 성과를 보입니다. 하지만, 병행성이 늘어 제어가 꼭 필요합니다.
가끔은 스레드간의 충돌이 일어나 원하는 결과를 얻지 못할수도 있습니다. 우리가 프로그램을 작성하는데 그 결과가 매번 다르다면, 프로그램을 작성할 필요가 없습니다.
이런 스레드간의 병행성 제어의 목적으로 스케줄링 기법이 도입되었습니다.
핵심은 어떤 스레드를 먼저 실행시킬 것이냐?의 관점으로 공부하시면 좋을 것 같습니다.
FCFS
First Come First Service의 약자로 큐를 이용한 스케줄링관리 기법이 되겠습니다. 이런 약어들의 원래 의미를 알면 CS공부가 한결 수월해진답니다.
말그대로 큐를 사용하기 때문에 가장 먼저 도착한 스레드가 먼저 실행됩니다. 먼저 도탁해서 먼저 하니 공평성은 유지되지만, 비효율성이 발생할 수 있습니다.
바로 짧은 작업이 긴 작업을 기다리게 된다는 것입니다. 물론 긴 작업이 매우 중요한 작업일 수도 있습니다만, 짧은 작업이 중요한 상황이고, 긴 작업이 별로 중요하지 않은 작업이라면 시스템 전체 성능에 큰 저하를 야기할 수 있겠습니다.
SJF
Shortest Job First는 말그대로 실행시간이 짧은 작업에게 우선순위를 높게 부여하여 스케줄링하는 기법입니다.
가장 적은 평균 대기시간을 제공하는 최적 알고리즘이기도 합니다.
하지만, 이 역시 문제가 야기될 수 있습니다. 이유는 FCFS와 비슷합니다. 별로 중요하지 않는 짧은 작업이 여러개가 계속 실행된다면, 중요한 긴 작업이 계속 기다릴 수 밖에 없는 기아 현상(starvation)이 발생합니다.
HRN
Hightest Response-ratio Next의 SJF를 보완하기 위한 기법입니다. 특징은 대기시간과 서비스 실행 시간을 고려한다는 것입니다.
우선순위 계산 공식을 이용하여 서비스 시간이 짧은 프로세스나 대기 시간이 긴 프로세스에게 우선순위를 줍니다.
우선순위 계산식 = (대기시간 + 서비스 시간) / 서비스 시간
이렇게 되면 서비스 실행 시간이 짧거나 대기시간이 긴 프로세스일 경우 우선순위가 높아지게 됩니다. 그렇습니다. 대기시간이 길어짐을 방지하는 우선순위 계산식이 적용되고 있습니다.
우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은순으로 우선순위가 부여됩니다.


