코딩

Process와 Thread 본문

CS

Process와 Thread

ssooyn_n 2022. 12. 12. 15:58

Process

✔️프로세스란?

실행파일(프로그램)이 Memory(RAM)에 적재되어 CPU를 할당받아 실행되는 것

하드디스크에 있는 프로그램은 CPU가 읽을 수 있도록 RAM에 적재되어 CPU를 할당받아 실행되는 것

RAM의 메모리 구조

 

| ***stack*** 지역변수,매개변수 | high memory address                                 
| ***heap*** runtime중에 메모리 할당(malloc, free) |
| ***data*** 전역변수 |
| ***code*** 실제 코드 | low memory address

 

프로세스에 할당되는 memory 공간은 위와 같이 4개의 영역으로 이루어져 있으며, 각각 process마다 독립적으로 할당을 받습니다.

Process의 상태

실행 (명령 수행) → 준비 (즉시 명령 수행할 수 있도록 준비) → 봉쇄 (CPU를 할당받아도 명령을 실행할 수 없는 상태 ex.Input/Output)

✔️CPU의 연산

CPU 내부에 있는 PCregister에 저장되어 있다.

PC레지스터에는 다음에 실행될 코드(명령어)의 주소값이 저장되어 있다.

memory에 적재되어있는 process code영역의 명령어 중 다음번 연산에서 읽어야할 명령어의 주소값을 PC register가 순차적으로 가르킴 → 해당 명령어를 읽어와서 CPU가 연산 → process 실행

✔️⭐️⭐️멀티프로세스란?

2개 이상의 프로세스가 동시에 실행되는 것을 말합니다. 동시에라는 말은 동시성과 병렬성 두 가지를 의미합니다.

동시성 CPU core가 1개일 때, 여러 process를 짧은 시간동안 번갈아 가면서 연산을 하게 되는 시분할 시스템으로 실행되는 것입니다.

병렬성 CPU core가 여러개일 때, 각각의 core가 각각의 process를 연산함으로써 Process가 동시에 실행되는 것

CPU가 1개일 때, 멀티프로세스란 2개 이상의 process가 하나의 CPU와 메모리를 공유하며 동시에 실행되는 것을 말합니다. CPU는 한 번에 하나의 process만 연산할 수 있지만, 처리 속도가 빨라서 여러 프로세스들이 CPU에서 번갈아 실행됩니다.

✔️멀티프로세스의 메모리관리

여러 process가 동시에 memory에 적재된 경우, 서로 다른 process의 영역을 침범하지 않도록 각 process가 자신의 memory영역에만 접근하도록 운영체제가 관리해줍니다.

CPU의 연산과 PC Register

CPU는 PCregister가 가리키고 있는 명령어를 읽어들여 연산을 진행합니다. process1이 진행되고 있을 때는 process1의 코드영역을 process2가 진행되고 있을 때는 process2의 코드영역을 가르킵니다.

✔️Context → PCB에 저장

시분할 시스템에서는 한 process가 CPU를 점유하여 일정부분의 명령을 수행하고 다른 process에게 넘깁니다. 이 과정에서 이전에 어디까지 명령을 수행했고, register에는 어떤 값이 저장되어있는지 정보가 필요합니다. process가 어떤 상태로 수행되고 있는지에 대한 정보가 context

Context 정보들은 PCB(Process Control Block)에 저장합니다.

✔️PCB(Process Control Block)

PCB는 운영 체제가 프로세스를 표현한 자료구조 보호된 메모리 영역 안에 저장된다. 일부 운영 체제에서 PCB는 커널 스택의 위치 이 메모리 영역은 보호를 받으면서 접근하기가 편리하다.

kernel(운영체제) 또한 하나의 Process kernel은 컴퓨터를 키는 순간 memory에 적재되어 실행된다.

✔️Context switch

한 프로세스에서 다른 프로세스로 CPU제어권을 넘겨주는 것 이 때 이전의 프로세스 상태를 PCB에 저장하여 보관, 새로운 프로세스의 PCB를 읽어서 보관된 상태를 복구하는 작업이 이루어집니다.

✔️PCB에 저장되는 정보

PCB는 운영체제가 process에 대해 필요한 정보를 모아놓은 자료구조.

  • process number
  • Process state
  • Program Counter(PC) 레지스터
  • CPU 스케줄링 정보
  • 메모리 정보 (해당 process의 주소 공간 등)

Thread

✔️⭐️⭐️Multi thread

thread는 한 process 내에서 실행되는 동작의 단위 각 thread는 속해있는 process의 Stack 메모리를 제외한 나머지 memory영역 공유

Multi thread란 하나의 process가 동시에 여러개의 일을 수행할 수 있도록 해주는 것. 하나의 process에서 여러 작업을 병렬로 처리하기 위해 multi thread를 사용합니다.

thread는 process내에서 독립적인 기능을 수행하고, 즉 독립적으로 함수를 실행하므로 독립적인 Stack memory, PC Register가 각자 필요하다.

single thread의 concurrency

한 process내에서 여러 thread(기능)을 하고 있기 때문에, thread사이에서도 context switch가 일어난다.

✔️독립적인 Stack memory & PC register

Stack memory

thread가 독립적인 함수를 호출하기 위해 인자 전달,

Return Address, 함수 내 지역변수 저장 등을 위한 독립적인 stack memory가 필요로한다.

PC register

thread끼리 context switch가 일어나게 되는데, PC register에 code address가 저장되어 있어야 context switch를 실행할 수 있다.

 

✔️Multi process & Multi thread

multi thread

장점 - 메모리 공간과 시스템 자원 소모 줄어듬, 통신비용이 적어 통신으로 인한 오버헤드가 적다. 따로 통신시 별도의 자원을 이용하지 않고, process에 할당된 Heap메모리를 이용하여 데이터를 주고 받기 때문에

단점 - thread간 자원을 공유하기 때문에 동기화 문제가 발생

  • multi thread는 multi process보다 적은 메모리공간을 차지하고, Context switch가 더 빠릅니다. 그 이유는 멀티 프로세스와 다르게 캐시 메모리를 초기화할 필요가 없기 때문입니다.
  • multi thread는 자원을 공유하기 때문에 동기화 문제나 하나의 쓰레드가 종료시 모두 다 종료될 수 있습니다.
  • multi process는 많은 메모리와 CPU공간이 필요합니다.
  • multi process는 하나의 process가 죽더라도 다른 process에 영향을 주지 않습니다.(안정성이 높다.)

따라서, 자원을 효율적으로 사용해야하거나 적은 통신비용을 가지고 있는 경우 Context switching이 빈번하게 일어나는 경우, 데이터 공유가 빈번한 경우엔 multi thread를 사용하는 것이 유리합니다.

✔️multi process환경에서 process간 통신(IPC)

  1. 공유메모리 초기에 공유 메모리를 할당하고 메모리 영역에 읽기/쓰기를 통해 통신. process가 초기에 공유 메모리 할당을 kernel에 요청하면 kernel은 해당 process에 메모리 공간을 할당해준다. process가 독립적으로 해당 메모리영역에 접근할 수 있으므로 속도가 빠르나, 일관성 문제가 일어날 수 있다.
  2. 메시지 전달 모델 system call을 사용하여 구현. kernel을 통해 send와 receive라는 두 가지 연산을 제공받는다.(process1이 kernel로 message를 보내면 kernel이 process2에게 message를 보내주는 방식으로 동작) 메모리 공유보다는 속도가 느리지만 충돌을 회피할 필요가 없다. pipe, socket, message queue가 이에 해당한다.

'CS' 카테고리의 다른 글

Memory  (0) 2022.12.19
동기화와 교착상태(Deadlock)  (0) 2022.12.19
자료구조  (0) 2022.12.12
[인프런강의] 스프링입문(MVC패턴과 API방식)  (0) 2022.07.06
[인프런 강의] - 스프링입문(스프링 설치 및 빌드)  (0) 2022.07.04
Comments