Information

[Information] 2. Process와 Thread 실행

hyeon1212 2023. 8. 8. 14:49

<멀티 태스킹 : OS 핵심>

4코어(물리적 개수) 8스레드(논리적 코어 개수) :물리적 코어 1개당, 스레드 2개 이상을 동시에 실행 가능

상하권이 나뉜 4세트의 책 => 하이퍼스레딩

https://juneyr.dev/thread

  • 하드웨어 스레드 : os가 스케줄 할 수 있는 최소 단위의 일

 

<병렬성과 동시성>

병렬성 : 코어에 맞춰 여러개의 프로세스, 스레드를 돌려 병렬로 작업들을 동시 수행

동시성 : 둘 이상의 작업이 동시에 실행되는 것처럼 보이게 = 계속 번가면서 처리 -> 컨텍스트 스위칭

 - 논리적 효율성(짧은 작업의 대기)과 hw적 한계(엄청나게 많은 코어를 넣을 수 없음)로 필요

 


<프로세스 &  스레드 생명주기>

프로세스 스케줄링 : OS에서 CPU를 사용할 프로세스 선택 후 할당

FCFS(First-Come, First-Served), SJF(Shortest-Job-First), Priority, RR(Round-Robin), Multilevel Queue

 

프로세스 상태

생성 new (준비x)

준비 ready (실행을 위해 cpu 할당을 대기)

실행 running (cpu 할당)

대기 waiting (이벤트에 의해 대기, 이벤트가 발생하면 ready상태 됨)

종료 terminated (메모리에서 제거)

 

 

<프로세스  컨텍스트 스위칭>

한 프로세스 -> 보관 -> 대기 프로세스 상태 복구(pcb 가져) -> 다른 프로세스 동작 발생되는 과정을 의미합니다.

 

해당 작업의 주체는 스케줄러로, interrupt나 system call에 따라 수행하게 됨

 

PCB 프로세스 제어 블록(스케줄링을 위한 임시 저장소)에 

포인터 : 현재 위치 저장, 프로그램 카운터 : 프로세스에서 실행될 다음 명령어 주소,

프로세스의 상태, 아이디, 메모리 제한, 열린 파일 목록 등이 들어가 있다.

 

컨텍스트 스위칭 과정에서 바로 다음 프로세스가 execute가 발생하지 않는 이유는 스위칭 오버헤드인 간극이 존재하기 떄문입니다.

  • PCB 저장 및 복원 비용
  • CPU 캐시 메모리 무효화에 따른 비용
  • 프로세스 스케줄링 비용

 

스레드 스케줄링은 프로세스 스케줄링과 다르게 스레드 간의 상호작용과 동기화 문제를 고려해야 합니다.

PCB처럼 TCB 스레드 제어 블록이 있습니다.

 

차이로는

  • TCB가 PCB보다 가볍다(stack 및 간단한 포인터 정보만 저장)
  • 같은 CPU코어에서 컨텍스트 스위칭인 경우에는 캐시 메모리 초기화되지 않는다.
  • 자원 동기화 문제가 있다. => 경쟁조건 : 파일 내용 손상될 수 있음

 

 

 


<멀티 프로세스 & 멀티 스레드>

처리방식

 

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-multi-process-multi-thread

 


아래의 내용을 참고로 만들었습니다.

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4

 

👩‍💻 ‍완전히 정복하는 프로세스 vs 스레드 개념

한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아

inpa.tistory.com

https://juneyr.dev/thread

 

하드웨어 스레드와 소프트웨어 스레드

서론 notice : 모던 자바 인 액션 관련 글은 책의 저작권 이슈를 우려해서 삭제했습니다. CompletableFuture 의 비동기 처리 를 공부하다가 비동기 작업을 다시 merge하는 작업, 즉 thenCompose 와 thenCombine…

juneyr.dev