[CS] 프로세스와 스레드

Mintaek·2023년 1월 20일

개념 정리

목록 보기
10/10
post-thumbnail

들어가기 앞서

❓ 프로그램이란

파일이 저장 장치에 저장되어 있지만 메모리에는 올라가지 않은 정적인 상태를 말한다.

메모리에 올라가지 않은 ?

  • 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당해주지 않았다.
    모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있다.

정적인 상태

  • 아직 실행되지 않고 가만히 있다는 뜻

다시 말해

프로그램이라는 단어는 아직 실행되지 않은 파일 그 자체를 가리키는 말이다. = 코드 덩어리 !

프로그램에게 의미를 부여하기 위해 프로그램을 실행해 보자.

실행하면 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 하며 이 상태의 프로그램을 프로세스 라고 한다.

❓ 프로세스란

프로세스는 운영체제로부터 자원을 할당받은 작업의 단위이다

  • 실행되고 있는 컴퓨터 프로그램, 스케줄링 단계에서의 작업과 같은 단어라고 봐도 무방함.
    -> 위키피디아

요약

프로그램은 코드 덩어리 파일 , 그 프로그램을 실행한 게 프로세스

❓ 스레드란

스레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위이다

과거에는 프로그램을 실행할 때 실행 시작부터 실행 끝까지 프로세스 하나만을 사용해서 진행했다고 한다.
하지만 시간이 흐를수록 프로그램이 복잡해지고 프로세스 하나만을 사용해서 프로그램을 실행하기는 벅차게 되었
다. 실제로 이제는 프로그램 하나가 단순히 한 가지 작업만을 하는 경우는 없다. 그러면 이제 어떻게 해야할까?

프로세스를 여러개 만들면 되지 않을까 ?

운영체제는 안전성을 위해서 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두고 있고, 이를 벗어나는 정보에 접근하려면 오류가 발생하기 때문에 불가능하다.

프로세스와는 다른 더 작은 실행 단위 개념이 필요해짐.

이것이 스레드.

스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.
스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되는 것이다.

💡 프로세스와 스레드의 작동 방식에 대한 더 자세한 설명

  • 운영체제는 프로세스가 메모리에 올라갈 때, 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap 의 형식으로 할당해 준다.

  • 각각의 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.

  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.
    Operation System

  • 이미지 출처 : 티스토리

이와 다르게 스레드는 같은 프로세스 내의 메모리를 서로 공유할 수 있다.

프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역을 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리영역을 공유한다.

따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

그래서 어떤 차이가 있는데 ❓

개념의 범위부터 다르다. 스레드는 프로세스 안에 포함되어 있기 때문이다.

프로세스는 프로그램을 실행하는 순간 해당 파일이 컴퓨터 메모리에 올라가게 되고, 이 동적인 상태의 프로그램을 프로세스라고 한다.

스레드는 프로세스를 구성하는 더 작은 실행 단위의 개념이다.

프로세스는 메모리에 올라갈 때 운영체제로부터 독자적인 시스템 자원을 할당 받는 반면, 스레드는 프로세스 내부에서 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유한다.

profile
Slow and Steady Wins the Race

0개의 댓글