프로세스와 스레드

뭐라구요·2023년 4월 10일
0

프로세스란?

프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.

프로세스는 프로세스 기술자라고 부르는 자료구조에 저장되어 있다.(PCB) 이 자료구조는 크게 다음과 같은 정보를 담고 있다.

  • PID : 운영체제가 각 프로세스를 식별하기 위해 부여된 프로세스 식별번호
  • 프로세스 상태 : CPU는 프로세스를 빠르게 교체하면서 실행하기 때문에 실행중인 프로세스도 있고 대기 중인 프로세스도 있는데 그런 프로세스 상태를 저장한다.
  • 프로그램 카운터 : CPU가 다음으로 실행할 명령어를 가리키는 값이다. CPU는 기계어를 한 단위씩 읽어서 처리하는데 프로세스를 실행하기 위해 다음으로 실행할 기계어가 저장된 메모리 주소를 가리키는 값이다.
  • 스케줄링 우선순위 : 운영체제는 여러개의 프로세스를 동시에 실행할 수 있도록 하는데 운영체제가 여러 개의 프로세스가 CPU에서 실행되는 순서를 결정하는 것을 스케줄링이라고 한다. 이 스케줄링에서 우선순위가 높으면 먼저 실행될 수 있는데 이를 스케줄링 우선순위라고 한다.
  • 권한 : 프로세스가 접근할 수 있는 자원을 결정하는 정보다.
  • 프로세스의 부모와 자식 프로세스 : 최초로 생성되는 init 프로세스를 제외하고 모든 프로세스는 부모 프로세스를 복제해서 생성되고 이 계층관계는 트리를 형성한다. 그래서 각 프로세스는 자식 프로세스와 부모프로세스에 대한 정보를 가지고 있다.
  • 프로세스의 데이터와 명령어가 있는 메모리 위치를 가리키는 포인터 : 프로세스는 실행중인 프로그램이다. 따라서 프로그램에 대한 정보를 가지고 있어야 한다. 프로그램에 대한 정보는 프로세스와 메모리에 가지는 자신만의 주소 공간에 저장된다. 이 공간에 대한 포인터값을 가진다.
  • 프로세스에 할당된 자원들을 가리키는 포인터

프로세스의 관리, 메모리 구조

운영체제는 프로세스들의 실행 사이에 프로세스를 교체하고 재시작할 때 오류가 발생하지 않도록 관리해야 하기에 운영체제는 프로세스의 상태를 실행, 준비, 블록 상태로 분류하고 프로세스들을 상태전이를 통해 체계적으로 관리한다.

프로세스는 code영역, data 영역, heap영역, stack 영역으로 존재하고 힙영역과 스택 영역 사이에는 빈 공간이 존재한다.

스레드

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.

스레드를 사용하면 프로그램이 동시에 여러 가지 작업을 수행할 수있는데 예를 들어, 웹 브라우저에서는 사용자 인터페이스를 처리하는 스레드와 웹 페이지를 다운로드하는 스레드 등 여러 개의 스레드가 실행된다. 이렇게 여러 개의 스레드가 동시에 실행될 때는 각각의 스레드가 서로 독립적으로 실행되는 것처럼 보이지만, 실제로는 컴퓨터의 프로세서에서는 각각의 스레드가 번갈아가면서 실행된다.

스레드를 사용하면 프로그램의 성능을 향상시킬 수 있다. 예를 들어, 웹 서버에서는 각각의 요청에 대해 새로운 스레드를 생성하여 처리함으로써, 여러 클라이언트로부터 동시에 요청이 들어왔을 때도 모든 요청에 대해 빠르게 응답할 수 있다.

  • 스레드를 사용할 때 주의할 점은 스레드 간의 데이터 공유 문제나 스레드가 충돌하는 문제 등 다양한 문제가 발생할 수 있다.

프로세스와 스레드 차이

스레드는 프로세스와 달리, 수행방식에 있어서 부모 프로세스 전체의 복사본을 만들지 않고, 필요한 코드 덩어리 만을 생성하여 동시에 수행한다.
스레드들 모두가, 동일 프로그램으로 생성되나(동일 생성), 서로 독립되어 실행된다.(독립 실행)
주요 메모리 공간을 함께 공유한다.
따라서, 부모 스레드가 갖고 있는 모든 데이터를 완전하게 접근할 수 있기 때문에 효율적이고 메모리 제약이 있는 시스템에 널리 사용된다.

  • 과거 유닉스 시스템은 각 프로세스가 단 하나의 스레드로 만 구성되어있었지만 현대적 운영체제 대부분은 한 프로세스가 다중 스레드를 포함하여 지우너한다.

0개의 댓글