ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스와 스레드
    CS 지식/운영체제 2020. 10. 21. 19:35
    반응형

    프로세스와 스레드

    2020/08/17 - [CS 기초 지식] - 프로세스와 스레드

     

    프로세스와 스레드

    프로세스와 스레드 프로세스 사전적 의미 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 OS에서 메모리 영역을 할당받아 실행되는 독립적인 프로그램의 인스턴스 OS로부터 시스템 자원

    zin0-0.tistory.com

    저번에 정리한 내용이 부족한 것 같아서 추가적으로 정리해본다.

    • 프로세스
      • 보조 기억장치에 기억되는 프로그램은 실행되기를 기다리는 명령어와 정적 데이터의 묶음이다. 이 프로그램의 명령어와 정적 데이터가 메모리에 적재되면 프로세스가 된다.
        즉, 실행 중인 프로그램이란 의미가 된다.
      • 다른 말로 풀면 OS에게 메모리 영역을 할당받아 실행되는 독립적인 프로그램의 인스턴스, OS로부터 시스템 자원을 할당받는 작업의 단위 라고 할 수 있음
      • 할당받는 시스템 자원
        • CPU 시간, 주소 공간, Code, Data, Stak, Heap 구조로 된 독립된 메모리 영역
      • 프로세스는 각각 독립된 메모리 영역을 할당 받으며, 최소 1개의 스레드(메인 스레드)를 가지고 있다.
      • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 직접적으로 접근이 불가하다.
        • 다른 프로세스의 변수나 자료구조에 접근하려면 프로세스 간 통신(IPC)를 이용해야한다. (ex. 파이프, 파일, 소켓 등)
      • 프로세스의 메모리 구조
        • Code영역
          • 프로그램을 실행시키는 실행 파일의 명령어가 올라감(바이너리 코드)
        • 스택
          • 함수나 프로시저를 호출하고 리턴할 때 복귀 주소나 지역변수, 파라미터 같은 일시적 데이터를 저장
          • 동적 할당을 위한 메모리 영역
        • 데이터 영역
          • 전역변수, static 변수 할당(초기화한 데이터 구조에 따라 읽고 쓰기가 가능)
    • 스레드
      • 실제로 상태변화를 하거나 컴퓨터에서 task로 사용하는 단위
      • 즉, 프로세스가 할당받은 자원을 이용하는 프로세스 내부 작업의 흐름, 실행 단위임
      • 프로세스 내에서 Stack만 각각 할당받고, Code, Data, Heap 영역은 공유함
      • 각각의 스레드는 별도의 레지스터를 가지고 있다.(개별적 실행)
      • 한 스레드가 프로세스의 자원을 변경하면 다른 스레드도 변경 결과를 즉시 확인 가능
      • 멀티 스레드
        • 스레드가 여러개 존재하는 것을 멀티 스레드라고 한다.
        • 동시성(Concurrency) or 병렬성(Parallelism)으로 실행된다.
          • 동시성은 context switching을 통해 진행, 병렬성은 멀티 코어가 개별 스레드를 동시에 실행
        • 장점
          • 일정 메모리 영역을 공유하기 때문에 스레드의 context switching은 프로세스 context switching보다 빠르다.(스위칭할 메모리 영역이 적기 때문)
          • 또한, 스레드의 context switching은 캐시 메모리를 비울 필요가 없기 때문에 더욱 빠르게 실행된다. (응답시간 단축 + 오버헤드 줄어듦)
        • 단점
          • 공유 자원 중 동일한 자원에 동시에 접근할 때, 접근하는 순서를 정해줘야한다.(동기화 작업)
            • 서로 데이터를 사용하다가 충돌이 일어날 가능성이 있음
            • 다른 스레드에서 사용중인 변수나 자료구조에 접근해서 원하지 않은 결과가 나타남(서로 수정하기 때문에)
          • 접근을 제어하다 보면 병목현상이 발생해서 성능 저하가 나타날 수 있다.
            • 과도한 locking은 지양해야함
          • 디버깅이 다소 까다로워 짐 ~> 버그 생성될 가능성 증가
          • 오류로 인해서 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있음
      • 스레드 풀
        • 스레드를 매번 만들지 않고 재사용하는 것이 효율적
        • 동작 방식
          • task queue에 task 추가
          • thread pool이 task를 가져와서 놀고있는 thread에 작업 할당
          • 각 thread는 작업 진행
          • 완료된 thread는 완료 상태로 존재
    • 프로세스 제어블록(PCB(Process Control Block))
      • 프로세스들을 저장해서 스케줄링하는 control block
      • OS의 스케줄러에 의해 Context Switching되는 프로세스의 정보 단위
      • 구성
        • PID, 프로세스 상태, PC(프로그램 카운터), 스케줄링 우선순위, 권한(자원 접근 권한), 부모/자식 프로세스 정보(트리 관계) 등
      • 스케쥴링
        • 프로세스를 생성해서 계속 실행하지 않고, 다른 프로세스를 실행하는 동안 대기 후에 다시 실행하는 순서를 반복한다.
        • 이 실행 순서를 결정하는 것을 스케쥴링이라고 한다.
        • 대부분의 OS에서는 우선순위 알고리즘과 라운드 로빈 알고리즘을 혼합해서 사용한다.
        • 알고리즘 선택 기준
          • 프로세서 사용률, 처리율, 반환시간, 대기시간, 반응시간
      • 상태 변화
        • 생성 -> 준비 -> 실행 <-> 대기 -> 종료 단계
          • new -> ready -> running <-> waiting -> terminated로 표시
    • 스레드 제어블록(TCB(Thread Control Block))
      • 스레드를 저장해서 스케줄링하는 Control block
      • 프로세스 내의 스레드 라이브러리에 의해 스케줄링되는 정보 단위
    • 스레드에서 자원은 어떻게 공유할까??
      • 스택과 레지스터를 제외한 프로세스의 힙, 데이터, code 영역을 공유한다.
      • 이 때, 동시에 한정된 자원에 접근하여 이용하는 경우가 발생할 수 있어서, 상황에 맞게 독점하도록 Mutex 또는 Semaphore를 이용해서 공유자원을 컨트롤한다.
      • 하지만, 높은 우선순위를 가진 스레드들에게 CPU 시간을 독점해서 다른 스레드가 자원에 접근하지 못하는 기근 현상이나, 서로가 작업이 끝나기를 기다리는 무한 대기 상태의 deadlock, 과도한 lock으로 인한 병목현상이 일어날 수 있어서 적절한 스케쥴링과 lock 남용 자제가 필요함.
      • 스케줄링은 크게 선점과 비선점 방식으로 나눌 수 있다. 선점 방식은 강제적으로 실행권을 빼앗는 것이고, 비선점 방식은 자발적으로 내려놓는 것
        • 선점 방식에는 라운드 로빈이 대표적, 비선점 방식은 FIFO가 대표적, 둘 다 활용하는 것에는 우선순위가 대표적
        • 라운드 로빈은 우선순위를 두지 않고, 순서대로 시간단위에 따라 CPU를 할당하는 스케줄링 방식
    반응형

    'CS 지식 > 운영체제' 카테고리의 다른 글

    뮤텍스와 세마포어  (0) 2020.10.21
    Deadlock & Starvation  (0) 2020.10.21
    멀티 스레드의 임계 구역과 뮤텍스, 세마포어  (0) 2020.08.17
    프로세스와 스레드  (0) 2020.08.17
    PCB와 TCB  (0) 2020.08.17

    댓글

Designed by Tistory.