Computer Science/OS

[운영체제/OS] Process vs Thread 그리고 멀티스레드(Multi Thread)

예민한고라니 2022. 8. 27. 23:55

Process vs Thread

Process를 알아보자!

프로세스의 의미

  • 실행중인 프로그램을 의미한다.
  • 다수의 프로그램이 병행 수행될수 있는 오늘날에는 시분할 시스템(타임쉐어링)의 작업단위로 사용됨

프로세스의 상태 변화

사진출처 : TOPCIT 교재

  • 생성 -> 준비 : 스케줄러에 의해 프로세스가 호출됨.
  • 준비 -> 살행 : 사전 정의된 스케줄링 알고리즘에 따라 프로세스가 CPU할당 받음. 해당과정을 디스패치(dispatch) 라고함
  • 실행 -> 준비 : 더 높은 우선순위의 프로세스를 실행하거나, 자원할당시간 만료 후 준비상태로 다시 전환. 해당 과정을 타임아웃(Timeout) 이라 부름
  • 실행 -> 대기 : 할당된 시간 이전 실행 중에 기타 입출력 요구, 페이지 교환, read, write 등으로 CPU를 다른 프로세서에 할당 양도한 상태. 즉, Block 상태
  • 대기 -> 준비 : 위의 작업이 끝난 후, block 상태의 프로세스를 다시 준비상태로 돌려놓는다. WakeUP 상태 라고 부른다.

PCB (Process Control Block)

  • 프로세스가 생성될때 고유의 PCB 생성, 프로세스 종료 후 PCB 제거
  • PCB에는 프로그램 카운터, 프로세스 상태, PID(프로세스 식별 번호)등 존재

프로세스 메모리 구조

  • Code(text) : 실행할 프로그램의 코드 저장
  • Data : 전연변수 및 정적변수 저장
    • 추가적으로 BSS(Block Stated Symbol) 영역 존재 : 초기화 되지 않은 전역변수가 저장됨
  • Stack : 지역변수, 매개변수 등 잠시 사용되었다가 사라지는 데이터를 저장. 컬파일 타임에 크기가 결정된다.
  • Heap : 동적 데이터 영역으로, 메모리 주소 값에 의해서 참조되고 사용되는 영역. 런타임에 크기가 결정된다.
    • 예를들어) Stack에서 포인터 변수를 할당하면, 포인터가 가리키는 heap영역의 공간을 원하는 크기만큼 할당해 사용
    • Java 에서는 객체가 heap영역에 생성되고, Garbage Collection(GC)에 의해 정리
    • C에서는 malloc() 을 이용하여 할당

Thread 를 알아보자!

스레드의 의미

  • 프로세스 내에서 실제로 작업을 실행하는 주체로 경량프로세스(lightweight process)라고도 부름
  • 1개의 프로세스는 최소 1개의 스레드를 가진다.

멀티 스레드

  • 1개의 process에 2개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process) 라고부름
  • 1개의 프로세스 안에 존재하는 스레드들은, 프로세스의 메모리 구조 중 code, data, heap 영역은 공유되며, 각 스레드 별로 자신만의 Stack영역을 갖는다
  • 대표적인 예로 웹서버가 존재한다

Context Switching을 알아보자!

콘텍스트 스위칭이란

  • 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 순위의 Task가 실행되도록 새로운 Task의 상태 또는 레지스터의 값(Context)를 교체하는 작업을 일컷는다
    • 이떄 Context는 프로세스의 PCB에 저장된다
  • 콘텍스트 스위칭이 진행될때 해당 CPU는 아무런 일도 하지 못한다
  • 따라서 콘텍스트 스위칭이 잦아지면 오버헤드가 발생한다.
  • 콘텍스트 스위칭을 하는 주체 = OS 스케줄러 이다

MultiThread 와 MultiProcess

멀티프로세스

장점

  • 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 끼치지 않음

단점

  • context 전환과 함께 각 프로세스의 memory도 전환됨. 즉 높은 context swtiching 비용 발생
  • 상대적으로 많은 메모리 공간과 CPU 시간을 차지함

멀티스레드

장점

  • 적은 메모리 공간을 차지
  • 스레드간 통신 시 Heap 영역을 이용하여 데이터를 전달하므로 통신 방법이 간단해짐
  • code, data, heap 영역은 공유하기 때문에 context swtiching 비용이 상대적으로 적고 응답속도가 빠름
  • 이로인해 시스템 처리량이 향상 됨

단점

  • 동기화 문제 발생. 즉, 자원 공유 문제가 발생함
  • 하나의 스레드에서 문제가 발생시 전체프로세스가 영향을 받는다.

해당 게시글은 github에서 관리 및 공부중인 CS-study respository 내용을 옮겨 적은 것 입니다.

잘못된 이야기가 있으면 언제든 댓글 남겨주세요!

 

GitHub - ye1ne/CS-Study: 👩🏻‍💻👩🏻‍💻 예비 개발자의 컴퓨터공학 전공 지식 정리📚

👩🏻‍💻👩🏻‍💻 예비 개발자의 컴퓨터공학 전공 지식 정리📚. Contribute to ye1ne/CS-Study development by creating an account on GitHub.

github.com