컴퓨터 사이언스 (CS)/운영체제

07. [쉽배운 3장] 프로세스와 스레드

한소희DE 2021. 8. 18. 23:23

 

목차

프로세스란?

프로그램과 프로세스

프로세스의 상태

프로세스 제어 블록(PDB)

스레드

 

 


 

01. 프로세스란?

프로그램이 메모리 상태에 올라가 동적인 상태인 것이 프로세스다.

 

 

1-1. 프로세스 구조

 

코드영역, 데이터영역, 스택영역으로 분리된다.

 

코드영역 프로그램 본문 기술. 요리책과 같음.
데이터영역 사용해야 하는 데이터. 요리의 재료와 같음.
스택영역 프로세스를 운영할 때 필요한 데이터. 조리도구와 같음.
예를 들면, 프로세스에서 함수 실행시키면 함수 실행 후 다시 돌아 올 위치 등을 저장함.
이는 사용자에게 보이지 않음.

 

 

 

 

1-2. 시분할 방식

시분할 방식이란, CPU가 시간을 쪼개 프로세스에게 각각 할당하여 프로세스를 처리할 수 있는 방법이다.

이는 CPU의 효율을 높이기 위한 방법 중 하나다.

 

음식점으로 비유하면, 요리사(CPU)가 한 개인 곳에서 손님의 주문 한 개가 들어오면 그 주문 한 개를 한 번에 처리해야 하는 상황을 말한다. 이후에 들어온 손님은 그 테이블 주문이 다 요리가 될 때까지 기다려야 한다.

이는 매우 비효율적이다.

 

강식당을 보면 알 수 있다.

 

출처: TVN 강식당 프로그램

한 테이블의 주문만 연신 만들면, 다른 테이블에서는 항의가 들어온다 ... 동시에 주문을 처리한다는 느낌이 들지 않기 때문이다.

 

따라서, 이를 해결하기 위해서 각 테이블 당 주문을 번갈아가며 수행해준다. 그러면, 고객으로 하여금 동시에 처리가 된다고 느낌을 줄 수 있다. 이게 바로 시분할 방식이다.

 

 

 

1-3. 시스템 호출

 

호출명령 설명 장점
fork() 프로세스 복제.
이는 PPID와 CPID가 생성됨.
각각의 PID는 다르게 구현됨.
프로세스 생성 속도 빠름
시스템 자원 관리 효율적 (부모 자식 프로세서가 생기며 부모가 자식 프로세스 종료 후 메모리 정리 처리를 맡아 수행해 효율적임)
추가 작업 없이 자원 상속 가능
exec() 프로세스 전환.
다른 프로세스를 그냥 띄우면 PDB 등을 새로만들어야 하고 메모리 할당 등이 필요하므로, 겉은 두고 안에 있는 내용물만 다른 프로세스로 변경.
구조체 재활용으로 프로세스 생성 속도 빠름
부모 자식 프로세서 연결은 그대로이므로 시스템 자원 관리 설정 용이

 

 

1-4. 프로세스 계층 구조

계층 구조란, 프로세스가 부모 자식 계층을 이루고 있는 구조를 말한다.

 

 

이는 동시에 여러 작업 처리종료된 프로세스 자원 회수에 용이하다.

 

동시에 여러 작업 처리 예시
만약 페이지에 다수 사용자 접속 시 로그인 페이지를 fork()하여 다수사용자에게 전달하면 login 프로세스를 다수가 쓸 수 있고 이는 동시처리로 간주한다.

 

여기서 잠깐! 고아 프로세스란?
부모 프로세스가 먼저 종료된 경우.
여기서 잠깐! 좀비 프로세스란?
자식 프로세스가 종료됐는데, 부모 프로세스가 메모리 정리 등을 하지 않아 남아있는 경우. 이 때문에 컴퓨터 장기간 켜놓을 때 느려질 수 있다.

 


02. 프로그램과 프로세스

 

앞서, 프로그램이 메모리에 올라간 상태가 프로세스라고 했다. 정확하게 말하면, 프로세스와 프로그램은 아래와 같은 관계를 갖는다.

 

프로세스 = 프로그램 + 프로그램 제어블록 (PCB)

 

왜냐하면, 프로그램이 메모리에 올라가면서 PCB가 생성되기 때문이다.

PCB의 자세한 설명은 아래에서 설명할 것이다.

 

 


03. 프로세스의 상태

 

프로세스는 아래와 같은 상태 그래프를 띤다.

 

 

여기서는 활성상태와 비활성상태로 구분된다.

 

 

3-1. 활성상태

생성 / 준비 / 대기 / 실행 / 완료

상태 설명 작업
생성 상태 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 메모리 할당, PCB 생성
준비 상태 모든 프로세스가 자기 차례 기다리는 상태.
CPU가 프로세스를 선택
dispatch(PID) 준비 -> 실행
실행 상태 선택된 프로세스가 타임 슬라이스 얻어 CPU 실행하는 상태.
프로세스 사이 ※문맥 교환 발생
timeout(PID) 실행 -> 준비
exit(PID) 실행 -> 완료
block(PID) 실행 -> 대기
대기 상태 실행 중인 프로세스가 입출력을 요청하면 입출력 완료될 때까지 기다리는 상태. wakeup(PID) 대기 -> 준비
완료 상태 프로세스 종료된 상태. 모든 데이터 및 메모리 정리.
exit()으로 정상적으로 처리하며, 비정상적 강제 종료는 ※코어 덤프.
메모리 삭제, PCB 삭제

※ 문맥 교환 : 두 프로세스의 제어 블록 및 이와 관련된 값을 교환하는 작업

※ 코어 덤프 : 디버깅 하기 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮기는 것

 

 

 

3-2. 비활성상태

휴식 / 보류

 

  • 휴식상태 : 일시적으로 쉬고 있는 상태. 프로세스 상태가 정지로 되어 있음. PCB도 유지되어 있음. 이는 메모리에 저장되어 있지만 멈춘 상태.
  • 보류상태: 메모리 꽉 찼거나 프로그램 오류 있을 경우, 입출력 입력 오래동안 되지 않을 경우 메모리에서 잠시 쫓겨나 있는 상태. 이는 메모리 밖 스왑 영역에서 저장되어 있으며 멈춘 상태.

 

 


04. 프로세스 제어 블록(PCB)

 

프로세스 제어 블록이란, 프로세스를 실행하는 데 필요한 중요 정보를 보관하는 자료 구조를 말한다.

 

이는 T(Task)CB라고도 하며 고유하다. 또한 프로세스 생성 시 생성되어 완료 시 폐기된다는 특징이 있다.

 

 

4-1. 프로세스 제어 블록의 구조

포인터 준비상태 & 대기상태 큐 구현

예를 들어 대기상태에서 입출력 결과가 같은 곳끼리 묶어 빠르게 처리하기 위한 라벨과 같다.
프로세스 상태 현재 프로세스가 어떤 상태인지 표현
프로세스 구분자(본인PID, 부모PPID, 자식CPID) 고유의 구분을 할 수 있도록 함
프로그램 카운터 이후 어떤 명령어를 수행할지 위치가 저장됨
프로세스 우선순위 예를 들어 사용자 프로세스보다 중요도가 큰 커널 프로세스는 우선순위가 높을 수 있는데, 이에 대한 정보가 저장되어 있음.
우선순위가 높을수록 더 먼저, 자주 실행된다.

레지스터, 메모리, 할당자원, 계정 등 정보 각 프로세스가 갖고 있어야 할 정보가 저장된다.

 

 


05. 스레드

 

스레드란, CPU에 작업 요청을 하는 실행 단위를 말한다.

 

 

일반적으로 작은 단위의 오퍼레이션이 모여 하나의 태스크가 된다.

여기서 오퍼레이션은 스레드,  태스크는 프로세스다.

 

 

주문서를 예시로 들어보았다. 여기서 각각의 요리는 프로세스, 그 내부 오퍼레이션은 스레드다.

 

즉 프로세스 간 연결은 약하지만 스레드 간 연결은 매우 강하다는 특징이 있다. 또한 스레드는 스레드 간 통신을 하며 소통한다.

 

스레드 관련 용어를 정리하면 아래와 같다.

 

용어 설명
멀티스레드 프로세스 내 작업을 여러 개 스레드로 나눈 것
멀티태스킹 CPU에 작업을 줄 때 각 프로세스마다 타임 슬라이스로 배분하는 시분할 방식
멀티프로세싱 여러 개의 CPU 혹은 한 개 CPU 내 여러 개 코어에 여러 개 스레드 배정해 동시 작동하는 방식
CPU 멀티스레드 CPU 내에서 동시에 여러 스레드 처리하도록 만든 병렬 처리 기법

 

 

5-1. 멀티 스레드의 장점

 

1. 작업 요구에 빠른 응답이 가능하다.

예를 들면, 동영상 틀기를 멀티스레드화 하면 입출력이 다 로드되지 않아도 중단이 돼도 재생이 가능하다.

 

2. 스레드 간 자원 공유해 자원 중복을 막아 원활하며 효율적이다.

3. 다중 CPU가 지원돼 다중 CPU가 멀티스레드를 동시에 처리하면 처리 시간이 더 단축된다.

 

 

 

5-2. 멀티 스레드의 단점

한 스레드 문제 생기면 전체 스레드 영향 끼친다.

예를 들어, 하나의 인터넷 익스플로러에서 문제 생기면 전체 인터넷 익스플로러가 종료된다.인터넷 익스플로러 프로세스는 하나고 그 안에 여러 개 페이지 스레드가 사용되는데, 스레드 하나 종료되면 프로세스 전체가 종료된다.