-
728x90반응형
프로그램과 프로세스의 차이
프로그램은 단순한 파일입니다.
실행파일이라고도 하죠.
이 실행파일을 실행한 결과물이 바로 프로세스입니다.
프로세스는 기본적으로 CPU 와 메모리를 사용합니다. 그 외 프로그램의 내용에 따라 다른 리소스를 활용하죠. 그래픽 요소를 렌더링하는 게임, 웹 등은 그래픽 자원을 많이 활용할 것이고, 서버와 같은 프로그램은 네트워크 자원을 활용합니다.
PCB ( process control block)리눅스에서 프로세스를 관리하기 위한 자료구조입니다. 운영체제가 프로세스를 한눈에 관리하기 위해 PCB 는 프로세스의 대표적인 정보들로 구성됩니다.
프로세스는 컴퓨터 자원들 중 기본적으로 CPU 를 사용합니다. 하지만 CPU 는 제한적인 리소스이기 때문에 프로세스들이 CPU 점유와 반환을 반복하게 되는데요. 이 과정에서 반환 시점의 상태를 기록해두지 않으면 다시 점유하는 상황에서 이전 상태를 재현하는 것이 쉽지 않습니다.
PCB 에서 저장하는 상태 정보는 아래와 같습니다.
1. process id : 프로세스 아이디입니다.
2. process status : 프로세스의 상태입니다.
생성(create), 준비(ready), 실행 (running), 대기(waiting), 완료(terminated) 상태가 있습니다.
3. program counter : 프로세스가 실행할 다음 명령어의 주소를 저장합니다.
4. register : 프로세스가 스위칭되는 시점에 cpu register 에 저장되어있는 데이터들을 저장합니다.
이외의 여러 정보들이 PCB에 저장됩니다.
그리고 해당 프로세스가 다시 CPU를 점유하게 될때, PCB 의 정보를 기반으로 실행 상태를 재현합니다.
PCB 는 메모리에 생성되어 있으며 커널영역에서 관리됩니다.부모 프로세스
프로세스는 fork 라는 시스템 함수를 이용하여 새로운 프로세스를 만들 수 있습니다.
이렇게 생성된 프로세스를 자식 프로세스라고 부르는데, 이 두 프로세스의 관계를 부모-자식 이라고 합니다.
자식 프로세스는 부모 프로세스로부터 대부분의 데이터를 복제하여 생성됩니다.
부모 프로세스로부터
1. program counter 를 비롯한 각종 cpu register
2. 메모리 정보를 카피 또는 공유
하므로 자식 프로세스는 fork() 호출부 다음부터 실행이 됩니다.
그래서 프로그램이 자식 프로세스가 수행해야할 코드와 부모 프로세스가 수행해야할 코드를 나눠 작성하면 손쉽게 서로 상호작용하는 프로세스들을 만들 수 있습니다.pstree
프로세스의 상태를 확인하는 ps 와 유사하지만, 프로세스를 계층적으로 리스팅합니다.
데몬 프로세스
프로세스는 interactive, batch, daemon 인 세가지로 나뉩니다.
흔히 아는 웹브라우저나 mysql 과 같은 GUI/CUI 프로그램들이 interactive process 에 속합니다.
사용자의 직접적인 입력에 리액션하는 프로그램들이 interactive 의 대표적인 예시입니다.
반면 사용자의 입력을 요구하지 않는 프로그램들이 존재합니다.
대표적인 예시가 웹서버인데요.
웹서버인 httpd 나 nginx 의 경우는 network request 가 웹서버의 직접적인 입력입니다.
그리고 request 에 따른 적절한 response 데이터를 생산하여 network response 로써 리액션을 합니다.
이는 백그라운드에서 사용자와의 상호작용없이 홀로 동작하며, 이를 백그라운드 프로세스라고 부릅니다.
웹서버
network request 에 리액션하는 프로세스
적절한 결과값을 만들어 요청을 보낸 클라이언트에게 데이터를 제공합니다.
데이터베이스
mysql 과 같은 DBMS 도 웹서버와 비슷합니다.
여러 서버들로부터 network request 에 반응하기도 하며,
mysql client 와 같은 CUI 로 보내는 요청에도 반응합니다.
흔히 백엔드 영역에 있는 프로그램들이 데몬 프로세스라고 생각하면 될거 같습니다.
배치 프로세스
데몬 프로세스들 중에서 일회성으로 동작하는 프로세스가 있습니다.
이 또한 백그라운드 프로세스인데요.
사용자의 상호작용이나 네트워크 요청과 같이 어떠한 액션에 반응하는 프로세스는 아닙니다.
cron 설정으로 정해진 시간이나 특정 조건이 만족했을 때, 동작하도록 설계된 프로세스로
대개 주기적인 실행이 필요한 경우에 사용합니다.
예를 들어보겠습니다.
1. 배치 파일을 하나 만듭니다.
logfile 이라는 텍스트 파일에 "test" 라는 텍스트를 작성합니다.
#!/bin/bash echo "test">>./logfile
2. crontab 설정을 합니다.
아래 설정은 매 분마다 배치 프로세스를 실행합니다.
crontab -e * * * * * /파일 경로/batch.sh
3. logfile 을 확인합니다.
test 들이 추가된 것을 확인할 수 있습니다.
tail -n 100 log test test test test test test
반응형'System' 카테고리의 다른 글
IPC Signal 알아보기 (0) 2023.10.07 Shared memory communication 알아보기 (0) 2023.10.07 [memory management] page 알아보기 (0) 2023.09.22 Call Stack 이해하기 (0) 2023.09.21 Thread 알아보기 (0) 2022.12.13