[Philosophers] Day 02. 프로세스(Process)와 스레드(Thread)

jkeum·2021년 6월 10일
2

philosophers

목록 보기
2/5

프로세스와 스레드

프로그램(Program)

우선 프로그램이 무엇인지 찾아보았다. 구글링하면 다음과 같은 정의들이 나온다.

프로그램은 프로그래밍된 결과물, 사용자의 명령에 반응하는 소프트웨어, 컴퓨터를 실행시키기 위한 일련의 순차적으로 작성된 명령어 모음이다.

이번 과제에서도 philo라는 이름의 프로그램을 만든다. 프로그램은 하나의 코드 덩어리라고 볼 수 있다.

프로세스(Process)

프로세스를 구글링하면 다음과 같은 정의들이 나온다.

프로세스는 컴퓨터에서 연속적으로 실행되고 있는 프로그램, 메모리에 적재되어 CPU에서 실행 중인 프로그램이다.

프로세스는 프로그램을 실행한 상태이다.

프로그램은 정적인 파일이고, 그 정적인 상태의 프로그램을 실행해서 동적인 상태로 만들면 프로세스가 된다.

스레드(Thread)

스레드를 구글링하면 다음과 같은 정의들이 나온다.

스레드는 프로세스 내에서 실행되는 흐름의 단위, 프로세스 내에서 실제로 작업을 수행하는 주체이다.

스레드는 스레드끼리 프로세스 내의 자원을 공유하며, 코드에 선언된 함수라고 볼 수 있다.

프로세스와 스레드 차이

프로세스가 동작할 때 메모리를 할당받는다.
운영체제는 프로세스에 독립된 메모리 영역, code/data/stack/heap을 할당해준다.
각각 독립된 영역이기 때문에 다른 프로세스의 데이터에 접근할 수 없다.

(이미지 출처: https://charlezz.medium.com/process와-thread-이야기-5b96d0d43e37)

스레드는 메모리 자원을 공유할 수 있다.
정확히는, 프로세스에 할당된 stack은 따로 할당받고 code/data/heap은 공유한다.

(이미지 출처: https://charlezz.medium.com/process와-thread-이야기-5b96d0d43e37)

여기서 차이를 알 수 있다.
만약 하나의 프로세스에 문제가 생겨서 강제로 종료하게 되어도 다른 프로세스는 영향을 받지 않는다.
하지만 스레드의 경우에는, 하나의 스레드에 문제가 생겨서 강제로 종료하게 되면 같은 프로세스의 다른 스레드들도 강제로 종료된다.
프로그램을 동작시키다가 세그폴트나 어볼트 같은 에러가 발생하면, 어떤 함수에서 발생한 문제든지 간에 함수 실행이 끝나고 프로세스가 종료되어 버린다.

스레드가 '프로세스 내에서 실행되는 흐름의 단위'라고 했는데, 이는 CPU 관점에서의 최소 단위이다.
CPU는 스레드를 최소 단위로 삼아서 작업을 한다.
반면에 운영체제는 프로세스를 최소 단위로 삼는다.
하나의 프로세스는 하나 이상의 스레드를 가지는데, 운영체제의 최소 작업 단위는 프로세스라서 같은 프로세스 내의 스레드끼리 메모리를 공유할 수밖에 없는 것이다.


마무리

개념부터 좀 잡고 가는 게 나을 것 같아서 프로세스와 스레드를 공부했다.
공부하니까 훨씬 낫다. 이제 뮤텍스랑 세마포어 공부해야지.


참고한 사이트:
raejoonee's velog - 프로세스와 스레드의 차이

profile
It's me, jkeum!

0개의 댓글