[2023.03.23] Daily Posting

HeeJun·2023년 3월 23일
0

Operating System

목록 보기
4/9

이 블로그의 목적은 학습한 내용의 정리와 더 나아가 다양한 기술들에 대한 정리와 정보 공유가 목적입니다.

혹시 글의 내용 중 틀린 부분이 있다면 댓글 남겨주세요!!!

프로세스(Process) & 스레드(Thread) [3]

오늘의 포스팅은 다양한 시대별 프로세스 스케줄링과 동시성 & 병렬성에 대한 내용이다.

1. 배치 처리 시스템(1950년대)

  • 정의

    • 프로그램의 실행 요청 순서에 따라 순차적으로 실행
  • 단점

    • 먼저 실행을 요청한 프로그램(프로세스)이 종료될 때까지 다음 프로그램은 대기를 해야한다
    • 다수의 프로그램을 동시에 실행할 수 없다

배치 처리 시스템의 단점을 보완하기 위해 시분할 시스템 / 멀티 프로그래밍 / 멀티 태스킹 개념이 발생했다

2. 멀티 프로그래밍 시스템

  • 정의

    • 프로세서가 한 프로그램(프로세스)의 유휴 시간(idle 상태) 동안 다른 프로그램(프로세스)이 프로세서(CPU)를 할당받아 작업을 수행할 수 있게 한 시스템
    • 단일 프로세서(CPU)에서 여러 프로그램(프로세스)가 동시에 실행된다
    • 유휴 시간(idle 상태)란 입출력 작업으로 인해 프로그램이 프로세서(CPU)를 통한 작업을 진행하지 않아 프로세서(CPU)가 놀고 있는 상태
    • 입출력 장치는 프로세서(CPU)에 비해 처리 속도가 매우 느리기 때문에 유휴 시간의 비율이 높았다
  • 장점

    • 유휴 시간이 줄어들기 때문에 매우 가격이 비싼 프로세서(CPU)의 사용률을 높일 수 있다
  • 단점

    • 멀티 프로그래밍 시스템에서는 프로세서가 한 프로그램을 수행하는 시간의 제한이 없어 프로세서(CPU)가 idle 상태에 빠지지 않는 이상 다른 프로그램이 프로세서(CPU)를 할당받을 수 없다
    • 해당 시기에는 컴퓨터의 가격이 매우 비싸 여러 사용자들이 각자 모니터와 키보드만 가지고 프로세서(CPU)가 있는 컴퓨터 한 대를 공유해서 사용했는데
      위와 같은 단점으로 인해 먼저 사용중인 사용자의 프로그램이 idle 상태에 빠질 때까지 다른 사용자들은 어떠한 작업도 할 수 없다
  • 해결해야 할 문제점

    • 다수의 프로그램(프로세스)에 대한 메모리 공간 할당 문제
    • 프로세서 스케줄링 문제

3. 시분할 시스템

  • 정의

    • 프로세서의 작업 시간을 아주 잘게 쪼개 여러 사용자(프로그램)이 조금씩 나누어 사용하는 시스템
    • 프로세서(CPU)가 한 프로그램을 수행하는 시간을 제한해 한 프로그램이 제한된 시간만큼 프로세서(CPU)를 사용하면 무조건 다른 프로그램으로 스위칭된다
    • 멀티 프로그래밍의 단점을 해결하기 위해 등장했다
  • 장점

    • 작업 시간을 매우 짧은 시간으로 나누기 때문에 프로세서(CPU) 하나를 여러 사용자가 공유하지만 마치 사용자들은 프로세서(CPU)를 독점하는 것처럼 느끼게 된다
  • 해결해야 할 문제점

    • 다수의 프로그램(프로세스)에 대한 메모리 공간 할당 문제
    • 프로세서 스케줄링 문제
  • 이후 위와 같은 문제점을 해결하기 위해 동기화 기술, 가상 메모리 기술이 생겨났다

4. 멀티 태스킹

  • 정의

    • 단일 프로세서(CPU)에서 여러 프로그램(프로세스)이 동시에 실행되는 것처럼 보이도록 하는 시스템
    • 멀티 태스킹은 사실 시분할 시스템과 같은 개념이다. 개인용 컴퓨터가 발전되면서 컴퓨터를 공유하던 시절의 시분할 시스템이라는 용어에서 멀티 태스킹으로 변화한 것이다
    • 시분할 시스템에서는 다수의 사용자를 고려하고, 멀티 태스킹은 단일 사용자가 다양한 프로그램을 동시에 실행시키는 것을 고려한다

5. 멀티 프로세싱

  • 정의

    • 단일 컴퓨터에서 둘 이상의 프로세서(다수의 CPU 혹은 다수의 CPU Core)를 사용해 다수의 프로세스를 병렬적으로 처리하는 시스템

현대의 운영체제는 멀티 프로세싱과 시분할(멀티 태스킹) 시스템 + 인터럽트 시스템을 기반으로 한다.(인터럽트에 관한 내용은 다음에)

우리가 평소에 자주 말하는 멀티 태스킹은 시분할(멀티 태스킹)시스템을 사용하기에 가능한 일이다.

그리고 다수의 사람들이 용어적인 측면에서 혼동하는 부분이 있어서 내 나름대로 생각을 정리했다

Task & Process & Thread

  • task는 일단 과거의 용어이다. 배치 처리 시스템을 사용하던 시절 당시의 작업의 단위를 task라고 했다
  • 시간이 지나면서 점차 process 그리고 thread 라는 개념이 등장하면서 task 라는 용어는 프로세서가 처리하는 일의 최소 단위로 많이 사용된다. 예를 들면 프로세서가 처리하는 일의 최소 단위가 process라면 task = process, thread라면 task = thread
  • Task == (Process or Thread), Thread in Process, Thread == Process(단일 스레드 프로세스의 경우) 이렇게 생각하면 조금 이해가 쉽다
  • 사실 용어가 중요한 것은 아니다. 용어라는 것은 보는 관점에 따라서 그 의미가 많이 변화하기 때문에 너무 용어에 집중하지 말고 전체적인 내용을 이해하는 것이 중요하다
  • 필자는 위와 같이 정리하였지만 또 다른 사람은 다르게 이야기할 수도 있다
  • 또한 여러 운영체제 별로 보는 관점과 용어가 조금씩 다를 수 있다

멀티 프로세스 & 멀티 프로세싱

  • 이 둘은 이름이 비슷해서 혼동하는 사람이 존재한다
  • 멀티 프로세스는 프로그램의 구조적인 관점에서의 용어로 프로그램을 단위(작업)으로 나누고 그 단위 하나 하나를 프로세스에 할당하는 방식이다
  • 멀티 프로세싱은 하드웨어적인 관점에서의 용어로 다수의 프로세서(CPU, CPU Core)를 사용하는 시스템

마지막으로 동시성 & 병렬성에 관한 설명이다.

동시성(Concurrency)

  • 하나의 프로세서(단일 CPU, single Core)에서 여러 작업이 동시에 처리되는 것처럼 구현하는 것
  • 프로세서 스케줄링과 Context Switching을 통해 작업을 번갈아가며 처리해 동시에 처리되는 것처럼 보임
  • 멀티 프로그래밍, 시분할, 멀티 태스킹이 이에 해당한다

병렬성(Parallel)

  • 다수의 프로세서(다중 CPU, multi Core)에서 여러 작업이 실제로 동시에 처리되는 것
  • 멀티 프로세싱이 이에 해당한다

오늘의 포스팅으로 프로세스와 스레드에 관한 내용은 마무리 된다. 사실 더 많고 깊이 있는 내용들이 있고 시스템적으로 조금씩 개념이 다르기 때문에 더 많은 내용을 다뤄야 하지만 현재는 운영체제의 기본적인 내용을 알기 위한 학습이기에 중점이 되는 개념들만 정리했다. 용어가 많이 혼동되는 부분이 있지만 용어에 너무 매몰되지 말고 개념 자체에 집중해서 학습을 진행하면 좋다.

다음 포스팅에서는 인터럽트(Interrupt)에 관한 내용을 다룰 예정이다.

profile
내가 작성한 코드 한 줄로 누군가를 편하게

0개의 댓글