프로세스와 스레드

yun yun·2021년 8월 12일
0

프로세스

프로그램이란?

  • 어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램

프로세스란?

  • 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태


멀티태스킹

OS를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드간에 나누는 행위를 말한다.

위의 그림을 참고로 하여, 재미있는 가정하기

  • locodingve => CPU
  • 매니저 => CPU Scheduler
    • 매니저는 여러 요구들에 대응하는 방법이 여러가지 있을 거예요!(관련: 스케쥴링의 종류)
    • 매니저는 요구들에 대응하면서, 각 요구들에 대한 처리 내용을 기억해야 겠죠~? ex) 싸인 해준 뒤...(시간흐름)..다른 일 하고 나서 든 생각 => 아까 싸인 해달라는 분에게 싸인 해줬던가? (관련: PCB가 필요한 이유)
  • 그 외 요구하는 사람들 => 프로세스

Context Switching

CPU는 한 번에 한가지 명령어 밖에 처리하지 못한다. 즉 동시가 아닌 재빠르게 프로세스들을 번갈아가며 실행하고 관리하다. 이를 Context Switching이라고 한다.

CPU Scheduler

특정한 우선순위를 기반으로 CPU를 할당받게 해주는 역할을 한다.

그리고 CPU를 적절하게 효율적으로 사용할 수 있도록 하는 작업을 스케쥴링이라고 한다.
스케줄링의 목적은 3가지 이다.
1) CPU를 최대한 활용하기
2) 대기 시간을 최소화 하기
3) 처리량을 회대화 하기

스케쥴링의 종류는 알고리즘에 따라 6가지 입니다. (FCFS, SJF, Priority Scheduling, RR, Multilevel-Queue, Multilevel-Feadback-Queue)

PCB와 프로세스의 상태

  • PCB(Process Control Block) : 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조이다.

  • PCB가 필요한 이유 : CPU가 여러 프로세스를 빠르게 번갈아가면서 작업하기 위해서는 프로세스에 대한 정보 및 상태를 저장/복원할 필요가 있기 때문이다.

  • 프로세스 상태

    (그림 출처 : https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37)

new : 프로세스가 생성되는 상태
ready : 프로세스가 CPU에 할당되어, 처리되기를 기다리는 상태
running : 프로세스가 CPU에 할당되어, 명령어들이 실행 되는 상태
wating : 어떤 이벤트의 발생으로 인해 프로세스가 기다리는 상태
terminated : 프로세스가 종료되는 상태

스레드 (Thread)

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.

빨간색 부분을 눈여겨봐 주세요~

  • Thread 들은 stack은 공유하지 않지만, Code Data Heap 공유하고 있네요~
  • 내가 설계한 프로젝트가 멀티스레드 프로그램일 경우, 동기화를 지원하는 객체를 사용할지 말지를 중요하게 논의해 봐야겠어요!

참고: https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37

profile
같이 일 하고 싶은 개발자가 목표!

0개의 댓글