프로그램
프로그램은 컴퓨터에서 실행 할 수 있는 파일을 통칭한다.
하지만 아직 파일을 실행하지 않은 정적인 상태이기 때문에 정적 프로그램이라고도 부른다. (아직은 운영체제로부터 메모리 공간을 할당받지 못한 상태)
프로세스
프로세스는 프로그램을 실행시켜 정적인 프로그램을 동적으로 변하게 하는 것을 말하고 프로그램이 돌아가고 있는 상태를 말한다.
프로그램을 실행하는 순간 운영체제로부터 시스템 자원(CPU)을 할당받는다.
스레드
스레드는 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위를 말한다.
하나의 프로세스 안에서 여러가지 작업 흐름이 동시에 진행되는것을 스레드라고 부르고 여러개가 있다면 멀티 스레드라고 부른다.
프로세스의 자원 구조
프로그램이 실행되어 프로세스가 만들어지면 네가지의 메모리 영역으로 구성되어 할당 받는다.
코드 영역: 사용자가 작성한 프로그램 함수들의 코드가 CPU가 해석 가능한 기계어로 저장되어 있다.
데이터 영역: 코드가 실행되면서 사용하는 전역 변수나 각종 데이터들이 모여있고 .data, .rodata, .bss 영역으로 세분화 된다.
.data: 전역 변수 또는 static 변수 등 프로그램이 사용하는 데이터를 저장
.bss: 초기값 없는 전역 변수 또는 static 변수 저장
.rodata: const 상수 키워드 선언 된 변수나 문자열 상수 저장
스택 영역: 지역 변수 같은 호출한 함수가 종료되면 되돌아올 임시 데이터를 저장하는 독립적인 공간이다. 스택은 함수의 호출과 함께 할당되고 함수의 호출이 끝나면 소멸된다. 스택 영역을 초과하면 stack overflow error가 발생한다.
힙 영역: 생성자 또는 인스턴스같은 동적으로 할당되는 데이터들을 저장하는 공산이다.
스레드의 자원 공유
스레드는 프로세스의 4가지 메모리 영역 중에서 stack만 할당받아 복사하고 Code, Data, Heap은 프로세스 내의 다른 스레드와 공유된다.
한 스레드가 프로세스 자원을 변경하면, 다른 스레드도 변경된 결과가 바로 반영된다.
프로세스의 자원 공유
같은 프로세스 안에 있는 스레드끼리는 서로 공유할 수 있지만 각 프로세스는 메모리에 별도의 주소 공간에서 실행되기 때문에 서로 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
하지만 프로세스 간 정보를 공유하는 방법은 다음과 같은 방법들이 있다.
- IPC(Inter-Process Communication) 사용
- LPC(Local inter-Process Communication) 사용
- 별도의 공유 메모리를 만들어 정보를 주고 받도록 설정
하지만 프로세스 자원 공유는 자원 부담이 크기 때문에 스레드를 사용하는 것이 훨씬 효율적이라 멀티 스레딩을 기본으로 사용하고 있다.
멀티 스레드
멀티 스레드는 프로세스 내에서 프로세스의 자원을 공유하면서 동시에 여러 작업을 처리할 수 있게 하는 것을 말한다.
멀티 스레드의 장점
병렬성: 여러 스레드가 동시에 작업을 수행하므로 시간을 절약하고 작업을 빠르게 처리할 수 있다.
자원 공유: 스레드는 같은 프로세스 내에서 자원을 공유하기 때문에 데이터를 공유하고 효율적으로 사용할 수 있다.
더 높은 응답성: 멀티 스레딩을 통해 여러 작업을 동시에 처리할 수 있으므로, 사용자와의 상호작용에 있어 빠른 응답성을 제공할 수 있다.
멀티 스레드의 단점
동기화 문제: 여러 스레드가 동일한 자원에 접근할 때 데이터 일관성을 유지하기 위해 동기화가 필요하다. 하지만 잘못된 동기화로 인해 예기치 못한 결과가 발생할 수 있다.
데드락과 경쟁 조건: 잘못된 스레드 관리로 인해 데드락이 발생할 수 있거나, 여러 스레드가 동시에 자원을 요청할 때 발생하는 경쟁 조건 등의 문제가 발생할 수 있다.
면접 예상 질문
- 프로세스와 스레드의 차이점에 대해 말해주세요.
- 스택 영역에는 어떤 것들이 할당되나요?
- 멀티 스레드의 문제점으로는 무엇이 있나요?
- 스택 오버플로우는 무엇인가요?
참고 URL
'컴퓨터 구조 및 운영체제' 카테고리의 다른 글
컨텍스트 스위칭 (1) | 2024.01.21 |
---|---|
프로세스 동기화 (0) | 2023.12.24 |
CPU의 구조와 원리 (1) | 2023.11.20 |
컴퓨터의 구성 (0) | 2023.11.17 |