철학과 학생의 개발자 도전기
프로세스와 스레드 본문
1. 프로세스란
- 메모리에 올라와 실행 중인 프로그램
- 운영체제가 관리하고 자원을 할당하는 단위
- 일종의 자료구조
프로세스 구조
1. Text
- 기계어로 변환된 프로그램 코드를 저장한다.
2. Data & BSS
- 전역 변수, 정적 변수, 상수를 저장한다.
- 초기화된 변수는 Data, 초기화되지 않은 변수는 BSS에 저장한다.
- 데이터 영역은 프로그램의 시작 시 초기화되며, 프로세스가 종료될 때까지 유지된다.
3. Stack
- 지역 변수, 매개 변수, return 주소값 등을 저장한다.
- 함수가 호출되면 stack 공간이 생성되며, 함수가 종료되면 제거된다.
4. Heap
- 동적으로 생성되는 자료구조 및 객체를 저장한다.
- 프로세스가 실행 중에 동적으로 메모리를 할당받고 해제하는데 사용된다.
프로세스 상태
1. 프로세스 생성(new)
- 프로세스가 생성되고 자원을 할당받지 않은 상태
2. 실행 가능(Ready)
- 실행을 위한 준비를 마치고 CPU 자원을 기다리는 상태
3. 실행 상태(Running)
- 프로세스가 CPU를 할당받아 실제로 코드를 실행하는 상태
4. 대기(Blocked)
- 작업 시간이 초과되거나 자원 사용을 위해 대기해야 하는 이벤트가 발생해서 프로세스가 잠시 멈춘 상태
- CPU 자원을 반환하고 특정 자원을 사용할 수 있을 때까지 실행을 멈춘다.
5. 종료(Terminated, exit)
- 프로세스의 실행이 완료되어 종료된 상태
- 할당된 자원이 해제되고, 프로세스의 메모리 공간은 운영체제에 반환된다.
PC와 SP
- CPU 내부에 위치하는 레지스터
- 프로세스의 실행 상태를 유지하기 위한 값
- PCB(Process Control Block)에 저장
1. PC(Program Counter)
- 다음 명령어의 주소를 저장하는 레지스터
- 프로그램의 흐름을 제어하는 역할 (분기 또는 점프)
- 프로세스가 중단되거나 인터럽트가 발생했을 때 멈춘 지점부터 재실행 가능
2. SP(Stack Pointer)
- 스택의 최상단 주소를 저장하는 레지스터
- 함수 호출 시 SP를 감소시켜 새로운 스택 프레임을 생성하고, 함수 반환 시 SP를 증가시켜 이전 크기로 돌아감
- 프로세스의 스택 영역 관리 (오버플로우 방지 등)
PCB(Process Control Block)
- 운영체제가 프로세스를 관리하기 위해 사용하는 자료구조
- PCB는 각 프로세스마다 생성되며, 해당 프로세스의 상태 정보와 제어 정보를 저장
1. 프로세스 식별자(Process ID)
- 각 프로세스를 구별하기 위한 고유한 식별자
2. 프로세스 상태
- 프로세스의 현재 상태
3. PC(Program Counter)
- 다음에 실행할 명령어의 주소
4. CPU 레지스터들
- CPU의 레지스터 상태 저장(SP 등)
5. CPU 스케줄링 정보
- 프로세스의 우선순위, 스케줄링 큐에 대한 포인터 등 스케줄링과 관련된 정보
6. 메모리 관리 정보
- 프로세스가 사용하는 메모리 공간의 주소 범위, 페이지 테이블, 메모리 할당 정보 등과 같이 메모리 관리에 필요한 정보
7. 입출력 상태
- 프로세스에 의해 열린 파일 목록, 할당된 I/O 장치 등 입출력 상태에 관한 정보
2. 스레드
- 프로세스 내에서 실행되는 가장 작은 실행 단위
- 한 프로세스 내에서 여러 스레드를 생성하고 동시에 실행 가능
- 코드, 데이터, 힙 영역을 공유하여 메모리를 효율적으로 사용하고 스레드 간 통신도 원활
- 독립적인 스택과 레지스터 상태, PC 등을 가져서 다른 스레드에 대한 영향 최소화
- 동일한 자원에 접근할 때 동기화를 통한 일관성 확보 필요 (뮤텍스, 세마포어)
3. 프로세스 vs 스레드
1. 정의
- 프로세스: 운영체제의 관리 하에 자신만의 실행 환경과 메모리 공간을 가지며 실행되는 프로그램
- 스레드: 프로세스 내에서 실행되는 가장 작은 단위로, 프로세스의 자원을 공유하고 병렬로 작업 수행
2. 자원 공유
- 프로세스: 각 프로세스는 고유한 메모리 공간을 가지며, 다른 프로세스의 자원에 직접 접근할 수 없음
- 스레드: 같은 프로세스 내의 다른 스레드들과 메모리를 공유하여 스레드 간의 통신이 더 빠르고 효율적임
3. 생성 및 컨텍스트 스위칭 비용
- 프로세스: 새로운 프로세스를 생성하거나 프로세스 간의 컨텍스트 스위칭에 비용이 많이 듬
- 스레드: 스레드의 생성 및 컨텍스트 스위칭 비용은 프로세스에 비해 작음
4. 오류 영향도
- 프로세스: 하나의 프로세스에서 오류가 발생하면 그 오류는 해당 프로세스 내에서만 영향을 미침
- 스레드: 하나의 스레드에서 오류가 발생하면 같은 프로세스 내의 다른 스레드들에게도 영향을 미칠 수 있음
5. 동기화와 통신
- 프로세스: 프로세스 간의 통신(IPC)을 위해서는 운영체제의 지원이 필요하며, 복잡한 동기화 기법이 요구됨
- 스레드: 메모리를 공유하기 때문에 스레드 간의 통신이 더 간단하며, 동기화 문제도 더 쉽게 처리 가능
'운영체제' 카테고리의 다른 글
CPU 스케줄링 (0) | 2024.02.05 |
---|---|
Inter Process Communication (0) | 2024.01.22 |
PCB와 Context Switching (0) | 2024.01.22 |
인터럽트 (0) | 2024.01.10 |
운영체제란 (1) | 2024.01.02 |