CS

프로그램 vs 프로세스 vs 프로세서 vs 쓰레드

Chemi___6_oj 2022. 7. 18. 14:07

프로그램

운영체제 환경에서 실행될 수 있도록 만들어진 것 

웹브라우저, 워드, 카톡 같은 것도 모두 프로그램이라고 할 수 있다.

프로그래은 주로 하드웨어에 저장되어 있다.

 

 

프로세스

프로그램은 주로 파일같은 형태로 저장되어 있고 운영체제에 의해서 실행되고 있는 상황을 프로세스라고 한다.

운영체제에서는 여러개의 프로세스가 실행중이다. 여러개의 프로세스는 엄밀히 말하면 동시에가 아닌 짧게 전환하며 여러가지 일을 동시에 처리하는 것 처럼 보이는 것이다. 다만, 코어가 여러개인 경우에는 멀티 프로세서로 여러개의 프로세스가 동작할 수 있다. 프로세스는 메모리에서 동작하게 된다.

 

프로세스는 최소 한개의 쓰레드를 가지고 있다. 연산이 연속적인 연산을 하는 것을 하나의 흐름(쓰레드)이라고 한다.

OS는 Virtual Memory(RAM, HDD; 제한된 공간 연산에 있어 RAM을 할당하지만, 연산이 많을 경우 조금 느리더라도 HDD를 할당하기도 한다.)을 프로세스에 할당한다. 프로세스에 속한 모든 쓰레드는 프로세스의 Virtual memory로 공간이 제약된다.

 

프로세서

이 프로세스가 동작할 수 있도록 하는 하드웨어를 의미한다. CPU

 

 

실행단위

cpu 코어에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념

 

 

프로그램(Hard disk) 이 프로세스(memory)가 되면서 일어나는 일

 

1. 프로세스가 필요로 하는 재료들이 메모리에 올라가야 한다. (메모리를 확보한다.)

code : 실행 명령을 포함하는 코드들

data : static 변수 혹은 global 변수

heap : 동적 메모리 영역

stack : 지역변수, 매개변수, 반환값 등 일시적인 데이터

 

2. 프로세스에 대한 정보를 담고 있는 PCB(Process Control Block) 블럭이 프로세스 생성시 함께 만들어진다.

준비상태나 대기 상태의 큐를 구현하기 위해 필요한 pointer,

프로세스 상태를 담는 process state

고유변호를 담는 PID

다음 명령어를 기다리는 프로그램 카운터가 있다.

 

컨텍스트 스위칭

프로그램1이 실행상태(CPU사용)에 있다가 다시 준비상태로 내려가고

프로그램2가 준비상태에 있다가 실행 상태로 올라가는 과정이 반복되는 것

과정이 굉장히 무겁고 비효율 적이다.

 

경량화된 프로세스 = Thread

하나의 프로세스 안에 다수의 스레드가 있으면 공유하는 자원이 있다. (공통적으로 있는 영역)

공유되는 자원이 있어 스위칭이 일어나며 캐싱 적중률이 올라간다. (스위칭 시 프로세스의 다 빼고 다 넣을 필요가 없다는 것)

프로세스 : 집 (프로세스에 할당된 Virtual Memory 공간)

쓰레드 : 집에 있는 세대원역할. 집에서만 있고, 쓰레드마다 가지고 있는 Thread Local Storage가 있다.(세대원만의 공간)

쓰레드마다 스택 구조로 관리되는 메모리가 있다. 집에 있는 거실같은 역할(공용공간)은 힙 구조로 관리된다.

 

 

멀티 프로세스 VS 멀티 스레드

 

멀티 프로세스

부모 프로세스가 포크를 해서 자식 프로세스를 여러개 만들어 작업을 처리를 한다.

자식 프로세스는 부모와 별개의 영역을 확보한다.

 

특징

프로세스가 독립적이기 때문에 IPC를 활용한 통신이 필요하다.

(같은 작업을 두명이 다른 곳에서 진행을 하다가 회의가 필요한 경우 밖으로 나와 논의)

자원 소모적, 개별 메모리를 차지한다.

Context switch 비용이 크다

동기화 작업이 필요하지 않다.

 

멀티 쓰레드

한 프로세스 내에서 구분지어진 실행 단위. 단위는 프로세스일 수도 있고, 쓰레드 일 수도 있다.

프로세스가 다수의 스레드로 구분되어 있지 않으면 단일 스레드 하나로 프로세스가 실행된다.

(이때 실행단위는 프로세스 그 자체)

프로세스 내에서 여러 스레드로 프로세스가 나뉘어지면 이를 멀티 스레드라고 한다.

 

특징

쓰레드끼리 긴밀하게 연결되어 있다.

공유된 자원으로 통신 비용이 절감된다.메모리가 효율적이고

Context switch 비용이적다

 

 

익스플로러 VS 크롬

익스 플로러는 멀티 쓰레드 형식을 이용하는데 하나의 사이트 탭에서 문제가 발생하면 창 전체가 종료되는 문제가 발생한다.

크롬은 멀티 프로세스를 사용하여 효율성은 조금 떨어지지만 사이트 탭 하나가 문제가 발생하더라도 다른 탭들은 영향을 받지 않는다. 

 

멀티코어

멀티프로세스와 멀티쓰레드는 처리 방식이기 때문에 SW분야에 가깝다. 멀티코어는 HD 느낌

동시성(Concurrency) : 싱글 코어를 가진 CPU가 실행 단위를 처리하기 위해서 전환이 빠르게 이루어지면서 작업을 처리하는 것

CPU 시간을 나누기 때문에 동시에 이루어지는 것처럼 보이기 때문에  동시성이라고 함

병렬처리(Parallelism) : 멀티코어는 물리적으로 여러 코어를 사용해서 다수의 프로세스나 스레드를 한꺼번에 처리하는 것

 

 

 

출처

널널한 개발자

https://www.youtube.com/watch?v=1grtWKqTn50