본문 바로가기

Dev.World/개발상식&언어

[개발상식] 7. 프로세스 / 스레드 / 커널



프로세스(Process)
프로세스란
기본적으로 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미한다.
프로세스랑 프로그램이랑은 약간 다르다.
프로그램이란 일반적으로 하드 디스크 등에 저장되어 있는 실행코드를 의미한다.
그리고 프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가
메모리 상에서 실행되는 일종의 작업단위이다.
하나의 프로그램을 여러 번 구동하면 여러 개의 프로세스가 메모리 상에서 실행된다.

프로세스는 사용 중인 파일, 데이터, 프로세서 상태, 메모리 영역 주소 공간, 스레드 정보
전역데이터가 저장된 메모리 부분 등 수 많은 자원을 포함하는 개념이다.
스케줄링의 대상이 되는 작업(task)라고 불리기도 한다.

프로세스는 항상 커널의 자원을 차지하기 위해 경쟁하고
커널은 이들에게 효율적으로 자원을 스케줄링하여 할당하고 회수하는 역할을 한다.

동작 중인 컴퓨터 시스템은 커널과 프로세스 간의 관계에 의해 모든 것이 결정된다고 볼 수 있다.

프로세서는 컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로로
CPU(Central Processing Unit)라는 용어를 대체해왔다.



스레드(Thread)
프로세스는 최소 하나의 스레드를 갖는다.
프로세스에 할당되는 task는 프로세스가 아닌 스레드이다.

스레드란 어떤 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
프로세스가 세분화된 작은 일들 하나 하나를 스레드라고 한다.

한 프로세스에 속한 각각의 스레드들은 프로세스가 가지는 자원을 공유하면서
각자는 자신의 실행환경,
즉 프로그램 카운터로 표현되는 현재의 실행 위치와 스택, 레지스터 값들을
따로 가지게 되는 것입니다.
일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만,
프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다.

스위칭에 소요되는 시간과 비용이 프로세스 단위보다 빠르고 저렴하다.
그리고 프로세스 간의 통신은 커널의 개입을 필요로 하지만,
한 프로세스 내의 스레드 간의 통신은 메모리와 파일을 공유하기 때문에 커널의 개입이 필요 없다.

스레드 종류에는 지원하는 영역에 따라 두 가지가 있다.
- 사용자 스레드 : 커널 영역의 상위에서 지원. 라이브러리를 통해 구현
- 커널 스레드 : 운영체제가 지원하는 스레드 기능으로 구현



커널(Kernel)
커널이란 운영체제 프로그램 중에서 가장 핵심적인 부분, 핵심적인 기능을 묶은 것을 말한다.
운영체제마다 그 커널의 특성이 다르기 때문에 커널이 운영체제의 정체성을 정하게 된다.
하드웨어의 자원을 자원이 필요한 프로세스에 나눠주고, 태스크 매니저, 메모리제어,시스템 콜 등을
수행하는 부분으로 운영체제 맨 하부에서 돌아간다.

현재 사용되고 있는 OS는 커널 위에 여러 가지 레이어를 올린 것이다.





-..-