프로세스는 5가지 상태가 존재한다
✅ 생성(create): 프로세스가 생성
✅ 실행(running): 프로세스가 프로세서를 차지하여 명령어들이 실행
✅ 준비(ready): 프로세스가 프로세서를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태
✅ 대기(waiting): 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태
✅ 종료(terminated): 프로세스의 실행이 종료
🐘 스레드
💡 스레드란 프로세스보다 조금 더 구체적인 개념으로, 하나의 프로세스 안에서 실행되는 작업 단위라고 생각할 수 있다.
✅ CPU 제어의 흐름
✅ 실행 단위
✅ 한 프로세스 내부에서 스케줄링이 가능한 개체
보통은 한 프로세스안에 한 스레드가 존재한다. 이를 싱글스레드 라고 하며 이 경우 프로세스와 스레드를 굳이 구분할 필요가 없다.
하나의 프로세스안에 여러 스레드가 존재하면 멀티 스레딩 이라고 한다. 이경우 스레드 단위로 스케줄링을 하며, 스레드를 CPU에 할당하게 된다
(https://computing.llnl.gov/tutorials/pthreads/)
다중 프로그래밍 이란 용어가 있다. 스레드 와 차이를 알아두자. 다중 프로그래밍 은 두개 이상의 프로세스를 번갈아가며 실행하는 것이고, 멀티 스레딩 은 프로세스는 하나이고, 그 안에 스레드를 번갈아가며 실행하는 것이다.
🐘 스케줄링
💡 메모리에 적재된 프로그램을 CPU 실행할 수 있도록 프로세스 혹은 스레드에 CPU를 할당하는 것이다. 스케줄러는 여러 프로세스가 효율적으로 사용되도록 구현해야하는데, 여러 정책들이 있다
선점과 비선점
우선 선점과 비선점 방식에 대해서 알아둘 필요가 있다. 선점방식은 실행중인 프로세스가 실행권을 빼앗기는 방식, 비선점은 실행중인 프로세스가 자발적으로 자신의 실행권을 내려놓는 방식이다.
(https://woo-dev.tistory.com/148)
스케줄링 정책은 굉장히 다양하다. 스케줄링 정책들은 여러 요소를 고려하여 설계 하는데, 대표적인 예시들은 아래와 같다.
✅ CPU 이용률: 주어진 시간에 대한 CPU 사용 시간
✅ 처리율: 단위 시간당 처리된 프로세스 개수
✅ 반환시간: 프로세스가 생성된 후 종료될 때 까지 소요된 시간
✅ 대기시간: 프로세스가 준비 상태에서 소요된 시간
✅ 응답시간: 어떤 사건이 발생한 후 첫 번째 응답이 나오는 데 소요된 시간
🐬 FIFO
가장 간단한 방식이다. 먼저 들어오면 먼저 나가는 방식으로, 어떤 작업이 들어오더라도 선입선출의 형식으로 진행된다. Queue 자료구조의 방식과 같으며 FCFS 라고도 한다.
🐬 SJF(Shortest Remaining Time First Scheduling)
평균 대기 시간을 최소화하기 위해 CPU 점유 시간이 가장 짧은 프로세스에 CPU를 할당하는 방식이다. 실행시간이 매우 긴 프로세스는 순위가 많이 밀릴 수 있다는 단점이 있다.
🐬 HRN(Highest Response-ratio Next)
SJF를 보완할 수 있으며, 대기 시간과 서비스 시간을 이용하는 방식이다.
우선순위 ⇒ ( 대기시간 + 서비스시간 ) / 서비스시간의 공식을 이용하여 우선순위를 정한다. 이렇게 우선순위를 부여하는 방식을 에이징 이라고도 한다.
🐬 SRT(Shortest Remaining Time)
SJF를 선점 형태로 변경한 기법이며, 선점형이기에 중요한 프로세스가 있으면 원래 실행하던 프로세스의 권한 을 뺏을 수 있게 되었다.
🐬 RR(Round Robin)
프로세스 사이에 우선순위를 두지 않고, 순서대로 CPU를 균등하게 할당하는 방법이다. 실시간 시스템에 유리한 방식이다.
🐬 다단계 큐(MQ)
프로세스를 특정 그룹으로 분류할 수 있을때 그룹에 따라 각기 다른 분비상태 큐를 사용한다. 특정 그룹의 대기 큐에 있다면, 다른 큐에 이동할 수 없다!
(https://jwprogramming.tistory.com/17)
🐬 Priority
우선순위를 정해 해당 순서대로 CPU를 할당한다. 설계에 따라서 다양한 형태로 존재할 수 있고, 선점 비선점또한 선택 가능하다.
🐘 큐
스케쥴링에는 다양한 큐가 존재하는데 이를 정리해 보았다.
🐬 JOB Queue
램은 용량이 매우적은 편이다. 따라서 모든 프로그램을 RAM에 올릴 수 없다. 이 RAM에 올릴 프로그램을 정하는 큐가 JOB Queue이다.
상태로 보면 프로세스를 New에서 Ready상태로 전이시켜준다.
🐬 Ready Queue
RAM에서 올라온 프로세스바로 CPU를 할당하는 것이 아니다. CPU 할당을 받기 위해서 **Ready Queue**에서 할당을 기다린다. 해당 큐에서 CPU를 할당하는 정책들이 위에서 설명한 스케줄링 기법들이다.
🐬 Device Queue
프로세스 중에선 CPU말고 다른 장치를 사용하는 경우도 있는데, 그 장치를 어느 프로세스가 사용할지 결정하는 스케줄러이다.
✅ 생성(create): 프로세스가 생성
✅ 실행(running): 프로세스가 프로세서를 차지하여 명령어들이 실행
✅ 준비(ready): 프로세스가 프로세서를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태
✅ 대기(waiting): 프로세스가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태
✅ 종료(terminated): 프로세스의 실행이 종료
'FrontEnd > 웹 지식' 카테고리의 다른 글
정규표현식 (0) | 2022.08.30 |
---|---|
자바스크립트 타이머함수 (0) | 2022.08.30 |
함수형 프로그래밍 (0) | 2022.08.30 |
XML 파서 (0) | 2022.08.30 |
콜스택, 메모리힙과 메모리모델 구조 (0) | 2022.08.30 |