삐옹

[항해톡 2주차]프로세스와 스레드 본문

항해톡 준비 자료 정리

[항해톡 2주차]프로세스와 스레드

삐옹 2022. 5. 26. 02:01

1주차 REST Api 발표에 이어서 2주차 프로세스와 스레드를 신청하게 되었다.

 

나는 컴퓨터 사양을 전혀 볼 줄 모르는 컴퓨터까막눈이다. 아 램다익선..

인텔이랑 m1, 코어에 뭐 숫자가 붙어있고, 램이 몇이다 어쩌구저쩌구.

뼛 속까지 문돌이인 내게는 너무나 생소히게 느껴지는 용어들이라.

대체 뭘 나타내는걸지 궁금증을 항상 갖고있었는데..(그렇다고 찾아본 적은 없다)

그런 부분에 있어 이 주제가 조금은 도움이 되지 않을까 싶어

프로세스와 스레드를 맡아 준비하게 되었다.

 


목차
  1. 용어정리
  2. 프로세스
    1. 프로세스 상태(작업 흐름)
    2. 프로세스 구조
    3. 멀티 프로세스
  3. 스레드
    1. 스레드 구조
    2. 멀티 프로세스 vs 멀티 스레드
  4. 멀티코어
    1. 멀티스레딩
  5. 요약정리

용어 정리

프로그램

: 실행되기 전의 실행파일. 어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일. 웹브라우저, 워드, 카톡, vsc 등 

프로세스

: 운영 체제 위에서 실행 중인 프로그램. 프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 실행 대기중인 상태.

 프로세스는 기본적으로 하나의 프로그램만 실행할 수 있다. 

프로세서

: 프로세스가 동작될 수 있도록 하는 하드웨어(=cpu) 

 

*동작: 프로그램의 자원이 메모리에 올라오고, 실행 되어야 할 코드의 메모리 주소를 CPU의 레지스터로 올리는 것.

 

Context Switching

  • CPU는 기본적으로 하나의 프로그램만 실행할 수 있다. 
  • CPU가 여러 프로세스를 돌려가면서 작업을 진행하는 것을  context switching 이라고 한다.
  • 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

이 context switching를 하기위해서 CPU는 다음의 프로세스의 상태와 진행 정보를 알아야 한다.

프로세스의 상태

준비 -> 실행 -> I/O작업 -> 대기 -> 준비 -> ... -> 실행 -> 프로세스 종료 

 

 

프로세스의 구조

code - 프로그램의 코드

data - 전역변수 

heap - 동적으로 생긴 데이터 ex) new Object()

stack - 호출된 함수, 리턴값, 지역 변수 등 임시 데이터

 

멀티프로세스

장점

  • 독립된 구조로 안전성이 높은 장점이 있다.
  • 프로세스 중 하나에 문제가 생겨도 다른 프로세스에 영향을 주지 않아, 작업속도가 느려지는 손해정도는 생기지만 정지되거나 하는 문제는 발생하지 않는다.(google chrome)
  • 여러개의 프로세스가 처리되어야 할 때 동일한 데이터를 사용하고, 이러한 데이터를 하나의 디스크에 두고 모든 프로세서(CPU)가 이를 공유하면 비용적으로 저렴하다.

문제점

  • 독립된 메모리 영역이기 때문에 작업량이 많을수록( Context Switching이 자주 일어나서 주소 공간의 공유가 잦을 경우) 오버헤드가 발생하여 성능저하가 발생 할 수 있다.
  • Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 시간이 소모되는 등 오버헤드가 발생한다.

 

멀티스레드

장점

  • 메모리 낭비가 적다(공유 자원, 효율 up)
  • 통신 비용이 적다(공유 자원)
  • context switching 비용이 적다.

문제점

  • heap, data, code의 자원을 공유하기 때문에 동기화 작업이 필요하다.
  • 스레드들이 긴밀히 연결되어 있기때문에 하나의 스레드에서 장애가 발생하면 전체 스레드에도 문제가 생긴다.(IE 에러창)

요약

  1. 프로세스는 실행되고 있는 파일을 나타낸다.
  2. 프로세스와 스레드에 의해 context switching이 일어나며 작업을 동시에 수행할 수 있다.
  3. 멀티 프로세스와 멀티 스레드는 하나의 작업을 동시에 처리하기 위한 다른 처리방식이다.
  4. 멀티 프로세스는 독립된 자원을 갖고, 자원을 공유하지 않기에 자원이 소모되고 메모리가 낭비되며 context switching 비용이 크다.. 필요한 자원을 공유하기 위한 통신이 필요하다. 대신 동기화 작업은 필요없다.
  5. 멀티 스레드는 공유되는 자원을 갖는다. 그래서 동기화 작업이 필요하다. context switching ,메모리 낭비, 통신비용이 적다. 스레드 간 긴밀하게 연결되어 있기에 한 프로세스(스레드?)에 장애가 생겼을 때 전체 프로세스(?)에 영향을 주는 것은 멀티스레드이다.(???) 

[두 처리 방식의 장단점]

https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/

 

멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread)

멀티 프로세스와 멀티 스레드의 차이

wooody92.github.io