ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OS - 프로세스와 쓰레드
    CS/OS 2021. 2. 15. 20:52

    프로세스와 쓰레드


    프로세스

    • 실행중인 프로그램으로 메모리에 적재되어 CPU자원의 할당을 받을 수 있는 것을 말한다. 

     

    쓰레드

    • 프로세스의 작업 실행 단위로 프로세스에 할당된 메모리, 자원을 공유할 수 있다.

    • 쓰레드 간에는 각자 독립적인 작업을 수행하기 때문에 각각의 스택과 레지스터를 가진다.
    • 프로세스의 메모리, 자원등을 공유하므로 커널의 도움 없이 상호 통신이 가능하다.

    • 사용자 수준의 쓰레드: 사용자가 만든 라이브러리를 사용하여 쓰레드를 운용한다. 속도는 빠르지만 구현이 어렵다.

    • 커널 수준의 쓰레드: 운영체제의 커널에 의해 쓰레드를 운용한다. 구현이 쉽지만 속도가 느리다.

     

    멀티 프로세스

    • 다수의 프로세스를 실행하는 것이다. 

    • 멀티 프로세스는 프로세스 간 데이터, 힙, 스택영역 모두를 비공유 한다.

    • 장점

      • 하나의 프로세스가 비정상적으로 종료되더라도 다른 프로세스가 영향을 받지 않는다.

      • 동기화 작업이 별도로 필요하지 않는다.

     

    • 단점

      • 프로세스마다 메모리를 할당해 주어야 하므로 자원 소모, 메모리 낭비, 문맥 교환이 많이 나타나게 된다. 

     

    • 멀티 프로세싱, 멀티 프로그래밍, 멀티 태스킹

      • 멀티 프로세싱: CPU코어 여러개로 프로세스를 여러개 수행한다.

      • 멀티 프로그래밍: CPU코어 하나로 프로세스를 여러개 수행한다.

      • 멀티 태스킹: CPU코어 몇 개를 쓰던 간에 작업을 수행한다. (프로세스보다 확장된 의미)

     

    • 컨텍스트 스위칭

      • 멀티 프로세스 환경에서 CPU스케줄러가 인터럽트 발생 시 현재 프로세스의 상태를 PCB에 저장하고, 새로운 프로세스의 상태를 레지스터에 저장하는 것을 말한다.

      • 인터럽트의 종류

        1. I/O Request: 입출력 요청

        2. Time slice expired: CPU 사용시간 만료

        3. Fork child: 자식 프로세스 생성

        4. Wait for interrupt: 인터럽트 처리 대기

      • 컨텍스트 스위칭시 CPU는 아무런 작업을 하지 못하므로 잦은 컨텍스트 스위칭을 성능 저하를 일으킨다.

     

    멀티 쓰레드

    • 하나의 프로세스를 다수의 실행단위로 구분햐여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화 하여 수행 능력을 향상시키는 것이다.

    • 즉, 하나의 프로그램이 동시에 여러개의 일을 수행할 수 있도록 해주는 것이다.
    • 멀티 쓰레드는 데이터, 힙, 스택 영역중 데이터, 힙 영역을 공유한다.
    • 장점
      • 프로세스를 이용해 동시에 처리하던 일을 쓰레드로 구현할 경우 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
      • 쓰레드의 생성 및 컨텍스트 스위칭(쓰레드의 문맥전환은 캐시메모리를 비울 필요가 없다.)은 프로세스보다 빠르다.
      • 데이터 영역과 힙 영역을 통해 데이터 교환이 가능하다.

     

    • 단점
      • 동기화 작업을 통해 공유 자원에 대한 관리가 필요하다.
      • 병목 현상이 발생하여 성능이 저하될 가능성이 높다.

     

    교착상태(Dead Lock)

    • 멀티 프로세스, 쓰레드가 한정되고 공통된 자원을 사용할 때 발생한다.
    • 둘 이상의 프로세스나 쓰레드들이 자원을 점유한 상태에서 서로 다른 프로세스나 쓰레드가 점유하고 있는 자원을 기다리며 무한정 기다리는 현상을 말한다.
    • 발생 조건(4가지 모두 만족해야 한다.)

      1. 상호 배제: 한 자원에 대해 여러 프로세스는 동시에 접근할 수 없다.

      2. 점유 대기: 프로세스는 자원을 가진 채 다른 자원을 기다릴 수 있다.
      3. 비선점: 다른 프로세스가 사용중인 자원을 강제로 뺏을 수 없다.
      4. 순환 대기: 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다. 

     

    • 해결 방법
      1. 예방: 발생조건 중 하나라도 만족되지 못하게 한다.
      2. 회피: 교착상태가 발생하지 않도록 알고리즘을 적용한다.(은행원 알고리즘)
      3. 회복: 교착상태가 발생하면 그때 해결한다.
      4. 무시: 교착상태에 의한 성능 저하보다 이를 해결할 때의 성능저하가 큰 경우 무시한다.

     

    동기, 비동기

    • 동기: 어떤 일에 대한 요청과 응답이 동시에 이루어져야 한다. 즉 요청한 장소에서 결과가 주어집니다.

      • 동기화(동시성 프로그램에서 공유 자원에 대해 동시 접근을 허용하지 않는다.) 방법의 종류
        1. 뮤텍스
          • 임계영역(공유된 자원에 접근 가능한 공간)에 들어가기 위해 뮤텍스를 가지고 있어야 하며 임계영역에 들어갈 때 락lock 을 걸어 다른 프로그램이 접근하지 못하도록 하고, 임계영역에서 나와 해당 락을 해제한다. 
          • 오직 1개만 동기화 할 수 있다.
        2. 세마포어
          • 임계영역에 세마포어 변수만큼의 프로그램이 접근할 수 있다. 
          • 현재 수행중인 프로그램이 아닌 다른 프로그램이 세마포어를 해제할 수 있다. 
          • 1개 이상 동기화 할 수 있다. 
    • 비동기: 어떤 요청에 대해 응답이 바로 주어지지 않고 나중에 처리된다.

     

    블로킹, 넌블로킹

    • 블로킹: 어떤 요청에 대한 응답이 올 때까지 작업을 중단하는 것을 말한다.

    • 넌블로킹: 어떤 요청에 대한 응답이 올 때까지 기다리지 않고 다른 작업을 수행한다.

     

     

     

    reference

    velog.io/@hygoogi/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0#%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

    velog.io/@hygoogi/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%AA%A8%EC%9D%8C#%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

    dheldh77.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%A9%80%ED%8B%B0%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C

    mangkyu.tistory.com/104

    'CS > OS' 카테고리의 다른 글

    [OS] CPU 작동원리  (0) 2021.08.06
    [OS]Process VS Thread  (0) 2021.07.10
    OS - 은행원 알고리즘  (0) 2021.02.20
    OS - CPU스케줄링  (0) 2021.02.16
    OS - 메모리  (0) 2021.02.09

    댓글

Designed by Tistory.