프로그래밍 공부/Computer Science

[컴퓨터 공학 기초] 운영체제, 프로세스, 스레드

Kevinkb 2021. 11. 25. 22:08

운영체제 (operating system)

사용자에게 편의성 제공을 목적으로 컴퓨터 하드웨어를 관리하는 시스템 소프트웨어이다. 사용자는 응용 프로그램을 이용해 다양한 작업을 하는 것이 목적이고, 운영체제는 응용 프로그램이 하드웨어에게 일을 시킬 수 있도록 돕는다. 즉, 운영체제는 하드웨어의 시스템 자원을 관리하는 주체이다.

운영체제의 구조 모식도

응용 프로그램

운영체제를 통해 컴퓨터에게 일을 시키는 것

응용 프로그램은 컴퓨터를 조작할 수 있는 권한을 처음부터 가지고 있는게 아니기 때문에 응용 프로그램이 컴퓨터에게 일을 시키기 위해서는 운영체제를 통해 컴퓨터를 조작할 수 있는 권한을 부여 받아야 한다. 따라서, 운영체제는 응용 프로그램과 소통하기 위해 인터페이스(API)를 제공한다. 응용 프로그램이 시스템 자원을 사용할 수 있도록 운영체제에서 다양한 함수를 제공하는 것을 시스템 콜(System call)이라고 한다

시분할 처리 시스템(time sharing sysyem)

사용자에게 짧은 간격으로 프로세서를 할당하여 마치 한 사용자가 프로세서를 독점한 듯 착각하게 해 여러 사용자가 단일 시스템을 동시에 사용할 수 있다. 하나의 중앙 컴퓨터를 두 개 이상의 단말장치에서 동시에 공동 이용. 프로세스의 사용 시간을 작게 나누어 다중 사용자나 여러 작업을 한 대의 컴퓨터에서 할 수 있다.


프로세스(Process)

  • 실행 중인 하나의 프로그램
  • 운영체제로부터 시스템 자원을 할당 받는 작업의 단위

할당 받는 시스템 자원

  • CPU 시간
  • 주소 공간
  • Code, Data, Stack, Heap의 구조로 되어있는 독립된 메모리 영역

특징

  • 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다.
  • 프로세스는 최소 1개 이상의 스레드(메인 스레드)를 가지고 있다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 기본적으로는 한 프로세스는 다른 프로세스의 자원에 접근할 수 없다.
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다.


스레드(Thread)

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스가 할당 받은 자원을 이용하는 실행의 단위
  • 코드가 실행되는 하나의 흐름, 한 프로세스 내에 스레드가 두 개면 코드가 실행되는 흐름이 두 개 생긴다는 뜻이다.

특징

  • 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유한다.
  • 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 확인할 수 있다.
  • 스레드는 다른 스레드와 독립적으로 동작한다.

Code, Data, Stack, Heap 영역


멀티 태스킹

멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 의미한다. 운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적절히 할당해 실행한다.

  • 멀티 프로세싱는 애플리케이션 단위의 멀티 태스킹
  • 멀티 스레딩는 애플리케이션 내부에서의 멀티 태스킹

Context Switching

멀티 태스킹에서 CPU는 여러 태스크(프로세스, 스레드)를 로테이션으로 돌면서 처리한다. 동작 중인 태스크의 상태를 보관하고 대기 시킨 후 다음 순번의 태스크가 시작할 수 있도록 다음 실행할 태스크의 상태를 불러오는 일련의 과정을 Context Switching 이라고 한다.

멀티 프로세싱

하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 병렬로 각 프로세스가 하나의 작업을 처리하도록 하는 것이다.

특징

장점

  • 프로세스 중 하나에 문제가 발생해도 다른 프로세스에 영향을 미치지 않는다.

단점

  • Context Switching에서의 오버헤드
    • 프로세스는 각각 독립된 메모리 영역을 가지고 있기 때문에 캐쉬 메모리 초기화 후 다시 캐쉬 메모리를 불러와야 한다.
    • 프로세스 간의 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이의 캐쉬 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크다.
  • 프로세스 사이의 어렵고 복잡한 통신 기법(IPC)을 사용

멀티 스레딩

  • 하나의 응용 프로그램을 여러 개의 스레드로 구성하여 병렬로 각 스레드가 하나의 작업을 처리하도록 하는 것이다.
  • 윈도우, 리눅스 등 많은 운영체제들이 멀티 프로세싱을 지원하고 있지만 멀티 스레딩을 기본으로 하고 있다.
  • 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.

특징

장점

  • 메모리 공유로 인한 시스템 자원 소모 감소
  • Context Switching 오버헤드 감소(캐쉬 메모리 초기화 필요 없음)

단점

  • 데이터 충돌 가능성(동기화 문제)
  • 까다로운 디버깅

데드락(Deadlock, 교착 상태)
뮤텍스(Mutex), 세마포어(Semaphore)

크롬 브라우저 및 node.js의 v8 엔진은, 어떻게 가비지 컬렉팅을 하고 있나요?
Memory terminology를 읽어보세요.


참고자료