(운영체제) 멀티태스킹과 멀티프로세싱, 프로세스와 쓰레드.

BaekGwa·2024년 8월 12일
0

💻 OS

목록 보기
1/2

운영체제

  • 개발 공부를 하고 있는데, 운영체제와 관련된 부분이 많이 부족하다고 느껴져 다시 한번 정리해보기.

멀티태스킹

멀티태스킹이란?

  • 위키디피아

    컴퓨팅 분야에서 멀티태스킹(영어: multitasking) 또는 다중작업(이하 멀티태스킹)은 다수의 작업(혹은 프로세스, 이하 태스크[1])이 중앙 처리 장치(이하 CPU)와 같은 공용자원을 나누어 사용하는 것을 말한다. 엄밀히 말해 한 개의 CPU를 가진 개인용 컴퓨터가 특정 순간에 수행할 수 있는 태스크의 개수는 하나뿐이다. 따라서 멀티태스킹은 스케줄링이라는 방식을 사용하여 컴퓨터 사용자에게 병렬 연산이 이루어지는 것과 같은 환경을 제공한다
    https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91%EC%9E%91%EC%97%85

  • 나의정의

    하나의 CPU (코어)는 하나의 일밖에 처리 하지 못하지만, 교차적으로 이리저리 옮겨다니며, 작업을 수행하여 마치 여러개의 일을 한번에 처리하고 있는 듯 하게 하는 능력을 말한다.

예시

CPU(코어) 1개

  • CPU가 한개인 상황에서 프로세서A과 프로세서B를 모두 완료 시킬려면, 코어에서는 하나의 작업씩 할당하여 처리를 하게 될 것이다.
  • 만약 작업의 순서가 A < B, 숫자가 낮은 순서대로 처리를 하게 된다면, B3는 6번째의 순서로 작업이 완료 될 것이다.


멀티테스킹이 없는 불편함

  • 만약 사용자가, 유튜브도 보고, Excel도 수정하고, 게임도 하고 있는 상황이라면, CPU의 갯수는 3개 이상이 되어야 할 것 이다.
    • 실제로 해당 프로그램 (유튜브, excel 등)의 환경에서는 단일 쓰레드가 아니다. 예시이다.
  • 코어 갯수가 1개인 CPU에서는 유튜브를 보며 Excel을 실행시키지 못하는 것이다.
  • 이 단점을 해결하기 위한 방법이 멀티태스킹 이라고 보면 된다.
  • 멀티 태스킹이 적용된 위의 예시는 다음과 같이 변화하게 된다.

  • 코어가 A1의 일을 처리하다가, 0.0001초 뒤 A2의 작업을 처리하고, 다시 다른 작업을 처리하고, 다시 A1의 일을 처리하고... 반복 작업을 진행하게 된다.
  • 마치 손 하나로 글을 적고, 타자를 치고, 물을 마시고 하는 것이다.
  • 이걸 0.0001초 만에 계속 반복을 한다면, 멀리서 보는 사람은 마치 3개의 손으로 일을 하는 것과 같을 것이다.
  • 실제로 0.0001초만에 컨텍스트 스위칭이 이뤄진다는 것은 아니다.
  • 어릴때 포스트잇에 이어지는 사진을 그려 빠르게 하나씩 지나갔을 때, 영상처럼 재생되는걸 기억해본다.

이러한, 하나의 CPU로 마치 여러개의 작업을 하는 것 처럼 보이는 능력을 멀티 태스킹 이라고 한다. (동시작업)


멀티프로세싱

멀티프로세싱이란?

다중 처리(多重處理)는 컴퓨터 시스템 한 대에 둘 이상의 중앙 처리 장치(CPU)를 이용하여 병렬로 처리하는 것을 가리킨다. 또, 이 용어는 하나 이상의 프로세서를 지원하는 시스템의 능력, 또는 이들 사이의 태스크를 할당하는 능력을 가리키기도 한다.[1] 다중 처리 시스템(Multiprocessing System)은 다중 처리가 적용된 시스템을 뜻한다.
https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91_%EC%B2%98%EB%A6%AC

CPU가 여러개라 여러가지 일을 동시에 처리 하는 것.

  • 앞서 살펴본 멀티테스킹 예시와 다르게 CPU가 2개 있다면 이러한 모습일 될 것이다.

  • 멀티테스킹과 다르게, 물리적인 CPU 갯수가 늘어, 실제로 병렬처리를 진행 한다.

멀티 프로레싱은 두개 이상의 CPU(코어)를 사용하여 여러 작업을 동시에 처리하는 기술을 의미한다.


프로세스

프로세스 란?

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 프로그램이다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

프로세스

  • 프로그램을 실행하여 생기는 실제 동작하는 프로그램의 인스턴스이다.
  • 메모장을 실행하는 코드(프로그램)을 개발 하였다고 한다. 이 프로그램을 실행시켜 메모장을 켰다면, 실행되고 있는 메모장 프로그램(인스턴스)는 프로세스 라고 한다.
  • 하나의 프로그램은 여러개의 프로세스(인스턴스)를 가질 수 있다.
    • 메모장을 여러개 킬 수 있다.
    • Google Chrome을 여러개 켜서 사용할 수 있다.

하나의 프로세스에는 여러가지 영역이 존재하고, 그 영역은 각각 다음과 같은 내용을 구성하고있다.

  • 코드영역 : 실행 중인 프로그램의 코드가 저장되는 메모리 영역.
  • 데이터 영역 : 프로그램이 실행 중에 사용하는 전역 변수와 정적 변수들이 저장되는 메모리 영역
  • 힙 영역 : 프로그램 실행 중 동적으로 메모리를 할당받는 영역. (JVM의 Heap과 유사)
  • 기타 영역 : 메모리 매핑 영역, 환경 변수와 인자 등을 합쳐서 정의.
  • 스택 영역 : 함수 호출과 관련된 정보가 저장되는 메모리 영역입니다.
  • 각각의 프로세스는 독립적인 메모리 공간을 가지고 있어, 서로 간섭하거나 영향을 주지 않는다.
  • Chrome을 통해 검색을 하다가, Chrome이 팅겼다고, 다른 Excel이나 게임이 같이 꺼지지는 않는다.
    • 물론, 그런 비슷한 경험을 겪을 수는 있지만 이는 다른 외부적인 문제 (메모리 오버플로우, 메모리 리크 등)이 발생하여 그럴 가능성이 높다.
    • 각각 다른 프로세스는 각자의 메모리 영역을 가지고 있다.

쓰레드

쓰레드란?

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다.
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)

프로세스 안에서 실행되는 작업의 단위.

쓰레드

  • 쓰레드는 하나의 프로세스에 반드시 하나 이상이 존재한다.
  • Excel을 예시로, 문서 작업을 하며, 자동완성이 되고, 맞춤법 검사가 되고 있는 것을 확인 할 수 있다. 하나의 Excel (프로세스) 에서 여러가지 기능이 동작하고 있는 것이다.
  • 이는 프로세스안여러개의 쓰레드가 있다는 것을 의미한다.
  • 이를 멀티 쓰레드 환경이라고 한다.

쓰레드는 앞서 설명한 영역을 공유 하여 사용한다.

  • 각 쓰레드는 코드, 데이터, 힙, 기타 영역등을 공유하며 사용하고, 자신만의 스택 영역 을 하나 가지고 있다.
  • 이 스택 영역 안에는 작성한 프로그램이 동작할 순서가 들어가 있고, 이 내용 (Thread)을 CPU에 할당하여 연산 처리하여 프로그램이 동작 하는 것이다.

다음과 같은 JAVA 코드를 예시로 상세하게 뜯어보자!

public class Test {

	private static final int ONLY_ONE = 1;
    
    public static void main(){
    	int a = 0;
        int b = 1;
        System.out.println("main 함수 실행 완료!");
        System.out.println("ONLY_ONE = " + ONLY_ONE);
    }
}
  • Java에서는 실행되는 프로그램의 진입점을 main() 메서드로 진행한다.
  • 따라서 main() 부터 시작되어 int a = 0; 등의 코드를 하나씩 실행하며 main을 완성하게 된다.
  • 이때, private static final int ONLY_ONE = 1;는 데이터 영역에 저장되게 되어 쓰레드 별로 공유되게 되는데, 공유하는 이유를 확인 할 수있다.

공유하여 사용하는 이유?

  • 이 Java코드를 사용해서 여러개의 쓰레드를 할당 하였다고 가정하자.
  • 이 값은 상수 값으로 어떤 곳에서 사용하든 모두 같은 값인 1을 가지고 있으므로, 각 쓰레드 별로 관리를 할 필요가 없다. (메모리 사용 ↓, 메모리 효율 ↑)

물론 해당 장점만이 공유자원의 의미는 아니지만, 다양한 장점이 있어 공유하여 사용한다 라고 이해하자.

profile
현재 블로그 이전 중입니다. https://blog.baekgwa.site/

0개의 댓글