[OS]프로세스와 스레드

Michelle Kim·2025년 5월 8일

CS-지식

목록 보기
13/15

프로세스와 스레드

🟩 프로세스 - 메모리

커널 영역 : PCB(프로세스 제어 블록)이라는 정보가 저장된다.
사용자 영역 : 실행중인 프로세스가 코드영역, 데이터 영역, 힙영역, 스택 영역으로 나뉘어 저장된다.

🔷 코드영역(code segment)

실행 가능한 명령어가 저장되는 공간, 텍스트 영역이라고도 부른다.
CPU가 읽소 실행할 명령어가 담겨 있기 때문제 쓰기가 금지되어 있는 읽기 전용(read-only)공간이다.

🔷 데이터 영역(data segment)

프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다.
대표적으로 정적변수, 전역변수가 저장된다.

🔷 힙 영역(heap segment)

개발자가 직접 할당 가능한 저장 공간이다. 프로그램 실행 도중 비교적 자유롭게 할당하여 사용 가능한 메모리 공간이다.
다만, 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 한다. 반환하지 않으면 메모리를 낭비하는 메모리 누수(memory leak)문제가 초래할 수 있다.
=> 이러한 문제를 해결하기 위해 프로그래밍 언어에서 자체적으로 사용되지 않는 힙영역 메모리를 해제하는 가비지 컬렉션(Garbage Collection)기능 제공한다.

🔷 스택 영역(stack segment)

일시적으로 사용할 값들이 저장되는 공간이다.
함수의 실행이 끝나면 사라지는 매개변수, 지역변수, 함수 복귀 주소 등이 스택 영역에 저장된다.
스택 트레이스(stack trace)란? : 특정 시점에 스택 영역에 저장된 함수 호출 정보를 말한다. => 스택 트레이스로 문제의 발생 지점을 추적할 수 있어서, 디버깅에 매우 유용하게 사용된다.

🟩 PCB와 문맥 교환

🔷 PCB란? : 운영체제가 메모리에 적재된 다수의 프로세스를 관리하려면 프로세스를 식별할 수 있는 커널 영역내의 정보가 필요하다. 이 정보가 프로세스 제어 블록(PCB-Process Control Block)이다.
PCB는 프로세스와 관련한 다양한 정보를 내포하는 구조체의 일종이다.

PCB에 담기는 정보는 대표적으로 프로세스 ID(PID)와, 프로세스가 실행과정에서 사용한 레지스터 값, 프로세스가 현재 어떤 상태인지 나타내는 프로세스 상태, 프로세스가 언제, 어떤 순서로 CPU를 할당받을지 나타내는 CPU스케줄링(우선순위)정도, 프로세스의 메모리상 적재 위치를 알 수 있는 메모리 관련 정보, 프로세스가 사용한 파일 및 입출력장치 관련 정보가 명시된다.

이때 여러 PCB들은 커널 내에 프로세스 테이블(process table)형태로 관리되는 경우가 많다.

프로세스가 실행된다 뜻?: 운영체제에 의해 CPU의 자원을 할당받았다는 말과 같다.
타이머 인터럽트(timer interrupt)란? : 프로세스의 CPU사용시간은 타이머 인터럽트에 의해 제한된다. 시간이 끝났음을 알리는 인터럽트이다.

문맥(context)이란?: 백업 대상이 되는 중간 정보, 프로세스의 수행을 재개하기 위해 기억해야 할 정보를 말한다.

🔷 문맥 교환(context switching)이란? : 프로세스 문맥은 해당 프로세스의 PCB에 명시된다. 인터럽트가 발생하면, 운영체제는 해당 프로세스의 PCB에 문맥을 백업한다. 그리고 실행할 프로세스의 문맥을 복구한다.
=> 기존 프로세스의 문맥을 PCB에 백업하고, PCB에서 문맥을 복구하여 새로운 프로세스를 실행 하는 것

프로세스 간에 너무 낮은 문맥 교환이 발생하면 캐시 미스가 발생할 가능성이 높아져 메모리로부터 실행할 프로세스의 내용을 가져오는 작업이 빈번해지고, 이는 큰 오버헤드로 이어질 수 있다.

🟩 프로세스의 상태

🔷 프로세스 상태: 운영체제는 PCB를 통해 프로세스와 상태를 인식하고 관리한다.
대표적인 상태로는 생성(new), 준비(ready), 실행(running), 대기(blocked), 종료(terminated) 등이 있다.

🟧 멀티프로세스와 멀티스레드

🔷 멀티프로세스: 동시에 여러 프로세스가 실행되는 것

  • 각기 다른 스로세스들이 기본적으로 자원을 공유하지 않고, 독립저긍로 실행된다.
  • 다른 프로세스에 영향을 거의 끼치지 않는다.
  • 한 프로세스의 실행 과정에서 문제가 발생하더라도 다른 프로세스에 직접적인 영향을 끼치지 않는 경우가 많다.

🔷 멀티스레드: 프로세스를 동시에 실행하는 여러 스레드를 말한다.

  • 하나의 스레드는 스레드를 식별할 수 있는 고유 정보인 스레드ID와 프로그램 카운터, 레지스터 값, 스택 등으로 구성된다.
  • 프로세스의 자원을 공유한다.
  • 동일한 주소 공간의 코드, 데이터, 힙영역을 공유한다. 따라서 쉽게 협력하고 통신할 수 있다.
  • 다만, 한 스레드에 생긴 문제가 프로세스 전체의 문제가 될 수 있다.

🟩 프로세스 간 통신

프로세스 간 통신(IPC- Inter Process Communication) 2가지 방식

  • 공유 메모리: 데이터를 주고받는 프로세스가 공통적으로 사용할 메모리 영역을 두는 방식
  • 메시지 전달: 프로세스 간에 주고받을 데이터를 메시지의 형태로 주고받는 방식

🔷 공유 메모리

공유 메모리(shared memory): 프로세스 간에 공유하는 메모리 영역을 토대로 데이터를 주고 받는 통신 방식을 말한다. 공유 메모리라는 특별한 메모리 공간을 할당하면 프로세스가 해당 메모리 공간을 공유하여 읽고 쓸수 있게 된다.

  • 통신을 주고받는 각 프로세스가 마치 자신의 메모리 영역을 읽고 쓰는 것 처럼 통신한다.
  • 프로세스가 데이터를 주고받는 과정에 커널의 개입이 거의 없다. (커널 영역을 거치지 않는 경우가 많다)
  • 메시지 전달 방식보다 통신 속도가 빠르다.
  • 대신, 각각의 프로세스가 서로의 공유 메모리 영역을 동시에 읽고 쓸 경우, 데이터의 일관성이 훼손될 수 있다.(레이스 컨디션) 발생 가능

🔷 메시지 전달

메시지 전달: 프로세스 간에 주고받을 데이터가 커널을 거쳐 송수신되는 통신 방식이다.
메시지 전달 기반 IPC를 위한 대표적인 수단: 파이프, 시그널, 소켓, 원격 프로시적 호출(RPC)등이 있다.

  • 파이프 : 단방향 프로세스 간의 통신 도구를 말한다.
  • 시그널 : 프로세스에게 특정 이벤트가 발생했음을 알리는 비동기적인 신호
    - 프로세스는 시그널이 발생하면 하던 일을 잠시 중단하고, 시그널 처리를 위한 시스널 핸들러를 샐행한 뒤 실행을 재개한다.
  • 원격 프로시저 호출(RPC): 원격 코드를 실행하는 IPC기술, RPC를 통해 프로그래밍 언어나 플랫폼과 무관하게 성능 저하를 최소화하고, 메시지 송수신이 가능하기 때문에 대규모 트래픽 처리 환경, 특히 서버 간 통신 환경에서 사용되는 경우가 많다.
profile
🇬🇧영국대학교)Computer Science학과 졸업 📚Data, AI, Backend 분야에 관심이 많습니다. 👉Email: kimbg9876@gmail.com

0개의 댓글