1. 프로세스 구조에 대해 가능한 상세하게 설명하시오.
프로세스는 일반적으로 코드, 데이터, 힙, 스택 영역으로 구성되어 있습니다.
코드 영역은 프로그램 코드가 저장되고,
데이터 영역은 전역 변수등이 저장됩니다.
힙 영역은 동적으로 할당된 메모리를 위한 공간이고
스택 영역은 함수 실행을 위한, 지역 변수등이 저장됩니다.
2. 프로세스간에 어떤 기술을 사용해서 통신하는지, 왜 해당기술을 사용해서 통신해야 하는지를 쓰레드와 비교해서 설명하시오.
프로세스간에는 주소공간이 분리되어 있습니다. 그러므로 프로세스간 통신을 위해서는 IPC라고 하는 별도의 기술을 사용해야 합니다.
쓰레드의 경우는 하나의 프로세스 주소공간 안에서 코드/데이터/힙 공간을 공유하기 때문에, 별도의 통신 기술이 필요하지 않습니다.
3. 프로세스와 쓰레드의 차이점에 대해 설명하시오.
프로세스는 운영체제(OS)로부터 자원을 할당받아 실행하고, 쓰레드는 프로세스로부터 자원을 할당받아 실행합니다. 하나의 프로세스 안에서 쓰레드는 프로세스 코드/데이터/힙 공간을 공유하지만, 해당 쓰레드만의 스택을 가지고 동작합니다. 그래서 하나의 프로세스 안에서 생성된 쓰레드간에는 별도 기술을 쓰지 않고도 데이터 공유가 가능합니다.
4. 쓰레드 동기화란 무엇이며 왜 사용해야 하는지 사례를 들어 설명하시오.
쓰레드간 공유한 데이터를 읽고 쓸 경우, 쓰레드간 실행 순서에 따라 공유한 데이터를 읽고 쓰는 작업이 누락될 수 있으며, 이로 인해 쓰레드의 비정상적인 동작을 야기할 수 있습니다. 쓰레드 동기화란 이러한 문제를 막기 위해 여러 쓰레드가 동시에 공유한 데이터를 읽고 쓰지 못하도록 하는 기술입니다.
5. 멀티 태스킹에 대해 간결하게 설명하시오.
단일 CPU에서, 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 스케쥴링 기법입니다.