프로세스와 스레드라는 것은 많이 들어 보셨을 텐데요.
우선 사전적 의미를 알아 볼게요~
Process [명사] 과정, 방법, 순서, 소송 수속 등...
Thread [명사] 실, 가는 것, 줄거리, 인간의 수명 등...
컴퓨터에서는 CPU가 프로그램을 실행하는 단위를 프로세스 및 스레드라고 합니다.
한번의 여러개의 프로세스나 스레드를 동작시키는 것을 멀티 프로세스, 멀티 스레드라고 해요.
CPU가 1개인 경우, 동시에 실행할 수 있는 프로그램은 1개 뿐인데요.
프로세스 및 스레드는 1개 입니다.
여러 프로그램이 실행된다는 것은 동시에 실행되는 것이 아니에요.
우리 눈에는 보이지 않을 정도로 굉장히 빠른 기계적 속도로 번갈아 교체되며 실행되는 것입니다.
예를들면 애니메이션 제작하는 것과 비슷하다 할 수 있죠
우리눈 에는 움직이는 것처럼 보이지만 한장한장의 그림들이 넘어가며 움직이는 것처럼 보이죠.
그렇다면 프로세스와 스레드는 대충 알겠는데 둘 차이가 뭐길래 이름이 다를까요?
그 이유는 바로 동일한 메모리 공간을 사용하는지 여부 입니다!
같은 메모리 공간을 공유하면 스레드(Thread)
다른 메모리 공간을 사용하면 프로세스(Process)
위의 구조를 함께 보시죠~
실제 메모리 주소 공간과 프로세스1, 프로세스2의 메모리 주소 공간이 다릅니다.
프로그램은 반드시 물리적인 메모리만을 사용하지 않는데요.
멀티 프로세스 시스템에서는 어플리케이션 프로그램이 사용하고 있는 주소와 실제 메모리 상의 주소가 다릅니다.
왜냐하면 각각의 프로세스가 다른 프로세스의 동작 내용에 상관없이 메모리 값을 읽거나 쓸 수 있도록 하기 위함입니다.
구체적으로 설명하자면,
위 그림의 프로세스 1의 0xC000번지와 프로세스 2의 0xC000번지는 실제 메모리 상에서는 다른 번지에 위치하고 있는데요.
프로세스 1이 0xC000번지의 값을 변경해도 프로세스 2의 0xC000번지의 값은 바뀌지 않습니다.
이 처럼 주소와 메모리상의 주소가 다른 것을 가상 기억이라고 해요.
가상 기억을 사용하면 프로그램이 정상적이지 않아도 다른 프로세스의 메모리 값을 바꾸는 일은 없어요.
가상 기억을 사용하는 시스템에서는 하드 디스크와 같은 보조 기억장치를 사용해서 물리적 메모리를 크게 보이게도 합니다.
반면 멀티 스레드 같은 경우에는 위 그림과 다르게 주소 공간을 공유하는데요.
즉, 1개의 스레드가 이상동작을 해서 메모리의 내용을 바꿔 버리면 주소 공간을 공유하고 있는
모든 스레드에 영향을 미칩니다.
이런 이유로 멀티 프로세스가 멀티 스레드보다 견고하다고 할 수 있습니다.
1개의 프로세스가 이상 동작을 해서 메모리의 내용이 바뀌었다고 하더라도 해당 프로세스만 이상 종료할 뿐
다른 프로세스나 오퍼레이팅 시스템에 아무런 영향을 미치지 않기 때문입니다.
그렇다고 해서 멀티 스레드는 안좋다라고 할 순 없는데요.
멀티 스레드는 메모리를 공유하고 있기 때문에 어떤 처리를 할 때에는 각 스레드의 연계가 수월합니다.
이상으로 프로세스와 스레드에 대한 설명을 마치겠습니다~
[참고] 도서, C를 배우기 전에 반드시 알아야 할 것들 (루비페이퍼 저 무라야마 유키오 옮김 이해란)
'IT > C' 카테고리의 다른 글
[C] 변수를 초기화해줘야 하는 이유 (0) | 2018.06.04 |
---|