본문 바로가기
Tech Interview/Operating System

[운영체제] 프로세스

by ggyongi 2021. 11. 6.
반응형

Q) 프로세스가 무엇인가요?
A) 다양한 의미가 있지만 실행중인 프로그램을 뜻합니다.


Q) 프로세스의 다양한 상태(state)에 대해 설명해주세요.
A) 프로세스는 다양하게 상태가 변경되며 수행됩니다.
new 상태는 프로세스가 생성중인 상태입니다. 그러다 프로그램이 메모리에 올라가고 CPU를 기다리는 상태가 되면 ready 상태라고 합니다. CPU를 잡고 명령을 수행중인 상태는 running 상태입니다. 입출력 명령을 기다리는 동안 프로세스는 CPU를 빼앗기게 되고 CPU를 할당받더라도 당장 명령을 수행할 수 없는 상태가 되는데, 이를 blocked 상태라고 합니다. 수행이 끝난 상태는 terminated 상태라고 합니다.
그런데 운영체제는 너무 많은 프로세스가 메모리에 올라와 있으면 당장 사용하지 않는 프로세스를 통째로 디스크로 쫓아냅니다. 이렇게 통째로 디스크로 swap out된 프로세스의 상태는 suspended 상태라고 합니다.


Q) 흠.. blocked 상태와 suspended 상태의 차이가 뭐죠?
A) 분명한 차이는 메모리에 있냐 없냐의 차이입니다. 또한 blocked 상태의 프로세스는 자신이 요청한 event가 만족되면 ready 상태로 돌아가는데에 비해, suspended 상태의 프로세스는 외부에서 resume 해주어야만 ready 상태가 됩니다.
추가로 ready 상태였다가 swap out이 되면 suspended ready 상태라고 하고 blocked 상태였다가 swap out이 되면 blocked suspended 상태라고 합니다.


Q) 정말 다양한 상태가 존재하고 상황에 따라 이 상태를 자주 바꿔줘야 하니 관리하기가 매우 힘들 것 같네요. 운영체제는 이를 어떻게 관리하고 있나요?
A) 운영체제는 프로세스들을 관리하고 스케줄링을 하기 위한 큐를 두고 있습니다. ready queue는 ready 상태의 프로세스들을 줄 세우고 있습니다. job queue는 현재 시스템 내에 있는 모든 프로세스들의 집합입니다. device queue는 device 입출력 작업을 대기하고 있는 프로세스의 집합입니다. 각 queue에 줄 서 있는 프로세스들을 관리하는 스케줄러가 3 종류로 존재합니다. 단기 스케줄러는 ready 상태의 프로세스 중 어떤 프로세스에게 CPU를 줄 것인지 결정합니다. 장기 스케줄러는 프로세스를 ready queue에 진입시킬지를 결정합니다. 즉 프로세스의 메모리 할당에 관여합니다. 또 중기 스케줄러는 어떤 프로세스를 스왑 아웃 시킬 지 결정합니다.


Q) 스레드는 뭔가요?
A) 프로세스의 실행 단위입니다. 스레드는 스택, 스레드 아이디, 프로그램 카운터, 레지스터 집합로 구성됩니다. 같은 프로세스의 다른 스레드와는 코드 섹션, 데이터 섹션, 운영체제 자원 등을 공유합니다. 스레드 마다 스택을 별도로 두는 이유는 스택은 함수 호출 시 인자, 되돌아갈 주소값, 함수 내 변수 등을 저장하기 위해 사용하는 메모리 공간이기 때문입니다. 각 스레드마다 독립적인 함수 호출을 위해서는 별도로 스택 공간을 두어야 합니다. 또한 각각의 실행 위치를 알려주기 위해 PC를, 수행중인 값을 임시적으로 저장하기 위한 레지스터 집합 공간을 별도로 가져야 합니다.


Q) 멀티 스레딩의 장점은 무엇인가요?
A) 여러개 프로세스를 두는 것보다 하나의 프로세스안에 여러 개의 스레드를 만드는 것이 훨씬 가볍습니다. 응답 속도도 빠르고 자원을 훨씬 효율적으로 사용할 수 있습니다. 또한 프로세스 하나를 만드는 오버헤드보다 스레드 하나를 만드는 오버헤드가 훨씬 작기 때문에 프로세스 간 CPU 스위칭의 오버헤드에 비해 스레드끼리의 CPU 스위칭 오버헤드가 훨씬 작습니다. 또한 CPU가 만약 여러개일 경우 각 스레드마다 CPU를 하나씩 주어 일을 병렬적으로 처리할 수 있다.


Q) 멀티 스레딩의 문제점은 없나요?
A) 다른 프로세스 간에는 공유 자원이 없지만, 스레드 간에는 공유 자원이 있기 때문에 동일 자원에 동시 접근하여 문제를 일으킬 수 있습니다. 따라서 프로그래밍 시 동기화 문제에 신경을 써야합니다. 동기화를 통해 작업 순서를 컨트롤하고 자원 접근을 관리해야 합니다.

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글