Tech

Diary

Lecture

About Me

개발중

프로그램 동시 실행

JeongSeulho

2023년 02월 01일

준비중...
클립보드로 복사

사전 지식 및 용어 정리

프로세스

  • 컴퓨터에서 실행 중인 프로그램
  • 각 프로세스는 독립된 메모리 공간을 할당 받음
  • 메모리 공간에 명령어와 데이터를 가짐

CPU

  • 명령어를 실행하는 장치

메인 메모리

  • 프로세스가 CPU에서 실행되기 위해 대기하는 곳

I/O

  • 파일을 읽고 쓰는 것
  • 네트워크로 어딘가와 데이터를 통신하는 것
  • 키보드, 마우스 등 입출력 장치와 통신하는 것

단일 프로세스 시스템

  • 한번에 하나의 프로세스만 실행
  • 프로세스가 있으면 끝나야 다음 프로세스가 실행
  • 문제 : 만약 프로세스가 I/O 작업을 한다면 CPU는 아무것도 안하고 대기 => CPU 사용률이 나쁨

멀티 프로그래밍

  • 여러 프로그램이 동시에 실행
  • CPU 사용률 극대화가 목적, 단일 프로세스의 CPU 사용률을 높이기 위해 고안
  • 문제 해결 : 여러 프로그램을 메모리에 올리고 한 프로세스에서 CPU를 사용하다가 I/O 작업을 하면 다른 프로세스가 CPU를 사용할 수 있도록 함
  • 문제 : 만약 한 프로세스의 CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기함 => 응답 시간이 길어짐

Image

멀티 태스킹

  • 멀티 프로그래밍에 더하여 CPU 사용 시간(CPU Time)을 아주 짧게 분할
  • 프로세스의 응답 시간 최소화가 목적, 유저는 어떤 프로세스에 대해서도 즉각적인 응답을 받을 수 있도록 함
  • 문제 해결 : 프로세스는 한번 CPU를 사용할 때, 아주 짧은 시간만 사용하도록하며 프로세스들이 번갈아가며 CPU를 사용하도록 함 => 응답 시간이 줄어듦

위 방식들의 한계점

  • 하나의 프로세스가 여러 작업을 수행하지는 못함(프로세스를 여러개 띄우면 여러 작업할 수 있지만 단점이 많음음)
  • 프로세스를 여러개 띄워서 작업하는 것의 단점
    • 컨텍스트 스위칭 비용
    • 프로세스간 데이터 공유가 어려움
  • 듀얼 코어 이상의 CPU가 나오면서 여러 코어를 더 잘쓸 수 있도록 하는 방식이 필요

스레드

  • 한 프로세스에서 여러 작업을 동시에 실행하기 위해 사용 => 각 작업을 담당하기 위한 스레드 등장
    • 같은 프로세스에서 스레드 간의 컨텍스트 스위칭은 가볍다
    • 같은 프로세스의 스레드 간의 메모리 영역을 공유 => 데이터 공유가 쉬움
  • 각 프로세스는 최소 1개 이상의 스레드 보유
  • CPU에서 실행되는 단위는 프로세스에서 스레드로 변경

싱글 스레드와 멀티 스레드 메모리 구조

  • 멀티 스레드는 프로세스에 할당된 메모리 영역 공유
  • 하지만 각 스레드들 만의 고유한 부분도 있음(각 스레드의 스택 영역, 각 스레드의 프로그램 카운터)

Image

멀티 스레딩

  • 하나의 프로세스가 여러 작업(스레드)을 실행하기 위해 사용

확장된 멀티 태스킹

  • 여러 프로세스와 더불어 여러 스레드가 아주 짧게 CPU Time을 나눠가짐

멀티 프로세싱

  • 2개 이상의 코어나 프로세서(CPU)를 활용하는 시스템

예제

싱글 코어 CPU, 싱글 스레드 프로세스 2개

Image

싱글 코어 CPU, 듀얼 스레드 프로세스 1개

Image

듀얼 코어 CPU, 싱글 스레드 프로세스 2개

Image

듀얼 코어 CPU, 듀얼 스레드 프로세스 2개

Image