컴퓨터(Computer Science)/운영체제(Operation System)

프로세스 스케줄링(Process scheduling)이란?

게임이 더 좋아 2020. 5. 29. 13:26
반응형
728x170

뭐 더 자세히 알아봐야겠지만 살짝 맛만보고가자

 

 

• Maximize CPU use, quickly switch processes onto CPU for time sharing
• Process scheduler selects among available processes for next execution on CPU
• Maintains scheduling queues of processes

 

 

 


 

 

 

다중 프로그래밍의 목적은 CPU의 이용을 최대화하려는 데에 있다. 

 

시분할(TIme sharing)의 목적은 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 CPU 코어를 빈번하게 교체하는 것이다,

 

이 2가지 목적을 달성하기 위해서 프로세스 스케줄러(process sceheduler)가 필요하다. 

 

프로세스 스케줄러는 코어에서 실행가능한 여러 프로세스 중에서 하나의 프로세스를 선택해서 실행한다

 

**단일 CPU 코어가 있는 시스템의 경우 한 번에 2개 이상 프로세스는 실행할 수 없다.

**현재 메모리에 있는 프로세스 수를 다중 프로그래밍 정도라고 한다.

 

++그러나 멀티프로그래밍 및 시간 공유의 목표를 균형있게 유지하려면 I/O 바운드나 CPU 바운드를 고려해야한다.

여기서 바운드(bound)란 ~위주의 란 뜻으로 받아들이면 된다.

 

즉 I/O-bound process는 계산보다 I/O에 더 시간을 많이 소비하는 프로세스다.

반대로 CPU-bound process는 계산에 더 많은 시간을 사용하여 I/O 요청을 많이 만들지 않는다.

 

 

 


 

프로세스는 큐에 들어간다. queue 자료구조를 배웠다면 뭔지 알 것이다.

 

 

프로세스가 시스템에 들어가면 준비 큐에 들어가서 준비 상태가 되어 실행되기를 기다린다.

 

일반적으로 연결리스트로 저장된다.

 

즉, 준비 큐 헤더에는 리스트의 첫 번째 PCB를 가리키는 포인터가 저장되고 각 PCB에는 다음 PCB를 가리키는 포인터가 있다.

 

 

하지만 준비큐만 있는 것이 아니다.

 

프로세스에 CPU 코어가 할당되어 프로세스가 실행되면  종료되거나 인터럽트 되거나 I/O요청의 완료와 같은 이벤트를 기다린다.

 

 

프로세스가 디스크와 같은 장치에 I/O 요청을 한다고 가정해보자.

당연히 프로세서가 정말 빠르기 때문에 disk에 I/O 요청하는 동안은 유휴상태가 발생할 수 있다. 

그래서 프로세서는 프로세스를 계속 코어에 올려놓는 것이 아닌 대기 큐에 올려놓는다.

++그래야 다른 프로세스 실행가능하다.

 

 

이런 식이다.

 


 

 

프로세스 스케줄링은 일반적으로 큐잉 다이어그램(queueing diagram)이라고 한다.

 

 

여기서 동그라미는 자원(resource)를 뜻한다. 화살표는 말 안해도 흐름이겠지??

 

새 프로세스는 처음에 준비 큐에 놓인다.

프로세스는 실행을 위해 선택되거나 또는 디스패치가 될 때 까지 기다린다.

 

프로세스에 CPU코어가 할당되고 실행 상태가 되면 여러 이벤트 중 하나가 발생할 수 있다.

++3가지정도??

 

1. 프로세스가 I/O 요청하고 I/O 대기 큐에 들어간다.

2. 자식 프로세스를 생성 후 자식 프로세스의 종료를 기다리는 대기 큐에 들어간다.

3. 인터럽트가 발생되거나 타임 슬라이스가 만료되어 프로세스가 코어에서 강제로 제거되어 준비 큐로 돌아간다.

 

 

1,2, 경우에는 프로세스가 결국 대기 상태에서 준비 상태로 전환된 다음 준비 큐로 다시 들어간다.

프로세스는 종료될 때 까지 계속 이 주기를 반복한다.

 

종료가 되면 모든 큐에서 제거되고 PCB 및 자원이 반환된다.

 

 


 

 

실제로 프로세스를 실행하는 CPU는 어떨까??

 

CPU 스케줄링이란 것도 있으니 알고가자

 

CPU 스케줄러의 역할은 준비 큐에 있는 프로세스 중에서

선택된 하나의 프로세스에 CPU 코어를 할당하는 것이다. 

 

그러니까 프로세스 스케줄러뿐만 아니라 CPU 스케줄러도 많이 실행되어야

정말 효율적으로 관리를 할 수 있겠지??

 

 

**스와핑(swapping)이라는 용어가 있는데 스케줄러 형태이긴 한데 ... ? 조금 다른 형태다.

스와핑이란 단어가 나온 배경에는 " 메모리에서 프로세스를 제거하여 다중 프로그래밍의 정도(degree of multiprogramming) 를 감소시키는 것이 유리하다" 라는 생각에서 나왔다.

 

++ 프로세스당 메모리가 부족한 현상이 생기면... 급격하게 성능이 떨어진다.

++ RAM이 부족해서 성능이 떨어지는 것과 비슷한데.. disk 에서 불러들어오기 시작하면 답이없다.

-> 게임이 렉걸리는 원인 중 하나. 램 부족..

 

 

**메모리에 적재된  프로세스 수를 관리하는 것이 프로세스 스케줄링이라고 보면 되겠다.

 

즉, 나중에 프로세스를 메모리에 다시 적재해서 중단된 위치에서 실행을 계속하면 되니까

프로세스를 메모리에서 디스크로 (swap-out)스왑 아웃 해서 현상태를 저장하고 나중에 디스크에서 메모리로 (swap-in)스왑 인 해서 상태를 다시 복원하면 된다.

 

 

** 스와핑은 메모리가 초과 사용되어 가용공간을 확보해야 할 때만 필요하다.

++ 사실 메모리가 남아돌면 굳이 디스크까지 보내느라 시간하고 보내는 연산을 안해도 되겠지.

 

 

 


 

스와핑이란 비슷한 개념을 배울건데 바로 문맥 교환(Context Swtich)라는 것을 알아보자

인터럽트(interrupt)에 관한 말이 많이 나오는데 이번에도 또 나온다.

 

 

인터럽트를 다시 설명하자면 

운영체제가 CPU 코어를 현재 작업에서 뺏어서 커널 루틴을 실행할 수 있게 하는 것이다.

 

일단 인터럽트가 발생하면 시스템은 인터럽트 처리가 끝난 후에 문맥(context) (원래 하던 거) 으로 복구할 수 있도록 현재 실행 중인 프로세스의 현재 문맥을 저장한다.

 

** 프로세스관련된 것들은 PCB가 관리하고 저장한다고 했다.

문맥은 CPU 레지스터의 값, 프로세스의 상태, 메모리 관리 정보 등 이 있다.

따지고 보면 CPU의 상태를 저장하고 상태를 다시 복구한다. // state save, state restore

 

CPU 코어를 다른 프로세스로 교환하려면 이전의 프로세스 상태를 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업이 필요한데 이를 바로 문맥 교환 (Context Swtich)라고 한다. // 문맥교환의 이유

 

문맥 교환이 일어나면, 커널은 과거 프로세스의 문맥을 PCB 저장

실행이 스케줄된 새로운 프로세스의 저장된 문맥을 불러온다.

 

**문맥교환이 진행될 때는 시스템이 아무 일도 할 수 없다. // 오버헤드 발생

 

**교환 속도는 하드웨어 지원에 크게 좌우 된다.

 

그림을 보면??

 

 

이렇게 된다. 어디서 많이 봤지??? 컴퓨터 구조에서도 비슷한 그림이 나온다

 

 

여기까지 마치고 다음에 더 알아보자

 


 

• When CPU switches to another process, the system must save the state of the old process and load the saved state for the new process via a context switch
• Context of a process represented in the PCB
• Context-switch time is overhead; the system does no useful work while switching
• The more complex the OS and the PCB -> the longer the context switch
• Time dependent on hardware support
• Some hardware provides multiple sets of registers per CPU -> multiple contexts loaded at once

 

• I/O-bound process – spends more time doing I/O than computations, many short CPU bursts
• CPU-bound process – spends more time doing computations; few very long CPU bursts

 

 

 

728x90
반응형
그리드형