정보처리기사 필기발행일 2024. 3. 1.원본 https://blog.naver.com/jword_/223366794504 ↗

스레드란? FCFS/SJF/HRN 알고리즘

스레드란? FCFS/SJF/HRN 알고리즘 — #정보처리기사 #개발자의도구들 #스레드 #스레드란 #thread #thread란 24년도 1회차 정보처리기사 필기 시...

#정보처리기사 필기#Naver Blog

#정보처리기사 #개발자의도구들 #스레드 #스레드란 #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를 보완하기 위한 기법입니다. 특징은 대기시간과 서비스 실행 시간을 고려한다는 것입니다.

​

우선순위 계산 공식을 이용하여 서비스 시간이 짧은 프로세스나 대기 시간이 긴 프로세스에게 우선순위를 줍니다.

​

우선순위 계산식 = (대기시간 + 서비스 시간) / 서비스 시간

​

이렇게 되면 서비스 실행 시간이 짧거나 대기시간이 긴 프로세스일 경우 우선순위가 높아지게 됩니다. 그렇습니다. 대기시간이 길어짐을 방지하는 우선순위 계산식이 적용되고 있습니다.

​

우선순위를 계산하여 그 숫자가 가장 높은 것부터 낮은순으로 우선순위가 부여됩니다.

​

​