일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스레드
- cs #네트워크
- 프로그래머스
- 네트워크
- 자바스크립트
- typescript
- ip
- react-query
- 웅진씽크빅
- 알고리즘
- App Runner
- Algorithm
- #프로젝트캠프 #프로젝트캠프후기 #유데미 #스나이퍼팩토리 #웅진씽크빅 #인사이드아웃 #IT개발캠프 #개발자부트캠프 #리액트 #react #부트캠프 #리액트캠프
- 유데미
- 개발자부트캠프
- BFS
- 인사이드아웃
- 프로젝트캠프
- 프로세스
- react
- html
- IT개발캠프
- 해시
- 리액트
- 타입스크립트
- 메모리
- 스나이퍼팩토리
- javascript
- React.js
- CS
- Today
- Total
Bin's Blog
오늘의 CS(프로세스와 스레드 - 2편) 본문
프로세스의 상태
프로세스의 상태는 여러 가지 상태 값을 갖는다.

생성 상태
생성 상태(create)는 프로스세스가 생성된 상태를 의미하며 fork() 또는 exec() 함수를 통해 생성한다. 이때 PCB가 할당된다.
fork()
fork()는 부모 프로세스의 주소 공간을 그대로 복사하며, 새로운 자식 프로세스를 생성하는 함수이다. 주소 공간만 복사할 뿐이지 부모 프로세스의 비동기 작업 등을 상속하지는 않는다.
exec()
exec()은 새롭게 프로세스를 생성하는 함수이다.
대기 상태
대기 상태는 메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기하고 있으며 CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태이다.
대기 중단 상태
대기 중단 상태는 메모리 부족으로 일시 중단된 상태이다.
실행 상태
실행 상태는 CPU 소유권과 메모리를 할당받고 instruction 수행 중인 상태를 의미한다. 이를 CPU burst(CPU 명령어가 실행되는 것)가 일어났다고도 표현한다.
중단 상태
중단 상태는 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태이다. I/O(입출력) 디바이스에 의한 인터럽트로 이런 현상이 발생한다. 예를 들어 프린트 인쇄 버튼을 눌렀을 때 프로세스가 잠깐 멈춘 듯할 때가 바로 그 상태이다.
일시 중단 상태
대기 중단과 유사하다. 중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태이다.
종료 상태
메모리와 CPU 소유권을 모두 놓고 가는 상태를 말한다. 종료는 자연스럽게 종료되는 것도 있지만 부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료도 있다. 자식 프로세스에 할당된 자원의 한계치를 넘어서거나 부모 프로세스가 종료되거나 사용자가 process.kill등 여러 명렁어로 프로세스를 종료할 때 발생한다.
프로세스의 메모리 구조
운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당한다.

위에서부터 스택(Stack), 힙(heap), 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)로 나뉜다. 스택은 위 주소부터 할당되고 힙은 아래 주소부터 할당된다.
스택과 힙
스택과 힙은 동적 할당이 되며, 동적 할당은 런타임 단계에서 메모리를 할당받는 것을 의미한다.
스택은 지역 변수, 매개변수, 실행되는 함수에 의해 늘어들거나 줄어드는 메모리 영역이다. 함수가 호출될 때마다 호출될 때의 환경 등 특정 정보가 스택에 계속해서 저장된다. 또한, 재귀 함수가 호출된다고 했을 때 새로운 스택 프레임이 매번 사용되기 때문에 함수 내의 변수 집합이 해당 함수의 다른 인스턴스 변수를 방해하지 않는다.
힙은 동적으로 할당되는 변수를 담는다. malloc(), free() 함수를 통해 관리할 수 있으며 동적으로 관리되는 자료 구조의 경우 힙 영역을 사용한다. 예를 들어 vector는 내부적으로 힙 영역을 사용한다.
데이터 영역과 코드 영역
이 영역은 정적 할당되는 영역이다. 정적 할당은 컴파일 단계에서 메모리를 할당하는 것을 말한다. 데이터 영역은 BSS segment와 Data segment, code/text segment로 나뉘어서 저장한다.
BSS segment는 전역 변수 또는 static, const로 선언되어 있고 0으로 초기화 또는 초기화가 어떠한 값으로도 되어 있지 않은 변수들이 이 메모리 영역에 할당된다.
Data segment는 전역 변수 또는 static, const로 선언되어 있고 0이 아닌 값으로 초기화된 변수가 이 메모리 영역에 할당된다.
code segment는 프로그램의 코드가 들어간다.
📚 용어 정리
1️⃣ PCB: Process Control Block의 줄임말로 특정한 프로세스를 관리할 필요가 있는 정보를 포함한다. 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.
'CS' 카테고리의 다른 글
오늘의 CS(프로세스와 스레드 - 4편) (0) | 2023.10.05 |
---|---|
오늘의 CS(프로세스와 스레드 - 3편) (0) | 2023.09.21 |
오늘의 CS(프로세스와 스레드 - 1편) (0) | 2023.09.14 |
오늘의 CS(메모리 - 메모리 관리(하)) (0) | 2023.09.12 |
오늘의 CS(메모리 - 메모리 관리(상)) (0) | 2023.09.11 |