Computer Science - Process, Thread

김상헌·2023년 2월 14일
1

Computer Science

목록 보기
1/3

개발을 하다보면 Process 와 Thread 에 대한 말이 참 많습니다. 다. Process 와 Thread 을 이해하는 것이 왜 업무적으로 중요한지 정리해볼까 합니다.

Process

프로세스(process) 는 실행중에 있는 프로그램을 의미합니다.
프로그램은 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 집합입니다.
따라서 실행중에 있는 프로그램, 즉 프로세스 의미는 메모리에 적재되어 일련의 명령어들이 수행되고 있는 상태를 이야기합니다.

Process and Thread

  • 프로세스는 독립된 메모리 영역을 할당
    • code
    • data
    • heap
    • stack
  • 프로세스는 독립된 자원을 할당받음으로, 다른 프로세스의 자원에 접근하기 위해서는 IPC(Inter-process communication, 파이프, 파일, 소켓) 방식을 사용
  • 스레드는 프로세스 내에서 실행되는 실행 단위
    • 그림에서는 stack 만 그렸지만, program counter, stack, register 의 집합으로 구성
    • 스레드는 프로세스의 stack 영역을 할당받고, 프로세스의 나머지 영역 code, data, heap 영역은 공유

프로세스와 스레드를 비교하자면, 프로세스는 회사, 스레드는 직원과 같습니다.
회사는 사무실(독립된 자원)을 할당받고, 직원는 노트북과 같은 업무을 위한 자산(스택)을
할당받고 사무실은 공유하여 사용합니다.
다수의 직원은 공유된 영역을 사용하기에, 직원이 사용한 흔적은 고스란히 다른 직원에게 영향을 끼칩니다. 공유된 영역에서 직원들은 프로젝트에 대한 이야기나 업무에 대한 이야기를 합니다. 반면 회사와 회사의 협업에 있어서는 외부의 미팅을 잡거나, 다른 회사로 가거나 하는 번거로운 작업이 필요합니다.

Process and Virtual Memory

가상 메모리(Virtual memory)는 운영 체제가 실제보다 더 많은 양의 메모리에 접근할 수 있다는 착각을 주기 위해 사용하는 메모리 관리 기술입니다. 사용 가능한 총 물리적 메모리 양이 모든 프로세스의 결합된 메모리 요구 사항보다 적더라도 각각의 가상 주소 공간을 가진 여러 프로세스가 동시에 실행할 수 있습니다.

가상 메모리는 프로세스의 메모리를 고정된 크기의 페이지 (일반적으로 4KB, Architecture 따라 8KB, 16KB 를 사용하기도 함) 로 분할하여 작동합니다. 각 페이지에는 가상 주소가 할당되며, 이 주소는 프로세스에서 페이지 내용에 액세스하는 데 사용됩니다. 가상 주소는 운영 체제에서 실제 물리적 메모리 위치에 해당하는 물리적 주소로 변환됩니다. 가상 주소와 물리적 주소의 매핑은 운영 체제에서 관리합니다.

프로세스가 현재 실제 메모리에 없는 페이지에 액세스해야 하는 경우 페이지 오류(Page Fault)가 발생합니다. 그런 다음 운영 체제는 하드 드라이브와 같은 보조 스토리지에서 필요한 페이지를 검색하여 물리적 메모리로 가져옵니다. 사용 가능한 물리적 메모리가 없는 경우 운영 체제는 새 페이지를 위한 공간을 확보하기 위해 다른 페이지로 전환하도록 선택할 수 있습니다.

가상 메모리는 필요에 따라 메모리의 일부를 물리적 메모리로 페이징함으로써 프로세스가 물리적으로 사용 가능한 것보다 더 많은 메모리에 액세스할 수 있게 합니다. 또한 프로세스가 다른 프로세스에 속하는 메모리에 액세스하는 것을 방지하는 메모리 보호 기능도 제공합니다. 그러나 가상 메모리는 RAM의 메모리에 액세스하는 것에 비해 보조 스토리지에 들어오고 나가는 페이징이 느릴 수 있기 때문에 성능 비용이 수반됩니다

  • 그림으로 설명하자면 위와 같습니다. 실제로 프로세스가 할당받는 메모리는 Physical Memory 와 2차 메모리인 HDD 가 됩니다.
  • 프로세스가 실제 메모리에 없는 페이지, 즉 파란색 섹션에 존재하지 않는 페이지에 접근하는 경우, 즉 빨간색 섹션인 HDD (보조 스토리지) 에 접근하게 되는 경우 Physical Memory 에 접근하는 성능보다 느리기때문에, 속도가 느려집니다.

Process 를 많이 실행해서 CPU 자원이 부족하면?

CPU 리소스가 애플리케이션의 요구 사항을 처리하기에 충분하지 않으면 속도 저하, 지연 또는 애플리케이션 충돌과 같은 성능 문제가 발생할 수 있습니다. 이 문제는 애플리케이션에 시스템에서 사용할 수 있는 것보다 더 많은 CPU 시간이 필요하거나 다른 프로세스가 동일한 CPU 리소스를 놓고 경쟁(Race Condition)하는 경우에 발생할 수 있습니다.

CPU에 과부하가 걸리면 운영 체제는 다양한 스케줄링 기법을 사용하여 CPU를 사용하는 프로세스의 우선순위를 정할 수 있는데, 이로 인해 현재 실행되지 않는 프로세스의 지연 및 대기 시간이 발생하여 응용 프로그램이 느리거나 응답하지 않을 수 있습니다.

  • 어플리케이션 충돌로 인해 데이터 손상 또는 시스템 불안정과 같은 시스템의 다른 문제가 발생할 수도 있으며, 시스템 및 사용자 환경에 미치는 영향을 최소화하기 위해 가능한 한 빨리 애플리케이션 충돌을 식별하고 해결하는 것이 중요합니다. (생각보다 자주 자원 고갈되서 충돌됨)
    가장 좋은 방법은 어플리케이션을 모니터링하다가, 특정 Threshhold 이상의 Resource 을 차지하는 경우, Scale up, out 을 자동화하는 구성을 설정하는 것이 좋습니다.

Next

Multi-Process and Multi-Thread

Referece

profile
배움을 즐기는 개발자입니다.

0개의 댓글