프로세스 (Process)
- 메모리에 올려져서 실행 중인 프로그램
- 각각의 프로세스는 독립된 메모리 공간, 자원, 상태 등을 갖는다.
- 독립된 메모리 공간에는 Text(Code), Data, Stack, Heap을 할당 받는다.
- 프로세스는 실행 중인 프로그램의 인스턴스로, 별도의 메모리 영역을 할당받고, 자체적으로 제어 블록인 PCB(Process Control Block)을 갖는다. PCB에는 id, register, PC 등이 있다.
- 응용 프로그램 ≠ 프로세스
- 응용 프로그램은 여러 프로세스로 구성 가능
프로세스 스테이트(Process State)
프로세스가 운영체제에 의해 관리되는 동안 어떤 상태에 있는지를 나타낸다. 프로세스의 상태는 다양한 상태 전이(Transition)에 따라 변경될 수 있다.
- new : 프로세스가 생성된 상태
- ready : 프로세스가 CPU를 할당받을 준비가 된 상태
- running : 프로세스가 현재 CPU를 점유하고 실행되고 있는 상태
- waiting : 프로세스가 입출력(IO) 완료를 기다리거나 특정 이벤트 발생을 기다리는 상태
예를 들어, 데이터를 디스크에서 읽어오는 동안 프로세스는 입출력 완료를 기다리는 대기 중인 상태이다. 이벤트가 발생하거나 입출력 작업이 완료되면 ready 상태로 전환된다. - terminated : 프로세스의 실행이 완료되어 종료된 상태
운영체제는 프로세스의 자원을 해제하고 PCB를 제거하여 메모리 공간을 회수한다.
프로세스 주소 공간
각각의 프로세스는 독립된 메모리 공간을 할당 받는데 4가지 부분으로 나눌 수 있다.
- Text(Code) : 프로세스의 실행 가능한 코드가 저장되는 영역
즉, 프로그램의 명령어들이 위치하며, CPU에 의해 실행되는 명령어들이 저장되어 있다. - Data : 전역 변수, 정적 변수, 상수 등 초기화된 데이터가 저장되는 영역
프로세스의 실행 도중에 값이 변경될 수 있다. - Heap : 프로그램 실행 중에 동적으로 할당된 메모리를 관리하는 영역
주로 동적으로 생성된 데이터 구조나 객체가 저장된다. - Stack : 지역 변수, 함수 호출 정보, 임시 데이터 등이 저장되는 영역
함수 호출 시 매개변수, 복귀 주소, 지역 변수 등이 스택에 쌓이고 해제된다.
스레드(Thread)
- 프로세스 내에서 실행되는 작업의 단위 (하나의 프로세스는 여러 개의 스레드를 가질 수 있다.)
- 프로세스 내의 코드 흐름을 나타낸다.
- 스레드는 프로세스의 자원을 공유하면서 실행된다. 같은 프로세스 내의 스레드들은 주소 공간, 파일, 자원 등을 공유하며, 이를 통해 데이터의 공유와 효율적인 작업을 가능하게 한다.
- 각각의 스레드는 독립적으로 실행될 수 있다.
- 프로세스의 주소 공간을 공유하므로, 스레드 간의 통신은 간단하게 이루어진다. 하지만, 이로 인해 스레드 간의 동기화 문제나 경쟁 상태 등을 고려해야 한다.
- 위에서 주소 공간을 공유한다고 했지만 모두 공유하는 것은 아니고, text(code), data, heap을 공유한다. stack의 경우 스레드마다 별도로 할당을 받는다. 왜냐하면, 각 스레드마다 실행하는 흐름이 다르므로 복귀 주소, 매개변수, 지역 변수를 저장할 공간이 각각 존재해야 하기 때문이다.
프로세스와 스레드의 차이
- 프로세스 : 각 프로세스는 독립된 주소 공간과 자원을 가지고 있어 다른 프로세스의 변수나 자료에 접근할 수 없다. 따라서, 다른 프로세스가 오류로 인해 종료되더라도 영향을 받지 않는다.
+ 프로세스간의 통신을 위해서는 IPC(Inter-Process Communication)를 사용 - 스레드 : 스레드는 동일한 프로세스 내에서 text(code), data, heap 형식으로 할당된 메모리 영역을 공유하기 때문에 각각의 스레드는 별도의 stack을 가지고 있지만 힙 메모리는 서로 공유할 수 있다. 따라서, 한 프로세스 내에서 스레드 하나가 오류로 인해 종료되면 다른 스레드도 영향을 받아 종료된다.
멀티 프로세스
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것
- 한 번에 많은 서로 다른 작업을 처리할 때 사용한다. ex) 웹 서버에서 여러 요청을 동시에 처리할 때
- 단점
- Context Switching이 발생하면 캐시에 존재하는 모든 데이터를 리셋 하고 다시 캐시 정보를 불러와야한다. 즉 Context Switching의 오버헤드(overhead)가 커서 비용이 크다.
- 프로세스 간의 통신에 복잡한 IPC를 사용하여 통신해야 한다.
- 장점
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 해당 프로세스만 작동을 중지하고 다른 프로세스는 영향을 받지 않는다.
멀티 스레드
- 하나의 프로세스 안에서 여러 개의 스레드가 동시에 실행되는 것
- 멀티스레드에서 각 스레드는 자신만의 작업 흐름을 가지게 되고, 이를 통해 하나의 프로세스에서 다수의 작업을 동시에 처리할 수 있다.
- 한 번에 많은 비슷한 작업을 처리할 때 사용한다. ex) 게입, 웹 서버
- 장점
- 여러 개의 스레드가 동시에 실행되므로 처리 속도가 빨라진다.
- 스레드 간의 데이터 공유가 용이하기 때문에, 작업 처리가 더욱 효율적이고 빠르다.
- 시스템 자원 소모가 감소한다. 프로세스를 생성하는 system call이 줄어들어 자원을 효율적으로 관리할 수 있다.
- 단점
- 스레드 간의 경쟁 상황이 발생할 수 있다. 즉, 동시에 여러 개의 스레드가 하나의 자원에 동시에 접근하면서, 서로의 작업을 간섭하게 될 수 있다. 즉, 동기화 문제(Synchronize problem)가 발생할 수 있다.
- 스레드의 생성과 관리가 복잡해질 수 있으며, 여러 개의 스레드가 동시에 실행되기 때문에 프로그램의 안정성에 영향을 미칠 수 있다.
- 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 준다.
- 디버깅이 까다롭다.
'Computer Science > Operating System' 카테고리의 다른 글
[OS] IPC (Inter Process Communication) (0) | 2023.05.28 |
---|---|
[OS] PCB (Process Control Block) & Context Switching (0) | 2023.05.28 |
[OS] 시스템 콜 (System Call) (0) | 2023.05.27 |
[OS] 인터럽트(Interrupt) (0) | 2023.05.22 |
[OS] 운영체제란? (0) | 2023.05.21 |