프로세스(Process)와 스레드(Thread)

Naezan·2024년 4월 18일

운영체제

목록 보기
1/2
post-thumbnail

프로세스와 스레드의 차이

프로세스에는 여러가지 명령을 모아놓은 집합이며 프로세스 내부에는 1개이상의 쓰레드가 존재합니다.

이러한 연산들이 모여서 연산의 흐름이 만들어지고 보통 이 흐름(스레드)이 프로세스 당 1개 합니다.

이 흐름이 N개가 존재하기도하는데, 이러한 흐름이 여러개로 나눠져서 동시에 처리되는 것을 멀티쓰레딩이라고 합니다. 그리고 프로세스가 여러 개인 상황을 멀티태스킹이라고 합니다.

프로세스와 메모리

컴퓨터는 유저, 커널, 하드웨어로 3개의 레이어로 구성되어 있습니다.

하드웨어에는 CPU(ALU와 레지스터, 제어장치 등이 모인 코어가 여러개 있음)와 메모리(램, 하드)가 존재합니다.

유저레벨에는 프로세스가 존재하고 그 안에 여러개의 쓰레드가 있으며 스레드에는 작업들이 모여있습니다.
프로세스가 연산을 수행하기 위해서는 CPU에 접근해야하고 이를 지원해주기 위해서 OS(커널)가 프로세스의 명령들이 CPU에서 처리할 수 있도록 명령을 내립니다.
이때 OS는 CPU에 연산 및 램 공간을 페이지 단위로 할당해줍니다.

"캐싱 방식의 페이징"

그리고 프로세스는 실제로 물리적 메모리를 사용하지 않고 OS가 할당해준 추상화된 가상메모리를 공간을 사용하게 됩니다. 그 이유는 메모리에 대한 관리는 운영체제가 하기 때문입니다. 즉 램에 직접적인 접근이 불가능하도록 설계되어 있습니다.

스레드와 가상 메모리

가상 메모리는 램이나 하드의 메모리공간을 맵핑해주는 방식으로 동작합니다.

프로세스에 속한 모든 스레드는 프로세스의 가상 메모리 공간 안에서만 사용할 수 있기 때문에 그래서 프로세스의 연산들은 제한된 가상 메모리에서만 동작하게 됩니다.

그리고 모든 스레드들은 TLS(스레드 로컬 공간 : stack)을 가지고 스레드들이 공유하는 전체 heap공간이 있습니다.

스레드들이 한 프로세스의 가상메모리 공간을 공유하기때문에 멀티쓰레딩 환경에서 동기화 중 동일한 메모리공간에 접근하는 문제가 발생할 수 있습니다.
이렇게 동시에 작업하는 것을 싱글코어에서는 동시성(실제로는 동시에 하는 것처럼 보이게 수행)이라고하고 멀티 코어에서는 병렬성(실제로 여러 작업들을 동시에 수행)이라고 합니다.

싱글 코어에서 동시성을 가져아하는 이유는 노래를 들으면서 웹페이지를 보는데, 노래를 들을때는 웹페이지가 멈추고, 웹페이지를 볼때는 노래가 멈추면 안되기에 동일한 시간범위 내에서 작업을 마치 동시에 하는 것처럼 동작해야 사용자의 경험을 향상시킬 수 있기 때문입니다.

물론 동시성에서 발생할 수 있는 문제점은 경쟁조건(race condition : 두 개 이상의 스레드들이 서로 자원을 쟁취하려고 경쟁하는 상황으로 데이터에 접근하고 수정을 반복하면서 데이터의 일관성이 깨질 수 있다.), 교착상태(Deadlock : 두 개 이상의 스레드가 서로의 작업이 끝나기만을 기다리면서 무한정 대기하는 상황), 기아상태(Livelock : 두 개 이상의 스레드가 서로의 상태를 방해하면서 서로의 작업이 끝나지 않는 상황) 등이 있습니다.

이때 TLS를 사용하면 일부 동시성 문제(race condition)를 해결할 수 있습니다.

참고자료

https://youtu.be/x-Lp-h_pf9Q
https://blog.coolhead.in/processes-vs-threads-explained-with-analogy
https://velog.io/@dahyeon/Chapter-9-Memory-Management
https://learn.microsoft.com/ko-kr/windows-hardware/drivers/gettingstarted/user-mode-and-kernel-mode
https://devsrkim.tistory.com/entry/%EB%8F%99%EC%8B%9C%EC%84%B1%EA%B3%BC-%EB%B3%91%EB%A0%AC%EC%84%B1%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
게임 개발자

0개의 댓글