프로세스란 컴퓨터에서 실행되고 있는 컴퓨터 프로그램을 말한다.
프로세스의 문맥(context)
CPU 수행 상태를 나타내는 하드웨어 문맥이다.
프로세스의 주소 공간 (code, data, stack)
프로세스 관련 커널 자료 구조 (PCB, Kernel stack)
프로세스의 상태
프로세스는 상태가 변경되며 수행된다.
Running: CPU를 잡고 instruction을 수행중인 상태이다.
Ready: CPU를 기다리는 상태이다.(메모리 등 다른 조건을 모두 만족하고 있는 상태)
Blocked (wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태이다.
- process 자신이 요청한 event가 만족하지 않아서 이를 기다리는 상태이다.
- ex) 디스크에서 file을 읽어와야 하는 경우를 예로 들 수 있다.
New: 프로세스가 생성중인 상태
Terminated: 수행이 끝난 상태
프로세스의 상태도
PCB(Process Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보이며, 다음의 구성 요소를 가진다.
- OS가 관리상 사요하는 정보: Process state, Process ID, scheduling information, priority
- CPU 수행 관련 하드웨어 값: Program counter, registers
- 메모리 관련: Code, data, stack의 위치 정보
- 파일 관련
Context switch (문맥 교환)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정을 말한다.
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 아래 과정을 수행한다.
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다.
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다.
System call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아니다.
프로세스를 스케줄링하기 위한 큐
Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합이다.
Ready Queue: 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합이다.
Device Queues: I/O device의 처리를 기다리는 프로세스의 집합이다.
프로세스들은 각 큐들을 오가며 수행된다.
스케줄러
Long-term scheduler (job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정한다.
- 프로세스에 memrory 및 각종 자원을 주는 문제를 다룬다.
- degree of Multiprogramming을 제어한다.
- time sharing system에는 보통 장기 스케줄러가 없다. 무조건 ready이다.
Short-term scheduler (CPU scheduler)
- 어떤 프로세스를 다음번에 running 시킬지 결정한다.
- 프로세스에 CPU를 주는 문제를 다룬다.
- 충분히 빨라야 한다.
Medium-term Scheduler (Swapper)
- 여유 공간을 마련하기 위해 프로세스를 통째로 메모리에서 디스크로 쫓아낸다.
- 프로세스에게서 memory를 뺏는 문제를 다룬다.
- degree of Multiprogramming을 제어한다.
프로세스의 상태
Running, Ready, Blocked는 위와 동일하며 프로세스의 상태에 중기 스케줄러로 인해 상태가 추가된다.
Suspended (stopped): 외부적인 이유로 프로세스의 수행이 정지된 상태이다. 프로세스는 통째로 디스크에 swap out 된다.
- ex) Bolcked는 자신이 요청한 event가 만족되면 Ready 상태로 돌아가고 Suspended는 외부에서 resume해 줘야 activie 상태가 된다.
Thread
스레드는 프로세스 내부에 CPU 수행단위가 여러개 있는 경우를 말한다. (CPU의 실행 단위이다)
스레드는 program counter, register set, stack space로 구성된다.
스레드가 동료 스레드와 공유하는 부분 (task)은 code section, data section, OS resources 이다.
다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행되어 빠른 처리를 할 수 있다.
동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다. (자원 절약)
스레드를 사용하면 병렬성을 높일 수 있다.
스레드의 장점은 다음과 같다.
- 응답성이 빠르다.
- 자원을 공유한다.
- 경제성: 프로세스를 만드는건 오버헤드가 크다. 프로세스 안의 쓰레드를 하나 추가하는건 오버헤드가 크지 않다.
- 멀티 프로세스 환경에서는 각각의 쓰레드가 병렬적으로 일 할 수 있다.
'Computer Science > Operating System' 카테고리의 다른 글
[CS] 운영체제 - 프로세스 동기화 (0) | 2022.09.01 |
---|---|
[CS] 운영체제 - CPU 스케줄링 (0) | 2022.09.01 |
[CS] 운영체제 - 프로세스 관리 (0) | 2022.09.01 |
[CS] 운영체제 - 시스템 구조와 프로그램 동작 방식 (0) | 2022.08.30 |
[CS] 운영체제 - 운영체제란? (0) | 2022.08.30 |