[ CS ] 프로세스와 스레드

혜빈·2024년 9월 7일

보충내용

목록 보기
23/38

프로그램

  • 컴퓨터에서 실행할 수 있는 파일
  • Window에서 .exe로 끝나는 파일들을 '프로그램'이라고 함

프로세스

  • 프로그램이 실행되어 돌아가고 있는 상태
  • 즉, 컴퓨터가 어떤 일을 하고 있는 상태
  • 쾌적하게 컴퓨터를 사용할 수 있는 것은 운영체제가 여러 개의 프로세스를 함께 돌리고 있기 때문임

여러 프로세스 함께 돌리는 방법

  • 동시적 : 프로세스 하나가 여러 작업을 돌아가면서 일부분씩 수행
    - 진행중인 작업을 바꾸는 것을 Context Switching이라고 함
    • 빠르게 돌아가기 때문에 프로세스들이 동시에 진행된다고 느낌
  • 병렬적 : 프로세스 하나에 코어가 여러개 달려서 동시에 돌아가면서 수행
    - 멀티코어 프로세서가 달린 컴퓨터에서 수행 가능 (듀얼코어, 쿼드코어, 옥타코어 등)
    • CPU 속도가 발열 등 물리적 제약 때문에 예전만큼 빠르게 발전하지 못하자, 대안으로 코어를 여러개 달아서 작업을 분담할 수 있게 함
  • 혼합적

스레드

  • 브라우저도 하나의 프로그램이고, 이게 돌면서 하나의 프로세스가 진행됨
  • 브라우저 내에서 게임 다운로드, 동영상 재생 등 여러 갈래의 작업들이 동시에 진행될 필요가 있음
  • 갈래'스레드' 라고 함
  • 프로세서 : 요리사
  • 프로세스 : 대량 주문이 들어오는 식당에서 끊임 없이 만들어내는 각각의 요리 메뉴
  • 컴퓨터는 프로세스마다 자원을 분할해서 할당함
  • EX. 떡볶이 만드는 섹션, 김밥 만드는 섹션, 오믈렛 만드는 섹션 등
  • 이렇게 조리 공간을 나눠서 요리사 한명이 돌아가면서 요리를 하거나 (동시적),
    요리사 여러명이 각 섹션에서 동시에 요리를 하거나 (병렬적),
    두 방식을 섞어서 하는 방식 (혼합적)으로 메뉴들을 만들어 냄
  • 김밥을 만드는 섹션(프로세스)에서는
    김밥 안에 들어갈 밥을 만드는 스레드가 진행되는 동안 김밥 재료를 손질하는 스레드도 진행될 수 있음
  • 한 메뉴의 스레드들은 같은 조리대에서 진행됨
  • 같은 메뉴를 만들때는 같은 공간과 장비 즉, 같은 자원을 공유하는 것이 효율적임
  • 프로세스들은 컴퓨터의 자원을 분할해서 쓰지만, 스레드는 프로세스마다 주어진 전체 자원을 함께 사용함

  • 이게 속도와 효율 면에서는 좋지만, 단점이 있음
  • 만약 프로세스 안에서 공유되는 변수에 스레드 두 개가 동시에 접근한다면 에러가 발생
    (동기화 문제)
  • 예를 들면 클릭 시 1씩 증가하는 버튼이 있고, 스레드 두 개가 버튼을 클릭하게 된다면 정확하게 카운팅 되지 않음
  • 동시에 클릭하는 상황이 발생 할 수 있기 때문임
  • 시간 문제로 발생하는 에러들을 예상하고 방지해야 하는 문제 때문에 스레드를 사용하는 프로그래밍은 코드를 짜기도 어렵고, 디버깅 하기도 어려움
  • 이런 작업들을 더 쉽고 안전하게 할 수 있는 도구들이나 프로그래밍 방식들이 많이 있음 (Closure, Lambda, Functional Programming, Actor 등)

정리

  • 프로세스는 운영체제에서 실행중인 프로그램의 독립적인 인스턴스
  • 각 프로세스는 자체 메모리 공간을 가지고 있으며, 다른 프로세스와 메모리를 공유하지 않음
  • 이는 보안성과 안정성 측면에서 유리하지만, 프로세스 간의 통신에는 IPC(Inter-Process Communication)과 같은 별도의 메커니즘이 필요함
  • 스레드는 프로세스 내에서 실행되는 작은 실행 단위
  • 스레드는 프로세스의 메모리 공간을 공유하기 때문에, 같은 프로세스 내의 다른 스레드들과 쉽게 데이터를 주고 받을 수 있음
  • 이는 멀티스레딩을 통해 병렬 처리를 효율적으로 수행할 수 있게 해줌
  • 하지만, 스레드 간의 자원 공유는 동기화 문제를 발생시킬 수 이어 주의가 필요함

용어 설명

인스턴스

  • 특정 클래스나 프로그램의 실체화된 객체
  • 소프트웨어에서 인스턴스는 실행 중인 프로그램의 구체적인 표현으로, 일반적으로 메모리에 로드된 상태를 의미
  • 예를 들면, 동일한 프로그램을 여러 번 실행하면 각각의 실행은 독립적인 인스턴스가 됨

IPC (Inter-Process Communication)

  • 프로세스 간 통신을 의미
  • 서로 독립적으로 실행되는 프로세스들이 데이터를 주고받기 위해 사용하는 메커니즘
  • 프로세스는 독립적인 메모리 공간을 사용하기 때문에 직접적인 데이터 공유 불가능
  • 따라서 IPC를 통해 메시지, 큐, 파이프, 공유 메모리 등의 기법을 사용하여 데이터를 교환함

메커니즘

  • 특정 기능이나 작업을 수행하기 위한 체계적이고 구조화된 방법이나 절차
  • 소프트웨어에서는 특정 기능을 구현하기 위한 알고리즘이나 프로세스가 메커니즘으로 작동함
  • 예를 들면, IPC 메커니즘은 프로세스 간의 데이터 통신을 가능하게 하는 일련의 방법들을 포함함

멀티스레딩

  • 하나의 프로세스 내에서 여러 스레드를 생성하여 병렬로 작업을 수행하는 기술
  • 멀티스레딩을 통해 동일한 메모리 공간을 공유하는 스레드들이 동시에 실행되어 작업의 효율성을 높임
  • 이는 CPU 자원을 최대한 활용하여 응답성을 개선하고 처리 속도를 높이는 데 기여함

파이프 (Pipe)

  • 단방향 통신을 제공하는 IPC 기법
  • 주로 부모 프로세스에서 자식 프로세스로 데이터를 전달하는 데 사용됨
  • 파이프는 두 프로세스 간의 데이터 흐름을 위해 커널 공간에 메모리를 할당하고,
    이 메모리를 통해 데이터를 전송함
  • 파이프는 간단하게 구현 가능하지만, 단방향 통신만 가능하다는 제한이 있음
  • 양방향 통신을 위해서는 두 개의 파이프를 사용해야 함

커널 (Kernel)

  • 운영체제의 핵심 부분
  • 하드웨어와 소프트웨어 간의 중재자 역할을 함
  • 커널은 시스템 리소스를 관리하고, 프로세스 간의 통신 및 데이터 교환을 조정함
  • 커널의 주요 기능
    - 프로세스 관리 : 프로세스의 생성, 스케줄링, 종료 등 관리
    • 메모리 관리 : 메모리 할당 및 해제를 관리하고, 프로세스 간의 메모리 보호를 제공함
    • 장치 관리 : 하드웨어 장치와의 상호작용을 처리함
    • 파일 시스템 관리 : 파일 및 디렉터리 관리
  • 커널은 사용자 모드와 커널 모드로 나뉨
  • 커널 모드에서는 시스템 리소스에 대한 직접적인 접근 가능

커널 공간 (Kernel Space)

  • 운영체제의 커널이 실행되는 메모리 영역
  • 사용자 모드의 프로세스가 접근할 수 없는 보호된 영역
  • 시스템의 안정성과 보안 유지에 중요한 역할을 함
  • 커널 공간에서 이루어지는 작업
    - 시스템 콜 처리 : 사용자 모드의 프로세스가 커널 기능을 요청할 때 사용되는 인터페이스 제공
    • 하드웨어 제어 : 장치 드라이버가 커널 공간에서 실행되어 하드웨어 제어
    • 메모리 관리 : 시스템 메모리의 할당 및 해제 처리
  • 커널 공간은 운영체제 핵심 기능 수행하는 데 필수적이고, 사용자 모드의 프로세스는 시스템 콜을 통해 간접적으로 이 공간에 접근 가능

큐 (Queue)

  • 자료 구조의 한 형태
  • 선입선출 원칙을 따름 (FIFO, First in First Out)
  • 먼저 들어온 데이터가 먼저 나가는 구조를 의미함
  • 큐의 두 가지 주요 작업
    - Enqueue: 큐의 끝에 요소를 추가하는 작업
    • Dequeue: 큐의 앞에서 요소를 제거하는 작업
  • 은행의 대기열을 생각하면 먼저 온 고객이 먼저 서비스를 받는 것과 같음
  • 비동기 데이터 처리나 작업 스케줄링에 유용함

메시지 큐 (Message Queue)

  • 메시지 전달을 통해 프로세스 간 통신을 지원하는 기법
  • 커널에 의해 관리되며, 프로세스가 메시지를 보내고 받을 수 있는 큐를 제공함
  • 이 방법은 메시지를 순서대로 처리할 수 있는 장점이 있으며, 데이터를 비동기적으로 전송할 수 있음
  • 메시지 큐는 시스템 콜을 통해 구현되며, 커널이 중재 역할을 함

공유 메모리 (Shared Memory)

  • 프로세스들이 메모리의 일부를 공유하여 직접 데이터를 읽고 쓸 수 있게 하는 방법
  • 커널의 개입 없이도 빠른 통신이 가능함
  • 프로세스가 커널에 요청하여 공유 메모리 영역을 할당 받으면, 해당 메모리 영역에 대한 접근은 일반적인 메모리 접근처럼 이루어짐
  • 동기화 문제를 직접 처리해야 하고, 일관성 문제를 해결해야하는 단점이 있음
profile
최강 개발자를 꿈꾸는 병아리

0개의 댓글