Linux

[Linux] Process - 1 (프로그램의 동작 과정)

개발로 먹고 살자 2022. 8. 8. 10:46

오늘은 프로세스가 무엇인지에 대해 알아보려 한다.

 

프로세스는 현재 실행중인 프로그램을 의미한다.

 

리눅스 시스템 내에서는 동시에 여러 프로세스가 실행되는데,

모든 프로세스가 계속 실행 상태에 있는 것은 아니다.

 

프로세스 상태 전이

생성(create) 상태

 - 사용자에 의해 프로세스가 생성된 상태

 

준비(ready) 상태

 - CPU를 할당받을 수 있는 상태

 

실행(running) 상태

 - 프로세스가 CPU를 할당받아 동작 중인 상태

 

대기(waiting) 상태

 - 프로세스 실행 중 입출력 처리 등으로 인해 CPU를 양도하고 입출력 처리가 완료까지

   대기 리스트에서 대기

 

완료(complete) 상태

 - 프로세스가 CPU를 할당 받아 주어진 시간 내에 완전히 수행을 종료한 상태

 

 

이렇듯 규칙에 따라 여러 상태로 변한다.

리눅스에서 ps, top 명령을 통해 현재 실행 중인 프로세스를 확인할 수 있다.

 

 

프로세스, 프로그램, 프로세서

일반적은 프로그램이라는 것은 만들어 놓은 실행 파일을 뜻한다.

 

예를 들어 리눅스에서 gcc 컴파일을 통해 생성된 a.out이

디스크 안에 저장되어 있는 형태이다.

 

프로세스는 프로그램의 한 인스턴스가 메모리에 로드 되는 것이며

프로그램을 읽어와서 프로세스를 생성한 다음 작동 후 메모리에 담아둔다.

 

담아둔 메모리를 실행하여 CPU에서 프로세서가 연산하게 된다.

 

 

그림을 자세히 확인해보겠다.

 

 

프로그램                                                                                      프로세스                프로세서
소스 파일(sys.c) -> 컴파일(gcc) -> 실행파일(a.out) -> 적재 -> 메모리(RAM) -> 실행 -> CPU

 

우리가 흔히 실행시키는 프로그램은 이러한 방식을 통해 실행되고 있는 것이다.

 

 

정리를 해보자면

프로세스는 실행 중인 프로그램을 의미한다.

 

프로세서는 인텔 등과 같은 중앙 처리 장치(CPU)를 의미한다.

 

프로그램은 사용작 컴퓨터에 작업을 시키기 위한 명령어의 집합이다.

고급 언어나 스크립트 언어로 작성한다.

 

 

고급 언어로 작성된 프로그램은 컴파일러를 통해 시스템이 이해할 수 있는

기계어로 변환을 해주어야 한다. 이를 컴파일이라하고 기계어로 변환된 프로그램을

실행 프로그램 또는 실행 파일이라고 한다.

 

 

스크립트 언어로 작성한 프로그램은 미리 실행 파일을 만들어두지 않고

실행 시에 코드를 읽고 해석하여 실행한다.

이러한 방식을 인터프리터 방식이라 한다.

 

 

컴파일, 인터프리터 등 실행 방식이 다르지만 방식에 상관없이 실행만 하면 프로세스가 된다.

즉 프로세스는 프로세서가 처리 중인 프로그램을 의미한다.

 

 

프로그램 소스 파일을 작성 후 컴파일해서 실행 파일을 생성한다.

실행 파일을 메모리에 적재하여 실행하면 그것이 프로세스가 된다.

이 프로세스를 처리하는 것이 프로세서이다.

 

 

다음 포스팅에서는 process에 대해 좀 더 깊게 다뤄보도록 하겠다.

https://gjehdalshh.tistory.com/150

 

[Linux] Process - 2 (PID)

이번에는 프로세스에 대해 좀 더 자세히 알아보도록 하겠다. 사용자 계정에서 사용자를 식별하는 번호로 UID를 사용하는 것처럼 시스템에서는 프로세스를 식별하는데 프로세스 ID(PID) 라는 것을

gjehdalshh.tistory.com