Linux: 프로그램과 프로세스 및 스레드(3가지 용어 차이)

리눅스 시스템에서 프로그램과 프로세스 스레드의 차이는 운영체제를 이해하는데 필요한 요소입니다.

✅ 프로그램(Program)이란?

사전적 의미의 프로그램은 컴퓨터에서 실행 가능한 명령어들의 모음을 의미하며, 특정 작업을 수행하기 위해 개발된 소프트웨어(및 소프트웨어의 형태)입니다.

◼ 종류

  • 시스템 프로그램(System Software)
  • 운영 체제 (Operating System): 컴퓨터 하드웨어를 관리하고 응용 프로그램을 실행하기 위한 핵심 소프트웨어
  • 장치 드라이버(Device Drivers): 특정 하드웨어 디바이스와 상호작용하기 위한 소프트웨어.
  • 유틸리티 프로그램 (Utilities): 시스템 관리, 파일 관리, 보안, 네트워크 등 다양한 유틸리티를 포함하는 프로그램.
  • 응용 프로그램(Application Software)
  • 워드 프로세서 (Word Processors): 문서 작성, 편집 및 서식 지정을 위한 프로그램
  • 래픽 소프트웨어 (Graphic Software): 그림 그리기, 이미지 편집, 디자인 작업 등을 위한 소프트웨어 (예: Adobe Photoshop, GIMP)
  • 웹 브라우저 (Web Browsers): 인터넷을 통해 웹페이지를 검색하고 표시하는 소프트웨어 (예: Google Chrome, Mozilla Firefox)
  • 게임 프로그램 (Gaming Software): 게임을 플레이하기 위한 소프트웨어 (예: Fortnite, League of Legends)
  • 데이터베이스 소프트웨어 (Database Software): 데이터 저장, 관리, 조회 등을 위한 소프트웨어 (예: MySQL, Oracle Database)
  • 개발 도구 및 프로그래밍 언어 (Development Tools & Programming Languages)
  • 통합 개발 환경 (IDE, Integrated Development Environment): 소프트웨어 개발을 위한 편리한 환경을 제공하는 프로그램 (예: Visual Studio, IntelliJ IDEA)
  • 프로그래밍 언어 (Programming Languages): 소프트웨어를 작성하는 데 사용되는 언어들 (예: Python, Java, C++, Bash Shell)

✅ 프로세스(Process)란?

프로세스는 프로그램이 실행되어 돌아가고 있는 상태로서 실행 중인 프로그램을 의미합니다. 프로그램은 메모리에 적재되어 CPU에 의해 실행이 됩니다. 이때의 실행 상태를 프로세스라고 하며, 각각의 프로세스는 고유한 메모리 공간과 자원을 할당 받아서 실행됩니다.

ps 명령어로 프로세스 확인

윈도우에서 [Ctrl+Alt+Del] 키를 눌러서 컴퓨터의 상태를 확인한 경험이 있을 것입니다.크롬 브라우저를 새 탭으로 많이 띄워서 사용하면서 확인된 윈도우 Process를 확인할 수 있습니다.

윈도우에서 확인한 크롬 프로세스-크롬 앱 자체가 프로그램

◼ 특징

  • Process는 독립적으로 실행되고 다른 Process에 영향을 주지 않습니다. 이에 따라 독자적인 메모리 공간을 가지게 되며 메모리 공유할 수 없습니다.
  • Process는 다른 Process의 자원에 접근하거나 정보를 교환하기 위해 프로세스 간 통신(IPC, Inter-Process Communication)을 사용해야 합니다.
  • 프로세스는 최소 한 개 이상의 스레드를 가지고 있습니다.

◼ 프로세스 생명 주기(Process Life Cycle)

  • 생성(Create): Process가 생성되고 초기화되는 단계입니다. 이 단계에서 Process는 운영 체제에 의해 생성되고 기본적인 자원이 할당됩니다.
  • 준비(Ready): Process가 실행될 준비가 되었지만, CPU를 할당 받지 못한 상태입니다. 준비 상태의 Process는 CPU가 할당되기를 기다리며, 대기 큐에 위치합니다.
  • 실행(Running): CPU를 차지하여 명령어를 실행하는 단계입니다. 현재 실행 중인 Process는 CPU를 점유하고 있습니다.
  • 대기(Waiting 또는 Blocked): Process가 어떤 사건을 기다리거나 완료를 기다리는 상태입니다. 이벤트 완료, 입출력 요청 등을 기다리며, 이러한 상태에서는 CPU를 사용하지 않습니다.
  • 종료(Terminated): Process의 실행이 완료되고 자원이 해제되는 단계입니다. Process가 종료되었으며, 운영 체제는 해당 프로세스의 자원을 회수하고 종료 상태를 정리합니다.
Linux: 프로그램과 프로세스 및 스레드(3가지 용어 차이)
출처: 위키피디아 프로세스

✅스레드(Thread)

스레드(thread)는 Process가 할당 받은 자원을 이용하는 실행 단위이며, Process의 특정한 수행 경로입니다.thread는 Process 내에서 실행되는 여러 흐름의 단위입니다.

thread는 하나의 Process에서 여러 개의 thread가 동시에 실행될 수 있으며 각각의 thread는 Process의 자원을 공유하면서 별도의 실행 흐름을 가지고 독립적으로 동작합니다.

◼ 특징

  • 독립적인 실행 경로
  • thread는 Process의 일부로, 각 thread는 Process의 코드와 데이터를 공유하면서 별도의 실행 경로를 갖습니다.
  • 스택(Stack) 메모리 공간
  • thread는 독립적인 스택 메모리 공간을 갖습니다. 이는 thread가 함수 호출, 지역 변수 등을 저장하는 데 사용됩니다.
  • 공유하는 자원
  • thread는 같은 Process 내의 다른 thread와 주소 공간, 자원을 공유합니다. 이는 코드, 데이터, 힙 메모리 등을 포함합니다.
  • 별도의 레지스터와 스택
  • 각각의 thread는 별도의 레지스터 상태와 스택을 갖고 있으며, 독립적인 실행 흐름을 유지합니다.
  • 동시성과 동기화 문제
  • thread 간의 메모리 공유는 동시성과 동기화 문제를 야기할 수 있습니다. 한 thread가 공유 자원을 변경하면, 다른 thread도 이 변경 사항을 즉시 볼 수 있으며, 이로 인해 동기화 문제가 발생할 수 있습니다. 데드락과 같은 문제도 발생할 수 있습니다.

Reference

리눅스(펜과 안경)

Similar Posts

  • 리눅스 tee 명령어

    리눅스 tee 명령어는 배관시설에 비유해서 이름이 붙여진 명령어입니다. 파이프 모양과 똑같은 “T”에서 본따 tee 명령어이며 표준 출력으로 하나 이상의 다른 파일을 동시에 출력합니다. tee 명령어의 목적은 작업 진행 중 파이프라인(I)의 중간 내용을 알고 싶을 때 유용하게 사용할 수 있습니다. 목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference✅ 리눅스 tee 명령어…

  • [Linux] 다중 명령어 5가지(세미콜론, 파이프, 엠퍼센트..)

    리눅스의 Bash Shell에서 다중 명령어를 사용하는 목적은 하나의 라인에서 여러 명령을 실행할 수 있기 때문입니다. 종류는 ⓐ 세미콜론(;) ⓑ 파이프(|) ⓒ 더블 버티컬바(||) ⓓ 엠퍼센트(&) ⓔ 더블엠퍼센트(&&) 등이 있습니다. 목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference1. 많이 쓰는 다중 명령어 세미콜론(;) 하나의 명령어 라인에서 여러 개의 명령을 실행하며, 처음…

  • Linux: 아파치 재시작/시작/중지 명령어[CentOS 7]

    리눅스 웹서버를 운영하다 보면 CentOS에서 아파치 재시작을 하는 경우가 많습니다. 재시작 및 시작, 중지 명령어에 대해 알아 보겠습니다. 아파치는 HTTP 아파치 서버로 불리는 HTTP 웹서버입니다. 쉬운 웹서버 구축과 기능적인 측면에서 우수하기 때문에 많은 중소기업 및 대형사이트에서 사용합니다. 목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference1. apache 버전 확인 2. apache…

  • nslookup 명령어

    nslookup 명령어는 네임 서버 조회(Name Server Lookup)를 뜻하는 명령어로 네임 서버의 정보를 얻기 위한 명령어입니다. DNS(Domain Name System)에 질의 후 대상 도메인의 IP 주소나 DNS 레코드 등의 정보를 얻기 위한 네트워크 명령어입니다. DNS 서버의 정상적인 작동을 통해 정상적인 네트워크 설정이 되었는지 확인할 때 많이 사용하게 되는 명령어 중 하나입니다. 보통 맥 OS 및…

  • 리눅스 tmp 디렉토리: /tmp와 /var/tmp 차이

    리눅스 tmp 디렉토리는 임시 파일을 저장하기 위해 주로 /tmp와 /var/tmp 디렉토리를 사용합니다. /tmp는 일시적인 임시 파일을 저장하는 공간으로, 시스템이 재부팅 되면 대부분의 파일이 삭제됩니다. 따라서 빠른 입출력과 임시 작업에 적합하며, 주로 프로세스가 실행 중 생성하는 임시 데이터를 저장합니다. 반면에 /var/tmp는 재부팅 후에도 파일이 유지되는 임시 저장 공간입니다. 장기간 유지가 필요한 임시 파일이나 작업…

  • 리눅스 chgrp 명령어

    리눅스 chgrp 명령어는 파일 및 디렉토리의 그룹을 변경할 수 있는 명령어이며, Change Group의 약자입니다. 목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference✅ 리눅스 chgrp 명령어 기본 사용법 chgrp 명령어에서 옵션은 거의 사용되지 않습니다. ✅ chgrp 명령어 옵션 옵션 설명 -R 하위 디렉토리에 적용. ✅ chgrp 명령어 사용 예시

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 1   +   5   =