[Operating System] Process & Thread

JISU LEE·2021년 12월 14일
1

Computer Science

목록 보기
2/2
post-thumbnail

오늘도 wikipedia와 전공 과목 필기본을 참고해서 작성해보려고 한다.

Process

Process : 실행되고 있는 컴퓨터 Program

Program

Process의 정의에 적혀있는 Program은 무엇인지 짚고 넘어가자.

Program : 컴퓨터에서 실행될 때 특정 작업을 수행하는 명령어들의 모음, 프로그래밍된 결과물

대부분 바이너리 형식의 파일으로 저장되어 있다가 사용자가 실행시키면 메모리로 적재되어 실행된다.

Kinds

기능 라인에 따라 분류가 가능한데, 주요 기능 범주는 Application softwareSystem software 이다.

Application software는 end user를 위해 설계되어 사용자 인터페이스를 가진다.
System software에는 Operating system, Embedded program, Boot program, Microcode program이 포함된다.
Application software와 System software 모두 Utility program을 실행시킨다.

Program vs Software

Program과 Software는 일반적으로는 같은 의미로 쓰이지만 엄밀히 말하자면 아래와 같은 차이점이 있다.

Program : 프로그래밍된 결과물, 컴파일된 결과물뿐만 아니라 프로그래머가 작성한 소스 코드까지 포함
Software : 하드웨어의 반대 개념, Program뿐만 아니라 패키지 전체(CD, 설명서, 제품 포장 등)

Program vs Process

Process는 Program과 다르다.

Process는 살아있는 상태, Program은 죽어있는 상태라고 말할 수 있다. Program은 disk에 저장되어있는 수동적인 상태라는 것이다. 예를 들어 하나의 Program을 여러번 구동하면 여러 개의 Process가 메모리 상에서 실행된다.

Program은 Process의 일부로, Process는 실행 상태도 포함하고 있다.

실행중인 Process는 리눅스 명령어인 ps(내 Process를 간단하게), ps -fl(내 Process를 자세히), ps -efl(모든 Process를 자세히) 로 확인 가능

Process

Program이 무엇인지 알았으니, 다시 Process로 돌아오자면 Process는 작업(task)이라는 용어와 동일한 의미로 쓰인다.

속도를 향상시키기 위해 병렬 처리에 대해 고민하면서 여러 개념이 생겨나기 시작했다.

Multiprogramming : 다중 프로그래밍, CPU 작업과 입출력 작업을 병행하는 것, 동시에 여러 Process를 실행하는 시스템
Multiprocessing : 다중 처리, 컴퓨터 시스템 한 대에 둘 이상의 CPU를 사용하여 병렬로 처리하는 것
Multitasking : CPU 같은 공용자원을 다수의 작업이 나누어 사용하는 것

이러한 개념들의 등장으로 Process 관리는 운영체제에 있어 중요한 부분이 되었는데, Process 관리에 대해서도 이야기 해보겠다.

Process Management

Process 관리는 현대 운영 체제의 중요한 부분이다. 운영 체제는 기본적으로 아래 요구를 충족해야 한다.

  1. 자원을 Process에 할당
  2. Process가 정보를 공유하고 교환할 수 있도록 함
  3. 각 Process 자원을 다른 Process로부터 보호
  4. Process 간 동기화를 가능하게 함

위 요구를 충족시키기 위해 각 Process를 위한 자료 구조를 관리하며, 그를 통해 Process의 상태와 자원 소유권을 기술하고 운영체제가 각 Process를 제어할 수 있다.

Multiprogramming

다중 프로그래밍 또는 Multitasking 운영 체제는 동시에 여러 Process를 실행하는 시스템을 이야기 한다.

다중 프로그래밍의 요구사항은 다음과 같다.

  1. Processor가 특정 기간 동안 각 Process에 할당된다.
  2. Process가 적절한 순간에 해제된다.

프로세서가 Process 실행 도중 할당 해제되면 추후 다시 시작할 수 있도록 이 방식을 수행한다.

  1. Process는 시스템 호출(소프트웨어 인터럽트)을 일으킨다.
  2. 하드웨어 인터럽트를 일으킨다.

Process 하나를 멈추고 다른 Process를 시작하는 것을 Context Switch(문맥 교환)이라고 한다.

하나의 Process가 여러가지 하위 Process를 포함할 수 있는데 그를 Thread(스레드)라고 한다. 이 Thread에 대한 이야기는 에서 다뤄보도록 하겠다.

Process State

커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료구조가 있다. 이것들을 활용하여 Process의 상태를 관리한다.

  • create(생성) : Process가 생성되는 중
  • running(실행) : Process가 CPU를 차지하여 명령어들이 실행되고 있음
  • ready(준비) : Process가 CPU를 사용하고 있지는 않지만 언제든지 사용할 수 있는 상태, CPU가 할당되기를 기다리고 있음. 일반적으로 준비 상태의 Process 중 우선순위가 높은 Process가 CPU를 할당 받음
  • Blocked(보류) : waiting(대기)라고 부르기도 함. Process가 입출력 완료, 시그널 수신 등 어떤 사건을 기다리고 있는 상태를 의미
  • terminated(종료) : Process의 실행이 종료됨

Process State Transition

  1. dispatch(디스패치) : Ready → Running

    준비 리스트 맨 앞의 Process가 CPU를 점유하게 되는 것

  2. block(보류) : Running → Blocked

    실행 상태의 Process가 허가된 시간을 다 쓰기 전에 입출력 동작을 필요로 하는 경우
    Process는 CPU를 스스로 반납하고 보류 상태로 넘어감

  3. wake up(깨움) : Blocked → Ready

    입출력 작업 종료 등 기다리던 사건이 일어났을 때 보류 상태에서 준비 상태로 넘어가는 과정

  4. timeout(시간제한) : Running → Ready

    Process가 프로세서를 계속 독접해서 사용하지 못하게 하기 위해 clock interrupt를 두어 Process가 일정 시간 동안만(시분할 시스템의 time slice) 프로세서를 점유할 수 있게 한다.

Kinds

마지막으로 Process는 User process와 OS process로 나뉜다.

OS process는 print 등의 OS process와 scheduler, swap, pager의 Kernel process가 있다.

Thread

이제 Process에 대한 설명은 어느정도 마친 것 같으니, Thread로 넘어가보도록 하겠다.

Thread : Process 내에서 실행되는 흐름의 단위, 하나의 Process에 해당하는 수많은 하위 Process 중 하나, 스레드라고 번역되어 불림

일반적으로 한 Program은 하나의 Thread를 가지고 있지만, Program 환경에 따라 둘 이상의 Thread를 동시에 실행할 수 있다. 이러한 방식을 Multithread라고 한다.

Multithread : 하나의 Process 내에서 둘 이상의 Thread가 동시에 작업을 수행하는 것

Multiprocess vs Multithread

Commonality

Multiprocess와 Multithread는 여러 흐름이 동시에 진행된다

Difference

-MultiprocessMultithread
정의컴퓨터 시스템 한 대에 둘 이상의 CPU를 사용하여 병렬로 처리하는 것하나의 Process 내에서 둘 이상의 Thread가 동시에 작업을 수행하는 것
특징각 Process는 독립적으로 실행되며 각각 별개의 메모리를 차지한다.Process 내의 메모리를 공유해 사용할 수 있다.
장점1. 여러 프로세서를 사용하여 작업 속도 향상
2. 일부 프로세서에 문제가 생긴 경우 다른 프로세서를
이용할 수 있어 신뢰성이 높음
1. Thread 간의 전환 속도가 상대적으로 빠름
2. CPU가 여러 개일 경우 각 CPU가 thread 하나씩을 담당하게 하여 속도 향상
(실제 시간상으로 동시에 수행)
단점Process 간의 전환 속도(Context Switch)가 상대적으로 느림각각의 Thread 중 어떤 것이 먼저 실행될 지 순서를 알 수 없음
(Race condition 발생)

* race condition : Thread의 실행 조건에 따라 결과가 다르게 나오므로 오류가 발생햇을 때 원인을 찾기 힘든 문제, 이 문제를 막기 위해 Semaphore(세마포어) 등의 방식 사용

Kinds

Kernel-Level Thread vs User-Level Thread 참고

Thread를 지원하는 주체에 따라 User-Level ThreadKernel-Level Thread로 나눌 수 있다.

-User-Level ThreadKernel-Level Thread
특징커널 영역의 상위에서 지원
일반적으로 사용자 레벨의 라이브러리를 통해 구현
라이브러리는 Thread 생성 및 스케줄링 등에 관한 관리 기능을 제공
쉽게 말해 #inclued <thread> 혹은 import thread를 통해 Thread를 관리하는 것
운영체제가 지원하는 Thread 기능으로 구현
Kernel이 Thread 생성 및 스케줄링 등을 관리
장점1. 사용자 영역에서 연산을 수행하기 때문에 OS에서 Thread를 지원할 필요가 없음
2. Kernel은 User-Level Thread의 존재를 몰라 mode간의 전환이 없으므로
성능이 향상됨
1. Thread가 시스템 호출 등으로 중단되더라도, 커널은 Process 내의
다른 Thread를 중단시키지 않고 계속 실행
2. Kernel이 직접 Thread를 제공하기 때문에 안정성과 다양한
기능이 제공됨
단점1. 커널이 Process 내부의 Thread를 인식하지 못하며,
해당 Process를 대기 상태로 전환시키기 때문에
여러 Thread 중 하나의 Thread가 중단되면 나머지 모든 Thread 역시 중단됨
1. User, Kernel mode간의 변환이 빈번하게 이뤄져 성능 저하 발생
2. 프로그래밍 시 구현하기 어렵고 자원을 더 많이 소비하는 경향이 있음

Thread Data

Thread Base Data

Thread도 하나의 실행 흐름이기 때문에 실행과 관련된 정보가 필요하다.

일반적으로 고유 Thread ID, Program Counter, Register Set, Stack을 가진다.

Code, Data, File 등 기타 자원은 Process 내의 다른 Thread와 공유한다.

TSD(Thread Specific Data)

하나의 Thread에만 연관된 데이터가 필요한 경우가 있다.

Multithread Programming 환경에서 모든 Thread는 Process의 데이터를 공유하고 있지만, 이 경우에는 개별 Thread만의 공간이 필요하다.

TSD는 여러 Thread 라이브러리들이 지원하는 기능 중 하나이다.

Changes In Process Management

Multithread가 확산됨에 따라 Process 관리 방식에도 변화가 필요했다. fork 혹은 exec와 같은 시스템 호출 시 어떻게 처리할 것인가 하는 문제가 대두된 것이다.

wikipedia에 나와있는 exec 문제는 이해가 안되어서 fork 문제만 설명해보도록 하겠다.

fork : Process가 자기 자신을 복제하는 동작, 일반적으로 시스템 호출의 일종, 새로운 Process를 위한 메모리를 할당

어떤 Process 내의 Thread가 fork를 호출하면 모든 Thread를 가진 Process를 생성할 것인지, 아니면 fork를 요청한 Thread만 가진 Process를 생성할 것인지 하는 문제이다.

Unix에서는 각각 2가지 버전의 fork를 지원하고 있다.

Summary

-ProgramProcessThread
정의컴퓨터에서 실행될 때 특정 작업을 수행하는 명령어들의 모음
프로그래밍된 결과물
disk에 저장되어있는 수동적인 상태 (죽어있는 상태)
실행되고 있는 컴퓨터 Program
Program과 실행 상태를 포함 (살아있는 상태)
Process 내에서 실행되는 흐름의 단위
하나의 Process의 수많은 하위 Process 중 하나
종류1. Application software
2. Operating system
1. User process
2. OS process(OS process, Kernel process)
1. User-Level Thread
2. Kernel-Level Thread

-Program - MultiprogrammingProcess - Multitasking
정의CPU 작업과 입출력 작업을 병행하는 것
동시에 여러 Process를 실행하는 시스템
CPU 같은 공용자원을 다수의 작업이 나누어 사용하는 것
특징CPU 이용과 처리량을 향상시킬 수 있음-

Process - Multiprocess vs Thread - Multithread

Three Line Summary

Program은 특정 작업을 수행하는 명령어들의 모음입니다. 이 Program이 실행되고 있다면 Program과 실행 상태를 포함하여 Process라고 부르게 됩니다. Process 내에서 실행되는 흐름의 단위가 Thread인데, 한 Process에 해당하는 수많은 하위 Process 중 하나를 의미합니다.

profile
iOS / 🌊

0개의 댓글