Develop/💚 운영체제

운영체제: 프로세스와 스레드

인피니 2023. 6. 4. 14:51

프로세스란? 

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

> 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 

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

 

운영체제로부터 할당받는 시스템 자원은?

1. cpu 시간 

2. 운영되기 위해 필요한 주소 공간

3. code, data, stack, heap 구조로 되어있는 독립된 메모리 영역 

 

프로세스 종류

1. 운영체제 프로세스 (= 커널 프로세스, 시스템 프로세스)

: 프로세스 실행 순서를 제어하거나 사용하고 있는 프로세스가 다른 영역(다른 사용자, 운영제체 영역)을 침범하지 못하도록 감시하는 기능을 담당하는 프로세스

사용자 프로세스를 생성하거나 입출력 프로세스를 생성하는 등 시스템 운영에 필요한 작업을 수행하는 프로세스

 

2. 사용자 프로세스 

: 사용자 코드를 수행하는 프로세스 

 

3. 병행 프로세스

: 프로세스 여러 개가 동시에 실행되면 병행 프로세스라 함 

독립 프로세스 & 협동 프로세스로 구분 

 

독립 프로세스: 서로 독립적으로 실행되어 다른 프로세스에 영향을 받지 않고 데이터를 공유하지 않음 

협동 프로세스: 다른 프로세스에 영향을 주거나 다른 프로세스에 의해 영향을 받는 프로세스 

 

4. 멀티 프로세스

: 두 개 이상 다수의 CPU(프로세서)가 협력적으로 하나 이상의 작업을 처리하는 것 

 

프로세스 특징 

이미지 출처: https://wooody92.github.io/os/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C/

1. 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받음 

2. 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있음

3. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로레스의 변수 or 자료구조에 접근할 수 없음 

 

프로세스 단점

CPU에서 여러 프로세스를 로테이션으로 돌면서 처리를 하게 됨(스케줄링 알고리즘)

따라서 동작중인 프로세스가 대기를 타면서 현재 실행하고 있는 프로세스의 상태(Context) 를상태(Context)를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태(Context)를 복구하게 되는데 이런 과정을 Context Switching 이라고 하는데 

프로세스는 각각 독립된 메모리 영역이다 보니 캐시 메모리 초기화 등 무거운 작업이 진행되고 오버헤드가 발생하게 됨  

 

스레드란?

사전적 의미: 프로세스 내에서 실행되는 여러 흐름의 단위

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

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

이미지 출처: https://velog.io/@flasharrow/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C

> 스레드는 프로세스 내에서 각각 Stack 만 따로 할당받고 나머지 영역(Code, Data, Heap) 은 공유함

> 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내 주소공간, 자원(Code,Data,Heap)을 같은 프로세스 내에 스레드끼리 공유하면서 실행됨 

 

스레드 장점 

1. 메모리를 공유하기때문에 프로세스와 달리 스레드 간 데이터를 주고받는 게 간단함

2. 멀티프로세스의 단점인 Context Switching 의 오버헤드에 대한 부분을 해결해 줌

3. 프로세스 Context Switching의 경우 캐시 메모리를 초기화하게 되지만 스레드는 메모리를 공유하므로 큰 처리비용이 드는 초기화가 필요 없음 

 

스레드 단점 

1. 서로 데이터를 사용하다 충돌이 일어날 수 있음

2. 디버깅이 까다로워짐