지난번 내용과 이어서, 이번엔 프로세스와 스레드에 대해 알아보자
프로그램은 실제 실행 되기 전에는 그저 단순한 파일로써 존재한다.
하지만 우리가 프로그램을 실행하면, 프로세스가 생성되면서 프로그램이 실행된다.
프로세스에 대해서 밑에서 자세히 알아보자
프로세스(Process) 란?
먼저 프로세스는 코드섹션 + 데이터 섹션 + 힙 + 스택 으로 이루어져 있다.
코드섹션 : 실행할 프로그램의 코드가 저장되어 있는 부분
데이터 섹션(기타) : 전역 변수및 정적 변수가 저장되는 부분
힙 : 동적으로 할당되는 메모리 영역
스택 : 메서드 호출시 생성되는 지역 변수와 반환 주소가 저장되는 영역(스레드)
Java식 표현으로 표현하자면, 프로세스는 실행중인 프로그램의 인스턴스이다.
그러므로 각 프로세스는 모두 메모리에 독립적으로 존재하며 운영체제에서 별도의 작업 단위로 분리해서 관리된다.
무슨소리냐 함은.. 각 프로세스는 각각 별도의 메모리 공간에 존재함으로써 서로에게 종속적이지 않다.
22 무슨소리냐 함은.. 프로세스는 독립적이라 서로 간섭하지 않는다. 그래서 하나의 프로세스에 문제가 발생해도 나머지 프로세스에는 영향이 없다. 그래서 특정 프로세스에 문제가 발생하면 해당 프로세스만 종료되고 나머지는 정상적으로 수행된다.
프로세스에 대해 알아보았으니, 이제 스레드라는 개념이 등장하는데 프로세스는 하나 이상의 스레드를 반드시 포함한다.
스레드 (Thread)
스레드란, 프로세스 내에서 실행되는 작업의 단위이다.
한 프로세스 내에서 여러 스레드가 존재할 수 있고 이들은 프로세스가 제공하는 동일한 메모리 공간을 공유한다.
먼소리냐면, 위에 프로세스 구조 그림을 참조하면, 각각의 스레드(스택) 은 자신이 속한 프로세스 안에 있는 데이터들에 접근이 가능하다 라고 생각 하면 된다.
이렇게 스레드가 본인의 프로세스 안에 접근할 수 있는 데이터들을 공유 메모리 라고 하고,
스레드가 각각 가지고 있는 자식의 스택을 개별 스택 이라고 한다
프로그램을 실행할 때, 운영체제는 디스크에 존재하는 파일덩어리인 프로그램을 메모리로 불러오고 프로세스를 생성한다.
이러한 프로세스는 저번 포스팅에서 말한 것 처럼 코드를 한줄 씩 실행하면서 동작 된다. 예를 들어 main 메서드에서 시작하여 한 줄씩 아래로 내려가며 실행 되는 것처럼 말이다.
이렇게 위에서 아래로 한 줄씩 코드가 실행되는 것을 보고 실을 꿰는 모습과 비슷하다고 하여 스레드라는 이름을 붙이게 되었고, 이렇듯 프로세스의 코드를 실행하는 흐름을 스레드라고 칭하게 되었다.
한 프로세스 내에서 하나의 스레드는 반드시 존재(단일 스레드)하고, 여러 스레드(멀티 스레드)가 존재할 수도 있다. 그리고 스레드는 프로세스가 제공하는 동일한 메모리 공간을 공유한다는 특징이 존재한다!
비유를 통해 쉽게 알아보자
프로세스는 실행을 위해 자원을 제공하는 컨테이너 역할이고, 스레드는 실제로 CPU를 이용하여 코드를 하나씩 수행한다.
멀티 스레드가 필요한 이유
하나의 프로그램 안에서도 여러 작업을 동시에 처리해야하는데, 예를 들어 유튜브 영상을 보는동안 다른 영상을 추천받고, 댓글을 달고, 소리를 조절하거나 할 수 있다.
운영체제적 관점에서는 유튜브는 하나의 프로세스이고,
영상 추천, 댓글 달기, 영상 재생, 음량 조절 등이 하나의 스레드로 존재한다 라고 생각하면 된다
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 스레드(Thread), 스케줄링(Scheduling), 컨텍스트 스위칭 (Context Switching) (0) | 2024.11.03 |
---|---|
[OS] 멀티 태스킹 (Multi Tasking), 멀티 프로세싱(Multi Processing) (0) | 2024.11.02 |