프로그램
프로그램이란 어떤 작업을 위해 실행할 수 있는 파일이다.
프로세스
프로세스란 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적 개체)를 말한다.
운영체제로부터 시스템 자원을 할당받는 작업의 단위이다. 여기서 시스템 자원이란 다음과 같다.
- CPU 시간
- 주소 공간
- 메모리 공간 : Code, Data, Stack, Heap으로 이루어진 구조
Code 코드 자체를 구성하는 메모리 영역 Data 초기화된 데이터 전역변수, 정적 변수, 배열 Stack 임시 메모리 영역 지역변수, 매개변수, 리턴 값 Heap 동적 할당 시 사용 new(), malloc()
기본적으로 프로세스마다 적어도 하나의 스레드를 가진다.
스레드
스레드란 프로세스 안에서 실행되는 여러 흐름 단위를 말한다.
스레드의 경우에는 Stack만 따로 할당받고, 나머지 영역은 서로 공유한다.
Stack만 따로 할당 받는 이유?
스레드는 독립적인 동작을 수행하기 위해 존재한다. 즉, 독립적으로 함수를 호출할 수 있어야 하기 때문에 지역변수, 매개변수 등을 저장하는 Stack은 독립적으로 할당 받아야 한다.
프로세스와 스레드의 차이점
프로세스는 자신만의 고유 공간과 자원을 할당 받아서 사용하지만,
스레드는 다른 스레드와 공간과 자원을 공유한다는 점에서 차이점이 존재한다.
멀티 프로세스
멀티 프로세스란 하나의 프로그램을 여러 개의 프로세스로 구성하여, 각 프로세스가 독립적으로 작업을 수행하는 것을 말한다.
장점 : 안정성
각각 메모리 공간을 따로 할당 받기 때문에, 메모리 침범 문제를 OS 차원에서 해결할 수 있다.
단점 : 성능 저하
각각의 독립된 메모리 공간을 가지고 있기 때문에, 작업량이 많을수록 Context switching으로 인해 성능 저하가 발생한다.
📝 Context Switching이란?
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 말한다.
즉, 동작 중인 프로세스가 대기 상태로 들어가면서 현 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 보관해두었던 프로세스 상태를 복구하는 과정을 말한다.
프로세스는 각 독립된 메모리 영역을 할당 받아 사용하므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.
멀티 스레드
멀티 스레드란 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것을 말한다.
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해준다.
장점 : 자원 공유
독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소하며, 전역변수와 정적 변수에 대한 자료 공유가 가능하다.
단점 : 안정성
하나의 스레드가 공유하고 있는 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태가 되어버린다.
- Critical Section 기법
- 하나의 스레드가 공유 데이터 값을 변경하는 시점에, 다른 스레드가 그 값을 읽으려 할 때 발생하는 문제를 해결하기 위한 동기화 과정
- 상호 배제, 진행, 한정된 대기를 충족해야 함.
- 하나의 스레드가 공유 데이터 값을 변경하는 시점에, 다른 스레드가 그 값을 읽으려 할 때 발생하는 문제를 해결하기 위한 동기화 과정
참고자료
'Computer Science > Operating System' 카테고리의 다른 글
인터럽트(Interrupt)와 시스템 콜(System Call) (0) | 2024.04.15 |
---|---|
Process, 프로세스 (0) | 2024.03.28 |
Cache, 캐시 (0) | 2024.01.11 |
인터럽트, Interrupt (0) | 2023.11.22 |
운영체제(OS, Operating System)란 (0) | 2023.11.06 |