
PCB는 Process마다 가지고 있는 메모리 공간을 의미한다.
PCB는 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 남는다.
운영체제에 따라 PCB에 포함되는 항목이 다를 수는 있지만 일반적으로는 다음과 같은 정보가 포함되어있다.

Cpu가 하나의 프로세싱을 실행하는 방법은 다음과 같다.
인터럽트는 CPU가 프로그램을 실행하고 있을 때, 입출력장치 등 하드웨어에 의해 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것을 말한다.
CPU는 인터럽트를 감지하면 지금 실행중인 기계어 코드를 중단하고 해당 인터럽트를 위한 처리 프로그램으로 점프하여 해당일을 수행한다.
인터럽트 처리를 위한 루틴을 인터럽트 서비스 루틴(ISR : Interrupt Servive Routine)이라고 한다.

인터럽트 처리 절차
인터럽트 원천인 하드웨어에서 또는 예외상황이 발생하거나 소프트웨어 인터럽트가 걸리면:
인터럽트 핸들러
CPU가 인터럽트를 감지하면 해당 인터럽트 핸들러의 코드 위치를 찾고 실행에 옮긴다. 이 때 이전 상태의 CPU상태를 보존하기 위해 레지스터와 프로그램 카운터(PC)를 저장한다. 인터럽트가 핸들링이 완료되면 이전의 상태로 복귀한다.


입출력 연산시에는 CPU자원이 필요 없기 때문에 Block 상태로 진입하고, 대기중이었던 프로세스가 CPU를 선점한다.

Context Switch(문맥 교환)은 프로세스가 선점 되었을 때 프로세스의 마지막 상태를 기억한다.
교환 시점으로는 멀티태스킹, 인터럽트 핸들링, 사용자 모드와 커널 모드 간 전환에서 일어납니다.
CPU Scheduling
CPU를 가상화 하기 위해서 운영체제는 여러 작업들이 동시에 실행되는 것처럼 보이도록 물리적인 CPU를 공유한다.
운영체제는 효율적으로 CPU가상화를 구현하기 위해 time Sharing(시분할 시스템)을 이용한다.
운영체제는 효율적인 방식으로 CPU를 가상화하지만 시스템에 대한 제어를 잃지는 않아야 한다.
CPU Scheduling이란 여러 프로세스가 CPU자원을 동시에 요구할 때 제한된 자원들을 어떻게 나눠줄 것인지에 대한 정책을 말한다.
CPU 하나는 동시에 여러개의 프로세스를 처리할 수 없기 때문에, 한 순간에 어떤 프로세스가 CPU를 사용할 수 있게 하는지 결정하는 정책이 도입되었다.
Time Sharing
프로세서들이 자원을 공유할 수 있도록 하는 시스템.
CPU를 가상화하는 테크닉으로 프로세스가 CPU를 독점하는 것 같이 보여주기 위해 CPU의 시간을 작게 분할해 여러 작업을 돌아가면서 수행한다.
time slice(time quantum)
time quantum은 한 사이클 동안 한 프로세스에세 할당되는 최대 CPU시간이다.
각 큐에서 프로세스는 각기 다른 time quantum이 분배되고 프로세스는 자신의 time quantum을 모두 소비하게 되면 다른 프로세스에게 CPU를 넘기고 우선순위가 낮은 큐에 분배가 된다.
time quantum을 정할 때에는 trade off 관계를 고려해야한다.
time quantum이 작은 경우 응답시간이 좋다는 장점이 있지만 문맥 교환을 하게 되는 갱신비용이 크다.
time quantum이 긴 경우 문맥 교환에 쓰이는 시간을 줄일 수 있지만 응답시간이 늘어나게 된다.
이는 아래에서 설명할 CPU스케줄링 평가기준에서 response time 과 turn arround time이 trade off 관계임을 증명해주는 척도이다.
직접 실행 프로토콜(Direct Excution)은 운영체제에 제한을 두어 Library의 역할만 하는 경우이다.
그러나 이 접근법은 몇가지 문제점을 일으킨다.

이러한 문제를 해결하기 위해 운영체제는 os가 CPU를 제어할 수 있게 하고, 시스템콜(System Call API)을 제공해 사용자가 사용할 수 있도록 도와준다.
운영체제와 사용자는 컴퓨터 시스템의 하드웨어와 소프트웨어 자원을 공유하기 때문에 사용자가 현재 실행되고 있는 프로그램에서 오류가 생겼을 때 다른 프로그램에 영향을 미치지 않게 해야한다.
운영체제에는 유저모드, 커널모드 두가지 모드가 존재한다.

: 호출한 프로세스는 분기할 주소를 명시할 수 없다. 주소를 명시한다는 것은 커널 내부에 원하는 지점을 접근할 수 있다는 것이기 때문에 위험하다. kernel에서 호출한 프로세스의 분기할 주소를 명시하기 위해 hardware에 저장한다.
:Process가 비협조적(Non-cooperative)일 때 os가 CPU 제어권을 뺏어오기 위한 방법으로 타이머 인터럽트를 사용한다.
타이머 장치는 수 밀리 초마다 인터럽트를 발생시키도록 프로그램이 가능하기 때문에 일정시간(time quantum)이 지나면 인터럽트를 발생시킨다. 인터럽트가 발생하면 현재 수행중인 프로세스는 중단되고 미리 구성된 운영체제의 인터럽트 핸들러(interrupt handler)가 실행된다.
-> timer interrupt는 context switch 과정에서 time scheduling이 가능하다.
이 매커니즘을 요약해서 나타내면 아래의 그림과 같다.

System call이 할 수 있는 일은 다음과 같다.
System call의 함수는 다음과 같다.

I/O bound process
CPU를 차지하는 시간은 짧고 선점하는 빈도수가 높은 Process이다.
CPU가 할당되는 시간이 짧기 때문에 우선순위가 높다.
우선순위가 높은 프로세스는 CPU 스케줄링을 할 때 높은 순위로 처리가 되지만, time quantum이 짧게 분배가 된다.
CPU bound process
한번의 Processing에 CPU를 차지하는 시간이 많고 선점하는 빈도수는 낮은 Process이다.
CPU가 할당되는 시간이 길기 때문에 우선순위가 낮다.
우선순위가 낮은 프로세스는 CPU스케줄링을 할 때 낮은 순위로 처리가 되지만, time quantum이 길게 분배가 된다.
etc..
cache를 이용하여 CPU성능을 높일 수 있다.

cache는 main memory보다 용량은 작지만 자주 사용하는 주요 데이터들을 모아둔 작고 빠른 저장장치이다.
cache를 이용함으로써 CPU와 Memory간의 다소 느린 속도를 보완할 수 있다.
Scheduling 평가 기준

프로세스가 입출력 연산을 하는 동안에는 Block 상태이므로 CPU자원이 필요한 상태가 아니다.
CPU입출력이 끝나기를 기다리는 동안 다른 프로세스에게 CPU를 양보해주는 과정으로 CPU의 활용성을 높일 수 있다.
Troughput(maximize)
단위 시간 당 처리한 process의 개수
Turn arround Time(minimize)
하나의 프로세스가 수행하는 시간(프로세스 종료시 까지 걸리는 시간) => 성능 평가의 기준

Waiting Time(minimize)
프로세스가 ready Queue에서 기다리는 시간
Response Time(minimize)
Process의 첫번째 요청이 수행되는 시점 => 공정성 평가의 기준

Turn arround Time과 Response Time은 Trade off 관계이다.
Response Time을 최소화 하기 위해 평균과 편차를 고려해야한다.

Non-Preemptive Scheduling(비선점형 스케줄링)
: 프로세스가 한번 스케줄 되면 그 프로세스가 끝날 때까지 다른 프로세스가 끼어들 수 없는 스케줄링 방식
FIFO(First In, First Out): 먼저 들어온 프로세스를 먼저 스케줄.
모든 프로세스의 시간이 같을 때 최적의 스케줄링이다.
but, Convoy effect : CPU time이 긴 프로세스가 먼저 실행 시 다른 프로세스들도 지체가 된다.

SJF(Shortest Job First): 들어온 프로세스 중 가장 짧은 프로세스를 먼저 스케줄링 한다.
모든 프로세스가 동시에 도착했을 때 최적의 스케줄링
but, CPU를 뺏을 수 없어 같은 arrive time 이 아닌 경우 최적이 아니다.

HRN(Highest Response Ration Next) : SJF의 약점을 보완한 기법으로 수행시간이 긴 프로세스가 오랫동안 CPU를 획득하지 못하는 문제점을 보완한 기법이다. 수행시간 과 대기시간을 계산하여 우선순위 에 반영하여 오랫동안 CPU를 획득하지 못하는 문제점을 어느 정도는 보완한 기법이다.
Preemptive Scheduling(선점형 스케줄링)
: os가 프로세스를 중간에 멈추고 다른 프로세스에게 CPU를 할당한다. / Context Switch가 요구된다.
STCF(Shortest Time to Completion First): SJF + Preemptive
Process의 비교를 통해 짧은 프로세스 우선 실행


위의 그림처럼 프로세스가 ready queue에 도착한 후 처음으로 수행되는 시간을 계산할 수 있다.
응답시간은 보통 성능 평가 기준인 turn arround time과 trade off의 관계를 가진다.

: 여러 개의 ready queue를 사용해서, queue마다 priority(우선순위) 와 time quantum을 할당하고 프로세스가 들어오면 가장 상위 queue에 넣었다가, time quantum이 지나면 하위의 queue로 끌어내리는 스케줄링 방식이다. 가장 하위의 queue에서는 RR방식으로 스케줄링한다. 일정 시간동안 수행되지 못하고 남아있는 프로세스는 다시 상위 큐로 끌어올려준다.

MFQ는 arround time과 response time의 효율성을 극대화 한 방법이다.
MultiProcessor Scheduling
앞서 설명한 스케줄링 방법은 single core CPU를 기준으로 설명하였다.
MuptiProcessor는 말그대로 듀얼 코어 이상의 CPU를 가진 컴퓨터이다.

프로세스를 처리하기 위해 CPU를 할당할 때 고려해야하는 기준을 살펴보자
스케줄링 종류



[참고문헌]