[OS] Process, Thread, Multi Process, Multi Thread

kafkaaaa·2023년 9월 18일
0
post-thumbnail

#1. 프로세스 (Process)

  • 운영체제로부터 자원을 할당받은 작업의 단위
  • Process is a program in execution
  • 프로세스는 실행중인 프로그램을 의미

모든 프로그램은(운영체제 포함) 메모리에 올라와야 사용할 수 있다 (폰 노이만 구조)

작업관리자에서 프로세스들을 볼 수 있다. (PID = Process ID)



📌 프로세스의 구조 (메모리 배치)


1. Stack 영역

  • 호출된 함수의 작업을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴 값 등)를 임시로 저장하는 공간
  • 스택 = LIFO 구조를 사용하여 메모리의 높은 주소부터 시작하여 낮은 주소로 할당됨
  • 컴파일 타임에 크기가 결정됨 (stack overflow 발생 가능성 있음)
  • 함수 호출시 할당되고 리턴시 소멸됨
  • Read-Write 가능

2. Heap 영역

  • 메모리 주소 값에 의해서만 참조되고 사용되는 동적 데이터 영역
  • 메모리의 낮은 주소에서 높은 주소 방향으로 할당됨
  • 다른 영역과는 다르게 런타임에 크기가 결정됨
  • malloc, calloc, realloc, new
  • memory leak 방지를 위해 메모리 해제 필요 (free, delete 또는 GC가 처리)

3. Data 영역 (BSS, GVAR)

  • 프로그램이 사용하는 데이터를 저장하는 공간
  • BSS(Block Started by Symbol) : 초기값이 없는 전역 변수/static 변수/배열
  • GVAR(Global Variable) : 초기값이 있는 전역 변수/static 변수/배열

4. Text(Code) 영역

  • 프로그램의 컴파일된 코드(기계어)가 저장되어 있음
  • CPU는 여기서 명령어를 하나씩 가져와 처리함
  • Read-only


📌 공간을 나눈 이유?

  • 데이터를 공유하여 메모리를 적게 사용하려고

📌 Heap과 Stack의 방향이 반대인 이유?

  1. 스택은 항상 커널의 반대 방향으로 자라기 때문에 스택이 아무리 커져도 커널을 건드리지 않음

  1. 공유 라이브러리 영역을 가운데에 두고 서로 마주보는 형태를 갖기 때문에 메모리 공간을 알뜰하게 활용 할 수 있음


#2. 스레드 (Thread)

  • 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 프로세스 내에서 동시에 진행되는 작업의 갈래, 흐름의 단위
  • 하나의 프로세스는 최소 하나의 Thread(메인 스레드)를 가짐
  • 스레드는 프로세스 내에서 Code, Data, Heap 영역은 공유하여 사용하고 Stack 영역만 따로 할당받음
  • 한 스레드가 프로세스의 자원을 변경하면 다른 스레드에도 그 변경이 즉시 반영됨


#3. 멀티 프로세스 & 멀티 스레드

#멀티 프로세스

  • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(task)을 처리하도록 하는 것

예를 들어 위 크롬 프로그램은 여러 자식 프로세스로 구성되어 있다.

  • 😀 장점

    • 여러 자식 프로세스 中 하나에 문제가 발생해도 해당 프로세스만 죽을 뿐 그 영향이 확산되지 않음
  • 😥 단점

    • Context Switching 비용 (Overhead)
    • Context Switching은 캐쉬 메모리 초기화 등 상대적으로 시간과 비용이 큰 작업
    • 프로세스는 각각 독립된 메모리 영역을 할당받기 때문에 프로세스 간 공유하는 메모리가 없어 Context Switching시 캐쉬에 있는 모든 데이터를 리셋하고 다시 불러오는 과정이 필요함
    • 📌 Context Swtiching
  • 독립적인 메모리 할당과 안정적 운영이 필요한 경우, CPU bound 작업이 많은 경우 적합
    📌 CPU bound vs I/O bound

#멀티 스레드

  • 하나의 프로세스를 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업(task)을 처리하도록 하는 것
    멀티 프로세스의 단점들을 극복하기 위해 등장.

  • 😀 장점

    • 스레드의 생성 및 Context Switching은 프로세스보다 훨씬 빠르고
    • 프로세스 처럼 데이터 교환을 위해 IPC와 같은 기법이 필요 없다.
    • 즉, 프로세스처럼 메모리 영역을 통째로 복사하는 것이 부담스럽기 때문에 멀티 스레드를 사용
  • 😥 단점

    • 자원 공유 문제 (동기화 문제, 교착 상태)
    • 한 스레드에 문제가 발생하면 전체 (프로세스)가 영향을 받음
  • 메모리 공유가 필요하고, I/O bound 작업이 많은 경우 적합
    📌 CPU bound vs I/O bound



Ref

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

https://www.hackerschool.org/Sub_Html/HS_University/BOF/essential/PDF_Files/15.pdf

https://kkongchii.tistory.com/entry/dsd

https://velog.io/@aeong98/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C#%EB%A9%80%ED%8B%B0%ED%83%9C%EC%8A%A4%ED%82%B9-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C

https://brunch.co.kr/@babosamo/100

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

https://velog.io/@mooh2jj/Process-vs-Thread-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0

profile
일모도원

0개의 댓글