기술 면접 대비 - OS

young.h·2022년 8월 14일
0

CS

목록 보기
6/6
post-thumbnail

프로세스 쓰레드 차이

프로세스란 메모리에 올라와 실행되고 있는 프로그램의 인스턴스로 운영체제로부터 시스템 자원을 할당받는 작업의 단위입니다. 프로세스는 code, data, stack, heap의 구조로 되어있는 독립된 메모리 영역을 할당받습니다. 기본적으로 프로세스당 최소 1개의 메인 스레드를 가지고 있습니다.
쓰레드란 프로세스 내에서 실행되는 여러 흐름의 단위로 프로세스 내에 각각 스택만 따로 할당받고 code, data, heap 영역은 공유합니다.

(꼬리질문)스프링부트는 어떤지? (쓰레드)

내장 톰캣에 쓰레드 풀을 만들고
request가 들어오면 해당 스레드가 요청을 담당하여 처리합니다.
요청 처리가 끝나면 스레드를 풀에 다시 반납합니다.

thread safe 하다는 게 무슨 뜻인지?

멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻합니다.
쓰레드: 애플리케이션 코드를 하나하나 순차적으로 실행하는 것
한번에 하나의 코드 라인만 수행
동시 처리가 필요하면쓰레드 추가 생성

멀티 프로세스

두개 이상 다수의 프로세서가 협력적으로 하나 이상의 작업을 동시에 처리하는 것입니다. (병렬처리) 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용합니다.
안전성이 높고 다수의 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 작업 속도가 느려지는 단점이 생기지만 정지되거나 하는 문제는 발생하지 않습니다.

멀티 스레드

하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.
시스템 자원소모 감소, 시스템 처리 비용이 감소하며 프로세스 내 스택 영역을 제외한 메모리 영역을 공유하기 때문에 통신 비용이 적게 드는 장점이 있습니다. 반면 자원을 공유하기 때문에 동기화 문제로 인한 데드락 현상이 발생할 수 있으며 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는 단점이 있습니다.

교착 상태에 대해 이야기해주세요

첫 번째 스레드는 두 번째 스레드가 들고있는 객체의 락이 풀리기를 기다리고 있고, 두 번째 스레드 역시 첫 번째 스레드가 들고 있는 객체의 락이 풀리기를 기다리는 상황을 말합니다. 모든 스레드가 락이 풀리기를 기다리고 있기 때문에 무한 대기 상태에 빠지게 됩니다.

발생 조건은 상호배제, 점유대기, 비선점, 원형대기 네가지의 조건이 성립해야 발생하며 네가지 중 하나라도 해결되면 데드락 상태에서 빠져나올 수 있습니다.

상호배제
한 번에 한 프로세스만 공유자원을 사용할 수 있어 다른 프로세스는 요청된 자원이 해제될 때 까지 대기하는 상태 입니다.

점유대기
공유 자원에 대한 접근 자원을 가지고있는 프로세스가, 그 접근 권한을 양보하지 않은 상태에서 다른 자원에 대한 접근 권한을 요구

비선점
한 프로세스가 다른 프로세스의 자원 접근을 강제로 취소할 수 없다.

원형대기
두 개 이상의 프ㄹ로세스가 자원 접근을 기다리는데 그 관계에 사이클이 존재하는 경우.

0개의 댓글