프로세스(Process) 란?
프로세스는 실행 중인 프로그램을 말한다.
스케쥴링의 대상이 되는 작업, Task, Job 등과 같은 용어이다.
응용 프로그램과 프로세스는 같은 용어가 아니다.
예를 들면 excel 프로그램은 excel.exe라는 실행 파일로 존재한다.
이 파일은 컴퓨터가 이해할 수 있는 0과 1로 된 바이너리로 구성되어 있고,
excel.exe를 실행해서 excep 프로그램이 뜨면, 이를 프로세스라고 한다.
excel 프로그램을 여러 개 여러 개 띄우면, 여러 개의 프로세스가 실행되는 것이다.
프로세스 스케쥴링
여러 개의 프로세스가 동시에 실행되고 있을 때, 어떤 프로세스를 먼저 실행시킬지에 대한 규칙이 있어야 한다.
이를 프로세스 스케쥴링이라고 한다.
배치 처리 시스템, 시분할 시스템, 멀티 태스킹, 멀티프로그래밍 등 여러 가지 스케쥴링 기법이 있다.
상황에 맞게 다양한 스케쥴링 기법을 이용해서 어떤 프로세스를 어느 시점에 실행시킬지를 결정한다.
프로세스 메모리 구조
일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠진다.
스택(stack), 힙(heap), 데이터(data), 코드(text) 영역

stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역이고,
data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역이다.
- Stack : 임시 데이터 (함수 실행을 위한 지역 변수 등)가 저장된다.
- Heap : 코드에서 동적으로 만들어지는 데이터가 저장된다.(동적으로 할당된 데이터)
- data : 전역 변수, 초기화된 데이터 등
- code : 프로그램 코드
JVM, Java에서의 메모리구조를 확인하시려면 아래 링크를 참고해 주세요!
📁[Java / CS] JVM과 Java의 메모리 구조
컨텍스트 스위칭(Context Switching)
CPU에서 실행할 프로세스를 교체하는 기술이다.
하나의 프로세스에서 실행하다가 컨텍스트 스위칭 시, 그때의 PC와 SP 주소를 PCB에 저장해 뒀다가 다시 실행할 때 그 주소를 가져와서 프로세스를 이어서 실행한다.
PC와 SP는 레지스터의 일종이다.
- PC (Program Counter) : 다음에 실행 코드 주소를 가리킨다.
- SP (Stack Pointer) : 스택 최상단 주소를 가리킨다.
PCB(Process Control Block)
프로세스가 실행 중인 상태를 캡처한 뒤 구조화 해서 저장한다.
PID, Register(PC, SP) 등을 저장한다.
컨텍스트 스위칭 세부 동작
- 실행 중지 할 프로세스 정보를 해당 프로세스의 PCB에 업데이트한다.
- 업데이트된 PCB를 메인 메모리에 저장한다.
- 메인 메모리에서 다음에 실행할 프로세스 정보가 담긴 PCB정보(PC, SP 등)를 읽어온다.
- 읽어온 PC, SP 값을 CPU의 레지스터에 업데이트한다.
- 다음 실행할 프로세스를 CPU에서 실행한다.
💡컨텍스트 스위칭 정리
컨텍스트 스위칭이란, 멀티 태스킹 등 프로세스 스위칭이 필요할 때, 실행할 프로세스를 CPU에 교체해 주는 기술이다. 현재 실행 중인 프로세스의 PID, PC, SP 등의 정보를 PCB에 저장한 뒤 메인 메모리로 넘기고, 다음 실행할 프로세스의 PCB에서 프로세스 상태 정보를 CPU에 업데이트하여 다음 프로세스를 실행시킨다.
IPC(Inter Process Communication) : 프로세스 간 커뮤니케이션
프로세스는 다른 프로세스의 공간에 접근할 수 없기 때문에, IPC라는 프로세스 간 커뮤니케이션 기술이 필요하다.
다양한 IPC 기법
- file
- Message Queue
- Shared Memory
- Pipe
- Signal
- Semaphore
- Socket
파란색으로 칠한 3가지가 가장 많이 사용되는 방법이고, 모두 커널 공간을 활용하는 방법이다.
IPC가 필요한 이유
여러 프로세스를 동시 실행하는 경우 프로세스 간 통신이 필요하다.
- 여러 프로세스의 동시 실행을 통한 성능 개선
- 복잡한 프로그램
위의 경우에 프로세스간 상태 확인 및 데이터 송수신이 필요하기 때문에, IPC가 필요하다.
커널 공간은 공유하는 공간이기 때문에 대부분의 IPC 기법은 커널 공간을 활용한다.
💡Process와 Thread 간 통신의 차이
Thread의 경우 하나의 프로세스 주소 공간 내에서 Stack 영역을 제외한 Code, Data, Heap 영역을 공유하기 때문에, 별도의 Thread 간 통신 기술은 필요하지 않다.
반면에, 프로세스 간에는 주소 공간이 분리되어 있고, 다른 프로세스의 공간에 접근할 수 없기 때문에 IPC라는 별도의 기술이 필요하다.
스레드(Thread) 란?
Light Weight Process라고도 부르며, 하나의 프로세스 내에서 작업이 실행되는 단위이다.
Thread의 특징
- 하나의 프로세스는 무조건 하나 이상의 스레드를 가진다.
- 하나의 프로세스 내에서 여러 개의 스레드를 생성할 수 있다.
- 스레드는 동시에 실행할 수 있다.
- 프로세스의 모든 데이터에 접근 가능하다.
멀티 스레드
Process는 Stack, Heap, Code, Data 4개의 데이터 영역을 갖고 있다.
스레드 각기 실행 가능한 Stack을 갖고 있고, 부모 프로세스의 Heap, Code, Data 영역을 공유한다.
따라서 스레드는 프로세스와 달리 별도의 통신 기술 없이 데이터를 공유할 수 있다.
멀티 프로세싱과 멀티 스레드
멀티 프로세싱은 하나의 프로세스에서 실행되어야 할 작업들을 여러 개로 분리한 후에 각각의 CPU 코어에 넣어서 병행하여 실행되도록 하는 기법이다.
멀티 스레드는 프로세스 주소 공간을 공유하고 있기 때문에, 스레드 간 통신을 위해 별도 기술을 사용할 필요는 없지만, 공유한 데이터를 읽고 쓰는 과정에서 동기화 이슈가 발생할 수 있다.
반면, 멀티 프로세스는 IPC 기술을 사용해서 프로세스 간 통신을 해야 한다.
만약 스레드 간 공유한 데이터를 읽기만 할 경우에는 동기화 이슈가 발생하지 않기 때문에 멀티 스레드를 사용하는 것이 좋다. 그러나 데이터를 읽고 쓰는 작업이 빈번하다면, 동기화 기술을 많이 사용해야 하므로, 이 경우 데드락(deadlock)과 같은 비정상 동작이 일어날 수 있기 때문에 멀티 프로세싱을 고려해 보는 게 좋다.
멀티 스레드의 장단점
장점
- 성능 향상 : 작업을 여러 개의 스레드에서 나눠서 실행하면 사용자에 대한 응답성이 향상된다.
- 자원 공유 효율 : IPC와 같은 별도의 자원 공유를 위한 작업이 필요하지 않다.
단점
- 스레드 중 하나의 스레드에만 문제가 발생해도, 전체 프로세스가 영향을 받을 수 있다.
- 스레드를 너무 많이 생성하면 Context Switching이 많이 발생해서 성능이 저하될 수 있다.
- 동기화 이슈로 비정상적 동작이 일어날 수 있다. 따라서 동기화 관련 작업을 추가해야 한다.
'[ Computer Science ] > 운영체제' 카테고리의 다른 글
[CS / 운영체제] 컴퓨터 부팅(Booting) 과정 (0) | 2024.04.29 |
---|---|
[CS / 운영체제] 운영체제란? OS 용어 정리 - 쉘, 시스템콜, API (0) | 2024.03.23 |
프로세스(Process) 란?
프로세스는 실행 중인 프로그램을 말한다.
스케쥴링의 대상이 되는 작업, Task, Job 등과 같은 용어이다.
응용 프로그램과 프로세스는 같은 용어가 아니다.
예를 들면 excel 프로그램은 excel.exe라는 실행 파일로 존재한다.
이 파일은 컴퓨터가 이해할 수 있는 0과 1로 된 바이너리로 구성되어 있고,
excel.exe를 실행해서 excep 프로그램이 뜨면, 이를 프로세스라고 한다.
excel 프로그램을 여러 개 여러 개 띄우면, 여러 개의 프로세스가 실행되는 것이다.
프로세스 스케쥴링
여러 개의 프로세스가 동시에 실행되고 있을 때, 어떤 프로세스를 먼저 실행시킬지에 대한 규칙이 있어야 한다.
이를 프로세스 스케쥴링이라고 한다.
배치 처리 시스템, 시분할 시스템, 멀티 태스킹, 멀티프로그래밍 등 여러 가지 스케쥴링 기법이 있다.
상황에 맞게 다양한 스케쥴링 기법을 이용해서 어떤 프로세스를 어느 시점에 실행시킬지를 결정한다.
프로세스 메모리 구조
일반적으로 프로세스의 메모리 구조는 아래의 4가지 영역으로 나눠진다.
스택(stack), 힙(heap), 데이터(data), 코드(text) 영역

stack과 heap 영역은 런타임 단계에서 메모리를 할당받는 동적 영역이고,
data와 code 영역은 컴파일 단계에서 메모리를 할당받는 정적 영역이다.
- Stack : 임시 데이터 (함수 실행을 위한 지역 변수 등)가 저장된다.
- Heap : 코드에서 동적으로 만들어지는 데이터가 저장된다.(동적으로 할당된 데이터)
- data : 전역 변수, 초기화된 데이터 등
- code : 프로그램 코드
JVM, Java에서의 메모리구조를 확인하시려면 아래 링크를 참고해 주세요!
📁[Java / CS] JVM과 Java의 메모리 구조
컨텍스트 스위칭(Context Switching)
CPU에서 실행할 프로세스를 교체하는 기술이다.
하나의 프로세스에서 실행하다가 컨텍스트 스위칭 시, 그때의 PC와 SP 주소를 PCB에 저장해 뒀다가 다시 실행할 때 그 주소를 가져와서 프로세스를 이어서 실행한다.
PC와 SP는 레지스터의 일종이다.
- PC (Program Counter) : 다음에 실행 코드 주소를 가리킨다.
- SP (Stack Pointer) : 스택 최상단 주소를 가리킨다.
PCB(Process Control Block)
프로세스가 실행 중인 상태를 캡처한 뒤 구조화 해서 저장한다.
PID, Register(PC, SP) 등을 저장한다.
컨텍스트 스위칭 세부 동작
- 실행 중지 할 프로세스 정보를 해당 프로세스의 PCB에 업데이트한다.
- 업데이트된 PCB를 메인 메모리에 저장한다.
- 메인 메모리에서 다음에 실행할 프로세스 정보가 담긴 PCB정보(PC, SP 등)를 읽어온다.
- 읽어온 PC, SP 값을 CPU의 레지스터에 업데이트한다.
- 다음 실행할 프로세스를 CPU에서 실행한다.
💡컨텍스트 스위칭 정리
컨텍스트 스위칭이란, 멀티 태스킹 등 프로세스 스위칭이 필요할 때, 실행할 프로세스를 CPU에 교체해 주는 기술이다. 현재 실행 중인 프로세스의 PID, PC, SP 등의 정보를 PCB에 저장한 뒤 메인 메모리로 넘기고, 다음 실행할 프로세스의 PCB에서 프로세스 상태 정보를 CPU에 업데이트하여 다음 프로세스를 실행시킨다.
IPC(Inter Process Communication) : 프로세스 간 커뮤니케이션
프로세스는 다른 프로세스의 공간에 접근할 수 없기 때문에, IPC라는 프로세스 간 커뮤니케이션 기술이 필요하다.
다양한 IPC 기법
- file
- Message Queue
- Shared Memory
- Pipe
- Signal
- Semaphore
- Socket
파란색으로 칠한 3가지가 가장 많이 사용되는 방법이고, 모두 커널 공간을 활용하는 방법이다.
IPC가 필요한 이유
여러 프로세스를 동시 실행하는 경우 프로세스 간 통신이 필요하다.
- 여러 프로세스의 동시 실행을 통한 성능 개선
- 복잡한 프로그램
위의 경우에 프로세스간 상태 확인 및 데이터 송수신이 필요하기 때문에, IPC가 필요하다.
커널 공간은 공유하는 공간이기 때문에 대부분의 IPC 기법은 커널 공간을 활용한다.
💡Process와 Thread 간 통신의 차이
Thread의 경우 하나의 프로세스 주소 공간 내에서 Stack 영역을 제외한 Code, Data, Heap 영역을 공유하기 때문에, 별도의 Thread 간 통신 기술은 필요하지 않다.
반면에, 프로세스 간에는 주소 공간이 분리되어 있고, 다른 프로세스의 공간에 접근할 수 없기 때문에 IPC라는 별도의 기술이 필요하다.
스레드(Thread) 란?
Light Weight Process라고도 부르며, 하나의 프로세스 내에서 작업이 실행되는 단위이다.
Thread의 특징
- 하나의 프로세스는 무조건 하나 이상의 스레드를 가진다.
- 하나의 프로세스 내에서 여러 개의 스레드를 생성할 수 있다.
- 스레드는 동시에 실행할 수 있다.
- 프로세스의 모든 데이터에 접근 가능하다.
멀티 스레드
Process는 Stack, Heap, Code, Data 4개의 데이터 영역을 갖고 있다.
스레드 각기 실행 가능한 Stack을 갖고 있고, 부모 프로세스의 Heap, Code, Data 영역을 공유한다.
따라서 스레드는 프로세스와 달리 별도의 통신 기술 없이 데이터를 공유할 수 있다.
멀티 프로세싱과 멀티 스레드
멀티 프로세싱은 하나의 프로세스에서 실행되어야 할 작업들을 여러 개로 분리한 후에 각각의 CPU 코어에 넣어서 병행하여 실행되도록 하는 기법이다.
멀티 스레드는 프로세스 주소 공간을 공유하고 있기 때문에, 스레드 간 통신을 위해 별도 기술을 사용할 필요는 없지만, 공유한 데이터를 읽고 쓰는 과정에서 동기화 이슈가 발생할 수 있다.
반면, 멀티 프로세스는 IPC 기술을 사용해서 프로세스 간 통신을 해야 한다.
만약 스레드 간 공유한 데이터를 읽기만 할 경우에는 동기화 이슈가 발생하지 않기 때문에 멀티 스레드를 사용하는 것이 좋다. 그러나 데이터를 읽고 쓰는 작업이 빈번하다면, 동기화 기술을 많이 사용해야 하므로, 이 경우 데드락(deadlock)과 같은 비정상 동작이 일어날 수 있기 때문에 멀티 프로세싱을 고려해 보는 게 좋다.
멀티 스레드의 장단점
장점
- 성능 향상 : 작업을 여러 개의 스레드에서 나눠서 실행하면 사용자에 대한 응답성이 향상된다.
- 자원 공유 효율 : IPC와 같은 별도의 자원 공유를 위한 작업이 필요하지 않다.
단점
- 스레드 중 하나의 스레드에만 문제가 발생해도, 전체 프로세스가 영향을 받을 수 있다.
- 스레드를 너무 많이 생성하면 Context Switching이 많이 발생해서 성능이 저하될 수 있다.
- 동기화 이슈로 비정상적 동작이 일어날 수 있다. 따라서 동기화 관련 작업을 추가해야 한다.
'[ Computer Science ] > 운영체제' 카테고리의 다른 글
[CS / 운영체제] 컴퓨터 부팅(Booting) 과정 (0) | 2024.04.29 |
---|---|
[CS / 운영체제] 운영체제란? OS 용어 정리 - 쉘, 시스템콜, API (0) | 2024.03.23 |