해당 게시글은 kocw에서 제공하는 금오공과대학교 최태영 교수님의 무료 강의를 공부하고 정리하기 위해서 만들어졌습니다.
리눅스 안의 프로세스
- c 언어의 구조체로 프로세스가 구현된다.
- 부모 프로세스와 자식 프로세스가 트리 구조 형태로 이루어져 있다.
Process Scheduling
- 메모리 안에 올라온 여러 프로세스 중 cpu에 할당하기 위한 기능을 제공 하는 것을 Process Scheduling이라고 한다.
- 커널 안에 이러한 기능을 하는 것을 Process Scheduler라고 한다.
- cpu에 올라올 수 있는 프로세스의 상태는 ready이며,
- 이러한 상태에 해당되는 프로세스들을 담아두는 자료구조를 ready queue라고 한다.
- 모든 프로세스가 한 줄로 연결된 것을 job queue라고 한다.
- 한 프로세스가 I/O 처리를 위해 대기 상태에 들어가면, 대상 device의 queue에 들어가게 되는데, 이것을 device queue라고 한다.
- 보통의 프로세스 처리는 이러한 ready queue에 등록된 순서대로 처리가 된다.
- 그러나 서버 같은 경우, 때에 따라 빨리 끝나는 것을 먼저 처리하는데, SCSI(I/O 컨트롤러)의 특성 때문이다.
Scheduler 종류
- Short-term scheduler(CPU scheduler)
- 지금까지 봤던 스케줄러가 속한다.
- cpu가 프로세스를 실행하는 시간이 굉장히 짧다
- 그렇기 때문에 ready queue에서 프로세스를 선정하는 알고리즘이 빨라야 한다.
- Long-term scheduler
- 서버에서 추가적으로 사용하는 스케줄러
- process들의 상태를 모두 waiting 상태로 큐에 두고 있다가
- 필요할 때 대기중인 프로세스를 가지고 와서 실행하는 스케줄러를 말한다.
- 사용자 요청에 의해 쿼리가 실행되는 동안 프로세스가 살아 있기 때문에
- 프로세스가 실행되는 시간이 몇 초 정도 된다.
- 경우에 따라서는 더 많은 시간이 걸릴 수 있다.
- WolframAlpha 같은 것들
- 아이폰 시리가 요청을 분석하고 모두 이 서버로 답을 요청한다.
- 이 경우 속도가 오래 걸려도 되기 때문에 어떤 프로세스를 실행할지 심사숙고 해도 된다.
- 프로세스 타입에 따라 실행할 프로세스를 선정하는 방식
- 프로세스는 크게 두가지로 나눌 수 있는데,
- I/O bound process: 주로 I/O를 처리하는 프로세스
- CPU bound process: cpu 계산을 주로 처리하는 프로세스
- 자원을 균형있게 사용하려면 두 타입의 프로세스가 적절하게 실행되어야 한다.
- new 상태에 있는 프로세스 중에서 현재 컴퓨터가 어떤 타입의 프로세스가 많은지 판단해서 적은 타입의 프로세스를 꺼내서 실행한다.
- 현재 시스템이 커버할 수 있는 프로세스의 개수와 자원을 비교하여 프로세스 개수를 조정하는 방식
- 현재 메모리에 올라온 프로세스 개수를 degree of multiprogramming이라고 한다.
- 이 것과 bound된 비율의 조정을 진행한다.
- Medium-term scheduler
- 현재 실행중인 프로세스들이 계속 메모리를 요구할 때, 메모리 공간이 부족하다고 판단되면,
- 실행중인 프로세스 하나를 하드디스크로 dump 시키고, dump 시킨 프로세스의 메모리 영역을 빈공간으로 만들어 버린다.
- 그렇게 하여 아직 dump되지 않은 프로세스가 메모리를 계속하여 사용할 수 있고
- 프로세스가 종료되면, 다시 dump 시킨 프로세스를 메모리에 올려 충분한 메모리 공간을 제공할 수 있다.
- PCB 상에서는 dump된 프로세스는 swap 된 상태라고 기록이 되고, 응답 대기 상태가 된다.
- 하드디스크에 dump 시키는 것을 swap-out이라고 하고
- 다시 메모리에 올리는 것을 swap-in이라고 한다.
- 이러한 swap-out 대상이 될 프로세스를 선정 하는 것을 Medium-term scheduler라고 한다.
Multitasking in Mobile Systems
- IOS는 하나의 foreground 프로세스에게만 대부분의 권한을 준다.
- 대신 몇개의 backgound 프로세스를 제공한다.
- 음악재생, notification 같은 것들
- 안드로이드는 몇 개의 background 프로세스 들은 foreground 프로세스 같은 우선권을 주기도 한다.
- 화면 분할 같은 것들
- 좀 더 데스크탑 같은 기능들을 제공한다.
Context switch
- 프로세스를 swap하는 것을 context switching이라고 한다.
- 레지스터에 있는 내용을 PCB에 저장하고 PCB에 있는 내용을 레지스터에 복구 한다.
- 이것을 context switching overhead라고 한다.
- overhead라고 불리는 이유는 실질적으로 사용자가 요청한 일이 아니기 때문이다.
- 단지 멀티프로그래밍이 처리되기 위함이다.
Operations on Process
- 전통적인 운영체제는 항상 어떤 프로세스가 새로운 프로세스를 만들 수 있게 한다.
- 그렇게 Parent process와 Child Process 관계로 관리가 되는데, 이 것을 트리 형태로 관리한다.
- 새로 생겨난 프로세스는 PID를 부여받는다.
- 프로세스를 새로 생성시 3가지 정도 옵션을 가진다.
- resource share 옵션
- 부모 프로세스와 자식 프로세스 사이 간 리소스 접근 옵션
- 해당 옵션은 아래 3가지 값을 가진다.
- concurrent 옵션
- 프로세스 실행에 있어서 자식 프로세스와 부모 프로세스 동시에 수행할지,
- 자식 프로세스가 모두 수행하고 나서 부모 프로세스를 수행할지 결정하는 것도 필요하다.
- 현재 프로세스를 fork 할지 다른 프로세스를 생성할지 결정하는 옵션