프로세스와 스레드

Kyu·2021년 1월 21일
0

>글, 사진 출처가 적혀있습니다. 더 자세한 내용은 링크로 들어가주세요.`

프로세스 구조

-----------
|  Stack  |  ->  호출된 함수, 지역변수 등 임시 데이터
-----------
|  Heap   |  ->  동적으로 생긴 데이터. 예) new Object(), Kyu()
-----------
|  Data   |  ->  전역변수. 예) static 변수, global 변수
-----------
|  Code   |  ->  프로그램의 코드
-----------

프로세스 상태


두 프로세스 P0과 P1이 있다고 가정하자. P0은 Running(실행중)인 상태, P1은 Ready(대기) 상태다. 이 상태에서 interrupt 또는 시스템 콜이 발생하면 P0은 Running이 아닌 Ready 상태로 전환된다. 추후 복원될 P0을 위해 해당 프로세스 정보를 PCB에 담아 저장한다. P1은 이전에 저장한 PCB로부터 상태를 복원하여 작업을 계속 수행한다. P1도 어느 시점이 되면 다시 Ready 상태가 되어 PCB에 상태를 담아 저장하고, P0이 PCB로부터 복원되어 작업을 계속 수행할 것이다.

이 작업들이 계속 해서 반복되는데, 이러한 일련과정들을 Context Switching이라고 한다. Context Switching도 메모리에 I/O를 하는 작업이기 때문에 실행되는 프로세스의 수가 많거나, Context Switching의 빈번한 발생은 Overhead를 발생시켜 성능 저하를 결과를 가져온다.
🖼그림&📄글 출처 링크

PCB (Process Control Block)

프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다. 프로세스 상태의 이미지에 있는 프로세스와 PCB의 관계를 잘 살펴보자.

멀티 스레드

일반적으로 멀티스레드르 사용하는 이유는 사용자와 상호작용하는 애플리케이션에서 단일 스레드로 Network 또는 DB 와 같은 긴 작업(Long-running task) 을 수행하는 경우 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문이다.
📄글 출처

멀티 프로세스 VS 멀티 스레드

응답 시간 단축 및 처리 비용 감소

프로세스간의 Context Switching은 느린 반면 쓰레드간의 Context Switching 은 빠른데, 그 이유는 Context Switching 시 스레드는 Stack 영역만 처리하면 되기 때문이다.

멀티 스레드의 안정성 문제
여러 개의 스레드가 동일한 데이터 공간(Critical Section)을 공유하면서 이들을 수정한다는 점에 필연적으로 생기는 문제이다. 멀티 프로세스의 프로그램은 문제가 생기면 해당 프로세스가 중단되거나 중단 시키고 다시 시작 하면된다. 하지만 멀티 스레드 방식의 프로그램에서는 하나의 스레드가 자신이 사용하던 데이터 공간을 망가뜨린다면, 해당 데이터 공간을 공유하는 모든 스레드를 망가뜨릴 수 있다.
Critical Section: 임계 구역(critical section) 또는 공유변수 영역은 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원(자료 구조 또는 장치)을 접근하는 코드의 일부를 말한다.
📄글 출처

자바 스레드란?

  1. 일반 스레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다.
  2. 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다.
  3. 자바에서 스레드 스케줄링은 전적으로 JVM에 의해 이루어진다
  4. 아래와 같은 스레드와 관련된 많은 정보들도 JVM이 관리한다.
  • 스레드가 몇 개 존재하는지
  • 스레드로 실행되는 프로그램 코드의 메모리 위치는 어디인지
  • 스레드의 상태는 무엇인지
  • 스레드 우선순위는 얼마인지
    📄글 출처

해결하고 싶은 질문

  1. 프로세스의 생명주기라고 나오는데, terminated 되었다는 말은 죽었다 -> 메모리에 시체가 남아있다. 이렇게 이해하면 될까요? 링크
  1. 프로세스 상태에 따라 예시를 들어보겠습니다. 맞는 예시인지 확인해주세요. 링크
  • new : 줌을 켰다
  • ready : 줌이 메모리에서 실행(running)되길 기다리고 있다
  • running : 말그대로 줌이 실행중이다.
  • terminated : 줌이 종료되었다
  • waiting : 🤔ready와 헷갈린다
  1. 멀티 스레드 특징 중 "멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다. "는 무슨 의미? 병렬로 수행한다는 건 무슨의미일까? 같은 프로세스 내에서 다른 작업을 수행할 수 있다는 의미인가? 링크
profile
TIL 남기는 공간입니다

1개의 댓글

comment-user-thumbnail
2021년 1월 22일

질문답변

  1. 좀비프로세스, 프로세스는 항상 부모가 있는데 자식이 매트릭스처럼 변신해있다가 죽는다. 그러고나서 엄마 나먼저죽어 안녕~그러는데 자식프로세스의 시체를 수습하는게 부모의 책임이다. 청소부프로세스가있다. 모든프로세스의 조상인 init or System D or launch D 가 청소부역할을 하거나 운영체제에 따라다른데 전담청소부를 만든다.

  2. waiting과 ready의 다른점은 waiting은 아직 ready되지 못하는거...공부할려고하는데 아직 공부안하는상태는 ready인데 밥먹거나 응가하는건 waiting 그런걸 인터럽트 됐다고 한다

답글 달기