프로세스(process), 스레드(thread)

Groot·2022년 10월 12일
0

TIL

목록 보기
85/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 프로세스

📍 Process란?

  • 프로세스(process)란 단순히 실행 중인 프로그램(program)이라고 할 수 있습니다.
  • 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말합니다.
  • 프로그램이 메모리에 로드되어 프로세스가 되면 스택, 힙, 텍스트 및 데이터의 네 부분으로 나눌 수 있습니다. 다음 이미지는 메인 메모리 내부 프로세스의 단순화된 레이아웃을 보여줍니다

Stack
프로세스 스택에는 메서드/함수 매개변수, 반환 주소 및 지역 변수와 같은 임시 데이터가 포함됩니다.

Heap
런타임 동안 프로세스에 동적으로 할당된 메모리입니다.

Text
여기에는 Program Counter 값과 프로세서 레지스터의 내용이 나타내는 현재 활동이 포함됩니다.

Data
이 섹션에는 전역 및 정적 변수가 포함되어 있습니다.


📍 Process Life Cycle

Start
프로세스가 처음 시작/생성될 때의 초기 상태.

Ready
프로세스가 프로세서에 할당되기를 기다리는 상태. 프로세스는 시작 상태 이후 또는 실행 중에 이 상태가 될 수 있지만 스케줄러에 의해 인터럽트되어 CPU를 다른 프로세스에 할당할 수 있습니다.

Running
OS 스케줄러에 의해 프로세스가 프로세서에 할당되면 프로세스 상태는 실행 중으로 설정되고 프로세서는 명령을 실행합니다.

Waiting
프로세스는 사용자 입력을 기다리거나 파일을 사용할 수 있을 때까지 기다리는 것과 같이 리소스를 기다려야 하는 경우 대기 상태로 이동합니다.

Terminated or Exit
프로세스가 실행을 완료하거나 운영 체제에 의해 종료되면 종료된 상태로 이동하여 주 메모리에서 제거되기를 기다립니다.


📍 Process Control Block (PCB)

  • 프로세스 제어 블록은 모든 프로세스에 대해 운영 체제에서 유지 관리하는 데이터 구조입니다.
  • PCB는 프로세스 수명 내내 유지되며 프로세스가 종료되면 삭제됩니다.

📍 Process Scheduling

  • 프로세스 스케줄링은 CPU에서 실행 중인 프로세스를 제거하고 특정 전략을 기반으로 다른 프로세스를 선택하는 프로세스 관리자의 활동입니다.
  • 프로세스 스케줄링은 다중 프로그래밍 운영 체제의 필수적인 부분입니다.
  • 이러한 운영 체제는 한 번에 둘 이상의 프로세스를 실행 가능한 메모리에 로드할 수 있으며 로드된 프로세스는 시간 다중화를 사용하여 CPU를 공유합니다.

🔗 Non-preemptive(동기 처리?)

  • 여기서 프로세스가 실행을 완료할 때까지 프로세스에서 리소스를 가져올 수 없습니다.
  • 리소스 전환은 실행 중인 프로세스가 종료되고 대기 상태로 이동할 때 발생합니다.

🔗 Preemptive(비동기 처리?)

  • 여기서 OS는 고정된 시간 동안 프로세스에 리소스를 할당합니다.
  • 자원 할당 동안 프로세스는 실행 상태에서 준비 상태로 또는 대기 상태에서 준비 상태로 전환됩니다.
  • 이 전환은 CPU가 다른 프로세스에 우선 순위를 부여하고 우선 순위가 더 높은 프로세스를 실행 중인 프로세스로 대체할 수 있기 때문에 발생합니다.

🔗 Schedulers

  • 스케줄러는 다양한 방식으로 프로세스 스케줄링을 처리하는 특수 시스템 소프트웨어입니다.
  • 그들의 주요 임무는 시스템에 제출할 작업을 선택하고 실행할 프로세스를 결정하는 것입니다.
  • 스케줄러에는 세 가지 유형이 있습니다.
    • Long-Term Scheduler
    • Short-Term Scheduler
    • Medium-Term Scheduler
    • 자세한 내용

🔗 Context Switching

  • 컨텍스트 스위칭은 프로세스 제어 블록에 CPU의 상태 또는 컨텍스트를 저장하고 복원하여 나중에 같은 지점에서 프로세스 실행을 재개할 수 있도록 하는 메커니즘입니다.
  • 이 기술을 사용하면 컨텍스트 스위처를 통해 여러 프로세스가 단일 CPU를 공유할 수 있습니다.
  • 컨텍스트 스위칭은 멀티태스킹 운영 체제 기능의 필수적인 부분입니다.

  • 스케줄러가 CPU를 한 프로세스 실행에서 다른 프로세스 실행으로 전환하면 현재 실행 중인 프로세스의 상태가 프로세스 제어 블록에 저장됩니다.
  • 그 후, 다음에 실행할 프로세스의 상태는 자체 PCB에서 로드되어 PC, 레지스터 등을 설정하는 데 사용됩니다. 이 시점에서 두 번째 프로세스가 실행을 시작할 수 있습니다.
  • 프로세스가 전환되면 다음 정보가 나중에 사용하기 위해 저장하는 정보 목록
    • Program Counter
    • Scheduling information
    • Base and limit register value
    • Currently used register
    • Changed State
    • I/O State information
    • Accounting information

🔗 Scheduling algorithms

🤔 non-preemptive, preemptive algorithm
  • First Come First Serve (FCFS)
    • 작업은 선착순으로 실행
  • Shortest Job Next (SJN)
    • 가장 짧은 작업 우선 또는 SJF
🤔 non-preemptive algorithm
  • Priority Based Scheduling
    • 각 프로세스에는 우선 순위가 지정됩니다. 우선 순위가 가장 높은 프로세스가 먼저 실행되는 식입니다.
    • 우선 순위는 메모리 요구 사항, 시간 요구 사항 또는 기타 리소스 요구 사항에 따라 결정할 수 있습니다.
🤔 preemptive algorithm
  • Shortest Remaining Time
    • 최단 잔여 시간(SRT)은 SJN 알고리즘의 선점 버전입니다.
    • 프로세서는 완료에 가장 가까운 작업에 할당되지만 완료 시간이 더 짧은 새로운 준비 작업에 의해 선점될 수 있습니다.
  • Round Robin Scheduling
    • 각 프로세스에는 실행할 고정 시간이 제공되며 이를 퀀텀이라고 합니다.
    • 주어진 시간 동안 프로세스가 실행되면 해당 프로세스가 선점되고 지정된 시간 동안 다른 프로세스가 실행됩니다.
🤔 Multiple-Level Queues Scheduling
  • 다중 레벨 큐는 독립적인 스케줄링 알고리즘이 아닙니다.
  • 다른 기존 알고리즘을 사용하여 공통 특성을 가진 작업을 그룹화하고 예약합니다.

📍 Thread란?

  • 스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다.
  • 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행합니다.
  • 스레드는 경량 프로세스라고도 합니다.
  • 스레드는 병렬 처리를 통해 애플리케이션 성능을 향상시키는 방법을 제공합니다. 스레드는 오버헤드 스레드를 줄임으로써 운영 체제의 성능을 향상시키는 소프트웨어 접근 방식을 나타냅니다.
  • 다음 그림은 단일 스레드 및 다중 스레드 프로세스의 작동을 보여줍니다.

📍 Difference between Process and Thread

ProcessThread
프로세스가 무겁거나 리소스를 많이 사용합니다.스레드는 프로세스보다 리소스를 덜 사용하는 경량입니다.
프로세스 전환은 운영 체제와의 상호 작용이 필요합니다.스레드 전환은 운영 체제와 상호 작용할 필요가 없습니다.
다중 처리 환경에서 각 프로세스는 동일한 코드를 실행하지만 고유한 메모리와 파일 리소스가 있습니다.모든 스레드는 동일한 열린 파일 집합, 자식 프로세스를 공유할 수 있습니다.
한 프로세스가 차단되면 첫 번째 프로세스가 차단 해제될 때까지 다른 프로세스를 실행할 수 없습니다.한 스레드가 차단되어 대기하는 동안 동일한 작업의 두 번째 스레드가 실행될 수 있습니다.
스레드를 사용하지 않는 여러 프로세스는 더 많은 리소스를 사용합니다.다중 스레드 프로세스는 더 적은 리소스를 사용합니다.
여러 프로세스에서 각 프로세스는 다른 프로세스와 독립적으로 작동합니다.한 스레드는 다른 스레드의 데이터를 읽거나 쓰거나 변경할 수 있습니다.

📍 Advantages of Thread

  • 스레드는 컨텍스트 전환 시간을 최소화합니다.
  • 스레드를 사용하면 프로세스 내에서 동시성이 제공됩니다.
  • 효율적인 커뮤니케이션.
  • 스레드를 만들고 컨텍스트를 전환하는 것이 더 경제적입니다.
  • 스레드를 사용하면 다중 프로세서 아키텍처를 더 큰 규모와 효율성으로 활용할 수 있습니다.

참고

profile
I Am Groot

0개의 댓글