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

  • 리눅스 pwd 명령어 & realpath 명령어 | 절대 경로 위치 확인

    목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference✅ pwd 명령어 pwd 명령어는 Print Working directory의 약자로 현재 작업 디렉토리의 위치를 보여주는 명령어로 현재 사용자가 접속한 절대 경로를 표시합니다. 🔲 명령어 옵션 pwd 명령어는 간단한 명령어로 옵션은 2가지만 존재합니다. ✅ realpath 명령어 realpath 명령어는 실제 경로를 절대 경로로 보여주는 명령어로, 심볼릭…

  • FTP 평가: vsftpd vs proftpd 차이점

    FTP는 파일을 광범위하게 전송하는데 사용되는 표준 프로토콜입니다. vsftpd 및 proftpd는 FTP 프로그램은 원격 서버에 저장된 파일을 엑세스하고 전송할 수 있도록 합니다. 서버를 사용하는 방법에 따라 ‘vsftpd vs proftpd’ 둘 중에 어떤 것이 더 적합할지 알아 보겠습니다. 목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference Vsftpd 개요 Vsftpd(Very Secure FTP Daemon)는…

  • Linux snapd | Rocky Linux에서 snapd 설치

    스냅크래프트(Snapcraft) 또는 스냅(Snap)은 캐노니컬(Canonical)이 시작한 Ubuntu 스마트폰 운영 체제를 위한 소프트웨어 배포 및 패키지 도구로서 개발되었으며, 패키지 관리 시스템이다. 스냅(snap)이라고 불리는 패키지와 snapd를 사용하는 도구는 업스트림 소프트웨어 패키징을 간편화하여 다양한 리눅스 배포판에서 사용할 수 있도록 도와준다. Linux snapd은 앱 패키지로 데스크톱, 클라우드, IoT에서 사용 가능하며, 설치가 용이하고 안전하며 다양한 플랫폼에서 사용할 수 있으며…

  • 리눅스 커널(Kernel)이란? | 커널 버전

    리눅스 커널과 커널은 같은 뜻을 가지고 있습니다. 커널을 말할 때 리눅스 커널을 이야기 하는 것입니다. 핵심(&알맹이)이라는 뜻을 가진 커널(Kernel)은 내부 계층에 속하며, Shell 명령과 하드웨어를 연결해 주는 역할을 합니다. 목차✅ 프로그램(Program)이란?◼ 종류✅ 프로세스(Process)란?◼ 특징◼ 프로세스 생명 주기(Process Life Cycle)✅스레드(Thread)◼ 특징Reference리눅스 커널(Kernel)의 개념 컴퓨터는 크게 물리적으로 만질 수 있는 하드웨어(키보드, 모니터, 본체:CPU, 메모리 등)와…

  • RAID 구성 | RAID Level 0, 1, 4, 5, 6, 1+0, 0+1

    RAID(Redundant Array of Independent Disks 또는 Redundant Array of Inexpensive Disks)는 뜻 하는 내용처럼 여러 개의 디스크를 스토리지 하나처럼 운영하여 스토리지의 안정성을 확보하는 기술입니다. 저렴한(Independent) 디스크의 복수 배열의 뜻에서 독립적인 디스크의 복수 배열이란 뜻으로 많이 사용되고 있습니다. 이유는 단독으로 사용하기에 부족한 성능을 가진 디스크를 하나의 논리 디스크로 정렬해서 재활용하는데 목적이 있었기 때문입니다. 디스크…

  • PHP-FPM이란 | PHP-FPM 설치 및 설정

    PHP-FPM을 시작하기 전에 CGI에 대해 알아야 합니다. CGI(Common Gateway Interface)는 웹 서버와 외부 프로그램 사이의 상호작용을 위한 표준 프로토콜이며, 웹 서버는 사용자 요청에 따라 동적으로 콘텐츠를 생성하거나 데이터를 처리할 수 있습니다. 요청이 들어올 때 마다 각각의 요청으로 CGI가 생성되게 되어 서버의 속도는 느려질 수 밖에 없습니다. CGI(Common Gateway Interface)의 업그레이드 버전으로 서버의 성능을…

답글 남기기

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

Prove your humanity: 0   +   2   =