CS/운영체제

[운영체제] 6. 프로세스의 연산과 스레드

JIN-JJS 2025. 2. 20. 19:31

1. 프로세스의 연산

프로세스의 구조

• 코드 영역: 프로그램의 본문이 저장되며 읽기 전용

• 데이터 영역: 실행 중 사용하는 변수 및 파일 등의 데이터 저장, 읽기/쓰기 가능

• 스택 영역: 함수 호출 시 반환 주소 저장, 운영체제에서 관리하며 사용자에게 보이지 않음

 

프로세스의 생성과 복사

• fork( ) 시스템 호출: 실행 중인 프로세스를 복사하여 새로운 프로세스 생성

- 부모 프로세스: 기존 실행 중인 프로세스

- 자식 프로세스: 복사된 새로운 프로세스

 

• fork( ) 호출 동작 과정

- 부모 프로세스의 대부분을 자식 프로세스에 복사

- PID, PPID, CPID 등 프로세스 구분자 변경

 

• fork( ) 시스템 호출의 장점

- 빠른 프로세스 생성

- 자원 상속 가능

- 효율적인 시스템 관리

 

프로세스의 전환

• exec( ) 시스템 호출: 기존 프로세스를 새로운 프로세스로 전환 (재사용)

- 코드 영역을 새로운 코드로 변경

- 데이터 영역과 스택 영역 리셋

- 프로세스 제어 블록(PCB)의 PID, PPID, CPID 등은 유지됨

 

프로세스의 계층 구조

• 유닉스의 프로세스 계층 구조: 모든 프로세스는 init 프로세스의 자식으로 트리 구조 형성

 

• 장점

- 동시 작업 가능

- 프로세스 재사용 용이

- 자원 회수 용이

 

고아 프로세스와 좀비 프로세스

• 고아 프로세스: 부모 프로세스가 먼저 종료된 프로세스

• 좀비 프로세스: 자식 프로세스가 종료되었지만 부모가 정리하지 않은 프로세스

• exit( ) 및 return( )을 사용해 부모에게 종료 상태 전달 가능

 

부모 프로세스 종료 시

• 커널이 자식 프로세스를 init 프로세스에게 입양

• 일부 운영체제에서는 모든 자식 프로세스 강제 종료

 

 

 

2. 스레드

스레드의 개념

• 프로세스를 실행 단위로 하는 멀티 태스킹의 문제점

- 커널에 과부하 발생

- 시스템 속도 저하

 

• 스레드의 특징

- 프로세스보다 작고 빠르게 생성/소멸

- 컨텍스트 스위칭 속도가 빠름

- 프로세스 내에서 코드, 데이터, 힙을 공유하며 스택은 개별적으로 가짐

 

• 스레드 제어 블록(TCB)

- 스레드 실행 상태, 스케줄링 정보, 계정 정보 포함

- 프로세스 제어 블록(PCB)과 연결됨

 

프로세스와 스레드의 차이

• 프로세스: 스레드들의 컨테이너

• 스레드: 프로세스 내에서 실행 단위

• 비유: 프로세스(회사)와 스레드(직원)

- 직원이 많을수록 동시에 많은 작업 수행 가능

- 프로세스 내 여러 스레드가 동작 가능

 

스레드 관련 용어

• 멀티 스레드: 하나의 프로세스를 여러 스레드로 분할하여 운영

• 멀티 태스킹: CPU가 여러 작업을 처리하는 기법

• 멀티 프로세싱: 여러 개의 CPU가 여러 개의 스레드를 동시에 실행

 

멀티 스레드의 장단점

• 장점

- 병렬 실행 가능

- 사용자 및 서버 프로그램 응답성 향상

- 메모리 및 자원 사용 효율적

- 코드 유지보수 용이

 

• 단점

- 한 스레드의 문제 발생 시 전체 프로세스에 영향

- 예: 인터넷 익스플로러 창 하나가 멈추면 전체 브라우저 종료

 

멀티 스레드 모델

• 사용자 스레드 (1:N 모델)

- 한 개의 커널 스레드가 여러 사용자 스레드를 관리

- 문맥 교환 없음, 멀티 CPU 사용 불가능

 

• 커널 스레드 (1:1 모델)

- 하나의 사용자 스레드가 하나의 커널 스레드와 연결

- 독립적 실행 가능, 보안 강함, 하지만 문맥 교환 비용 증가

 

• 멀티 레벨 스레드 (M:N 모델)

- 사용자 스레드와 커널 스레드를 혼합하여 유연하게 처리

- 커널 스레드를 사용하여 안정성 유지

 

 

 

3. 동적 할당 영역과 시스템 호출

프로세스의 동적 할당 영역

• 프로세스 구조

- 코드 영역: 프로그램 본체 저장

- 데이터 영역: 변수 및 데이터 저장

- 스택 영역과 힙 영역: 실행 중 동적으로 변하는 영역

 

• 스택 영역: 함수 실행 시 메모리 할당 및 해제

• 힙 영역: 프로그램 실행 중 동적 메모리 할당

 

exit( )와 wait( ) 시스템 호출

• exit( ) 시스템 호출: 작업 종료 시 부모 프로세스에 상태 전달

- 0: 정상 종료, -1: 비정상 종료

 

• wait( ) 시스템 호출: 부모 프로세스가 자식 프로세스 종료를 기다림

- 부모-자식 프로세스 간 동기화 역할 수행


이 내용은 휴넷사회복지평생교육원의 운영체제 강의를 듣고 정리한 것입니다.