프로세스
프로세스는 컴퓨터에서 실행 중인 하나의 프로그램을 의미한다.
프로세스는 운영체제로부터 독립된 메모리 영역을 할당 받으며 다른 프로세스의 메모리 영역에 접근할 수 없다.
프로세스 메모리 영역
프로세스 메모리 영역은 크게 스택, 힙, 데이터, 코드 영역으로 나뉜다.
스택 영역
- 데이터를 일시적으로 저장하는 공간.
- 함수의 실행이 끝나면 사라지는 매개변수나 지역변수 등이ㅣ 저장
- 높은 주소 값에서 낮은 주소 값으로 메모리가 할당된다.
- 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리를 초과할 만큼 많이 가지고 있다면 스택 오버플로가 발생한다.
- 영역 크기는 컴파일 때 결정된다.
힙 영역
- 프로그래머에 의해 동적 메모리 할당이 일어나는 공간
- 힙 영역은 런타임에 결정되고, 자바에서는 GC에 의해 메모리가 정리된다.
데이터 영역
- 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간.
- 전역 변수, 정적 변수, 배열, 구조체 등
코드 영역 (텍스트 영역)
- 실행할 코드가 기계어 형태로 컴파일되어 저장되는 영역
- CPU가 실행할 명령어가 담겨 있기 때문에 쓰기가 금지되고 Read-Only 공간이다.
PCB (프로세스 제어 블록)
OS가 프로세스를 제어하기 위해 프로세스의 정보를 저장하는 공간
PCB가 포함하는 정보
- PID : 프로세스 식별 번호
- 프로세스의 현재 상태
- PC(프로그램 카운터) : 다음에 실행할 명령어의 주소
- CPU 스케줄링 정보
- 메모리 관리 정보
- 레지스터 값
프로세스의 상태
- 생성 상태 (new) : 프로세스를 생성중인 상태
- 준비 상태 (ready) : 실행할 준비가 완료됐지만 자신의 차례가 아니라서 준비 큐에서 CPU 할당을 기다리는 상태
- 준비 상태 프로세스는 차례가 되면 dispatach되어 실행 상태로 전환
- 실행 상태 (running) : 프로세스가 CPU를 할당 받아 실행 중인 상태
- 인터럽트 : 타임아웃이나 예기치 않은 이벤트가 발생하면 현재 실행 중인 프로세스를 준비 상태로 전환하고, 해당 작업을 먼저 처리한다.
- 대기 상태 (waiting) : 프로세스가 입출력이나 이벤트 발생을 기다려야 해서 CPU 사용을 멈추고 기다리는 상태
- 종료 상태 (terminated) : 프로세스가 종료된 상태
스레드
스레드는 프로세스에서 실제로 실행되는 흐름의 단위를 의미한다.
프로세스는 한 개 이상의 스레드를 갖는다.
스레드는 프로세스의 메모리 공간을 이용하는데 스택영역만 독립적으로 할당받고 나머지 영역은 다른 스레드들과 공유한다.
동시성과 병렬성
- 동시성 : 하나의 코어에서 여러 작업을 번갈아 가면서 처리하는 방식.
- CPU는 한 번에 하나의 작업만 처리할 수 있어서 여러 작업을 조금씩 돌아가면서 처리한다.
- 이를 위해 콘텍스트 스위칭이 발생한다.
- 병렬성 : CPU가 여러개 있어서 (멀티 코어) 각 CPU에서 각 작업을 동시에 처리하는 방식이다.
- 물리적인 시간 관점에서 동시에 여러 작업이 처리된다.
멀티 프로세스와 멀티 스레드
멀티 프로세스
- 프로그램 하나를 여러 프로세스로 구성하는 것을 의미한다.
- 한 프로세스가 죽어도 다른 프로세스에게 영향을 주지 않기 때문에, 더 안정적이고, 확장성이 좋다.
- 콘텍스트 스위칭을 위한 시간과 메모리 공간을 많이 사용한다는 단점
- 프로세스는 독립적인 메모리를 할당 받기 때문에, 자원을 공유할 때 IPC를 통해야하기 때문에 비효율적
멀티 스레드
- 하나의 프로세스를 여러 스레드로 나누어 실행하는 것
- 스레드 간에 힙,데이터, 코드 영역을 공유하기 때문에 콘텍스트 스위칭 오버헤드가 적게 발생함
- 스레드 간 자원 공유가 프로세스 간 자원공유보다 시스템 처리 비용이 적고 프로그램 응답 시간도 단축됨
- 스택 영역을 다른 스레드와 함께 사용하므로 공유 자원에 대한 동기화가 필수적이다.
참고
'CS' 카테고리의 다른 글
[운영체제] 프로세스 동기화, 데드락 (0) | 2023.10.07 |
---|---|
[네트워크] 네트워크 레이어, IP 프로토콜 (0) | 2023.10.07 |
[운영체제] CPU 스케줄링 (0) | 2023.10.06 |
[네트워크] 신뢰적 데이터 전송, TCP (0) | 2023.10.05 |
[네트워크] HTTPS, DNS, UDP (0) | 2023.09.21 |