Process vs Thread (1. 특징)

0

OS

목록 보기
1/5

프로세스와 스레드의 각 차이점 및 특징에 대해 정리하고자 합니다.
GeeksForGeeks에 좋은 내용들이 있어 해당 문서를 기반으로 작성합니다.

Introduction of Process Management


Program vs Process

프로세스는 실행 중인 프로그램입니다.
예를 들어, 우리가 C 혹은 C++를 사용하여 컴파일 했을 때, 컴파일러는 바이너리 코드를 만들어 냅니다.
원래의 코드와 바이너리 코드 모두 프로그램이라 할 수 있으며 우리가 실제 바이너리 코드를 실행하게 되면 이것이 프로세스가 됩니다.

하나의 프로그램은 동시에 실행하기 위해 여러 프로세스를 생성 할 수 있습니다. 예를 들어 우리가 .exe 파일 혹은 바이너리 파일을 동시에 열었을 때 다수의 인스턴스들은 시작됩니다. 이때 여러 개의 프로세스가 생성이 되는 것입니다.

메모리에서 프로세스의 모습은?


(출처 : https://www.geeksforgeeks.org/introduction-of-process-management/?ref=lbp)

  • Text Section : Text Section이라고도 불리는 하나의 프로세스이며 현재 활동 상태 값을 가지고 있는 Program Counter 역시 포함되어 있습니다.
  • Stack : 함수 파라미터, 반환 주소, 지역 변수와 같은 임시 데이터가 포함되어 있습니다.
  • Data Section : 전역 변수를 포함하고 있습니다.
  • Heap Section : 실행 시간 동안 동적으로 할당 된 메모리입니다.

프로세스의 요소와 특징

  1. Process Id : 운영체제 의해 할당된 식별자
  2. Process State : read, running 등과 같은 정보
  3. CPU registers : Program Counter와 같은 정보(CPU registers는 저장되어야 하며 프로세스가 CPU 외부 및 내부로 swap이 발생했을 때 복구 되어야 한다.)
  4. Accounts information
  5. I/O status information : 예를들어 프로세스나 열려 있는 파일이 할당 된 장치에 대한 정보
  6. CPU scheduling information : 우선순위가 예시가 될 수 있다. (서로 다른 프로세스들은 다른 우선순위를 가지고 있으며 예를들어 짧은 프로세스의 경우 SJF 스케쥴링에 의해 낮은 우선순위가 할당 될 수 있다)


    위와 같은 요소들은 context of the process라고도 불립니다.
    모든 프로세스들은 자기 자신의 process control block(PCB)를 가지고 있으며 각각의 프로세스는 고유한 PCB를 가지고 있습니다.
    그리고 위 모든 요소들은 PCB에 포함되어 집니다.

프로세스의 상태


(출처 : https://www.geeksforgeeks.org/introduction-of-process-management/?ref=lbp)


1. new : 새롭게 생성된 프로세스 혹은 생성되어진 프로세스의 상태
2. Ready : 생성된 프로세스들은 Ready 상태로 이동됩니다. 즉, 실행 가능한 상태가 됩니다.
3. Run : CPU 내에서 현재 실행 중인 프로세스의 상태입니다. (하나의 프로세서에서는 오직 하나의 프로세스만 실행 상태가 가능합니다.)
4. Wait (or block) : 프로세스가 I/O 접근을 요청할 때의 상태입니다.
5. Complete (or terminated) : 실행을 마친 프로세스의 상태 입니다.
6. Suspended Ready : Ready Queue가 꽉차게 될 때, 일부 프로세스들은 일시 중지 시작 상태로 이동합니다.
7. Suspended Block : Waiting Queue가 꽉 찼을 때의 상태 입니다.

Context Switching (문맥 교환)

한 task가 끝날 때 까지 기다리는 것이 아니라 여러 작업을 번갈아 가면서 실행해서 동시에 처리될 수 있도록 하는 방법입니다.
인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작합니다. 이때, CPU는 아무런 일을 하지 않으므로 잦은 문맥교환은 성능저하를 일으킬 수 있습니다.

Context Switching은 언제 일어날까?

  1. 높은 우선순위의 프로세스가 ready 상태가 되었을 때 (즉, 실행 중인 프로세스보다 우선순위가 높을 때)
  2. 인터럽트가 발생했을 때
  3. 사용자와 커널 모드가 변경되었을 때(필요하지는 않습니다.)
  4. CPU 스케쥴링에 의해 선점되었을 때

Context Switch vs Mode Switch

mode switch는 CPU privilege level이 변경되었을 때 발생합니다. 예를 들어, 시스템 호출이 발생하거나 결함이 발생했을 때 입니다.
커널은 표준 사용자 작업보다 privileged mode에 더 우선순위를 두어 동작합니다.
만약 사용자 프로세스가 커널에서만 접근 가능한 무엇인가에 접근하고자 할 때, mode switch가 발생합니다.
현재 실행 중인 프로세스는 mode switch가 동작되는 동안 변경되면 안됩니다.
하나의 mode switch는 전형적으로 프로세스 문백 교환을 발생시키기 위해 동작합니다.

CPU-Bound vs I/O-Bound Process

cpu-bound 프로세스는 실행 시간 동안 더 많은 CPU 사용률과 시간을 소모합니다.
I/O-Bound 프로세스는 더 많은 I/O 사용률과 적은 CPU 사용률을 소모합니다. I/O 프로세스는 waiting 상태에서 더 많은 시간을 사용합니다.

참고

profile
컴퓨터공학과 + 실무 = 4 + N = 모르는거 ∞ ...

0개의 댓글