프로세스와 스레드

이현지·2021년 3월 14일
0

프로세스와 스레드(1탄)

프로세스와 스레드에 대해 알아보자!
우선 이번 글은 프로세스에 대해 알아보고, 다음에 스레드, 프로세스와 스레드의 차이를 포스팅할 것이다.

프로세스란?

  • 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
  • 프로그램이 구동이 되어, 주메모리에 적재되면, 메모리 상에서 실행되는 작업의 단위
  • 작업 이라고도 부른다. (작업관리자에 들어가면 프로세스라고 써있는걸 볼 수 있음!)

프로세스 특징

  • 하나의 프로세서(CPU)는 한 순간 하나의 프로세스만 실행할 수 있다!

    그런데 컴퓨터를 쓰다보면 우리는 여러개의 프로세스를 동시에 실행한다.
    음악을 들으며~ 문서작업하다가~ 카카오톡도 하고~ 어떻게 동시에 가능할까?
    ==> 하나의 프로세서가 빠르게 프로세스들을 왔다리 갔다리 하는 것이다! --> 이것이 바로 멀티태스킹

  • 하나의 작업을 여러개의 프로세서(CPU)가 하는 것!(듀얼코어..쿼드코어..등등) --> 이것은 멀티프로세싱

프로세스 생명주기(LifeCycle)

프로세스상태

  • 생성(new)
  • 준비(ready)
  • 실행(running)
  • 대기(waiting)
  • 종료(terminated)

대기상태와 준비상태의 차이는 무엇일까?

  • 준비상태는 말 그대로 실행상태전 준비상태이다.
    또한 인터럽트가 발생하면 실행중인 프로세스는 준비상태가 된다.
  • 대기상태는 프로세스가 실행된 후 입출력을 기다리는 상태이다.

    예를 들어 롤을 실행시켰다. 프로세스는 실행상태이다.
    롤이 실행되고 나서 로그인창이 뜨게된다.
    로그인을 하기 전까지 롤은 그 다음으로 넘어가지 않는다.
    이때, 프로세스는 대기상태가 된다. 로그인 입력을 받기 전까지 계속 대기상태가 되는 것!

프로세스 제어블록(PCB)

  • 프로세스 제어블록이란?
    커널의 자료구조이다.
    프로세스의 정보를 포함하고 있다.
    모든 프로세스는 고유한 PCB를 갖는다.
    프로세스 생성 시 만들어지고, 프로세스가 종료되면 삭제된다.
    프로세스의 중요 정보를 포함하고 있기 때문에, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역에 있다.
  • PCB 포함정보

PCB포함정보

  • 문맥교환(Context Switching)
    CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어, 레지스터에 적재하는 과정!
    레지스터에 프로세스 정보가 바뀌는 것이다.
    위의 프로세스 상태에서 interrupt 가 발생하는 과정이 문맥교환이 일어나는 것이다.

    예를 들어 현재 실행 중인 프로세스가 있다.
    그런데 우선순위가 먼저인 프로세스가 들어왔다.
    지금 실행하는 프로세스를 실행상태에서 준비상태로 변경하고,
    우선순위가 높은(현재 준비상태) 프로세스를 실행상태로 변경한다.
    이것이 바로 문맥교환!

프로세스 메모리 구조

프로세스메모리구조

  • Code 코드 : 말 그대로 코드 영역이다. 프로그램의 코드가 들어간다.
  • Data 전역변수 : 전역변수 영역이다.
    사진에서 나타나진 않지만 이 영역은 DATA와 BSS 영역으로 나뉜다.
    초기화된 데이터는 DATA 영역에 저장되고, 초기화 되지않은 데이터는 BSS 영역에 저장된다.
    예를 들어 int a = 5; 는 초기화 되었으므로 DATA 영역에 저장된다.
    ==> 이와같이 나누는 이유는 초기화되지않은 데이터도 ROM에 올리게 되면
    ROM의 크기가 너무 커지기 때문이다!
  • Heap 동적메모리 할당 : 자바에서 new 를 사용하여 객체를 생성하면, 객체가 저장되는 영역이다.
  • Stack 지역변수 : 함수 호출 시 Stack에 저장되며, 함수가 끝나면 Stack 에서 pop 된다.

위의 사진에서 Heap 영역과 Stack 영역의 화살표를 볼 수 있다.
이는 힙 영역은 위에서 아래로 저장되고, 스택영역은 밑에서 위로 저장된다.
이와 같은 방식으로, 힙이 계속 내려가 스택영역을 침범하면 HeapOverflow!
스택영역이 계속 올라가, 힙 영역을 침범하면 StackOverflow!

참고자료

https://jhnyang.tistory.com/33
http://tcpschool.com/

profile
Backend Developer👩‍💻

0개의 댓글