ssausand-sunny / cs-study

면접.. 붙으려면 CS 공부 해야겠지?
0 stars 0 forks source link

프로세스가 무엇인가요? #31

Open kgh2120 opened 3 months ago

kgh2120 commented 3 months ago

문제

예상 꼬리 질문 - 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요. - PCB가 무엇인가요? - 그렇다면, 스레드는 PCB를 갖고 있을까요? - 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요? - 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요? - 리눅스에서, 데몬프로세스에 대해 설명해 주세요. - 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요.

들어가야 할 키워드 정리

kjy0349 commented 2 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이며, 모든 프로세스들의 부모 역할로 다양한 시스템 초기화 작업을 맡고 있습니다.

Hunnibs commented 2 months ago
질문 답변

프로세스란 디스크에서 메모리로 넘어온 작업들을 처리하기 위해 동작하는 과정을 의미합니다.

꼬리 질문

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 프로세스는 고아가 된 프로세스들의 부모 프로세스가 되어 관리를 진행하고 시스템 부팅 시와 종료 시점에 필요한 작업들을 수행합니다.

kgh2120 commented 2 months ago
예상 답변 프로세스란 메모리에 적재되어 실행 가능한 상태의 프로그램을 말합니다. 프로세스는 CPU 스케줄링에 따라서 일정 시간동안 CPU를 사용하고, Context Switching 통해 다른 프로세스에게 CPU 점유를 넘깁니다.
예상 꼬리 질문 답변 - 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요. 프로그램은 개발자가 작성한, 명령어의 집합체로 디스크에 저장된 정적 상태입니다. 프로세스는 프로그램이 메모리에 적재되어 실행 가능한 상태를 말하며, CPU 점유를 받아 실행됩니다. 쓰레드란 프로세스 내에서 실행되는 독립적인 실행 단위로, 여러 쓰레드를 통해 프로세스는 동시에 여러 작업을 수행할 수 있습니다. - PCB가 무엇인가요? PCB란 Process Control Block의 약자로, 프로세스에 대한 정보를 저장한 자료구조입니다. 프로세스 생성 시에 OS의 커널 공간에 저장되고, 프로세스 종료 시에 삭제됩니다. 저장된 정보는 프로세스 ID, 프로세스 상태, 메모리 관리 정보, PC 레지스터, 레지스터 정보가 있습니다. Context Switching 발생 시 현재 프로세스의 정보를 PCB에 저장하고, 다음 실행할 프로세스의 정보를 PCB로 부터 불러옵니다. - 그렇다면, 스레드는 PCB를 갖고 있을까요? 스레드는 PCB를 가지고 있지 않습니다. 그 대신 쓰레드의 정보를 저장하고 있는 Thread Control Block를 가지고 있습니다. TCB에는 스레드 ID, PCB의 주소, 스택 주소 값, PC 레지스터 값, 레지스터 값 등이 저장됩니다. - 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요? 리눅스에서 프로세스는 fork() 메서드를 통해 부모 프로세스를 복사하거나, exec() 메서드를 통해 다른 프로세스로 덮어 써서 생성하는 방법이 있습니다. 쓰레드는 pthread_create() 메서드를 통해 생성할 수 있습니다. - 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요? 부모 프로세스가 먼저 죽는 상황을 고아 프로세스 상황이라고 합니다. 부모가 죽게 되면, init 프로세스가 고아 프로세스의 PPID를 1로 만들어줍니다. 자식이 상태를 알리지 않고 죽는 상황은 좀비 프로세스라고 합니다. 이 때, 프로세스의 메모리는 해제가 되지만 부모가 상태를 읽을 수 있도록 프로세스 아이디와 상태 정보는 남아있습니다. 부모 프로세스가 wait() 메서드를 좀비 프로세스의 정보를 획득하고 삭제할 수 있습니다. - 리눅스에서, 데몬프로세스에 대해 설명해 주세요. 데몬 프로세스는 백그라운드에서 실행되는 프로세스 중 부모 프로세스가 주로 init인 프로세스를 말합니다. OS가 부팅될 때 자동으로 실행되며, 주로 시스템 작업인 웹서버나 sshd등의 작업을 수행합니다. 백그라운드 프로세스와의 차이로는 백그라운드의 경우 부모 프로세스가 종료될 때 HUP 명령에 의해서 함께 종료될 수 있지만, 데몬 프로세스는 그렇지 않습니다. - 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요. 루트에 위치한 프로세스는 init 프로세스입니다. init 프로세스는 커널에 의해서 시작이 되며, 모든 다른 프로세스는 init의 직간접적인 자식입니다. 현대 리눅스에서는 init을 확장한 systemd가 루트 노드에 위치합니다.
Leeminw commented 2 months ago
예상답변

메모리에서 실행되는 적재되어 실행되는 프로그램을 말합니다. cpu 스케줄링에 의해 실행됩니다.

예상 꼬리 답변

- 프로그램과 프로세스, 스레드의 차이에 대해 설명해 주세요. 프로그램은 프로그램이 시작되기전 저장소에 있는 실행가능한 정적 파일입니다. 프로그램을 실행시켜 메모리에 적재하면 프로세스가 됩니다. 쓰레드는 프로세스의 최소 실행단위를 말합니다. - PCB가 무엇인가요? Process Control Block의 약자로, 프로세스에 대한 정보를 가지고 있는 곳 입니다. context switching시에 현재 실행정보를 저장하고 이후 cpu를 점유하면 pcb에 적힌 정보를 바탕으로 프로세스를 진행시킵니다. - 그렇다면, 스레드는 PCB를 갖고 있을까요? 쓰레드는 pcb가 아닌 tcb를 가지고 있습니다. - 리눅스에서, 프로세스와 스레드는 각각 어떻게 생성될까요? 프로세스의 경우 fork() 함수를 통해서 프로세스를 생성합니다. 이후 exec을 통해 프로그램을 실행 시킬 수 있습니다. 스레드의 경우 pthread_create()함수를 통해 생성합니다. - 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요? 좀비프로세스가 됩니다. 이를 해결하려면 wait() 나 waitpid() 함수를 이용하여 처리해야 합니다. - 리눅스에서, 데몬프로세스에 대해 설명해 주세요. 백그라운드에서 실행되는 프로세스중 사용자와 상호작용없이 자기 할일만 하는 프로세스를 데몬프로세스라고합니다. - 리눅스는 프로세스가 일종의 트리를 형성하고 있습니다. 이 트리의 루트 노드에 위치하는 프로세스에 대해 설명해 주세요. init프로세스입니다. 시스템 부팅시에 가장 먼저 생성되는 프로세스이고, 시스템 부팅 시에 필요한 서비스와 데몬 프로세스들을 초기화하고 관리하는 역할을 합니다.