운영체제의 주요한 역할은 무엇일까?
프로세스, 프로세서, 프로그램
프로세스(Process)란 일반적으로 실행되고 있는 프로그램을 말한다.
프로세스 상태
프로세스 상태는 다섯가지로 정의된다.
1. New : 프로세스가 처음 생성된 상태
2. Ready : 프로세스가 CPU에 할당되기를 기다리는 상태 (메모리 등 다른 조건을 모두 만족하고)
3. Running : 프로세스가 할당되어 CPU를 잡고 명령을 수행 중인 상태
4. Waiting : 프로세스가 어떠한 이벤트가 발생하기를 기다리는 상태. CPU를 할당해도 당장 명령을 수행할 수 없는 상태.
5. Terminated : 프로세스가 실행을 마쳤을 때. 아직 완전히 프로세스가 제거되진 않은 상태.
어느 한 순간에 한 처리기상에서는 오직 하나의 프로세스만이 실행 가능하다는 사실이 중요하다.
그렇지만 많은 프로세스가 준비완료 및 대기 상태에 있을 수 있다.
PCB
프로세스가 가져야 할 정보를 어떻게 관리할 것인가? 프로세스 제어 블록(Process cpmtrol Block) 사용
pcb 들을 운영체제가 관리해줘야 한다.
운영체제는 멀티 프로세싱
프로세스 하나에도 여러개의 스래드가 필요(lightweight process).
스레드를 여러개로 하는것이 더 장점이 많다.
멀티 프로그래밍 멀티 프로세싱 at the same time
Context Switch
프로세스 상태에서 보았듯이 멀티 프로세싱을 위해서는 잦은 CPU와 프로세스의 교체가 일어난다.
이를 위해 Context Switch를 알아보자.
프로세스가 실행되다가 인터럽트가 발생해 CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다.
여기서 운영체제는 CPU를 내어주는 프로세스의 상태를 해당 프로세스의 PCB에 저장하고
CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다.
여기서 CPU가 저장하고 읽는것은 PCB 이기 때문에 Context는 PCB라고 생각하면 편하다.
그래서 Context switch .
주의해야하는 점은 , 인터럽트가 발생한다고 반드시 Context switch 가 일어나는 것은 아니다.
다른 블로그 에서 참고한 설명인데 사실 이해가 잘 안되서 더 알아보려 한다.
설명이 가능한 분이 계시다면 댓글로 부탁드립니다ㅠㅠㅠ
프로세스 스케줄링(Process Scheduling)
일단 멀티프로그래밍(Multiprogramming)과 시간 공유(Time Sharing)에 대해 알아야한다.
멀티프로그래밍의 목적은 CPU이용을 최대화 하기 위해 몇몇 프로세스들을 항상 실행 시키는 것이다.
시간 공유는 프로세스 간에 CPU를 빠르게 전환함에 사용되며, 이를 통해 사용자가 각 프로그램을 실행되는 동안 서로
상호작용할 수 있도록 만든다.
이를 위해 CPU에서 실행가능한 프로세스를 빠르고 효율적으로 관리할 수 있어야 하는데
여기서 스케줄러가 필요하다.
스케줄러는 CPU에서 실행 가능한 여러 프로세스들 중에 하나의 프로세스를 선택한다.
어떤 프로세스를 프로세서에 할당할 것인가를 결정하는 것을 프로세스 스케줄링(Process Scheduling) 이라고 한다.
단일 처리기(CPU가 하나인 시스템)은 오직 하나의 running 프로세스를 가질 수 있으며
여러 프로세스가 있다면 CPU가 다시 스케줄 될 때까지 기다려야 하기 때문에 스케줄링이 필요하다.
스케줄링 큐
프로세스를 스케줄링하기 위한 큐(Queue)는 job Queue, Ready Queue, Device Queue가 있다.
프로세스는 일단 잡큐에 놓여진다.
잡 큐 (Job Queue)는 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐이다.
준비완료 큐(Ready Queue)는 현재 메모리 내에 있으면서 CPU를 잡아 실행되기 기다리는 프로세스의 집합이다.
준비 완료 큐는 보통 링스크 리스트이고 큐의 헤더는 리스트의 첫번쨰와 마지막 pcb를 카리키는 포인터
그리고 Device Queue는 I/O 장치를 기다리는 프로세스의 집합이다.
스케줄러의 종류는 3가지가 있다.
1. Long-Term Scheduler
2. Short-Term Scheduler
어떤 프로세스를 다음에 실행시킬지를 선택하며, 프로세스에 CPU를 할당한다. 자주 발생하는 작업이므로 충분히 빨라야 한다.
3. Medium-Term Scheduler
Process Management
프로세스는 동시에 실행될 수 있고, 동적으로 생성되거나 삭제될 수 있다.
1. 프로세스 생성(Process Creation)
프로세스는 부모 프로세스가 자식 프로세스를 생성한다.
트리 구조로 되어있으며, 프로세스는 PCB에 저장된 pid 갚으로 식별되고 관리된다.
또한 프로세스는 자원이 필요한데, 자원은 운영체제로 부터 받거나 부모와 공유된다.
프로세스는 아래와 같은 각 특성의 종류로 분류가 된다.
- 자원 공유 (Resource sharing option)
- 부모와 자식이 모든 자원을 공유하는 모델
- 부모와 자식이 자원의 일부를 공유하는 모델
- 전혀 공유하지 않는 모델
- 수행 (Execution)
- 부모와 자식이 공존하며 동시에 수행되는 모델
- 자식이 종료될 때까지 부모가 기다리는 모델
- 주소 공간(Address space)
- 자식이 부모의 공간을 복제하는 모델
- 자식이 해당 공간에 새로운 프로그램을 올리는 모델
프로세스 생성의 과정 같은건가?
1) fork
2) exec