운영체제의 역할, 프로세스와 스레드

Woozi·2022년 9월 23일
0

1. 운영체제란?

운영체제는 컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 하는 시스템 소프트웨어이다. 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 즉, 중개자 역할을 해주는 프로그램이다.

2. 운영체제의 역할

  1. 시스템 자원 관리

    컴퓨터 시스템 자원(하드웨어) 효율적으로 관리한다.

    ex) 각 프로그램이 CPU를 얼마나 사용할지 결정해주는 역할, 각 프로그램에 메모리를 얼마나 할당해 줄것인지 등

  2. 자원 보호

    프로그램이나 다른 사용자가 데이터를 삭제하거나 중요 파일에 접근하지 못하게 컴퓨터 자원들을 보호한다.

  3. 하드웨어 인터페이스 제공

    마우스, 키보드, 모니터 등 하드웨어의 연결에서 호환성을 보장한다. 운영체제는 드라이버라는 하드웨어 인터페이스를 설치해 어떤 제품이던지 사용자에게 plug & play 할 수 있게 한다.

  4. 사용자 인터페이스 제공

    사용자가 운영체제를 편리하게 이용할 수 있도록 사용자 인터페이스를 제공한다.

    ex) 마우스 포인터, 폴더, 작업 표시줄 등

3. 프로세스와 스레드

정의

프로그램

파일이 저장 장치에 저장되어 있지만 운영체제로부터 메모리를 할당받지 않은 정적인 상태

프로세스

운영체제로부터 자원을 할당받은 작업의 단위

스레드

프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

프로그램 → 프로세스

프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되어 동적인 상태가 되고, 이 상태의 프로그램을

프로세스라고 한다.

  • 프로세스의 특징
    1. 프로세스는 각각 독립된 메모리 영역을 할당받는다.

    2. 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있다.

    3. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.

    4. 한 프로세스가 다른 프로세스의 자원에 접근하려면 IPC(Inter-Process Communcation), LPC(Local inter-Process Communication)사용 또는 별도로 공유 메모리를 만들어 정보를 주고 받도록 해야한다.

      but, 이는 단순히 CPU 레지스터 교체뿐만이 아니라 RAM과 CPU 사이의 캐시 메모리까지 초기화되기 때문에 자원 부담이 크다.

프로세스 → 스레드

과거에는 프로그램을 실행할 때 실행 시작부터 끝까지 하나의 프로세스만을 사용해 진행하였다.

하지만 프로그램이 점점 복잡해짐에 따라 하나의 프로세스를 사용하는것에 어려움이 생겼다.

“한 프로그램을 처리하기 위한 프로세스를 여러개 만들면 되지 않나?” 라는 의견

→ 운영체제는 안전성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약을 두기 때문에 이를 벗어나는 정보에 접근하면 오류가 발생한다. 즉, 프로세스간 정보 공유가 안되기 때문에 여러 프로세스가 한 프로그램을 처리하기는 어렵다.(프로세스의 특징 4번을 사용하면 되지만 자원 소모가 크다.)

이 문제를 해결하기 위해 더 작은 실행 단위 개념인 스레드가 생겨나게 되었다.

운영체제의 관점에서는 프로세스가 최소 작업 단위인데 이를 관리하기 위해서는 더 작은 작업 단위인 스레드끼리의 메모리가 공유되어야 한다.

  • 스레드의 특징
    1. 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고, Code, Data, Heap 영역은 공유한다.
    2. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들(힙 공간)을 같은 프로세스 내의 스레드끼리 공유하면서 실행된다.
    3. 각각의 스레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
    4. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 변경 결과를 즉시 볼 수 있다.

멀티 프로세스와 멀티 스레드의 차이

멀티 프로세스

  • 개념
    • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
  • 장점
    • 여러 프로세스 중 하나에 문제가 발생했을 때 다른 프로세스까지 영향이 확산되지 않는다.
  • 단점
    • Context Switching에서의 오버헤드가 발생한다.
    • 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 통신이 복잡하다.

멀티 스레드

  • 개념
    • 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것
    • 웹 서버는 대표적인 멀티 스레드 응용 프로그램이다.
  • 장점
    • Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
    • 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.
  • 단점
    • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.
    • 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다. (여러 스레드가 함께 전역 변수를 사용할 경우 발생할 수 있는 충돌) → 프로그래머가 직접 문제에 대응해야 하고 디버깅이 까다로워진다.

참고 사이트

[OS] 운영체제란? (운영체제의 역할, 목적, 종류, 기능)

운영체제의 정의와 역할

[OS] 프로세스와 스레드의 차이 - Heee's Development Blog

프로세스와 스레드의 차이

profile
주니어 개발자

0개의 댓글