SMALL
10-1 프로세스 개요
프로세스란?
실행 중인 프로그램
‘프로세스를 생성한다’는 것은?
보조기억장치 → 메모리 → 실행
ex. hwp.exe 파일은 프로세스가 아님 → hwp.exe 프로그램을 더블클릭해 실행하면 프로세스가 되는 것
포그라운드 프로세스 vs 백그라운드 프로세스
📌 포그라운드 프로세스(foreground process)란?
사용자와 직접 상호 작용하는 프로세스
📌 백그라운드 프로세스(background process)란?
사용자와 직접 상호 작용하지 않는 프로세스
📌 데몬 프로세스(demon process)
- 사용자와의 상호작용 없이 정해진 일만 수행하는 백그라운드 프로세스
- 윈도우 운영체제에서는 서비스(service)라고 부름
PCB(Process Control Block)란?
프로세스와 관련된 정보를 저장하는 자료 구조
- PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기됨
- PCB는 커널 영역에 생성됨
- 운영체제가 프로세스에 필요한 자원을 배분하기위해 프로세스를 식별해야 하는데 그러기 위해 사용하는 것이 PCB
PCB에 저장되는 정보
1. 프로세스 ID(PID)
- 프로세스를 식별하기 위해 부여하는 고유한 번호
2. 레지스터 값
- 프로세스가 실행하며 사용했던 레지스터 값들이 저장됨
3. 프로세스 상태
- 현재 프로세스의 상태가 저장됨
4. CPU 스케줄링 정보
- 프로세스가 언제 CPU를 할당받을지에 대한 정보가 저장됨
5. 메모리 관리 정보
- 프로세스의 메모리 주소가 저장됨
6. 사용한 파일과 입출력장치 목록
- 프로세스에 할당되었던 입출력장치나 파일에 대한 내용이 저장됨
문맥 교환(Context Switch)이란?
- 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구해 새로운 프로세스를 실행하는 것
- 하나의 프로세스를 실행하다가 다른 프로세스로 실행 순서가 넘어갈 때 문맥 교환이 일어남
- 문맥 교환이 너무 자주 일어나면 오버헤드가 발생할 수 있음
📌 문맥(Context)이란?
- 하나의 프로세스를 다시 실행하기 위해 저장되어야 할 정보
- PCB에 기록되는 정보들을 문맥이라고 생각하면 됨
프로세스의 메모리 영역
1. 코드 영역(텍스트 영역)
- 기계어로 이루어진 명령어가 저장됨
- 읽기 전용 공간
2. 데이터 영역
- 프로그램이 실행되는 동안 계속 필요한 데이터가 저장됨
- 전역 변수가 대표적임
✅ 코드 영역과 데이터 영역은 정적 할당 영역이라고도 부름
3. 힙 영역
- 프로그래머가 직접 할당할 수 있는 저장 공간
- 힙 영역에 할당한 공간은 사용한 후, 반환하지 않으면 메모리 누수가 발생함
4. 스택 영역
- 일시적으로 사용되는 데이터가 저장됨
- 지역 변수가 대표적임
✅ 힙 영역과 스택 영역은 동적 할당 영역이라고도 부름
10-2 프로세스 상태와 계층 구조
프로세스의 상태
1. 생성 상태
- 메모리에 적재되어 PCB가 생성된 상태
⬇️ 생성된 프로세스는 준비 상태가 되어 CPU 할당을 기다림(바로 실행❌)
2. 준비 상태
- CPU를 할당을 기다리는 상태
⬇️ 디스패치(dispatch)
3. 실행 상태
- CPU를 할당받아 실행 중인 상태
- 실행 도중, 타이머 인터럽트가 발생하면 다시 준비 상태가 됨
- 실행 도중, 입출력 작업이 일어나면 입출력 작업이 끝날 때까지 대기 상태가 됨
4. 대기 상태
- 입출력 작업을 기다리는 상태
- 입출력 작업이 완료되면 다시 준비 상태가 됨
5. 종료 상태
- 프로세스가 종료되어 PCB와 메모리가 정리된 상태
프로세스 계층 구조
📌 부모 프로세스란?
새 프로세스를 생성한 프로세스
📌 자식 프로세스란?
부모 프로세스에 의해 생성된 프로세스
✅ 부모 프로세스와 자식 프로세스는 독립적인 프로세스이기 때문에 서로 다른 PID를 가짐
프로세스 생성 기법
부모 프로세스는 fork와 exec 이라는 시스템 호출(시스템 콜)을 통해 자식 프로세스를 생성함
📌 fork란?
- 부모 프로세스가 자신의 복사본을 생성하는 시스템 호출
- 부모 프로세스의 자원들이 자식 프로세스에 상속됨
📌 exec란?
- 자신의 메모리 공간을 새 프로그램으로 덮어쓰는 시스템 호출
- 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화됨
✅ 프로세스 계층 구조를 이루는 과정은 fork와 exec이 반복되는 과정임
10-3 스레드
스레드란?
프로세스를 구성하는 실행의 단위
프로세스와 스레드
📌 단일 스레드 프로세스란?
하나의 실행 흐름만을 가지는 프로세스
📌 멀티 스레드 프로세스란?
여러 개의 실행 흐름을 가지는 프로세스
멀티프로세스와 멀티스레드
📌 멀티프로세스란?
여러 프로세스를 동시에 실행하는 것
📌 멀티스레드란?
여러 스레드로 프로세스를 동시에 실행하는 것
📌 멀티프로세스 vs 멀티스레드
🤔 그렇다면 멀티프로세스와 멀티스레드 둘 다 여러 개의 실행 흐름을 가지고 실행하는데, 어떤 차이점이 있을까?
프로세스는 다른 프로세스와 서로 자원을 공유하지 않음
스레드는 다른 스레드와 코드 영역, 데이터 영역, 힙 영역 등의 자원을 공유함
'운영체제' 카테고리의 다른 글
혼자 공부하는 컴퓨터구조 + 운영체제 8장 정리 (0) | 2024.03.31 |
---|---|
[운영체제] 프로세스의 정의와 프로세스의 상태 (0) | 2023.04.05 |
[운영체제] OS-Architecture(Monolithic Kernel, Micro Kernel) (0) | 2023.04.04 |
[운영체제] 운영체제의 구성 (0) | 2023.04.03 |
[운영체제] Timesharing (0) | 2023.04.02 |