1. 프로세스
CPU 하나에 여러 개의 프로세스를 동시에 실행하여 멀티 프로세스를 구현한다. 멀티 프로세스 운영체제에서 여러 개의 프로세스가 실행되는 것처럼 보이는 이유는 여러 개의 프로세스들이 CPU의 할당시간을 나누어 실행하기 때문이다.
2. 스케줄링과 스케줄러
스케줄링이란 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일을 가리킨다. 이때 스케줄링 알고리즘이 사용되며, 이를 적용하여 프로세스를 관리하는 운영체제 요소(모듈)를 스케줄러라고 한다.
3. 멀티 프로세스
세 개의 프로세스를 모두 실행한다고 했을 때, 멀티 프로세스 운영체제에서는 스케줄러에 의해 각각의 프로세스를 프로세스들이 관리하도록 한다. 정해진 순서에 따라 CPU의 실행 시간을 나누어 할당받아 실행하는 형태이다.
프로그램 실행 과정에서 많은 시간을 I/O에 할당한다. 만약 입출력에 관한 일을 할 경우 CPU는 아무 일도 하지 않고 대기 상태에 놓여진다. 예를 들어, A프로세스가 입출력에 관한 일을 실행할 경우 운영체제는 스케줄러를 통해 다른 프로세스가 실행되도록 스케줄링한다. 즉 A프로세스가 입출력 작업을 하는 동안 CPU에 의해 B프로세스가 스케줄링되어 실행된다.
4. 프로세스의 상태 변화
여러 개의 프로세스들이 돌아가면서 실행되기 때문에 프로세스들의 상태는 시간 흐름에 따라 변화한다.
1) 상황 1 : Start에서 Ready 상태로의 전이
Start는 프로세스가 생성됨을 의미하며, 프로세스는 생성과 동시에 Ready상태로 들어간다. Ready상태의 프로세스는 CPU에 의해 실행되기를 대기하는 상태이다. 현재 CPU에 의해 임의의 프로세스가 실행 중일 수가 있기 때문에 바로 Running상태가 아닌 Ready상태에 돌입한다.
2) 상황 2 : Ready -> Running
Ready상태에 있는 프로세스들은 스케줄러에 의해 관리되는 프로세스들이다. 스케줄러는 Ready상태에 있는 프로세스 중 하나를 선택하여 CPU에 실행될 수 있게 한다. Ready상태에 있는 프로세스들 중 스케줄러에 의해 선택된 프로세스는 Running상태가 되어 실행된다.
3) 상황 3 : Running -> Ready
일의 중요도에 따라 실행 순서를 정하기 때문에 프로세스에는 우선 순위라는 개념이 존재한다. 예를 들어, B프로세스 생성시 중요도에 따라 A프로세스보다 우선 순위가 높다면 A프로세스를 Ready상태로 변경하고 B프로세스를 Running상태로 변경한다.
4) 상황 4 : Running -> Blocked
일반적으로 데이터 입출력에 관한 작업을 하는 경우, 프로세스는 실행을 멈추는 Blocked상태에 들어간다. 데이터 입출력을 진행 중인 프로세스는 잠시 Blocked상태로 내려오게 하고, Ready상태에 있는 프로세스 중 하나를 대신 실행시킨다.
5) 상황 5 : Blocked -> Ready
Ready상태는 스케줄러에 의해 선택되어 바로 실행(Running)될 수 있는 상태이고, Blocked상태는 스케줄러에 의해 선택될 수 없는 상태이다. 입출력이 완료된 Blocked상태에 있는 프로세스는 다시 Ready상태가 되어 스케줄러의 선택을 대기해야 한다.
6) 상황 6 : 프로세스 종료
5. 컨텍스트 스위칭
CPU내에 존재하는 레지스터들은 현재 실행 중에 있는 프로세스 관련 데이터들로 채워진다. 즉 실행중인 프로세스가 변경된다면 CPU내의 레지스터 값들도 변경된다.
컨텍스트 스위칭이란 하나의 프로세스를 실행하고 있는 상태에서 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 레지스터들을 메모리에 저장하고, 메모리에 존재하는 다음 프로세스의 데이터를 레지스터로 옮기는 것을 말한다.
'Programming > System Programming' 카테고리의 다른 글
[System Programming] 프로젝트 디자인 - 에러코드확인 / 명령프롬프트 (0) | 2020.12.20 |
---|---|
[System Programming] Windows, UNIX / 32bit vs 64bit 운영체제 (0) | 2020.12.20 |
[System Programming] 아스키코드와 유니코드 (0) | 2020.12.14 |
[System Programming] 프로그램의 실행 과정 / 데이터버스 주소버스 컨트롤버스 (0) | 2020.12.14 |
[System Programming] 컴퓨터 하드웨어의 구성 / CPU (0) | 2020.12.14 |