운영체제

3. 프로세스와 스레드

ggomjiu 2025. 1. 16. 15:36

프로세스(Process)

: 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태

 

멀티태스킹(Multi Tasking)

: OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드 단위로 나누는 행위

- 코드 영역 : 프로그래머가 작성한 프로그램이 코드 영역에 작성됨

- 데이터 영역 : 코드가 실행되면서 사용한 변수나 파일들의 각종 데이터들이 모여있음

- 스택 영역 : 호출한 함수가 종료되면 되돌아올 메모리의 주소를 스택에 저장하거나 변수 사용 범위에 영향을 미치는 영역을 구현할 때 사용

- 힙 영역 : 동적으로 할당되는 데이터들을 위해 존재하는 공간

- 코드 영역과 데이터 영역은 선언할 때, 그 크기가 결정되는 정적 영역이지만, 스택 영역과 힙 영역은 프로세스가 실행되는 동안 크기가 늘어났다 줄어들기도 하는 동적 영역임

- 서로 다른 프로세스 간의 메모리 공간 접근은 허용되지 않음

 

스레드(Thread)

: 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위

- 하나의 프로그램은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 가짐

- 스레드는 프로세스 내에서 각각 stack만 따로 할당받고, code, data, heap영역은 공유함

- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유

- 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없음

 

멀티 프로세스(Multi Process)

: 하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것

- 특징

  • 안전성이 좋음 -> 여러 개의 프로세스 중 하나에 문제가 발생해도, 다른 자식 프로세스에 영향이 확산되지 않음
  • 구현이 비교젹 간단하고, 각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당됨
  • 프로세스 간 통신을 하기 위해서는 IPC를 통해야 함
  • 메모리 사용량이 많음
  • 스케줄링에 따른 Context Switching이 많아지고, 성능 저하의 우려가 있음

 


 

cf) IPC(Inter Process Comminication)

: 프로세스 간 소통 방법

- 프로세스는 독립적이거나 다른 프로세스와 협력함

- 독립적인 프로세스는 동시에 실행 중인 다른 프로세스에 영향을 주지 않지만, 협력이 필요한 프로세스의 경우 다른 프로세스에 영향을 주거나 받을 수 있음

- IPC가 필요한 이유

  • 정보 공유 : 여러 사용자가 동일한 정보에 관심을 가지면, 이 정보에 동시에 접근할 수 있는 환경을 제공해야 함
  • 계산 속도 증가 : 특정 작업(연산)을 빠르게 실행하기 위해서는 작업은 작은 단위로 나누어서 병렬로 실행할 수 있음
  • 모듈성 : 시스템 기능을 프로세스 단위 또는 스레드 단위로 나눈 모듈 방식으로 시스템을 구성할 수 있음
  • 편리성 : 개별 사용자도 동시에 많은 작업을 수행할 수 있음 (EX. 편집, 인쇄, 컴파일 등)

- 일반적으로 각 프로세스에 할당된 메모리 공간은 고유하기 때문에 직접 다른 프로세스가 접근할 수 없음 -> 이를 해결하기 위해 IPC를 사용

1. Shared Memory Model

: 협력 프로세스 간 공유되는 메모리를 생성한 후, 이를 이용하여 정보를 교환함

 

- 데이터의 형식과 위치는 프로세스들에 의해 결정되며 운영체제의 소관이 아님 -> 커널의 도움이 거의 필요 없음

- 주로 전역 변수, 공유 변수, 겅유 파일을 통해 통신을 이룸

- 성능은 좋지만 프로세스 간의 동기화 문제가 발생하여 애플리케이션에서 직접 동기화를 해야 함 -> 충돌 가능성이 있음

- 방법

  1. Shared Memory Model에는 producer 프로세스와 consumer 프로세스가 존재
  2. 공유 메모리(버퍼)를 통해 동시에 통신
  3. 생산자가 item을 생산사고 buffer에 저장하면, 소비자는 buffer의 item을 소비
  4. 가용한 항목이 있을 때만 소비가 이루어지도록 생산자 / 소비자 간의 프로세스는 동기화되어야 함

2. Messaging Passing Model

: OS가 프로세스 간 통신 방법을 제공하고, 메세지를 대리 전달함

- OS가 동기화를 해주기 때문에 안전하고 동기화 문제가 없음

- 시스템 콜을 사용하기 때문에 성능이 떨어짐

Direct vs Indirect
▶ Direct : 프로세스들은 서로의 이름을 명시
- 한 쌍에는 하나의 링크만 존재하고, 1대 1 통신에 사용
- send(P, message) : P로 메세지를 보내라
- receive(Q, message) : Q로부터 메세지를 받아라

▶Indirect : 메세지들이 mailbox(port)를 이용하여 send와 receive가 이루어짐
- 각 mailbox는 고유의 id를 가짐
- send(A, message) : mailbox A로 메세지를 보내라
- receive(A, message) : mailbox A로부터 메세지를 받아라
- 여러 프로세스가 mailbox를 공유할 수 있음 

 

- blocking

  • Blocking send : 송신자는 수신자가 메세지를 받을 때까지 blocked되는 것
  • Non - blocking send : 송신자는 메세지를 보내고 자기 할 일을 하는 것
  • Blocking receive : 수신자는 메세지를 모두 다 받을 때까지 blocked되는 것
  • Non - Blocking receive : 수신자가 메세지가 왔는지 수시로 검사하는 것

3. IPC 종류

1) Pipe

- 익명 Pipe

: 단방향 통신 채널

- 한 쪽은 보내기만 하고, 반대 쪽은 받기만 함

- 이때, pipe는 오로지 부모 / 자식 간에만 생성이 가능

- 양방향 통신을 위해서는 pipe가 2개 필요함

- 대신 read(), write()가 기본적으로 block모드로 작동 -> 프로세스가 read 대기 중이면 write를 할 수 없음

 

- Named Pipe(FIFO)

: 이름을 가진 pipe를 통해서 프로세스 간의 양방향 통신을 지원함

- 서로 다른 프로세스들이 pipe의 이름을 알면 통신이 가능

 

2) Message Queues

: 메모리를 사용한 pipe이며, 구조체를 기반으로 통신

- 메세지 타입에 따라 구조체 종류를 다르게 받을 수 있으며, 여러 프로세스가 동시에 데이터를 다룰 수 있음

- 커널에서 제공하기 때문에 메모리 제한이 있을 수 있음

 

 


 

멀티 스레드(Multi Thread)

: 하나의 프로그램을 여러 개의 스레드로 구정하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것

- 특징

  • 응답성이 좋음 -> 프로그램의 자식 스레드가 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속적으로 수행됨
  • 자원 공유가 쉬움 -> 스레드들은 부모 프로세스의 자원과 메모리를 공유할 수 있음
  • 멀티 프로세스 구조에서 각각의 스레드가 다른 프로세스에서 병렬로 수행될 수 있음
  • 구현 및 테스트, 디버깅이 어려움
  • 너무 많은 스레드 사용은 오버헤드를 발생시킴
  • 동기화 그리고 교착 상태가 발생하지 않도록 주의해야 함
  • 자식 스레드 중 하나에 문제가 생긴 경우, 전체 프로세스에 영향을 줄 수 있음

'운영체제' 카테고리의 다른 글

추가적인 내용  (0) 2025.01.19
5. 인터럽트(Interrupt)  (0) 2025.01.16
4. CPU 스케줄링 알고리즘  (0) 2025.01.16
2. 메모리 계층  (0) 2025.01.16
1. 운영체제와 컴퓨터  (1) 2025.01.14