매주 진행하는 면접스터디에서 아래의 질문들에 대한 정리를 모은 글입니다.
Interview_Question_for_Beginner/OS
프로세스(PROCESS) , 스레드(THREAD) #2
프로세스를 이용하여 동시에 처리하던 일을 스레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어든다. 스레드 간의 통신이 필요한 경우에도 별도의 자원을 이용하는 것이 아니라 전역 변수의 공간 또는 동적으로 할당된 공간인 Heap 영역을 이용한다. 그렇기 때문에 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다. 심지어 스레드의 문맥 교환(Context Switch)은 프로세스와 달리 캐시 메모리를 비울 필요가 없기에 더 빠르다. 이러한 장점때문에 여러 프로세스로 할 수 있는 작업들을 하나의 프로세스에서 여러 스레드로 나눠 수행한다.
컴파일 타임이란 소스코드가 기계어코드로 변환되어 실행 가능한 프로그램이 되는 과정을 말한다.
런타임이란 프로그램이 실행되는 때를 말한다.
스레드는 각자 고유한 스택 영역을 가지고 있다. 이외의 코드, 힙 영역은 공유한다.
멀티 프로세싱에서는 프로세스 간 공유하는 자원이 없기 때문에 동일한 자원에 동시에 접근할 일이 없다. 반면 멀티 스레딩일때는 서로 다른 스레드가 데이터와 힙 영역을 공유하고 있다. 어떤 스레드가 다른 스레드에서 사용중인 자원에 접근하는 경우가 발생한다.
그렇기에 멀티 스레딩에서는 동기화 작업이 필요하다. 이 작업을 통해 작업 처리 순서를 컨트롤하고 공유 자원에 대한 접근을 컨트롤한다. 하지만 이로 인해 병목현상이 발생하여 성능이 저하될 가능성이 높다. 그러므로 과도한 락으로 인한 병목현상을 줄여야 한다.
전체 시스템의 성능이나 용량이 하나의 구성 요소로 인헤 제한을 받는 현상을 의미한다. 말 그대로 병의 목이라는 의미이다. 물이 병 밖으로 빠져나갈 때 병의 몸통보다 병의 목이 좁아서 물이 상대적으로 천천히 쏟아지는 것에 비유한 현상이다.
데드락이란 두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어서 결과적으로 아무것도 완료되지 못한 상태를 가리킨다.