프로세스란?
컴퓨터에서 연속적으로 실행되고 있는 프로그램
종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
* 프로세스의 상태
위 그림처럼 생성 , 준비 , 실행 , 대기 , 종료 5개의 상태가 존재한다.좀 더 자세히 설명하면
생성 : 프로세스가 생성되는 중
준비 : 프로세스가 CPU에 할당되어 스케줄러에 의해 실행되기 기다리는 상태
실행 : CPU에서 프로세스가 실행되는 상태
대기 : 프로세스가 이벤트가 발생하기를 기다리는 상태
종료 : 프로세스 실행 종료
이렇게 있다.
* 프로세스의 실행 - 대기 - 준비 과정
실행 상태에서는 한 개의 프로세스를 계속 하는 것이 아니다. 프로세스 실행 도중 특정 이벤트 (입출력, 파일읽기) 같은 외부장치에 대한 입출력을 요구했을 때 상태가 변경된다.
이 작업은 느리기 때문에 CPU는 프로세스를 대기 상태로 변경된다.
대기 상태가 끝나는 시점은 입출력 이벤트가 완료되었을 때고 그 때 준비 상태로 변경, 다시 스케줄러에 의한 실행을 기다린다.
* 프로세스의 실행 - 준비 반복 과정
1ms ~ 10ms 마다 타이머 인터럽트가 발생하여 운영체제는 현재 실행중인 프로세스를 강제로 중지를 시킨 뒤 준비 상태로 빼놓는다.
그리고 준비 상태에 있는 다른 프로세스를 실행 시킨다. 이 과정은 매우 빠르게 상태 변화를 일으키며 반복되기 때문에 마치 여러개의 프로세스가 1개의 CPU를 가지고 동시에 실행되는 것처럼 보인다.
이를 통해 운영체제는 멀티태스킹과 멀티프로세싱을 달성하게 된다.
* PCB(프로세스 제어 블록)
PCB는 OS 내부의 프로세스를 관리하는 코드 부분에 저장되어 있다.
CPU는 여러 프로세스를 중간중간 바꿔서 실행하기 때문에 실행하다 만 프로세스의 정보를 어딘가에 저장해 놓고 있어야 다음에 실행할 때 이전에 실행한 부분부터 할 수 있다. 그 정보가 이 PCB에 저장된다.
Process Id : 프로세스의 고유 번호
Process State : 실행 상태
Program Counter(PC) : 프로그램 카운터, 다음 실행될 명령의 포인터
CPU registers : CPU 레지스터
CPU scheduling information :CPU 스케줄링 정보
Memory-management information : 할당된 자원 정보
Accounting information : CPU 사용시간 등
I/O status information : 입출력 상태 정보
* CPU 스케줄링
CPU를 사용하려고 하는 프로세스들 사이의 우선순위를 관리하는 작업이다.
프로세스들에게 자원을 최대한 공평하게 배분하며 처리율과 CPU 이용률을 증가시키고, 오버헤드, 응답시간, 대기시간을 최소화하기 위한 기법이다.
이를 곧 프로세스 스케줄링으로 봐도 될 것이다.
- 선점형 스케줄링 (Preemptive)
- 하나의 프로세스가 CPU를 차지하고 있을 때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식
- 단, 높은 우선순위를 가진 프로세스들이 계속 들어오면 오버헤드를 야기한다.
종류
라운드 로빈 | 다단계 큐 | 다단계 피드백 큐 |
2. 비선점형 스케줄링 (Non-preemptive)
- 한 프로세스가 CPU를 할당받으면 작업 종료 후 CPU 반환 시까지 다른 프로세스는 PCU 점유가 불가능한 스케줄링 방식
- 단, 짧은 작업을 수행하는 프로세스가 긴 작업 종료 시까지 대기해야할 수도 있다. 이를 콘베이 현상이라고 한다.
종류
우선순위 | 기한부 | SJF | HRN | FIFO |
글이 길어져 스케줄링 알고리즘 각각에 대한 설명은 다음에 적도록 하겠다.
'알쓸지식' 카테고리의 다른 글
[백엔드] RESTful API란? (0) | 2024.11.24 |
---|---|
[OS] 프로세스 스케줄링 (2) : 스케줄링 종류 (0) | 2024.11.23 |
[백엔드] CRUD에 대해 알아보자_with Spring-Boot (1) | 2024.11.20 |
클라우드 플레어... 이게 뭐지? (1) | 2024.09.13 |
GitHub Colab에서 만든 파이썬 파일 업로드시키기 (3) | 2024.09.08 |