[리눅스 핥기] 프로세스

undefcat·2021년 5월 13일
0

리눅스 핥기

목록 보기
2/2
post-thumbnail

프로세스

리눅스를 비롯하여 모든 운영체제들에게 중요한 일이 있습니다. 바로 프로그램을 실행시키는 일입니다.

컴퓨터의 하드웨어 자원은 한정되어 있습니다. 대부분의 프로그램들은 컴퓨터의 자원을 마음껏 사용하고 싶어 할 것입니다. 하지만 그렇게 된다면 엉망진창이 되겠죠.

그래서 운영체제가 존재하고, 운영체제는 프로그램들을 실행하고 관리합니다. 이렇게 실행 중인 프로그램과, 프로그램을 실행시킴으로써 생기는 여러 부산물들을 통틀어 프로세스라고 합니다.

프로그램이 실행 중일 때, 단순히 작성된 코드만 실행되고 있는 것은 아닙니다. 프로세스에 대한 여러 정보들과, 여러 프로세스들이 실행되기 위한 다른 데이터들 역시 관리되고 있습니다. 이것이 프로그램을 실행시킴으로써 생기는 여러 부산물들을 뜻합니다.

예를 들면, 프로세스는 얼마나 실행되고 있었는지 실행시간 정보를 갖고 있습니다. 또한 여러 프로세스들이 멀티태스킹 환경으로 실행될 수 있도록 프로세스 마다 고유의 프로그램 카운터나 프로세스 스택 정보들을 갖고 있어야 합니다. 그리고 프로세스에게 전달된 대기중인 시그널 등도 포함될 수 있습니다.

이렇게 프로세스는 실행되면서 여러 통계 정보나, 프로세스가 실행되기 위한 다른 데이터들 역시 존재합니다.

스레드

스레드는 실제로 코드를 실행시키는 단위라고 생각할 수 있습니다. 즉, CPU가 이용하는 기본 단위라고 볼 수 있습니다. 일반적으로 하나의 프로세스는 최소 하나의 스레드를 갖고 있습니다. 이를 보통 메인 스레드라고 표현합니다.

요즘은 하나의 프로세스가 여러 개의 스레드를 가질 수 있습니다. 이제는 CPU가 여러 개의 코어를 갖고 있기 때문에, 하나의 프로세스에 속한 여러 스레드들이 여러 CPU 코어에서 동시에 실행될 수도 있습니다.

리눅스는 프로세스와 스레드를 따로 구분하지 않습니다. 리눅스 세계에서의 스레드는 조금 특별한 프로세스입니다. 메모리를 서로 공유하고 있는 프로세스인 것이죠.

프로세스 상태

프로세스는 생명주기가 있습니다. CPU의 코어는 한정되어 있고, 프로그램은 최소 수십개가 운영체제에서 돌아갑니다. 운영체제는 프로세스들을 스케줄링 하여 한정된 CPU가 실행하도록 합니다. 그렇다면 어느 순간에 프로세스는 실행중이지 않을 수 있습니다.

따라서 프로세스는 여러 상태를 가질 수 있습니다. 현재 실행중이거나, 실행되기 위해 대기중이거나, 한 동안 실행될 일이 없어서 휴면하고 있을 수도 있습니다. 운영체제는 프로세스들의 상태를 관리하고, 상태에 따라 스케줄링을 할 것입니다.

정리

프로세스에 대해 아주 간략하게 정리해보았습니다. 사실 책에는 더 많은 내용이 포함되어 있습니다. 프로세스 서술자라던가 프로세스의 생성 과정, 프로세스 컨텍스트, 프로세스 종료 등을 설명하고 있습니다.

하지만 이 시리즈의 목적은 아주 큰 그림을 그리는 것이 목표입니다. 프로세스가 어떤 일을 하는지만 기본적으로 알고 있으면 충분하다고 생각합니다.

다음 포스팅에서는 프로세스 스케줄링에 대해 알아보겠습니다.

profile
undefined cat

0개의 댓글