Process & Thread 기본개념

Updated:

Process & Thread 기본개념 다시 보기

  • 프로세스 : 프로그램을 메모리 상에서 실행중인 작업 (실행 되고있는 프로그램)
  • 스레드 : 프로세스 안에서 실행되는 여러 흐름 단위(프로세스 내부에서 실행되는 단위)

기본적으로 프로세스마다 최소 한개이상의 스레드(메인스레드)를 소유

Process_Thread

프로세스는 각각 별도의 주소공간 할당

  • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
  • Data : 전역변수, 배열 등(초기화된 데이터)
  • Heap : 동적 할당시 사용(new(), malloc())
  • Stack : 매개변수, 지역변수, 리턴값(임시 메모리 영역)

스레드는 Stack 영역만 할당받고 나머지는 공유

  • 프로세스는 자신만의 별도의 공간과 자원을 운영체제로부터 할당받지만,
  • 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용함

전역변수 vs 정적변수


  • 전역변수와 정적변수는 lifetime은 동일하다.
    • 즉, 해당 프로그램이 죽을 때까지 한번 할당된 변수 메모리와 값은 유지된다는 점이다.
  • 반면에 scope는 서로 다르다.
    • 전역변수는 해당 프로그램(실행파일 기준)의 어느 함수, 어느 파일에서도 접근이 가능하다
    • 그러나, 정적변수는 변수가 선언된 파일이나 함수내에서만 접근이 가능하다.

MultiProcess


말 그대로 프로세스가 여러개

  • 하나의 컴퓨터에 여러 CPU 장착 → 하나 이상의 프로세스들이 하나의 작업을 동시에 처리

장점 : 각각의 독립된 메모리 영역을 존재해서, 한 프로세스가 문제가 생기더라도, 다른 프로세스에 영향을 주지 않음

단점 : Context Switching으로 인한 오버헤드 발생

  • Context Switching : 프로세스의 상태 정보를 저장하고 복구하는 일련의 과정
    • 즉, 동작 중인 프로세스가 대기 상태에 들어가고, 다음순번의 프로세스가 동작을 하려할때
    • 이전에 동작했던 프로세스의 상태를 복구하는 과정을 말한다
  • 프로세스는 각각의 독립된 메모리로 구성되어있기때문에, Context Switching이 발생하면, 캐쉬에 있는 모든 데이터를 리셋하고 다시 불러와야 한다

그런데도 이 Context Switching을 왜 쓰는거여?

  1. Computer가 매번 하나의 task만 처리를 할수밖에 없다 → 그래서 사람들은 여러가지 작업을 동시에 처리하지 못하고 계속 기다려야 함(크롬하다가 카톡 갈때)
  2. 그래서 Computer가 task를 바꿔가면서 빠르게 실행을 하게되면, 사용자 눈에는 동시에 컴퓨터가 처리되는 것처럼 보임, Computer Multitasking을 위해서 Context Switching이 필요함 ㅇㅇ

출처 : https://nesoy.github.io/articles/2018-11/Context-Switching

MultiThread


하나의 응용 프로그램에서 다수의 스레드를 형성해 하나의 작업을 처리하는 것

스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하게 함

장점 : 독립적인 프로세스의 context switching에 비해, 공유 메모리 만큼의 시간 자원 손실을 줄일수 있다.

  • 스레드들 끼리는 Stack 영역을 제외한 나머지 데이터 영역을 이미 공유를 하고 있기 때문에,
  • Thread들 사이에 Context Switching이 일어난다면 Stack영역만 일어나면 될것이다.

단점 :

  • 동기화이슈, 공유된 메모리를 접근하기 때문에, 한 스레드가 일을 잘못처리하면 모든 다른 스레드들에 영향을 주게된다.
  • 잘못하면 데드락에 걸리기도함, 그래서 이부분은 critical Section 기법을 통해 해결을 시도함

Critical Section : 하나의 스레드가 공유 데이터를 변경하는 시점에, 다른 스레드들은 접근하지 못하게 하는것

Leave a comment