프로세스

  • 운영체제에 의해 파일 시스템에 설치되어 있는 파일을 프로그램이라고 부릅니다.
  • 프로세스는 프로그램의 실제 실행의 의미하며 프로그램 파일을 실행함으로써 프로그램 데이터들이 메모리에 올라와 CPU를 할당받고 명령을 수행하고 있는 상태
  • 프로세스는 운영체제로부터 자원을 할당받은 최소 작업 단위

 

  • 운영체제는 프로세마다 각각 독립된 메모리 영역을 Code/Data/Heap/Stack의 형식으로 할당합니다.
  • 독립된 메모리 영역을 할당해 주기 때문에 프로세스 간 영향을 받지 않고 독립적인 작업을 수행할 수 있습니다.
  • 기본적으로 다른 프로세스의 변수나 자료에 접근할 수 없고 IPC나 공유메모리 등의 통신기법들을 사용해서 프로세스 간 통신해야 합니다.

스레드

  • 스레드는 프로세스가 운영체제로부터 할당받은 자원을 이용하는 실행단위 또는 흐름의 단위로서 하나의 프로세스는 반드시 하나 이상의 스레드를 갖습니다.
  • 프로세스 내에서 각 필요한 Stack만 할당받고 Code/Data/Heap 영역은 공유해서 각 스레드가 공유합니다.
  • 스레드 간 메모리 스택 영역에 접근할 수 없으므로 스레드는 독립적인 실행 흐름을 가질 수 있게 되어 독립적인 함수 호출이 가능해집니다.

스레드 & CPU

  • 스레드는 운영체제의 스케줄러에 의해 관리되는 CPU의 최소 실행단위를 의미
  • 스케줄러의 알고리즘에 따라 프로세스에 속한 한 개의 스레드가 선점되어 CPU에 할당됩니다.
  • 스레드 간 선점이 일어날 때 CPU의 실행흐름(문맥)이 전환되는 컨텍스트 스위칭이 발생합니다.

 

 

프로세스

  • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽고 다른 프로세스에게 영향을 미치지 않는다. 즉 프로그램 전체의 안전성을 확보 가능합니다.
  • 프로세스 간 전환(컨텍스트 스위칭) 시 레지스터, 캐시 메모리 초기화 등 무거운 작업으로 인한 시간적인 비용이 많이 발생합니다.
  • 프로세스 간 통신 기법이 어렵고 복잡해서 통신으로 인한 오버헤드가 큽니다.
  • 프로세스 생성 시 독립적으로 메모리가 할당되기 때문에 리소스 비용이 큽니다.

스레드

  • 여러 개의 스레드 중 하나에 문제가 발생하면 전체 프로세스에 영향을 미치게 됩니다.
  • 프로세스의 메모리 영역을 공유하기 때문에 컨텍스트 스위칭 시간이 적고 리소스를 효율적으로 사용합니다.
  • 스레드 간 통신비용이 적어 통신으로 인한 오버헤드가 작습니다.
  • 스레드 간 공유 메모리 영역의 동시 접근으로 인한 동기화 문제가 발생합니다.
  • 하나의 스레드에서 오류가 발생할 경우 프로세스 자체가 종료될 수 있습니다.

 

 

참고 강의

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%8F%99%EC%8B%9C%EC%84%B1-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-part1/dashboard

 

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1] 강의 - 인프런

자바의 동시성 메커니즘과 멀티스레딩 기법을 깊이 있게 다루고 실무에서 직면할 수 있는 다양한 병렬 처리 문제를 해결하는 데 필요한 지식과 기술을 익히게 됩니다. 기본적인 스레드 관리부

www.inflearn.com

 

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

[운영체제] 동시성, 병렬성  (4) 2024.04.12