OS

Process & Thread

승무_ 2023. 6. 29. 18:11

Process를 간단히 설명해 주세요

프로세스는 실행 중인 프로그램이란 뜻으로 디스크로부터 메모리에 적재되어 CPU 의 할당을 받을 수 있는 것을 말합니다.


[꼬꼬무1] process의 memory영역(code, data, stack, heap)에 대해서 설명해 주세요

프로세스의 메모리 영역은 전역변수, 정적 변수를 저장하는 데이터 영역, 프로그램 코드가 저장되는 코드 영역, 지역변수와 함수 호출에 필요한 정보를 저장하는 스택영역, 런타임 때 동적으로 할당되는 힙 영역으로 나누어져 있습니다.

 

 

  • 초기화 하지 않은 변수들은 어디에 저장될까요?
더보기

초기화된 전역변수는 DATA 영역에 초기화 안된 전역변수는 BSS 영역에 저장됩니다.

  • Stack과 Heap 공간에 대해, 접근 속도가 더 빠른 공간은 어디일까요?
더보기

스택은 스택 포인터를 이용하여 접근이 빠르고, 메모리의 연속적인 영역을 사용하여 캐시 지역성이 높아 접근 속도가 더 빠릅니다. 반면에 힙은 동적으로 할당 및 해제되며 불연속적인 메모리 영역을 사용하여 접근 속도가 스택보다는 상대적으로 느릴 수 있습니다.

  • 다음과 같이 공간을 분할하는 이유가 있을까요?
더보기

최대한 데이터를 공유하여 메모리 사용량을 줄이기 위함입니다. Code는 같은 프로그램일 경우 모두 같은 내용이기 때문에 같은 프로그램을 여러개 띄울때 Code영역을 공유할 수 있습니다.

  • 스레드의 주소공간은 어떻게 구성되어 있을까요?
더보기

다른 스레드와 힙, 데이터, 코드 영역을 공유하고 스택 영역만 독립적으로 할당 받습니다.


Multi process에 대해서 설명해 주세요 ⭐⭐⭐⭐

멀티 프로세스란 2개 이상의 프로세스가 동시에 실행되는 것을 뜻하며, cpu core가 1개일 경우 concurrent하게 cpu core가 여러개인 경우 parallel하게 수행하는 것을 의미한다.


[꼬꼬무1] process의 context는 무엇인가요?

context란 프로세스의 상태를 나타내는 정보의 집합이다. 프로세스의 실행 위치, 레지스터 값, 메모리 할당 정보 등이 포함되며 프로세스가 중단되고 다시 실행될 때, context정보를 불러와 다시 상태를 복원하는데 사용합니다.


[꼬꼬무2] PCB(Process Control Block)에 저장되는 것들은 무엇이 있나요?

PCB는 운영체제가 프로세스에 대해 필요한 정보를 모아놓은 자료구조입니다. PCB에는 process id, process state, 페이지 테이블 정보, 프로그램 카운터 등이 들어 있어 컨텍스트 스위칭이나 효율적인 메모리 관리를 돕습니다.


[꼬꼬무3] Context switch에 대해서 설명해 주세요

멀티프로세스 환경에서 인터럽트나 우선순위가 더 높은 프로세스의 ready queue 진입으로 cpu할당을 바꿔야 되는 경우가 있는데, 이 때 현재 실행 중인 프로세스의 상태 또는 레지스터 값을 저장하고 이 후에 다시 cpu를 할당 받을 때, 이 정보를 불러와 아까 실행중이던 내용을 이어서 수행할 수 있도록 하는 것입니다.


[꼬꼬무4] process의 state에는 어떤 것들이 있나요?

ready- ready queue에 들어가 cpu할당 받기를 기다리는 상태

running- cpu의 할당을 받아 실행중인 상태

waiting- i/o나 특정 작업이 끝나기를 기다리는 상태 

 

Multi thread에 대해서 설명해 주세요 ⭐⭐

하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 하는것


[꼬꼬무1] thread는 왜 독립적인 stack memory 영역이 필요한가요?

스택은 프로그램에서 함수 호출 시 사용되는 메모리 영역으로, 스레드 간에 서로 영향을 끼치지 않고 안전하게 함수를 호출하기 위해 독립적으로 할당 받아야 합니다.


[꼬꼬무2] process와 thread를 비교설명 해주세요

프로세스는 실행 중인 프로그램을 말하며, 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있습니다.

반면에 쓰레드는 프로세스 내에서 Stack과 레지스터만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)을 공유변수를 통해 공유하기 때문에 추가적인 IPC가 필요하지 않습니다.

 

  • 그렇다면, 스레드는 PCB를 갖고 있을까요?
더보기

스레드는 프로세스가 아니기 때문에 PCB를 가지고 있지 않다. 대신 TCB를 가지며 스레드의 상태, 우선순위, 레지스터 값, 스택 정보 등을 저장한다.

  • 자식 프로세스가 상태를 알리지 않고 죽거나, 부모 프로세스가 먼저 죽게 되면 어떻게 처리하나요?
더보기

좀비 프로세스

종료된 자식 프로세스를 부모가 wait를 통해 거두어주지 않아 종료되었음에도 계속 메모리에 남아 있는 프로세스

고아 프로세스는

자식 프로세스 보다 부모 프로세스가 먼저 종료되어 고립된 프로세스

  • 리눅스에서, 데몬프로세스에 대해 설명해 주세요.
더보기

데몬 프로세스란 운영체제에서 부팅시 자동으로 켜져 백그라운드에서 계속 실행되는 프로세스를 의미한다.


Multi process와 Multi thread를 비교설명해 주세요 ⭐⭐

멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만 멀티 쓰레드보다 많은 메모리 공간이 필요하고 context switching 비용이 크며 다른 프로세스와 통신할 때 IPC비용이 발생합니다.

반면에 멀티 쓰레드는 code, data 영역 등을 공유하기 때문에 멀티 프로세스보다 적은 메모리 공간을 차지하고 context switch 비용이 낮다는 장점이 있습니다. 그러나 하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받고 공유변수를 사용하기 때문에 동기화 문제도 있습니다.


[꼬꼬무1] multi thread가 multi process보다 좋은 점은 무엇인가요?

멀티 프로세스 환경에서는 프로세스 간에 전환할 때, 전체 프로세스의 상태와 메모리를 저장하고 복원해야 합니다. 하지만 멀티 스레드에서는 스레드 간의 전환 시에는 스택과 레지스터 값만 저장하고 복원하면 되므로, 작은 단위의 컨텍스트 스위칭이 이루어집니다. 이는 전체적인 비용을 줄여줍니다.


multi process 환경에서 process간에 데이터를 어떻게 주고 받을 까요? ⭐⭐

Inter-process Communication이라는 기법을 통해 프로세스간에 데이터를 주고 받습니다.


[꼬꼬무1] IPC의 예시를 들어주실 수 있나요?

대표적으로 공유 메모리와 메시지 전달이 있습니다

 

공유 메모리는 프로세스나 스레드 사이에서 데이터를 공유하기 위해 동일한 메모리 영역을 사용하는 방식입니다. 데이터를 복사하거나 전달할 필요가 없어 속도가 빠르다는 특징이 있습니다.

 

메세지 전달은 커널 메모리 영역에 메시지 전달을 위한 채널을 만들어서 협력하는 프로세스들 사이에 메시지 형태로 정보를 Send/Receive 하는 방법이다.

 


[꼬꼬무2] 공유 메모리와 메시지 전달 모델의 장단점을 설명해 주세요

공유 메모리의 장점으로는 공유 메모리 영역을 지정할 때 빼고는 system call을 호출하지 않기 때문에 오버헤드가 작다는 점이고 공유 메모리의 단점은 데이터를 공유하기 때문에 동기화 처리가 필요하다는 것입니다.

 

메시지 전달 모델의 장점은 커널이 메시지 전달을 관리하기 때문에 따로 동기화 처리를 하지 않아도 되는 것이고 그러나 단점은 보내고 받을때마다 system call을 호출하기 때문에 오버헤드가 크다는 것입니다.

  • system call은 왜 오버헤드가 클까요?
더보기

시스템 콜을 호출하면 사용자 모드에서 커널모드로 전환이 되는데, 이 때 context switch가 발생해 오버헤드가 크다.


Multi process/thread 환경에서 동기화 문제를 어떻게 해결하나요? ⭐

mutex와 semaphore기법을 통해 동기화 문제를 해결합니다.


[꼬꼬무1] mutex와 semaphore 기법을 비교 설명해 주세요

둘 다 공유자원에 여러 개의 프로세스나 스레드가 동시에 접근하는 것을 막는 역할을 합니다. 그 중에서 뮤텍스는 key를 기반으로한 상호배제 기법이며 이 키를 소유한 프로세스만 공유자원에 접근할 수 있는 특징이 있습니다. 세마포어는 세마포어 변수를 기반으로 한 상호배제 기법이며 세마포어 변수의 개수 만큼 공유자원에 동시에 접근할 수 있다는 특징이 있습니다.

 

  • 이진 세마포어와 뮤텍스의 차이에 대해 설명해 주세요
더보기

이진 세마포어 같은 경우 특정 스레드가 세마포어를 잠그면, 그 세마포어를 해제할 수 있는 다른 스레드가 어떤 스레드든 될 수 있습니다. 즉, 소유자 개념이 없습니다. 그러나 뮤텍스 같은 경우 특정 스레드가 뮤텍스를 잠그면, 그 뮤텍스를 해제할 수 있는 스레드는 오직 그 스레드 자신뿐입니다. 뮤텍스는 소유자 개념을 가지고 있으며, 해당 뮤텍스를 잠금 해제할 수 있는 스레드는 뮤텍스를 잠근 스레드와 동일해야 합니다.

 

교착상태(Deadlock)에 대해서 간단히 설명해 주세요

둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황을 말합니다.


[꼬꼬무1] deadlock은 언제 발생하게 되나요?

데드락이 발생하기 위해 4가지 조건이 필요한데

첫번째로 프로세스가 작업을 마친 후 자원을 자발적으로 반환할 때까지 기다려야합니다.

두번째로 공유자원을 둘 이상의 프로세스가 접근하면 안됩니다.

세번째로 프로세스는 항상 자원을 소유한 상태로 다른 자원을 요청해야 합니다.

네번째로 프로세스의 자원 점유 및 자원 요청 관계가 원형을 이루어야 합니다

 

  • 그렇다면 3가지만 충족하면 왜 Deadlock 이 발생하지 않을까요?
더보기

1개라도 충족하지 않으면 Deadlock에서 빠져 나올 수 있는 조건이 되기 때문입니다.

  • 어떤 방식으로 예방할 수 있을까요?
더보기

교착상태 예방 방법은 교착상태가 애초에 일어나지 않도록 방지하는 방법으로 교착상태의 발생조건 4가지 중 하나를 부정함으로써 교착상태를 예방할 수 있습니다.

  • 왜 현대 OS는 Deadlock을 처리하지 않을까요?
더보기

현대 운영체제는 데드락을 완전히 처리하기보다는 데드락의 발생을 예방하고 회피하는 방향으로 설계되었습니다. 이는 데드락을 처리하는 것이 복잡하고 비용이 많이 들기 때문입니다.