Process, Thread

Dongs·2023년 3월 12일
0

CS

목록 보기
1/1

정리

JavaScript EventLoop 에 대해 알아보다가 결국 운영체제의 Process, Thread 개념까지 와버렸다.. 알고 가야 이해가 될 것 같아서 정리해본다. 그 전에 프로세스와 스레드가 무엇인지에 대해 알려면 관련 용어들을 정리할 필요가 있다.

Program

  • 컴퓨터가 실행할 수 있는 명령어들의 집합이다.

‏‏‎ ‎

Process

  • CPU의 실행 단위이다.
  • 컴퓨터에서 실행 중인 프로그램 각각의 프로세스는 독립된 메모리 공간을 할당받는다.

‏‏‎ ‎

CPU(Central Processing Unit)

  • 명령어를 실행하는 연산장치이다.

‏‏‎ ‎

메인메모리(Main Memory)

  • 프로세스가 CPU에서 실행되기 위해 대기하는 곳이다.

‏‏‎ ‎

IO(Input/Output)

  • 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것을 말한다.

  • 프린터, 키보드, 마우스 등 과 같은 입출력 장치와 데이터를 주고받는 것을 말한다..

‏‏‎ ‎


가장 초창기의 시스템?

‏‏‎ ‎

단일 프로세스 시스템

  • 한번에 하나만 프로세스만 실행 가능하다. 다른 프로세스가 실행되려면 기존에 실행되고 있던 프로세스가 작업이 끝나야 실행 가능하다.

단점

=> CPU의 사용률이 좋지 않다.

  • 예를 들어보자.
    CPU에서 하나의 프로세스가 실행되고 있다 가정해보자. 이 때 이 프로세스가 IO 작업을 하게 되면 CPU는 할 일이 없어지게 되며 아무것도 하지 않게 된다. 그렇다, 사용률은 이 때를 말하는 것이다.

해결책?

  • 이를 해결하기 위해 여러 개의 프로그램을 메로리에 올려놓고 동시에 실행시키자 라는 해결책이 나오게 되었다.

  • 하나의 프로세스에 대해 IO 작업이 발생하면 대기하고 있던 다른 프로세스가 CPU에서 실행된다는 해결방안 인 것이다.

  • 이 해결책에 대한 예를 들어보자.

p1, p2 라는 프로세스가 있다고 가정하자. CPU에서 p1이 실행되다가 p1이 IO 작업을 해야되는 상황이 오면 CPU는 다른 프로세스 p2를 실행시킨다. 이 때 또 p2가 IO작업을 해야하는 상황이 왔다. p1의 IO 작업이 끝났다면 다시 p1을 실행시키고 p1, p2 둘다 IO 작업을 수행중이라면 CPU는 아무것도 하지 않게 된다. 기존의 단일 프로세스 시스템보단 CPU의 사용률이 올라갔다고 볼 수 있다!
‏‏‎ ‎

멀티프로그래밍(Multi Programming)

  • 위의 예시에서 언급했던 것처럼 이 것을 멀티프로그래밍 이라고 부른다.
  • CPU 사용률을 극대화 시키는데에 목적으로 나오게 되었다.

단점

  • CPU의 사용시간이 길어지면 다른 프로세스는 계속 대기하게 된다.

  • 위의 예를 들어보자
    => p1 이라는 프로세스가 CPU를 점유하고 계속 실행 중 이다. 위에서 언급했던 멀티프로그래밍, 단일프로세스 개념으로 접근해보면 프로세스가 IO 작업을 수행하러 가거나 실행이 끝났을 경우, 즉, CPU 점유가 없을 경우, 다른 프로세스가 실행 가능하다. 그러므로 p2라는 p1과 다른 프로세스는 계속 대기를 할 수 밖에 없는 것이다.

=> 하나의 CPU에서 만약 하나의 프로세스가 계속 실행중이라면 다른 프로세스는 계속 실행 대기를 할 수 밖에 없다.

해결책 ?

  • 이 같은 문제점을 해결하기 위해 프로세스는 한 번 CPU 사용할 때 아주 짧은 시간 (quantum)만 CPU에서 실행되도록 하자 라는 해결책이 고안되었다.
  • 한 마디로 기존의 CPU 시간이 일자로 쭉 흘러간다고 했다면, CPU 시간의 일자 그래프를 여러 개의 TimeSlot으로 쪼개는 것이다.

‏‏‎ ‎

멀티 태스킹(Multi Tasking)

  • 위와 같이 CPU의 시간을 쪼개는 것을 멀티태스킹 이라고 한다.

  • 멀티 프로그래밍과 같이 여러 프로그램을 실행 시킨다는 것과는 유사하지만 CPU 시간을 잘게 쪼개서 프로세스를 실행시킨다는 것과는 다른점이있다.

  • 멀티 태스킹은 프로세스의 응답시간을 최소화 시키는데에 목적이 있다.

  • 사용자의 입장에서는 동시에 여러프로그램을 실행시킨다는 생각을 줄 수 있다.

아쉬운 점?

  1. 하나의 프로세스가 동시에 여러 작업을 수행하지는 못한다.
  1. 물론 여러 프로세스를 만들어서 실행시킬 순 있겠지만 프로세스의 컨텍스트 스위칭은 아주 무거운 작업이다.

  2. 또한 프로세스끼리는 데이터 공유가 까다롭다.

  3. 왜냐하면 프로세스는 독립적인 메모리 공간을 가지기 때문이다.

  1. 또한 하나의 CPU에서 계속 실행시키는 것이 발열 등의 이슈로 까다로워졌다.
  1. 그래서 듀얼 코어라는 것이 등장하게 되었는데 듀얼 코어를 잘쓰고 싶어졌다.

‏‏‎ ‎

스레드(THread)

=> 위의 에로사항을 고려해서 나온 것이 바로 스레드(Thread) 이다!

스레드란?

  • CPU에서 실행되는 단위이다.

  • 예전에 CPU에서 실행되는 단위는 프로세스 였다.

  • 같은 프로세스의 스레드들끼리는 컨텍스트 스위칭이 가볍다.

  • 같은 프로세스의 스레드끼리 데이터(메모리 영역) 공유가 가능하다.

  • 프로세스는 한 개 이상의 스레드를 가질 수 있다.

=> 스레드는 한 프로세스 안에서 동시의 작업을 위해 등장하였기 때문에 프로세스는 한 개 이상의 스레드를 가지는것이 당연하다!

스레드의 메모리구조

=> 스레드의 메모리 영역을 살펴보면 다음과 같이 나뉘어져 있다.

Code

  • 실행할 코드들이 할당되는 영역

Data

  • 선언된 변수들이 차지하는 영역

heap

  • 선언된 객체 및 배열이 동적할당 되는 영역

Stack

  • 실행 될 함수들이 차지하는 영역

‏‏‎ ‎

멀티스레드

  • 스레드들은 자신만의 메모리 영역 stack을 가지며 stack을 제외한 모든 영역이 공유 가능하다.

  • 위의 사진들은 싱글스레드 프로세스와 멀티스레드 프로세스의 메모리 영역을 나타낸 것이다. 위의 사진처럼 하나의 프로세스에서 작업을 수행하는 각각의 스레드들은 code, data, heap, stack으로 영역이 나뉘어져 있으며 동일한 프로세스에 존재하는 멀티스레드 일 경우, 자기 고유 메모리 영억인 stack을 제외한 영역의 자원을 서로 공유하는 것을 알 수 있다.

‏‏‎ ‎
‏‏‎ ‎

Programcounter

=> 다음번에 실행되야 될 명령들의 메모리의 주소를 가리킨다.

‏‏‎ ‎

멀티스레딩(Multi Threading)

  • 하나의 프로세스가 동시에 여러작업을 실행하는데 목적이 있다.

멀티태스킹의 개념의 확장

  • 멀티스레딩은 멀티태스킹 개념의 확장이라고 볼 수 있다.
  • 여러 프로세스와 여러 스레드는 아주 아주 짧게 쪼갠 CPU의 시간을 할당 받는다.

‏‏‎ ‎

멀티프로세싱(Multi Processing)

  • 두 개 이상의 프로세스나 코어를 활용하는 시스템을 멀티프로세싱이라고 한다.

코어!?

=> 일상생활과 대조하면 어떤 회사의 작업자 라고 생각하면 편할 것 같다!
만약 단순 무식하게 코어는 많을 수록 좋지 하고 4개, 5개 이상 적재된 PC를 샀다고 가정해보았을 때, 그 PC로 하는 작업이 단순 게임, 문서 작업이라면 인건비 낭비 라고 생각하면 이해가 쉬울 것 같다!

profile
자대고 css 하는 프론트엔드 개발자

0개의 댓글