프로세스, 동기, 비동기

jenna·2022년 11월 20일
0

CS/OPERATING SYSTEM

목록 보기
1/1

프로세스란?

정의

  • 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
    *인스턴스: 설계된 것을 바탕으로 구현된 구체적인 실체, 붕어빵 틀(설계된 것, 클래스)과 붕어빵(인스턴스)이 보통 예시로 많이 사용됨

  • 운영체제로부터 시스템 자원을 할당받은 작업의 단위
    *시스템 자원: CPU 시간, 실행되기 위해 필요한 독립된 메모리 영역

스레드란?

정의

  • 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위

장점

  • 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.

단점

  • 문맥 교환(context switching)에서의 오버헤드
    문맥 교환(context switching):
    - CPU는 한번에 하나의 프로세스만 처리할 수 있기 때문에, 여러 프로세스를 처리해야 하는 상황에서는 돌아가면서 여러 프로세스 작업을 처리하는데 이 과정을 Context Switching라 한다.
    - 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 프로세스 제어 블록(PCB)
    에 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말한다.

  • 프로세스 간 통신 기법(IPC, Inter Process Comunication)
    프로세스는 각 독립된 메모리 영역을 할당받았기 때문에 하나의 프로그램에 속하는 프로세스들 사이의 변수를 공유할 수 없다. 따라서 IPC라는 방법을 사용해야 하며, 이는 어렵고 복잡한 통신 방법이다.


    *프로세스 제어 블록(PCB, Process Control Block):
    - 특정 프로세스에 대한 중요한 정보를 저장하고 있는 커널 내의 자료구조이다.
    - 프로세스는 CPU를 할당받아 작업을 처리하다가 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야 한다. 이때 작업의 진행 상황을 모두 PCB에 저장한다. 그리고 다시 CPU를 할당받게 되면 PCB에 저장되었던 내용을 불러와 종료되었던 시점부터 다시 작업을 수행한다


    - PCB에 저장되는 정보
    프로세스 식별자(Process ID, PID) : 프로세스 식별 번호
    프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
    프로그램 카운터(Program Counter, PC) : 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
    CPU 레지스터
    CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
    메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함한다.
    입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
    어카운팅 정보 : 사용된 CPU 시간, 시간 제한, 계정 번호 등

멀티 프로세스란?

정의

  • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 스레드가 하나의 작업을 처리하도록 하는 것

장점

  • 프로세스에 비해 메모리 공간과 시스템 자원 소모가 줄어들게 된다
  • 스레드 간 통신시, Data Heap 메모리 영역을 이용해 데이터를 주고 받으므로 통신 방법이 간단하다.
  • Context switching 시 PCB 및 캐시 메모리를 비울 필요가 없기 때문에 비용이 적고 더 빠르다.

단점

  • 서로 다른 스레드가 Data, Heap 영역 등을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 즉, 자원 공유 동기화 문제가 발생한다.
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.

비동기란?

비동기(asyncronous) 하면 항상 따라다니는 block과 non-block, sync와 async 개념을 이해

- 제어권 : 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.
- 동시성 : 함수 A와 함수 B가 동시에 진행되는 것(처럼 보이는 것). 그러기 위해서는 특정 함수 A가 다른 함수 B의 결과값에 의존하는지가 중요하다.
  • 블로킹 vs 논블로킹 (제어권이 누구한테 있는가)/작동방식
    -블로킹

    +함수 A가 함수 B를 호출한 뒤, 함수 B의 리턴값이 올 때까지 기다린 후 진행되는 것
    +즉, 제어권을 넘겨주는 것

    -논블로킹

    +함수 A가 함수 B를 호출한 뒤, 함수 B의 작업 완료 여부와 상관 없이 진행되는 것
    +즉, 제어권을 넘겨주지 않는 것

  • 동기 vs 비동기 /실행방식

    -동기

    +함수A와 함수B를 호출한 뒤, 함수B의 작업 완료 여부와 상관 없이 진행되는 것
    +즉, 제어권을 넘겨주지 않는 것

    -비동기

    +함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 작업 완료 여부는 신경 쓰지 않는 것
profile
https://github.com/jennaaaaaaaaa

0개의 댓글