1. 프로세스와 스레드의 차이를 설명해보세요.
Process: 실행하고 있는 프로그램 (=task)
- One flow of control +resources
- CPU관점: 스케줄링 해야하는 객체
- 각 프로세스는 자신의 메모리(address space)가 존재한다.
Thread: Process내에서 실행되는 흐름의 단위.
- flow of control
- 한 프로세스 안에 여러 thread가 존재할 수 있어서 task를 병렬적으로 처리할 수 있다.
- thread끼리 자원(code, data, heap영역)을 공유하여 좀 더 효율적으로 소통할 수 있다.
- context switch 과정에서 캐시메모리를 지우지 않아도 되어 process보다 더 빨리 수행 가능하다.
- 하지만 자원을 공유하기 때문에 동시성에 대한 이슈를 잘 다뤄야 한다. (ex 상호배제, 동기화 등)

Process Structure

- Text: program codes
- Data: 전역변수
- Stack: 지역변수, 파라미터...
- heap: 동적생성된 것들
Program vs Process
- program: 정적인 객체, disk에 저장된 instruction을 포함하는 파일. (실행파일 or binary)
- process: 동적인 객체, CPU/Memory/I/Os 에서 동작중임.
Process API
- fork() : create new process
- wait() : block a calling process until one of its children finishes
- exec() : load and overwrite code and static data, re-initialize stack&heap, execute it
- kill, getpid, signal, ,...
2. 컨텍스트 스위칭에 대해 설명해보세요.
* Context : process의 정보, 나중에 프로세스가 재 스케줄링되면 필요하다.
Context Switching : 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법입니다.
- 인터럽트가 발생하면 현재 프로세스의 상태(CPU registers)를 PCB(in Memory)에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작한다.
- 이 때, CPU는 아무런 일을 하지 않기 때문에, 잦은 컨테스트 스위칭은 성능저하를 일으킬 수 있다.
- 스레드는 서로 자원을 공유하고, TCB를 이용하여 thread level에서 컨테스트 스위치가 일어나서 저장및 로딩이 process에 비해 더 빨라 컨테스트 스위칭이 보다 빠르게 가능하다.
3. 동기와 비동기의 차이(블로킹, 넌블로킹) / 장단점에 대해 설명해보세요.

- 동기/비동기는 두 개 이상의 무엇인가가 시간을 맞춘다/안맞춘다로 구분할 수 있습니다. (callback함수)
- 동기 방식은 메서드 리턴과 결과를 전달받는 시간이 일치하는 명령 실행 방식입니다. task가 실행되면 값이 반환되기 전까지는 blocking 되어 있습니다.
- 비동기 방식은 여러 개의 처리가 함께 실행되는 방식으로, 메서드가 실행되면 blocking되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task를 위임하고 바로 다음코드를 실행하기 때문에 기대되는 값이 바로 반환되지 않습니다. 동기 방식에 비해 단위시간 당 많은 작업을 처리할 수 있습니다. 단, CPU나 메모리를 많이 사용하는 작업을 비동기로 처리하게 되면 과부하가 걸릴 수 있습니다. 프로그램의 복잡도도 증가하게 됩니다.
- 프로세스 동기화: 하나의 자원을 한 순간 마다 한 프로세스가 접근하게 하는 기법
- 블로킹/논블로킹은 동기/비동기와는 다른 관점으로, 내가 직접 제어할 수 없는 대상(IO/멀티스레드)을 상대하는 방법에 대한 분류입니다.
- 블로킹 방식은 대상의 작업이 끝날 때 까지 제어권을 대상이 가지고 있는 것을 의미합니다. 반면에 논블로킹은 대상의 작업 완료여부와 상관없이 새로운 작업을 수행합니다.
- 동기 논블로킹은 계속해서 polling을 수행하기 때문에 컨텍스트 스위칭이 지속적으로 발생해 지연이 발생합니다.