728x90
MultiLevel Queue 스케줄링
- 다단계 큐 스케줄링은 이전에 봤던 것 처럼 하나의 큐를 사용하는 것이 아닌 여러개의 큐를 사용하는 방법이다.
- 앞어 많은 프로세스들이 있었는데 운영체제 단계에서 인터럽트를 처리하는 프로세스도 있고 사용자와 인터랙티브하는 프로세스, 배치 프로세스, 컴파일러 등 많은 프로세스가 있는데 이들을 같은 큐로 관리하기 어렵기 때문에 나온 개념이다.'
- 위의 순서대로 우선순위가 매겨져 각 큐는 절대적인 우선순위를 가진다. 아래의 프로세스 큐가 실행되려면 위의 프로세스 큐가 모두 비어있어야한다.
- 만약 Interactive Processes가 실행되고 있던 중 System Processes작업이 큐에 들어오면 바로 프로세서를 반납해야한다.
- 각각의 큐는 독립된 스케줄링 기법을 사용한다.
- 또 큐 사이에 시간을 나눠사용할 수도 있다. 각 큐는 프로세서 시간의 일정량을 받아서 큐에 있는 프로세스들을 스케줄링 할 수 있다.
MultiLevel FeedBack Queue
- 피드백 큐는 프로세스들이 각 큐를 이동할 수 있다. 먼저 맨위의 우선순위로 작업을 하다가 너무 안끝난다 싶으면 다음 큐로 이동시키는 식이다.
- 기아 상태의 위험이 있을 경우 가장 높은 우선순위를 배정한다.
프로세스의 생성과 소멸
- 프로세스는 프로세스에 의해 만들어진다. 프로세스도 부모와 자식 프로세스가 나뉘며 이를 프로세스 트리라고 한다.
- Process Identifier (PID)
- 정수형으로 이루어지며 Integer타입의 정수이다.
- 생성 단계
- 새로운 프로세스에 프로세스 식별자를 할당
- 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 프로세스 제어 블록 공간 할당
- 프로세스 제어 블록 초기화, 프로세스 상태, 프로그램 카운터 초기화, 자원 요청, 제어 요청 등을 포함한다.
- 링크를 건다 (큐에 삽입)
- 프로세스가 새로운 프로세스를 할당할 때는 두가지 실행이 발생가능하다.
- 부모와 자식 모두 실행
- 부모가 자식이 모두 종료할 때 까지 대기
- fork() 명령어는 부모와 자식을 복사하거나 바로 exec() 명령어로 자식 프로세스의 주소 공간을 별도 프로그램 주소 공간으로 덮어 쓰는 것이다.
- 프로세스 종료는 exit() 명령어가 있으며 사용한 모든 자원을 반납한다.
쓰레드 (Thread)
- 쓰레드는 프로그램 내부의 흐름, 맥이라 볼 수 있다.
- 프로세스는 안에서 코드의 흐름이 있을 것이다. 그것을 쓰레드라고 한다.
- 프로세스는 최소 1개의 쓰레드를 가지고 있다.
다중 쓰레드
- 한 프로그램에 2개 이상의 흐름
- 흐름이 빠른 시간에 스위칭 된다. → 여러 쓰레드 동시 실행 되는 것으로 보인다. 그러나 이것은 그렇게 보일 뿐이다. 이것을 동시성이라 한다.
- 사실 지금까지의 스위칭은 옛날 방식이다. 요즘은 쓰레드 스위칭이라고 볼 수 있다.
- 프로세스는 여러 쓰레드가 동시 진행되고 있다.
- 다음 프로세스로 cpu가 재할당 될 때, 프로세스의 PCB에서 주소와 시작할 지점을 찾는데 여기에 쓰레드의 정보도 포함된다. 쓰레드들은 프로세스의 정보를 공유하는데, 단 코드와 데이터는 공유하지만 PC, SP, register, stack은 공유하지 않는다.
- 결론적으로 우리들은 프로세스만 스위칭하는 것이 아닌 쓰레드 단위의 스위칭을 한다.
'CS > 운영체제(OS)' 카테고리의 다른 글
OS - 임계구역과 세마포어 (1) | 2023.11.20 |
---|---|
OS - 프로세스 동기화 개념 (0) | 2023.11.11 |
OS - CPU 스케줄링(2) (0) | 2023.11.04 |
OS - 프로세스 관리와 CPU 스케줄링 (1) | 2023.11.02 |
OS - 프로세스 관리 (0) | 2023.11.01 |