테키테크 TEKITECH

[운영체제] Ch10. 프로세스와 스레드, 멀티프로세스와 멀티스레드 본문

그리고/스터디

[운영체제] Ch10. 프로세스와 스레드, 멀티프로세스와 멀티스레드

TEKI 2023. 2. 13. 23:32

우리가 알아야 할 컴퓨터 구조 지식 두 가지

  1. 프로세스
  2. 프로세스 상태와 프로세스 계층 구조
  3. 스레드
  4. 멀티프로세스와 멀티스레드

 


 

1. 프로세스

지금까지 '실행 중인 프로그램'이라고 표현하던 것을 프로세스라고 부른다. 프로그램이 실행되기 전까지는 보조기억장치에 있는 데이터 덩어리로 있다가 메모리로 옮겨 적재하고 실행하는 순간부터는 프로세스가 된다.

 

◈  포그라운드 프로세스(Foreground Process)와 백그라운드 프로세스(Background Process)

사용자가 볼 수 있는 공간에서 실행되는 프로세스를 포그라운드 프로세스라고 하고, 보이지 않는 공간에서 실행되는 프로세스를 백그라운드 프로세스라고 한다. 이러한 백그라운드 프로세스를 유닉스 체계의 운영체제에서는 데몬(Daemon), 윈도우 운영체제에서는 서비스(Service)라고 부른다.

 

◈  프로세스 제어 블록 (PCB: Process Control Block)

모든 프로세스는 CPU를 필요로 하지만, 모든 프로세스가 한정된 자원인 CPU를 동시에 사용할 수는 없다. 따라서 프로세스는 돌아가면서 한정된 시간만큼만 CPU를 사용하고, 타이머 인터럽트(한정된 시간의 끝을 알리는 인터럽트)가 발생하면 다음 차례를 기다린다. 운영체제는 이러한 사이클을 관리하는 프로세스 제어 블록을 이용한다.

프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료 구조로, 프로세스 생성 시 만들어지고 실행이 끝나면 폐기된다.

 

PCB에 담기는 대표적인 정보

① 프로세스 ID (PID: Process ID)
: 특정 프로세스를 식별하기 위한 고유 번호를 저장한다. 같은 프로그램이라도 두 번 실행하면 서로 다른 두 개의 PID가 생성된다.

② 레지스터 값
: 프로세스가 자신의 실행 차례가 돌아왔을 때 이전까지 사용했던 레지스터의 중간값을 복원하여 진행하던 작업을 이어 실행할 수 있도록 프로그램 카운터를 비롯한 레지스터 값을 저장한다.

③ 프로세스 상태
: 현재 프로세스의 상태를 기록한다.

④ CPU 스케줄링 정보
: 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보를 저장한다.

⑤ 메모리 관리 정보
: 베이스 레지스터, 한계 레지스터, 페이지 테이블 정보 등 필요한 정보가 있는데 프로세스마다 메모리에 저장된 위치가 다르므로 프로세스가 어느 주소에 저장되어 있는지에 대한 정보가 있어야 한다.

⑥ 사용한 파일과 입출력장치 목록
: 프로세스가 실행 과정에서 사용한 파일과 입출력장치 정보가 PCB에 기록된다.

 

◈  문맥 교환 (Context Switching)

하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 문맥(Context)이라고 하고, 이 데이터는 해당 프로세스의 PCB에 표현되어 있다. 프로세스가 CPU를 사용할 수 있는 시간이 다 되거나 예기치 못한 상황으로 인터럽트가 발생하면 운영체제는 해당 프로세스의 PCB에 문맥을 백업하고, 뒤이어 다음 차례인 프로세스의 복구하는 식으로 실행 중인 프로세스를 바꾸는 것을 문맥 교환이라고 한다.

문맥 교환이 빠르게 번갈아가며 수행되기 때문에 여러 프로세스가 동시에 실행되는 것처럼 보이는데, 문맥 교환이 너무 자주 일어나면 오버헤드가 발생할 수 있다.

 

하나의 프로세스는 사용자 영역에 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역뉘어 저장된다.

[1] 코드 영역(Code Segment) 또는 텍스트 영역(Text Segment)

  • 코드 영역 또는 텍스트 영역에는 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다.
  • 쓰기가 금지되어 있는 읽기 전용 (Read-Only) 공간이다. (CPU가 실행할 명령어라 담겨 있기 때문)
  • 프로그램이 실행되는 동안 크기가 변하지 않는다. (정적 할당 영역)

[2] 데이터 영역 (Data Segment)

  • 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간으로, '전역 변수'가 대표적이다.
  • 프로그램이 실행되는 동안 크기가 변하지 않는다. (정적 할당 영역)

[3] 힙 영역

  • 프로그램을 만드는 사용자가 직접 할당할 수 있는 저장 공간이며, 언젠가는 반환해야 한다.
  • 메모리 공간을 반환하지 않으면 메모리 누수 이슈가 발생하게 된다.
  • 프로그램을 실행하는 동안 크기가 변할 수 있다. (동적 할당 영역)
  • 동적 할당 영역이므로 스택 영역과 반대로 낮은 주소에서 높은 주소로 할당하여 겹치지 않도록 한다.

[4] 스택 영역

  • 데이터를 일시적으로 저장하는 공간으로, 잠깐 쓰다 말 매개 변수, 지역 변수 등이 저장된다.
  • 실시간으로 크기가 변할 수 있다. (동적 할당 영역)
  • 동적 할당 영역이므로 힙 영역과 반대로 높은 주소에서 낮은 주소로 할당하여 겹치지 않도록 한다.

 

 

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

프로세스의 상태를 표현하는 방식은 운영체제마다 조금씩 차이가 있지만, 대표적인 상태는 아래와 같다.

 

[1] 생성 상태
 프로세스를 생성 중인 상태로, 막 메모리에 적재되어 PCB를 할당받은 상태.

[2] 준비 상태
CPU를 할당받아 실행할 자기 차례를 기다리는 상태

[3] 실행 상태
CPU를 할당받아 실행 중인 상태. 할당된 시간을 모두 사용하여 타이머 인터럽트가 발생하면 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하여 입출력 장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 된다.

[4] 대기 상태
프로세스 실행 도중 입출력장치를 사용하면 입출력을 끝날 때(입출력 완료 인터럽트를 받을 때)까지 기다리는 상태. 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다린다.

[5] 종료 상태
→ 프로세스가 종료된 상태. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리한다.

 

◈  부모 프로세스(Parent Process)와 자식 프로세스(Child Process)

프로세스가 실행 도중 시스템 호출을 통해 다른 프로세스를 생성할 경우, 기존 프로세스를 부모 프로세스, 새로 만들어진 프로세스를 자식 프로세스라고 한다.

부모 프로세스와 자식 프로세스는 각기 다른 PID를 가진다. 일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 한다.

컴퓨터 부팅 시점부터 실행되는 최초의 프로세스와 그 자식 프로세스들을 트리 구조로 나타낸 것을 프로세스 계층 구조라고 한다. 예를 들어 사용자가

① 사용자가 컴퓨터를 켠다.
 부팅과 동시에 생성된 최초 프로세스가 실행된다.

② 로그인 창을 통해 성공적으로 로그인한다.
최초 프로세스로부터 로그인 프로세스가 생성되고 이로부터 

③ bash 쉘을 켠다.
로그인 프로세스에서 사용자 인터페이스(bash 쉘) 프로세스가 생성된다.

bash 쉘에서 Vim 편집기를 실행시킨다.
사용자 인터페이스 프로세스로부터 Vim 프로세스가 생성된다.

와 같은 작업을 했다고 가정할 때 생성되는 프로세스의 계층 구조를 도표로 나타내면 아래와 같다.

 

3. 스레드

스레드는 실행의 단위로, 더 자세하게 표현하면 프로세스를 구성하는 실행의 흐름 단위를 말한다. 프로세스의 스레드들은 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다.

 

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

프로그램을 실행하면서 여러 프로세스가 동시에 실행될 수 있다. 이를 멀티프로세스라고 한다.
스레드는 프로세스를 구성하는 실행 단위라고 볼 수 있고, 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라고 한다.

 

반응형
Comments