본문 바로가기
📖 CS/운영체제

🎛️ 운영체제 - 3.Process

by 정람지 2024. 4. 12.

출처 : http://www.kocw.net/home/cview.do?lid=af8e05c97c6d60de


🎛️ 프로세스의 개념

process : 실행 중인 프로그램

 

프로그램 : 하드디스크에 있는 것 

프로세스 : RAM에서 살아서 돌아가는 것

 

<프로세스 문맥>

1. 하드웨어 문맥 ( CPU 수행 상태)

- PRogram Counnter 

- 각종 register 

2. 프로세스의 주소 공간

- code, data, stack

3. 커널 자료 구조(프로세스 관련)

- Process Control Block(PCB)

- Kernel stack


🎛️ 프로세스의 상태

프로세스는 상태가 변경되며 수행

 

🎚️ Runnning

• CPU를 잡고 instruction을 수행중인 상태


🎚️ Ready
• CPU를 기다리는 상태
(메모리 등 다른 조건을 모두 만족하고)


🎚️ Blocked (wait, sleep)
• CPU를 주어도 당장 instruction을 수행할 수 없는 상태
• Process 자신이 요청한 event( 예 : I/O)가 즉시 만족되지 않아 이를 기다리는 상태

🎚️New

프로세스가 생성중인 상태


🎚️Terminated

수행(execution)이 끝난 상태


🎛️ Process control block (PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

구성 요소(구조체로 유지)


(1) OS가 관리상 사용하는 정보
- Process state, Process ID

- scheduling information, priority


(2)CPU 수행 관련 하드웨어 값

-  Program counter, registers

 

(3) 메모리 관련

- Code, data, stack의 위치정보


(4) 파일 관련

- Open file descriptors...


🎛️ Context Switch ( 문맥 교환)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

< CPU가 다른 프로세스에게 넘어갈 때의 운영체제 수행 과정 >

- CPU를 내어주는 기존 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 뉴 프로세스의 상태를 PCB에서 읽어옴

 

 

System call / Interupt 발생 시 반드시 문맥교환이 일어나는 것은 아님


🎛️ 프로세스를 스케줄링하기 위한 큐

ready/device/.. 큐의 모습

Job queue
현재 시스템 내에 있는 모든 프로세스의 집합

 

Ready queue
현재 메모리 내에 있으면서 CPU를 잡아서 실행되기룔 기다리는 프로세스의 집합

 

Device queues
I/O device의 처리를 기다리는 프로세스의 집합

- 프로세스들은 각 큐들을 오가며 수행

- OS가 다양한 큐들로 관리

 


🎛️ 스케줄러 (Scedular)

Long-term scheduler(장기 스케줄러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 프로세스에 memory(및 각종 자원)을 주는 문제
- degree of Multiprogramming(프로그램에 올라가 있는 프로그램의 수) 을 제어
- time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)


Short-term scheduler (단기 스케줄러 or CPU scheduler)

- 어떤 프로세스를 다음번에 running시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야 함 (millisecond 단위)

 

Medium-Term Scheduler (중기 스케줄러 or Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어


🎛️ 프로세스 상태 2

Running
• CPU를 잡고 instruction을 수행중인 상태

 

Ready
• CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

 

Blocked (wait, sleep)
• I/O 등의 event를 (스스로) 기다리는 상태
(예) 디스크에서 file을 읽어와야 하는 경우

 

Suspended (stopped)
• 외부적인 이유로 프로세스의 수행이 정지된 상태
• 프로세스는 통째로 디스크에 swap out 된다
( 예) 사용자가 프로그램을 일시 정지시킨 경우 (break key)시스템이 여러 이유로 프로세스를 잠시 중단시킴(메모리에 너무 많은 프로세스가 올라와 있을 때)

 

Blocked: 자신이 요청한 event가 만족되면 Ready
Suspended:
외부에서 resume 해 주어야 Active


🎛️ Thread 스레드

“A thread (or lightweight process') is a basic unit of CPU utilization”

 Thread의 구성
- program counter (CPU 수행 단위)
- register set
- stack space ( 스택이 따로 잇어서 스레드마다 다른 방향으로 코드 수행 가능 a-b-c / a-c-b )

 

Thread가 동료 thread와 공유하는 부분(=task)
- code section
- data section
- OS resources


전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 잇다

 

=>

- 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked (waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있음
- 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있음
- 스레드를 사용하면 병렬성을 높일 수 있음(싱글/멀티스레드)

(메모리 절약)


🎛️ Single / multithreaded Processes 싱글 / 멀티 스레드


🎛️ 스레드의 이점

Responsiveness 응답성이 좋음
eg) multi-threaded Web

- if one thread is blocked (eg network)
another thread continues (eg display)

하나가 block 되더라도 다른 건 돌아감

(멀티 프로세스와 다른 점 :  data 공유 등의 장점 등으로 응답성이 더 좋음)


Resource Sharing
- n threads can share binary code, data, resource of the process

장점이자 단점

스택은 공유 노노


 Economy 경제성
- creating & CPU switching thread (rather than a process)

컨텍스트 스위칭 (프로세스 바꾸면 많은 것을 바꿔야 하지만 스레드 바꿀 떄는 "레지스터, 스택" 만 바꾸면 됨)
- Solaris의 경우 위 두 가지 overhead가 각각 30배, 5배

대신 안정성 배드일 수도

Utilization of MP Architectures 멀티프로세스 아키텍처
- each thread may be running in parallel on a different processor

(CPU 여러 개)


🎛️ implementation of Threads

Some are supported by kernel =>  Kernel Thread 커널 스레드

커널이 스택의 존재를 알고 도움

- Windows 95/98/nt 
- Solaris
- Digital UNIX, Mach


Others are supported by library => User Thread 유저 스레드

커널이 모름,도움 없음

사용자 수준에서의 스레드 조정

- posix Pthreads
- Mach C-threads
- Solaris threads
- Some are real-time threads


배고파서 죽는다!

과도하게 행복해질 만큼의 저녁을 먹을 생각이다