최근과 같은 비동기의 시대에 프로세스, 스레드, 프로그램이 동작 방식에 대한 부분은 기술면접에서 자주 등장한다.
이번 글에서는 프로그램, 프로세스, 스레드에 대한 개념적인 부분을 알아보려고 한다.
프로그램, 프로세스, 스레드의 사전적 의미
프로세스의 사전적 개념을 먼저 알아보자
프로그램은 컴퓨터에서 실행될 때 특정 작업(specific task)을 수행하는 일련의 명령어들의 모음(집합)이다
프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.
종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다
음... 어렵다. 단순한 사전적의미로 이해하기엔, 각각의 용어들이 서로 연결되어있는거 처럼 보이면서도 추상적이다.
그래도 키워드로서 구분을 해보자면 프로그램은 명령어들의 모음 프로세스는 작업, 스레드는 흐름의 단위
정도로 나눠볼 수 있을것 같다.
흐름 순서를 통한 이해
그럼 실제 동작하는 순서에 따라서 각각의 역할을 살펴보고 이해해보도록 하자.
1) 프로그램 -> 프로세스
먼저 프로그램과 프로세스의 순서를 살펴보자. 위에서 말했듯이 프로그램은 '명령어들의 모음' 이다. 여기서 명령어를 '코드' 로 바꾸고 더 구체적으로 설명하면 다음과 같다.
프로그램은 파일이 저장 장치에 저장되어 있지만, 메모리에는 올라가 있지 않은 정적 상태의 코드 모음
프로그램의 실행은 운영체제가 독립적인 메모리 공간을 할당해주면서 동작하게 된다. 즉 단순한 프로그램은 아직 실행되지않고 있는 파일 그 자체를 의미한다. 여러분의 윈도우 바탕화면에 있는 수많은 파일들은 각각이 실행되기전의 상태인 프로그램 인 것이다.
그럼 우리가 클릭을 통해 어떤 파일을 실행시켰다고 가정해보자. 해당 파일은 메모리에 할당되고, 실행되는 동적인 상태가 된다. 이렇게 정적 -> 동적 상태가된 프로그램을 프로세스라고 한다.
어떤 파일이 실행되기 전 == 정적상태 == 프로그램
어떤 파일이 실행되어 메모리에 할당 == 동적상태 == 프로세스
2) 프로세스 -> 스레드
과거에는 프로그램의 실행 ~ 종료까지 하나의 프로세스가 관리했다. 하지만 점점 하드웨어의 성능이 좋아지면서, 그리고 프로그램의 복잡도가 높아지면서, 하나의 프로세스로 작업을 진행하는 방식에 개선이 필요해졌다. 가장 쉬운방법은 프로세스의 물리적인 개수를 늘리는 것이다. 하지만 서로 다른 프로세스는 상대방의 정보에 접근하는것이 불가능하다는 이슈가 있다.
따라서 프로세스보다 더 작은 실행단위가 필요했고, 이 개념을 스레드 라고 부르기 시작했다.
프로세스의 단점을 보완하기 위한 개념임으로, 스레드는 프로세스와 다르게 스레드간 메모리 공유가 가능하도록 동작한다.
보다 심층적인 내용은 다음 게시글에서 볼 수 있다.
프로세스, 스레드 (심화/면접 편)
최근에 다시 면접을 보고 있다. 그런데 생각보다 많은곳에서 프로세스와, 스레드에 대한 기술질문이 많다는 것을 인지하게되어 프로그램, 프로세스, 스레드 (개념편)최근과 같은 비동기의 시
michael-cho.tistory.com
'CS' 카테고리의 다른 글
멀티 프로세스/멀티 스레드, 동시성/병렬성 (0) | 2024.08.05 |
---|---|
프로세스, 스레드 (심화/면접 편) (3) | 2024.07.31 |