프로세스(Process)란?
프로세스는 실행 중인 프로그램(program)을 뜻한다.
운영체제로부터 자원을 할당 받는 작업의 단위.
Active entity, 메모리에 적재되어 프로그램 카운터와 자원을 가진 인스턴스
프로그램은? 프로그램은 명령어들의 모음을 포함한 디스크에 저장된 파일이다.
Passive entity, 명령어 리스트를 지닌 실행 파일 클래스
프로그램이 실행되면 이 프로그램의 명령어들과 데이터가 메모리에 적재되고 이것이 프로세스가 된다.
예를들면 컴퓨터를 켜고 디스코드에 들어가고, 구글과 vsc를 켜는 행위가 각각의 프로세스를 실행시키는 것.
프로세스의 메모리 구조
각 프로세스는 위 그림과 같은 구조를 갖는다. 각 영역은 다음과 같은 역할을 한다.
- Code 영역 : 프로그램을 실행시키는 실행 파일 내의 명령어들이 위치하는 공간
- Data 영역 : 전역변수, static 변수들이 위치하는 공간
- Heap 영역 : 동적할당을 위한 메모리 영역( malloc(), new 등)
- Stack 영역 : 지역 변수, 파라미터(함수에 전달되는 인자)가 위치하는 공간
프로세스 상태(Process State)
- new(생성) : 프로세스가 생성된 상태이다. OS 커널에 존재하는 Ready Queue에 올라가면 ready상태가 된다.
- ready(준비) : 프로세스가 CPU로부터 메모리 공간을 할당받길 기다리는 상태이다. 이때 프로세스 스케줄러에 의해 프로세스가 할당을 받게 되면 running 상태가 된다. 이것을 dispatch 라고 한다.
- running(실행) : 명령어들이 실행되는 상태이다. 이때 interrupt(간섭)이 발생하면 ready 상태로 변한다. 실행을 끝마치면 exit(종료)되고 terminated 상태로 변한다. I/O(입출력)이나 event가 발생하면 waiting 상태로 변한다.
- waiting(대기) : 특정 event가 발생하길 기다리는 상태이다. 이때 I/O 나 특정 event가 완료되면 ready상태로 변한다.
- terminated(종료) : 프로세스가 실행을 끝마친 상태이다.
프로세스 스케줄링(Process Scheduling)
우리가 유튜브로 음악을 틀어놓고 동시에 게임을 한다고 하자. 이는 마치 동시에 실행되는 것처럼 보이겠지만 사실은 빠른 속도로 유튜브와 게임이 번갈아 실행되는 것이다.
하나의 CPU를 가지고 있는 컴퓨터는 프로세스를 동시에 실행시킬 수 없다. 따라서 CPU는 고속으로 여러 프로세스를 일정한 기준으로 순서를 정해서 실행한다. 이러한 CPU 할당 순서 및 방법을 결정하는 과정을 프로세스 스케줄링이라고 하며 CPU 스케줄러가 이를 담당한다.
스레드(thread) 란?
할당 받은 자원을 이용하는 실행 단위이며, 프로세스 내에 여러 개가 생길 수 있다.
프로세스와 마찬가지로 CPU의 작업 단위 중 하나이지만 프로세스와는 다르게 굉장히 가볍다.
하나의 프로세스는 여러개의 스레드로 구성이 가능하고, 같은 프로세스 내의 스레드끼리는 메모리, 자원등을 공유하게 된다.
좀 더 구체적으로 말해보자면
스레드는 하나의 프로세스 내에서 동작되는 실행 흐름이고 프로세스 내의 주소 공간이나 자원을 공유할 수 있다.
이 경우에 스레드는 각각 독립적인 작업을 수행해야 하기 때문에, 위 사진에서 볼 수 있듯이 각각 스레드 내부의 스택과 프로그램카운터(PC) 레지스터 값은 고유한 값을 가지고 있다.
멀티스레드 프로그래밍은 말 그대로 스레드를 여러개 사용해서 실행하는 프로그래밍 기법을 의미.
스레드간 긴밀하게 연결되어 있기에, 공유된 자원으로 통신 비용이 절감되고, 메모리 사용이 효율적이다. 공유자원관리가 필요하고 컨텍스트 스위칭 비용이 적다.
하지만 스레드간 다 연결되어 있기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향이 가게 된다. 무조건 멀티 스레드가 좋은 것이 아닌 이유이다.
스레드(thread) 의 장단점
장점 : 자원 공유를 통해 시스템 자원 소모를 줄일 수 있음, Context Switch에 대한 오버헤드가 감소.
*Context Switch: 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정
단점 : 동기화 문제가 발생할 수 있음, 프로그래밍 디버깅이 어려울 수 있음.
프로세스(Process)와 스레드(thread)의 차이
프로세스는 완벽히 독립적이기 때문에 메모리 영역을 다른 프로세스와 공유를 하지 않는다.
스레드는 해당 스레드를 위한 스택을 생성할 뿐 프로세스 내의 메모리를 공유해서 사용할 수 있다.
출처-
https://code-lab1.tistory.com/38
'1일1CS' 카테고리의 다른 글
42. NoSQL이랑 RDBMS의 특징과 차이점 (0) | 2023.01.20 |
---|---|
41. 앱의 종류: 네이티브 앱 vs 웹 앱 vs 하이브리드 앱 (0) | 2023.01.19 |
39. [Database] ORM이란? (0) | 2023.01.17 |
38. 인터페이스와 추상클래스의 차이 (0) | 2023.01.16 |
37. 깃과 깃허브의 차이점 (0) | 2023.01.13 |
댓글