본문 바로가기

카테고리 없음

[ OS ] 프로세스, 쓰레드

[ 프로세스 ]

 

< 프로그램 vs 프로세스 >

- 프로그램

: 어떤 작업을 위해 실행할 수 있는 파일

 

- 프로세스

 

: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램

 

: 운영체제로부터 시스템 자원을 할당받는 작업의 단위

( 시스템 자원 : CPU 시간, 운영되기 위한 주소 공간,

Code/Data/Stack/Heap의 구조로 되어있는 독립적인 메모리 영역 )

 

: CPU에 의해 처리되는 사용자 프로그램 / 시스템 프로그램

즉, 실행중인 프로그램을 의미하며, 작업 또는 테스크라고 한다.

 

: PCB ( Process Control Block )을 지닌 프로그램

 

: PC ( Program Counter )를 지닌 프로그램

 

: 능동적 개체로, 순차적으로 수행하는 프로그램

 

-> 입출력 중심( I/O - Bound ) 프로세스

: 계산보다는 입출력을 많이 하는 프로세스

-> 계산 중심 ( CPU - Bound ) 프로세스

: 입출력보다는 계산을 많이 하는 프로세스

 

< 프로세스 관리 >

: 사용자 프로세스와 시스템 프로세스의 생성, 삭제

 

: 프로세스의 일시 중지와 재수행

 

: 프로세스 스케줄링

 

: 프로세스 동기화

 

: 프로세스 간 통신 ( IPC : Inter Process Communication )

 

: 교착상태 처리 ( Deadlock )

 

< 프로세스 상태 >

: 하나의 프로세스는 여러가지 이벤트에 의해 일련의 서로 구분되는 상태변화를 겪는다.

: 생성 상태, 준비 상태, 실행 상태, 대기 상태, 완료 상태를 가질 수 있다.

 

1) 생성 상태 ( New )

- 사용자에 의해 프로세스가 생성된 상태

- 생성되었지만, 아직 승인은 받지 못한 상태

 

2) 준비 상태 ( Ready )

- CPU를 할당받을 수 있는 상태

 

3) 실행 상태 ( Running )

- 프로세스가 CPU를 할당받아 동작 중인 상태

 

4) 대기 상태 ( Waiting )

- Running 상태였다가, 입출력 처리 등을 하게 되면, CPU를 양도하고

입출력 처리가 완료될 때까지 대기하고 있는 상태

 

5) 완료 상태 ( Complete )

- 프로세스 실행을 완료하고 할당된 CPU를 반납함

 

프로세스 상태

< 프로세스 상태 전이 >

new -> ready : OS에 의해 프로세스를 승인(admitted)

 

ready -> running : 프로세스를 수행하기 위해 CPU를 할당 ( Scheduler Dispatch )

: 준비상태에 있는 여러 프로세스(Ready List) 중, 실행될 프로세스를 선정( Scheduling )하여 CPU를 할당( Dispatch )

: 이 때, 문맥교환이 발생한다. 프로세스는 준비 상태에서 실행 상태로 전이된다.

 

running -> ready : 할당된 시간이 지나면, timeout interrupt 발생 ( Interrupt )

: CPU를 할당받은 프로세스는 지정된 시간이 초과되면 스케줄러에 의해 PCB 저장, CPU 반납 후 다시 준비상태로 전이된다.

: 타임 슬라이스(Time Slice) 만료, 선점(Preemption) 시 타임아웃 발생

 

running -> waiting : timeout 전에 I/O 요청 발생 - I/O or Event wait

: 실행 상태에 있는 프로세스가 지정된 할당 시간을 초과하기 전에 입출력이나 기타 사건이 발생(block)하면,

CPU를 스스로 반납하고 입출력이 완료될 때까지 대기 상태로 전이된다.

: 즉시 실행 불가능한 시스템 콜, I/O 작업 시작, 프로세스 간 통신 시 Block 발생

 

waiting -> ready : I/O요청이 완료되면 다시 ready 상태로 전이 - I/O or event completion

: 입출력이 종료되면, 대기 상태의 프로세스에게 입출력 종료 사실을 wait & signal 등에 의해 알려주고,

준비상태로 전이된다.

 

running -> terminated : 프로세스 종료

 

< 프로세스 구성 요소 >

- 코드( Code ) 영역

: 프로그램 코드 자체를 구성하는 메모리 영역 ( hex파일 or bin 파일 )

: CPU가 해석할 수 있는 바이너리 코드 상태로 주기억장치에 올라오는데, 이 영역을 말한다.

: 프로그램 명령이 위치하는 곳으로, 기계어로 제어되는 메모리 영역이다.

 

- 데이터 ( Data ) 영역

: 사용자 작성 프로그램 코드에서 사용하는 데이터를 담는다.

: 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다.

: 초기화된 데이터는 Data 영역에 저장되고, 초기화되지 않은 데이터는 BSS ( Block Stated Symbol )

영역에 저장한다.

: 프로그램이 실행될 때 생성되고, 프로그램이 종료되면 시스템에 반환한다.

: 함수 내부에 선언된 static 변수는 프로그램이 실행될 때 공간만 할당되고, 그 함수가 실행될 때 초기화된다.

 

- 스택 ( Stack ) 영역

: 프로그램이 자동으로 사용하는 임시 메모리 영역이다.

: 지역(local) 변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.

: 함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환된다.

: 스택 사이즈는 각 프로세스마다 할당되지만,

프로세스가 메모리에 로드될 때 스택 사이즈가 고정되어 있어

런타임 시에 스택 사이지를 바꿀 수는 없다.

: 명령 실행 시, 자동 증가/감소 하기 때문에 보통 메모리의 마지막 번지를 지정한다.

 

- 힙 ( Heap ) 영역

: 필요에 의해 동적으로 메모리를 할당하고자 할 때 위치하는 메모리 영역이다.

: 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

: 이 영역에 데이터를 저장하기 위해서는 C는 malloc(), C++는 new() 함수를 사용한다.

 

:: Heap Overflow

- Heap이 위에서부터 주소값을 채워져 내려오다가, Stack 영역을 침범하는 경우

:: Stack Overflow

- Stack 영역이 Heap을 침범하는 경우

 

Process는 Code, Data, BSS, Heap, Stack 영역으로 나누어진다. OS는 Process Descriptor를 통해 프로세스를 인식하고 관리한다.

 

 

< 프로세스 제어 블록 ( PCB ) >

- 운영체제 커널이 프로세스 관리를 위해 필요한 자료를 담고 있는 자료구조

 

- "PCB는 운영체제가 프로세스를 표현한 것이다."

운영체제에서 프로세스는 PCB로 표현된다.

 

- PCB는 프로세스 생성 시 만들어지고, 메인 메모리에 유지되며,

프로세스가 완료되면 PCB도 함께 제거된다.

 

- PCB는 프로세스 상태 관리와, 문맥 교환(Context Switching)을 위해 필요하다.

 

- PCB는

PID ( 프로세스 식별자 )

프로세스 상태 ( New, Ready, Running, Wait, Terminated )

프로그램 카운터(PC -> 해당 프로세스가 다음에 실행할 명령어의 주소를 가리킨다 )

레지스터 저장 영역,

프로세서 스케줄링 정보 ( 우선순위, 최종 실행시각, CPU 점유 시간 등 ),

프로세스 계정 정보 ( 페이지 테이블, 스케쥴링 큐 포인터, 소유자, 부모 등 ),

입출력 상태 정보 ( 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등 ),

메모리 관리 정보 ( 해당 프로세스의 주소 공간 등 )패로 구성된다

운영체제가 프로세스를 표현하고 관리하는 자료구조, PCB

 

위에 설명하지 않은 내용 중 보충 설명..

* Pointer : 프로세스의 현재 위치를 저장하는 포인터 정보

* Registers : 누산기, 베이스 레지스터, 범용 레지스터를 포함하는 CPU 레지스터에 있는 정보

* Memory Limits : 운영체제에서 사용하는 메모리 관리 시스템에 대한 정보.

페이지 테이블, 세그먼트 테이블 등이 포함될 수 있음.

* Open File Lists : 프로세스를 위해 열린 파일 목록

 

- PCB는 프로세스의 중요한 정보를 포함하고 있기 때문에,

일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 넣는다.

 

- PCB는 커널 스택의 처음에 위치한다.

 

- 운영체제는 빠르게 PCB에 접근하기 위해 프로세스 테이블을 사용한다.

 

운영체제가 PCB들에 접근하기 위해 사용하는 Process Table

 

[ 쓰레드 ]

- 프로세스 내에서 실행되는 여러 흐름의 단위

 

- 프로세스의 특정한 수행 경로

 

- 프로세스가 할당받은 자원을 이용하는 실행 단위

 

- 쓰레드는 프로세스보다 가벼운, 독립적으로 수행되는 순차적인 제어의 흐름, 실행 단위

 

- 쓰레드는 프로세스에서 실행 제어만 분리한 실행 단위,

한 개의 프로세스는 여러 개의 쓰레드를 가질 수 있다.

쓰레드는 프로세스 내에서 각각 Stack만 따로 할당받고, Code/Data/Heap 영역은 공유한다.

- 쓰레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름,

프로세스 내의 주소 공간이나 자원들( Heap )을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행한다.

 

- 같은 프로세스 안에 있는 여러 쓰레드들은 같은 힙 공간을 공유한다.

반면, 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다. ( 프로세스 간 통신 : IPC를 통해 접근 가능 )

 

- 각각의 쓰레드는 별도의 레지스터와 스택을 가지고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.

 

- 한 쓰레드가 프로세스 자원을 변경하면, 다른 이웃 쓰레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.

 

 

< 멀티 프로세스와 멀티 쓰레드의 차이 >

 

[ 멀티 프로세싱 ]

-> 하나의 응용프로그램을 여러 프로세스로 구성하여,

각 프로세스가 하나의 작업(테스크)를 처리하도록 하는 것.

 

장점) 여러 개의 자식 프로세스 중 하나에 문제가 발생하면,

그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.

 

단점)

- Context Switching 발생으로 인한 오버헤드

: Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고

많은 시간이 소요된다.

 

: 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에

프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면

캐쉬에 있는 모든 데이터를 모두 리셋하고, 다시 캐쉬 정보를 불러와야 한다. 

 

- 프로세스 사이의 어렵고 복잡한 통신 기법 ( IPC )

: 프로세스는 각각의 독립된 메모리 영역을 할당받았기 떄문에

하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다.

 

[ 멀티 쓰레딩 ]

- 하나의 응용프로그램을 여러 개의 쓰레드로 구성하고,

각 쓰레드로 하여금 하나의 작업을 처리하도록 하는 것이다.

 

- 웹 서버는 대표적인 멀티 쓰레드 응용 프로그램이다.

 

장점)

- 시스템 자원 소모 감소 ( 자원의 효율성 증대 )

=> 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어

자원을 효율적으로 관리할 수 있다.

 

- 시스템 처리량 증가 ( 처리 비용 감소 )

=> 쓰레드 간 데이터를 주고 받는 것이 간단해지고, 시스템 자원 소모가 줄어들게 된다.

=> 쓰레드 사이의 작업량이 작아 Context Switching이 빠르다.

 

- 간단한 통신 방법으로 인한 프로그램 응답 시간 단축

=> 쓰레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.

 

단점)

- 주의 깊은 설계가 필요하다.

- 디버깅이 까다롭다.

- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.

- 다른 프로세스에서 쓰레드를 제어할 수 없다. ( 프로세스 밖에서 쓰레드를 각각 제어할 수 없다 )

- 자원 공유의 문제가 발생한다 ( 동기화 문제 )

- 하나의 쓰레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

 

 

참고자료 :

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

 

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

https://chlgpdus921.github.io/operating%20system/Chapter2_Process/

 

[운영체제] Process 정의와 Process 상태도

운영체제 process정의와 5가지 State를 알아보자

chlgpdus921.github.io

https://rebro.kr/172

 

[운영체제(OS)] 3. 프로세스(Process)

[목차] 1. Process 2. Process State 3. Process Control Block (PCB) 4. Context Switch 5. Process Scheduling 6. Process Management 7. Cooperating Processes 참고) - https://parksb.github.io/article/7.html - KOCW 공개강의 (2014-1. 이화여자대학교

rebro.kr

https://yoongrammer.tistory.com/52

 

프로세스 제어 블록 (PCB: Process Control Block) 알아보기

프로세스 제어 블록 (PCB: Process Control Block) 알아보기 PCB(Process Control Bolock)는 운영체제가 프로세스를 제어하기 위해 정보를 저장해 놓는 곳으로, 프로세스의 상태 정보를 저장하는 자료구조입니

yoongrammer.tistory.com