본문 바로가기
서버/리눅스

[Linux] 프로세스란?

by 코딩히어로 2022. 1. 11.
728x90

리눅스를 접하게 되면 프로세스와 스레드라는 단어를 많이 접하게 됩니다.

프로세스라는 단어는 특히 많이 듣게 되는데

이 프로세스라는게 무엇인지 얼마나 중요한지 알아보도록 하겠습니다.

 

리눅스에서 프로세스는 일반적으로 실행 상태에 있는 프로그램의

인스턴트라는 의미로 정의가 됩니다.

 

커널의 관점에서 보면 프로세스의 목적은 시스템의 자원을 할당받아

주어진 프로그램을 실행시키는 것입니다.

 

 

프로세스의 구성요소


프로세스에 대한 정보는 프로세스 제어블록(Process Control Block) 또는

디스크립터(Process descriptor)라고 부르는 자료구조에 저 자아 됩니다.

 

1. PID

운영체제가 각 프로세스를 식별하기 위해 부여된 식별번호

 

2. 프로세스 상태

CPU는 프로세스를 빨게 교체하면서 실행하기 때문에 실행 중인 프로세스도 있고

대기 중인 프로세스도 존재하므로 이러한 동작 상태를 저장

 

3. 프로그램 카운터

CPU가 다음으로 실행할 명령어를 가리키는 값입니다.

 

4. 스케줄링 우선순위

운영체제는 여러 개의 프로세스를 동시에 실행하는 것처럼 보입니다.

바로 이렇게 동시처리가 가능하게 보이는 것은 CPU가 우선순위에 따라

실행 순서를 스케줄링하기 때문에 가능합니다.

이러한 우선순위를 저장합니다.

 

5. 권한

프로세스가 접근할 수 있는 자원을 결정하는 정보

 

6. 프로세스의 부모와 자식 프로세스

각 프로세스는 자식 프로세스와 부모 프로세스에 대한 정보를 저장합니다.

 

7. 프로세스 메모리 위치 포인터

프로세스는 시스템상에서 실행되는 프로그램이기 때문에

메모리에 대한 정보를 가지고 있어야 합니다.

 

 

프로세스의 상태


이러한 프로세스는 구성요소의 2번째에 정의된 상태에 따라 동작합니다.

그럼 프로세스의 상태가 어떤 것들이 있는지 알아보도록 하겠습니다.

 

1. TASK_RUNNING

프로세스가 CPU를 할당받아 실행 중이거나 실행되기를 기다리는 상태

 

2. TASK_INTERRUPTIBLE

프로세스가 어떤 조건을 만족하기를 기다리면서 보류 중인 상태

 

3. TASK_UNINTERRUPTIBLE

2번째 상태와 비슷하지만 잠들어 있는 프로세스가 시그널을 받아도

깨어나지 않으며 잘 사용되지는 않습니다.

이벤트가 발생하기를 기다리는 도중에 방해를 받지 않기 위한 특수한 상황에서 사용합니다.

 

4. TASK_STOPPED

프로세스의 실행이 중단된 상태로

SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU

와 같은 시그널을 받으면 프로세스는 해당 상태가 됩니다.

 

5. TASK_TRACED

프로세스의 실행이 디버거에 의해 멈춘 상태입니다.

 

6. EXIT_ZOMBIE

프로세스가 종료되었지만 부모 프로세스가 종료 정보를 반환하지 않은 상태입니다.

 

7. EXIT_DEAD

6번 상태에서 부모 프로세스가 종료 메시지를 호출하여 시스템상에서 제거되는 중인 상태입니다.

 

 

프로세스 관리방법


OS 운영체제는 프로세스들의 실행 사이에 프로세스를 교체하고 재시작할 때

오류가 발생하지 않도록 관리해야 합니다.

 

이를 위해서 운영체제는 프로세스의 상태를 통해 분류작업을 하고

상태 전이 방식을 통해 체계적인 관리를 합니다.

 

운영체제는 프로세스가 CPU를 자발적으로 반납하지 않고 독점하는 경우를 방지하기 위해

하드웨어적인 인터럽트 클록을 주기적으로 발생시켜 프로세스가 특정

시간 간격 동안만 실행할 수 있도록 제제합니다.

 

인터럽트 클록이 발생하면 강제로 실행 중인 프로세스의 CPU 제어권을 운영체제에게

돌려주고 프로세스는 준비상태로 상태 전이합니다.

728x90
반응형

'서버 > 리눅스' 카테고리의 다른 글

[Linux] 방화벽 Firewall  (8) 2022.02.08
[Linux] 원격 SSH 접속 Putty  (2) 2022.01.12
[Linux] chroot 500 oops error 해결  (8) 2022.01.10
[Linux] Makefile이란?  (4) 2022.01.07
[Linux] Directory file count  (0) 2021.12.28

댓글