Skip to content

Latest commit

 

History

History
244 lines (133 loc) · 8.48 KB

10장_프로세스와 스레드_백유진.md

File metadata and controls

244 lines (133 loc) · 8.48 KB

10장. 프로세스와 스레드

10-1 프로세스 개요

프로세스란?

실행 중인 프로그램

‘프로세스를 생성한다’는 것은?

보조기억장치 → 메모리 → 실행

ex. hwp.exe 파일은 프로세스가 아님 → hwp.exe 프로그램을 더블클릭해 실행하면 프로세스가 되는 것

포그라운드 프로세스 vs 백그라운드 프로세스

📌 포그라운드 프로세스(foreground process)란?

사용자와 직접 상호 작용하는 프로세스

📌  백그라운드 프로세스(background process)란?

사용자와 직접 상호 작용하지 않는 프로세스

📌 데몬 프로세스(demon process)

  • 사용자와의 상호작용 없이 정해진 일만 수행하는 백그라운드 프로세스
  • 윈도우 운영체제에서는 서비스(service)라고 부름

PCB(Process Control Block)란?

프로세스와 관련된 정보를 저장하는 자료 구조

1
  • PCB는 프로세스 생성 시에 만들어지고 실행이 끝나면 폐기됨
  • PCB는 커널 영역에 생성됨
  • 운영체제가 프로세스에 필요한 자원을 배분하기위해 프로세스를 식별해야 하는데 그러기 위해 사용하는 것이 PCB

PCB에 저장되는 정보

2

1. 프로세스 ID(PID)

  • 프로세스를 식별하기 위해 부여하는 고유한 번호

2. 레지스터 값

  • 프로세스가 실행하며 사용했던 레지스터 값들이 저장됨

3. 프로세스 상태

  • 현재 프로세스의 상태가 저장됨

4. CPU 스케줄링 정보

  • 프로세스가 언제 CPU를 할당받을지에 대한 정보가 저장됨

5. 메모리 관리 정보

  • 프로세스의 메모리 주소가 저장됨

6. 사용한 파일과 입출력장치 목록

  • 프로세스에 할당되었던 입출력장치나 파일에 대한 내용이 저장됨

문맥 교환(Context Switch)이란?

3
  • 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구해 새로운 프로세스를 실행하는 것
  • 하나의 프로세스를 실행하다가 다른 프로세스로 실행 순서가 넘어갈 때 문맥 교환이 일어남
  • 문맥 교환이 너무 자주 일어나면 오버헤드가 발생할 수 있음
4

📌 문맥(Context)이란?

  • 하나의 프로세스를 다시 실행하기 위해 저장되어야 할 정보
  • PCB에 기록되는 정보들을 문맥이라고 생각하면 됨

프로세스의 메모리 영역

5

1. 코드 영역(텍스트 영역)

  • 기계어로 이루어진 명령어가 저장됨
  • 읽기 전용 공간

2. 데이터 영역

  • 프로그램이 실행되는 동안 계속 필요한 데이터가 저장됨
  • 전역 변수가 대표적임
✅ 코드 영역과 데이터 영역은 `정적 할당 영역`이라고도 부름

3. 힙 영역

  • 프로그래머가 직접 할당할 수 있는 저장 공간
  • 힙 영역에 할당한 공간은 사용한 후, 반환하지 않으면 메모리 누수가 발생함

4. 스택 영역

  • 일시적으로 사용되는 데이터가 저장됨
  • 지역 변수가 대표적임
✅ 힙 영역과 스택 영역은 `동적 할당 영역`이라고도 부름 6

10-2 프로세스 상태와 계층 구조

프로세스의 상태

7

프로세스 상태 다이어그램

1. 생성 상태

  • 메모리에 적재되어 PCB가 생성된 상태

⬇️ 생성된 프로세스는 준비 상태가 되어 CPU 할당을 기다림(바로 실행❌)

2. 준비 상태

  • CPU를 할당을 기다리는 상태

⬇️ 디스패치(dispatch)

3. 실행 상태

  • CPU를 할당받아 실행 중인 상태
  • 실행 도중, 타이머 인터럽트가 발생하면 다시 준비 상태가 됨
  • 실행 도중, 입출력 작업이 일어나면 입출력 작업이 끝날 때까지 대기 상태가 됨

4. 대기 상태

  • 입출력 작업을 기다리는 상태
  • 입출력 작업이 완료되면 다시 준비 상태가 됨

5. 종료 상태

  • 프로세스가 종료되어 PCB와 메모리가 정리된 상태

프로세스 계층 구조

📌 부모 프로세스란?

새 프로세스를 생성한 프로세스

📌 자식 프로세스란?

부모 프로세스에 의해 생성된 프로세스

✅ 부모 프로세스와 자식 프로세스는 독립적인 프로세스이기 때문에 서로 다른 PID를 가짐 8

프로세스 계층 구조

프로세스 생성 기법

부모 프로세스는 forkexec 이라는 시스템 호출(시스템 콜)을 통해 자식 프로세스를 생성함

📌 fork란?

  • 부모 프로세스가 자신의 복사본을 생성하는 시스템 호출
  • 부모 프로세스의 자원들이 자식 프로세스에 상속됨
9

📌 exec란?

  • 자신의 메모리 공간을 새 프로그램으로 덮어쓰는 시스템 호출
  • 코드 영역과 데이터 영역의 내용이 실행할 프로그램의 내용으로 바뀌고, 나머지 영역은 초기화됨 10
11
✅ 프로세스 계층 구조를 이루는 과정은 fork와 exec이 반복되는 과정임

10-3 스레드

스레드란?

프로세스를 구성하는 실행의 단위

프로세스와 스레드

📌 단일 스레드 프로세스란?

하나의 실행 흐름만을 가지는 프로세스

12

📌 멀티 스레드 프로세스란?

여러 개의 실행 흐름을 가지는 프로세스

13

멀티프로세스와 멀티스레드

📌 멀티프로세스란?

여러 프로세스를 동시에 실행하는 것

📌 멀티스레드란?

여러 스레드로 프로세스를 동시에 실행하는 것

📌 멀티프로세스 vs 멀티스레드

🤔 그렇다면 멀티프로세스와 멀티스레드 둘 다 여러 개의 실행 흐름을 가지고 실행하는데, 어떤 차이점이 있을까? 14

프로세스는 다른 프로세스와 서로 자원을 공유하지 않음

15

스레드는 다른 스레드와 코드 영역, 데이터 영역, 힙 영역 등의 자원을 공유함

16