[O/S] 프로세스와 스레드

Jung Wish·2020년 10월 27일
0

운영체제

목록 보기
1/3
post-thumbnail

프로세스와 스레드

🐰 프로세스 (Process)

프로세스의 개념

  • "A program in execution" = 실행중인 프로그램
  • 사용자 관점에서 세그먼트(Code, Data, Stack)의 가상 주소 공간을 갖는 실행 상태
  • 메모리 영역에 자신의 주소 공간을 가져 CPU를 할당받을 수 있는 실행 프로그램

프로세스의 주소공간

  • 실행 스택(Stack) : 호출된 프로시저(함수)의 복귀 주소와 지역 변수와 같이 일시적인 데이터를 저장하는 영역. 프로시저를 호출할수록(push) 영역이 커지고 프로시저를 반환할때(pop) 줄어든다.
  • 실행 힙(Heap) : 코드 영역과는 별도로 유지되는 자유 영역. 프로세스 실행 중에 동적으로 할당되는 메모리 영역으로 시스템 호출을 통해 사용되다가 해지되는 등 자유자재로 사용한다.
  • 데이터(Data) : 프로세스 실행 중에 동적으로 할당받는 영역으로 전역 또는 정적 변수를 저장한다. 읽고 쓰기가 가능하다.
  • 코드(Code) : 프로세서(CPU)가 실행하는 코드를 저장하는 영역. 프로그램이 코드 영역을 침범하여 기록하려고 하면 오류가 발생하고 프로그램은 종료된다.

프로세스 제어 블록 (Process Control Block, PCB)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 데이터 블록 또는 데이터구조
  • 프로세스 생성과 동시에 함께 고유한 PCB가 생성되며 프로세스가 종료되면 PCB도 함께 삭제된다.
  • PCB의 정보는 인터럽트 처리, 자원 할당, 스케줄링 등을 수행하는 운영체제의 모든 모듈이 읽고 수정할 수 있다.
  • 문맥교환(Context Switch)이 발생할때마다, 진행하던 프로세스의 정보가 PCB에 저장되고 다시 실행할때 PCB에 저장된 내용을 불러와 중지되었던 시점부터 다시 작업을 수행한다.
  • 프로세스 제어 블록의 구성요소
    1. O/S가 관리상 사용하는 정보
      • 프로세스 상태(Process State)
        👉🏻 new, ready, running, waiting, terminated 등의 상태를 저장
      • 프로세스 식별자(PID)
      • 프로세서 스케줄링 정보(Scheduling inormation)
        👉🏻 priority, pointer, 스케줄 매개변수 등
      • 계정 정보
        👉🏻 프로세서 사용시간, 실제 사용시간, 사용상한시간, 계정 번호, 작업이나 프로세스 번호 등
    2. CPU 수행 관련된 하드웨어 값
      • 프로그램 카운터(Program Counter), 레지스터 저장 영역(register)
    3. 메모리 관련 정보
      • Code, Data, Stack, Heap의 위치 정보
    4. 파일 관련 정보
      • 개방된 파일 목록(Open file descriptors), 특별한 입출력 요구 프로세스에 할당된 입출력 장치 등

🐰🐰 스레드 (Thread)

스레드의 개념

  • "A basic unit of CPU utilization" = 프로세스의 실행 단위
  • 프로세스처럼 CPU를 사용하는 기본 단위이면서 프로그램을 실행하는 프로세스 내의 개체, 명령어를 독립적으로 실행할 수 있는 하나의 제어 흐름
  • 프로세스는 하나 이상의 스레드를 가진다.
  • 하나의 프로세스에 수행단위(PC)를 여러개 두는 것 👉🏻 멀티스레딩
  • 스레드는 같은 그룹의 스레드와 코드, 주소 공간, 운영체제 자원 등을 공유한다.
  • 다중 스레드를 통해 처리율이 증가해 성능이 향상되고, 병렬성이 증가한다.

스레드의 구조

  • 스레드 실행시 상태
  • 실행 스택(Stack)
  • 지역 변수와 스레드의 특정 데이터를 저장하기 위한 스레드별 정적 저장소
  • 프로세스의 다른 스레드가 공유하는 메모리와 자원에 대한 접근 같은 스레드 실행 환경 정보(Context Information)
    👉🏻 PC(Program Counter), SR(Sequence Register), SP(Stack Pointer)

스레드 이용 시 이점

  • 사용자에 대한 응답성 증가
    • 다중 스레드 환경에서는 하나의 스레드가 blocked 상태인 동안(예를 들어 입출력을 하는 동안) 다른 스레드가 실행되어 다른 작업을 빨리 처리하면서 사용자와 상호작용이 가능하다.
  • 프로세스의 자원과 메모리 공유 가능
    • 스레드는 한 프로세스의 자원을 공유하기 때문에 하나의 같은 주소 공간에서 여러 개의 스레드를 실행해 시스템 성능을 향상시킨다. 👉🏻 병렬성, 성능향상
  • 경제성
    • 스레드는 한 프로세스의 자원을 공유하기 때문에, 메모리와 자원을 할당해 프로세스를 생성하는 것보다 스레드끼리 문맥 교환하는 것이 오버헤드가 적다.
  • 다중 프로세서(CPU) 구조 활용 가능
    • 다중 프로세서 구조에서 각 스레드는 다른 프로세성에서 병렬로 실행될 수 있다.

Stack과 PC Register를 스레드마다 독립적으로 할당하는 이유

  • stack은 프로시저의 복귀 주소나, 지역 변수같이 일시적이고 독립적인 실행환경을 제공한다. 스레드는 하나의 독립적인 실행 단위이기 때문에 각각 해당 실행에 대한 독립적 stack을 가진다.
  • 스레드는 프로세스와 같이 CPU를 할당받고, 선점당할 수 있다. 따라서 문맥교환이 발생하게 되므로 실행하고 있는 코드의 지점을 저장하는 PC Register는 스레드마다 독립적으로 할당되어야 한다.

Reference

profile
Frontend Developer, 올라운더가 되고싶은 잡부 개발자, ISTP, 겉촉속바 인간, 블로그 주제 찾아다니는 사람

0개의 댓글