Open kgh2120 opened 3 months ago
먼저, 프로그램은 특정 작업을 수행하기위해 작성 된 명령어의 집합입니다. 해당 프로그램을 실행시키기위해서는 메모리에 로드해야 하는데요, 바로 프로세스가 프로그램이 메모리에 로드된 후 운영체제에의해 관리되는 실행단위입니다. 이후 해당 프로세스 자체도, 여러개의 스레드를 통해 병렬 실행될 수 있습니다. 스레드 또한 프로세스내에서 실행되는 가장 작은 실행단위 입니다.
1. PCB는 Process Control Block으로, 해당 프로세스의 현재 정보를 가지고 있는 블록입니다. 2. 스레드는 PCB와 다르게 Thread Controler Block을 가지고 있습니다. TCB에는 PCB의 포인터를 제외하면 모두 스레드의 정보를 가지고 있습니다. 3. 리눅스 환경에서는 실행 중인 프로세스에서 fork() 함수를 호출함으로써 부모 프로세스를 복제한 후, exec 함수를 호출해 메모리 영역을 새로운 프로그램을 대체함으로써 프로세스가 생성됩니다. 스레드의 경우, 프로세스에서 pthread_create 함수를 호출해 스레드를 생성합니다. 4. 자식 프로세스가 상태를 알리지 않고 죽을 경우, 해당 프로세스는 좀비 프로세스가 됩니다. 부모 프로세스가 waitpid와 같은 함수 호출을 이용해 상태를 수집하지 않을 경우, 계속해서 좀비 프로세스로 남아있게 됩니다. 부모 프로세스가 먼저 죽을 경우 자식프로세스는 고아 프로세스가 되는데, 고아 프로세스가 될 경우 커널이 해당 프로세스들의 PPID를 1로 지정해 최상위 프로세스로 부모를 다시 지정함으로써 해결합니다. 5. 사용자가 직접 제어하지 않고, 백그라운드에서 실행되며 여러 작업을 수행하는 프로그램입니다. 사용자의 요청에 따라 대응하는 리스너와 같은 역할을 수행합니다. 6. 리눅스 버전에 따라 init이나 systemd라는 프로세스입니다. PID가 1이며, 모든 프로세스들의 부모 역할로 다양한 시스템 초기화 작업을 맡고 있습니다.
프로세스란 디스크에서 메모리로 넘어온 작업들을 처리하기 위해 동작하는 과정을 의미합니다.
1. 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요. 프로그램은 OS 내 CPU가 실행시키는 최상단의 실제 동작 기능입니다. 프로세스는 이를 실행하기 위해 CPU 내 작은 실행 단위이며 하나의 프로그램을 위해 여러 프로세스가 동작될 수 있습니다. 마지막으로 스레드는 프로세스 내에 실행되는 작은 실행 단위로 하나의 프로세스 내에 여러 스레드가 동작이 가능합니다. 2. PCB가 무엇인가요? process control block의 약자로 OS 내에 process의 상태를 관리하는 저장 공간입니다. 3. 그렇다면, 스레드는 PCB를 갖고 있을까요? 스레드는 PCB가 아닌 TCB를 가지고 있습니다. TCB는 Thread Control block으로 Thread의 상태를 관리하는 저장공간을 별도로 가지고 있습니다. 4. 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요? 프로세스는 Fork(), 쓰레드는 Pthread_create()를 이용해서 생성합니다. fork는 부모 프로세스의 정보를 복제해서 새로운 프로세스를 만드는 것이고 Pthread_create()는 프로세스 내에 새로운 스레드를 생성하는 것입니다. 5. 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요? 자식 프로세스가 상태를 알리지 않아도 OS가 자식 프로세스의 사망 시 해당 정보를 PCB 내에 저장해서 관리합니다. 이 때 부모 프로세스가 해당 사실을 처리하지 않는다면 부모 프로세스는 좀비 프로세스 상태가 되고 부모 프로세스가 해당 정보를 처리해서 PCB를 업데이트 한다면 좀비 프로세스 상태에서 벗어나게 됩니다. 반대로 부모 프로세스가 자식 프로세스보다 먼저 죽는 경우 자식 프로세스는 고아 프로세스가 됩니다. 해당 상황을 해결하기 위해 Init 프로세스가 존재하는데 Init 프로세스는 자식 프로세스의 정보를 가져와 대신 관리하게 됩니다. 6. 리눅스에서, 데몬프로세스에 대해 설명해 주세요. 데몬 프로세스는 부모 프로세스에서 Fork() 된 이후 부모 프로세스가 곧바로 exit을 하면서 독립적인 프로세스로 저장되게 되는 상태로 background에서 동작하는 프로세스입니다. 해당 프로세스가 데몬 프로세스인 것을 알기 위해 d를 붙여서 알게 하고 있습니다. 7. 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요. 루트 노드에 해당하는 process는 PID 1번을 가진 Init 프로세스입니다. Init 프로세스는 고아가 된 프로세스들의 부모 프로세스가 되어 관리를 진행하고 시스템 부팅 시와 종료 시점에 필요한 작업들을 수행합니다.
메모리에서 실행되는 적재되어 실행되는 프로그램을 말합니다. cpu 스케줄링에 의해 실행됩니다.
- 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요. 프로그램은 프로그램이 시작되기전 저장소에 있는 실행가능한 정적 파일입니다. 프로그램을 실행시켜 메모리에 적재하면 프로세스가 됩니다. 쓰레드는 프로세스의 최소 실행단위를 말합니다. - PCB가 무엇인가요? Process Control Block의 약자로, 프로세스에 대한 정보를 가지고 있는 곳 입니다. context switching시에 현재 실행정보를 저장하고 이후 cpu를 점유하면 pcb에 적힌 정보를 바탕으로 프로세스를 진행시킵니다. - 그렇다면, 스레드는 PCB를 갖고 있을까요? 쓰레드는 pcb가 아닌 tcb를 가지고 있습니다. - 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요? 프로세스의 경우 fork() 함수를 통해서 프로세스를 생성합니다. 이후 exec을 통해 프로그램을 실행 시킬 수 있습니다. 스레드의 경우 pthread_create()함수를 통해 생성합니다. - 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요? 좀비프로세스가 됩니다. 이를 해결하려면 wait() 나 waitpid() 함수를 이용하여 처리해야 합니다. - 리눅스에서, 데몬프로세스에 대해 설명해 주세요. 백그라운드에서 실행되는 프로세스중 사용자와 상호작용없이 자기 할일만 하는 프로세스를 데몬프로세스라고합니다. - 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요. init프로세스입니다. 시스템 부팅시에 가장 먼저 생성되는 프로세스이고, 시스템 부팅 시에 필요한 서비스와 데몬 프로세스들을 초기화하고 관리하는 역할을 합니다.
문제
예상 꼬리 질문
- 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요. - PCB가 무엇인가요? - 그렇다면, 스레드는 PCB를 갖고 있을까요? - 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요? - 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요? - 리눅스에서, 데몬프로세스에 대해 설명해 주세요. - 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요.들어가야 할 키워드 정리