[운영체제] 프로세스와 스레드(feat.IPC)

JANG SEONG SU·2023년 8월 10일
0

운영체제

목록 보기
1/4
post-custom-banner

1. 프로세스&스레드

프로세스

프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며, 스케줄링의 대상이 되는 task라는 용어과 거의 같은 의미이다.

Disk에 저장되어 있는 프로그램이 메모리에 올라가면, 프로세스가 인스턴스화 되었다고 하고, CPU스케줄러에 따라 CPU가 프로세스를 실행한다.

프로세스의 상태(status)

  • New
    New는 프로세스가 생성된 상태를 의미하며, fork(), exec() 함수를 통해 생성한다.

    🧷fork()
    부모 프로세스의 주소 공간을 그대로 복사한 새로운 자식 프로세스를 생성하는 함수이다. 주소 공간만 복사할 뿐, 부모 프로세스의 비동기 작업은 상속하지 않는다.
    🧷exec()
    현재 프로세스의 이미지를 새로운 이미지로 변환시키는 것이다.
    🫧Windows : CreateProcess() = fork() + exec()

    이 2개의 함수는 스레드가 아닌 프로세스의 생성이다!!

  • Ready
    CPU Scheduler로부터 CPU 소유권이 넘어오기를 기다리는 상태이다.

  • Running
    CPU 소유권과 메모리를 할당받고 Instructions가 실행 중인 상태를 말한다.

  • Waiting
    어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태이다. I/O 디바이스에 의한 Interrupt로 인해 이런 현상이 자주 발생된다.
    예를 들어 프린트 인쇄 버튼을 눌렀을 때, 프로세스가 잠깐 멈추는 것이 이와 같은 현상이다.

  • Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
  • Data : 전역변수, 정적변수, 배열 등
    • 0이 아닌 값으로 초기화 된 데이터는 Data Segment에 할당
    • 0으로 초기화 또는 초기화 되지 않은 데이터는 Bss Segment에 할당
  • Heap : 동적 할당 시 사용 (new(), malloc() 등)
  • Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)

스레드

스레드는 프로세스의 Stack 영역만 따로 할당 받고 나머지 영역은 서로 공유한다.
하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성하고, 하나의 프로세스에는 여러 개의 스레드가 존재할 수 있다.

프로세스는 자신만의 고유 공간과 자원을 할당받아 사용하는데 반해, 스레드는 다른 스레드와 공간, 자원을 공유하면서 사용하는 차이가 존재함


2. Muilti-Process

멀티프로세싱은 여러 개의 프로세스를 병렬로 수행하는 것을 의미한다.

크롬 브라우저는 Muilti-Process 구조를 갖고 있는 대표적인 예시이다. 크롬 브라우저에서는 여러 개의 Process끼리 메모리를 공유한다.

  • Browser Process : 주소 표시줄, 북마크 막대, 앞/뒤로 가기 버튼 등을 담당하며, 네트워크 요청이나 접근 같은 권한을 담당한다.
  • GPU Process : GPU를 이용하여, 화면을 그리는 부분을 제어한다.
  • Renderer Process : 웹 사이트가 보이는 모든 것을 제어한다.
  • Plugin Process : 웹 사이트에서 사용하는 플러그인을 제어한다.

IPC

시스템 내의 프로세스는 독립적(independent)이거나 협력적(cooperating)일 수 있다. 독립된 프로세스는 다른 프로세스에 영향을 미치거나 받을 수 없다. 하지만 협력 프로세스는 데이터 공유를 포함하여 다른 프로세스에 영향을 미치거나 받을 수 있다. 프로세스가 협력하는 이유는 다음과 같다.

  • 정보 공유
  • 계산 속도 향상
  • 모듈성
  • 편의성

멀티 프로세스는 여러 개의 협력 프로세스가 IPC(Inter Process Communication)를 하며, IPC는 프로세스끼리 데이터를 주고받고, 공유 데이터를 관리하는 메커니즘이다.

  • Shared Memory

    • 여러 프로세스가 동일한 메모리 블록에 대한 접근 권한이 부여되어, 프로세스가 서로 통신할 수 있다.
    • 기본적으로 프로세스의 메모리 영역은 독립적으로 가지며 다른 프로세스가 접근하지 못하도록 반드시 보호되야한다. 하지만 다른 프로세스가 데이터를 사용하도록 해야하는 상황도 필요할 것이다. 파이프와 같이 어떠한 매개체를 통해 데이터를 주고받는 것이 아닌, 메모리 자체를 공유하기 때문에, 가장 빠르고 편리하다.
      하지만 같은 메모리 영역을 여러 프로세스가 공유하기 때문에 동기화가 필요하므로, write/read 빈도가 높으면 매우 복잡해진다.
  • Message Queue

    • Message Passing 방식이로, 직관적이다.
    • Message Queue는 커널에 의해 관리되기 때문에, Process AProcess B로 데이터를 전달하기 위해서 UserKernel로 스위치가 빈번하게 일어난다.
  • File
    • 파일은 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터를 말한다. 이를 기반으로 프로세스 간 통신을 한다.
  • Socket
    • 소켓은 시스템 내의 다른 프로세스나 네트워크 내의 다른 컴퓨터 간의 통신을 하기 위한 인터페이스 역할을 한다. 이때, 네트워크를 통해 통신하는 한 쌍의 프로세스는 한 쌍의 소켓(각 프로세스에 하나씩)을 사용한다. 이또한 서로 다른 Process끼리 데이터를 주고 받으므로 IPC 메커니즘 중 하나이다.
  • 익명(unamed) pipe
    • 파이프는 두 개의 프로세스(부모, 자식)를 연결하는데 하나의 프로세스는 데이터를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있는 단방향(unidirectional)통신이다.
    • 매우 간단하게 사용할 수 있지만, 양방향(bidirectinal)통신을 위해 2개를 만들어야 할 때는 구현이 복잡해지게 된다.
  • 망명된(named) pipe
    • 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능하다.
    • 클라이언트/서버 통신을 위해, 하나의 파이프로 다수의 클라이언트와 통신하거나 여러 개의 파이프 인스턴스를 생성하여 다수 클라이언트와 통신할 수 있다.

3. Multi-Thread

멀티스레딩은 하나의 프로세스에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리한다.

스레드들은 메모리 공유를 통해 효율성을 높일 수 있다.

또한 한 스레드가 Blocked되어도 다른 스레드는 Running상태 일 수 있기 때문에, 중단되지 않은 빠른 처리가 가능하다.

하나의 스레드가 데이터 공간을 망가뜨리면, 모든 스레드가 작동 불능 상태일 수 있다.(공유 메모리를 갖기 때문)

멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비할 수 있다.


profile
Software Developer Lv.0
post-custom-banner

0개의 댓글