본문 바로가기

기술블로그/리눅스

선점형 (Preemptive), 비선점형 (Nonpreemptive)이란?

반응형

선점형과 비선점형에 대해 알아보자


선점형과 비선점형에 대해 알아보자
선점형과 비선점형에 대해 알아보자

 


운영체제는 우리가 PC를 효과적으로 사용하기 위해 알고리즘을 구성하여 CPU와 협업하여 일을 처리한다. 그 과정에서 운영체제 알고리즘을 사용하는데 여러가지 유형별 알고리즘이 존재한다. 오늘은 여러가지 유형 중 선점형과 비선점형에 대해 알아보도록 하겠다.


선점형 (Preemptive) - 비선점형 (Nonpreemptive)


선점형 방식은 먼저 들어온 프로세스가 CPU를 독점하는 구조다. 따라서 실행 속도가 빠르다는 장점이 있지만 오버헤드가 크다는 단점이 있다. 반대로 비선점형 방식은 모든 프로세스가 동등하게 자원을 할당받는 구조다. 그렇기 때문에 처리 속도가 느리다는 단점이 있지만 시스템 전체 성능 측면에서는 효율적이다. 일반적으로 PC 환경에서는 선점형 방식이 유리하지만 모바일 기기에서는 비선점형 방식이 선호된다.


마무리


프로그래밍 언어론에서는 프로그램 실행 순서를 결정하는 방식에 따라 크게 두 가지로 나눈다. 먼저 컴파일 과정 없이 소스 코드 그대로 기계어로 변환하여 실행하는 유형을 비선점형 또는 직접실행방식이라고 한다. 반대로 미리 정해진 규칙에 따라 순차적으로 처리하는 유형을 선점형 또는 단계적처리방식이라고 한다.

쉽게 말하면 전자는 명령어가 수행될 때마다 다음 명령어를 검사하지만 후자는 이전 명령어를 모두 완료해야 다음 명령어를 수행한다는 차이가 있다. 일반적으로 C언어 계열의 언어는 비선점형이고 자바스크립트 및 파이썬 같이 인터프리터 언어는 선점형 구조를 갖는다. 따라서 개발자가 선호하는 방향에 따라 선택하면 된다. 다만 주의할 점은 각 언어별로 장단점이 존재하므로 상황에 맞게 사용해야 한다는 것이다. 가령 메모리 관리 측면에서는 자바나 C++같은 언어가 유리하나 속도 면에서는 파이썬이 앞선다. 또 웹 애플리케이션 제작 시에는 주로 자바스크립트를 활용하는데 이때는 서버 측 언어인 PHP 대신 JavaScript를 쓰는 편이 좋다. 물론 모든 조건을 만족하는 만능 언어는 없다. 그러므로 각자의 목적에 맞는 최적의 조합을 찾는 게 관건이다.

 


 

반응형