본문 바로가기
컴퓨터 지식/IT 기술면접 대비

[IT 면접대비] 개발자 기술면접 대비 🖥️/ - 2️⃣ 운영체제 (1)

by 서상혁 2021. 3. 1.

프로세스와 쓰레드에 대해 설명해주세요.

프로세스는 프로그램이 실행되서 메모리에 적재되어있고, CPU 의 할당을 받을 수 있는 상태를 의미합니다. 운영체제로 부터 Code, Data, Stack, Heap 을 할당받은 상태입니다. 쓰레드는 이 프로세스의 실행 단위라고 할 수 있으며, 프로세스 내부 자원을 공유하면서, 하나의 프로세스를 좀 더 효율적이게 실행시키는 멀티쓰레딩이 가능하게 됩니다. 구체적으로 말씀드리자면, 각각의 쓰레드는 프로세스의 Code, Data, Heap 은 공유하지만 고유의 Thread ID, Stack, 레지스터, PC 를 가지게 되고 독립적인 작업을 수행하게 됩니다.

- 당연히 잘 알고 있다고 생각했는데, 막상 면접에서 이 질문이 들어오니 체계적으로 설명을 못하더라구요... 방심했던거죠😥 그만큼 기본이면서도 매우매우매우 중요한 부분이라고 생각합니다. 

 

 

 

 

PCB가 무엇인가요?

Process Control Block 의 약자로, 프로세스에 대한 정보를 저장하고 있는 자료구조 단위 입니다. pid 나 메모리 정보, 프로세스 상태, CPU 스케쥴링 정보 등을 담고 있습니다. CPU 스케쥴러가 프로세스 전환을 할 떄, 프로세스 정보는 PCB에 모두 기록되어서 전환이 됩니다.

- PCB는 커널 스택과 같은 보호된 메모리 영역에 저장된다.

출처 : https://www.notesjam.com/2017/12/process-control-block.html

Context Switch

 

- CPU 스케쥴러가 프로세스를 전환하는 것을 의미한다. CPU는 하나의 프로세스만 실행하는 것은 비효율적이므로, 여러 Task (프로세스) 를 빠르게 번갈아가면서 실행하는데, 이 때 레지스터에 저장된 PCB 를 통해 Task 의 정보를 switch 한다. 이것을 Context Switch라고 부른다.

 

 

 

 

멀티프로세싱과 멀티쓰레딩의 차이는 무엇인가요?

멀티프로세싱은 말 그대로 여러 프로세스를 동시에 실행하는 것, 멀티쓰레딩은 여러 쓰레드를 병렬적으로 실행하는 것을 의미합니다. 멀티 프로세싱은 일반적으로 하나의 프로그램에 대해서 부모 프로세스로 부터 나온 여러 자식프로세스로 프로그램을 실행하는 것을 의미하고, 멀티쓰레딩은 하나의 프로세스에 대해 여러 쓰레드가 자원을 공유하면서 실행하게 되는 것을 말합니다. 멀티쓰레딩은 힙과 data를 공유하면서 진행되기 때문에 리소스적인 측면에서 멀티프로세싱보다 더 효율적인 경우가 많습니다. 

 

구체적인 차이

 

- 멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제를 안고 있다. 반면 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재한다. 이 두 가지는 동시에 여러 작업을 수행한다는 점에서 같지만 적용해야 하는 시스템에 따라 적합/부적합이 구분된다. 따라서 대상 시스템의 특징에 따라 적합한 동작 방식을 선택하고 적용해야 한다.

 

 

 

Round Robin 스케쥴링에 대해 설명해주세요.

CPU 스케쥴링 기법중에 하나로, 타임퀀텀을 정해서 그 인터벌동안 하나의 프로세스를 실행하고, 타임 퀀텀이 지나면 프로세스가 다음 프로세스에게 선점 당하고 ready queue로 이동하는 방식입니다. 긴 프로세스가 있을 때, 다른 프로세스들이 불필요하게 길게 기다리게 되는 현상을 방지할 수 있고, 결과적으로 response time 이 빨라집니다.

 

장점 및 Keyword

  • 시분할 시스템에 적절
  • 응답시간 감소
  • 선점형 스케쥴링

주의할 점

  • 설정한 time quantum이 너무 커지면 FCFS와 같아진다.
  • 너무 작아지면 스케줄링 알고리즘의 목적에는 이상적이지만 잦은 context switch 로 overhead 가 발생한다.

 

 

CPU Bound 와 I/O Bound 란 무엇인가요?

CPU Bound 프로세스는 사용자 입력보다 계산과 같은 작업들이 주가 돼서 CPU Burst 가 큰 프로세스를 의미합니다. 반대로, I/O Bound 프로세스는 사용자 입력이 잦아서 I/O Burst 가 큰 프로세스를 의미합니다. CPU Bound 프로세스의 예로는 머신러닝 프로그램, 시뮬레이션 프로그램 등이 있겠고, I/O Bound 프로세스의 예시로는 FPS 게임 등이 있습니다.

 

CPU Burst 와 I/O Burst

- 실제 프로그램은 CPU 와 I/O 가 번갈아가면서 작업이 이루어지게 됩니다. CPU Burst 와 I/O Burst 는 각각이 실행되는 시간을 의미합니다.

 

CPU Burst

  • CPU 명령을 실행하는 시간

I/O Burst

  • I/O 를 요청한 뒤 기다리는 시간

 

출처 : https://velog.io/@ssseungzz7/OS-CPU-Scheduling

 

 


참고

- gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

- you9010.tistory.com/136

- blog.xeros.dev/63

- jhnyang.tistory.com/25

- velog.io/@ssseungzz7/OS-CPU-Scheduling


출처

github.com/JaeYeopHan/Interview_Question_for_Beginner

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

'[IT 면접대비] 개발자 기술면접 대비 🖥️' 게시글의 내용들은 위 깃허브를 출처로 합니다.

위 게시글 깃허브에 들어가보시면 이미 자세한 내용들이 기술되어 있고, 저는 그냥 제 생각을 보태서 한번 다시 정리하는 정도로 생각해주세요! 

728x90

댓글