300x250

개인 공부 기록용 블로그예요.

오류나 틀린 부분이 있을 경우

언제든지 댓글 혹은 메일로 지적해 주세요!

 

프로그램

- 컴퓨터가 실행할 수 있는 명령어들의 집합

- 어떤 문제를 해결하기 위하여 그 처리 방법과 순서를 기술하여 컴퓨터에 주어지는 일련의 명령문 집합체

 

 

프로세스

- 컴퓨터에서 메모리에 올라와 실행 중인 프로그램

- 각각의 프로세스는 독립된 메모리 공간을 할당받음

- 명령어들과 데이터를 가짐

 

 

단일 프로세스 시스템

컴퓨터가 한 번에 하나의 프로그램만 실행할 수 있는 시스템 

 

단점 : CPU 사용률이 좋지 않음

 

calc.cpp

#include <iostream>

using namespace std;

int main()
{
	string userName;
	int num1, num2;

	cout << "유저 이름을 입력 해주세요 : ";
	cin >> userName;

	cout << "더할 숫자 2개를 입력해 주세요." << endl;
	cin >> num1 >> num2;

	int result = num1 + num2;
	cout << "결과 : " << result << endl;

	return 0;
}

cin이 C++ 표준 입력 함수인데 이처럼 각각 입력을 받아야 하는 경우가 있을 경우 cpu는 밑에 작업을 처리하지 않고 대기하게 되며 cpu 낭비가 발생

 

해결책 : 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키면 되지 않을까? 이처럼 IO 작업이 발생하면 다른 프로세스가 CPU에서 실행이 되게 해 보자 라는 아이디어가 나오게 됨 이렇게 해서 나오게 된 게 멀티프로그래밍 시스템

 

 

멀티프로그래밍

컴퓨터가 여러 개의 프로그램을 실행할 수 있는 시스템

단점 : 먼저 실행하고 있는 프로세스가 CPU 사용 시간이 길어지게 되면 다른 프로세스는 계속 대기를 하게 됨

해당 부분에서 사용자가 입력을 하고 있지 않으면 다른 프로세스는 계속 대기를 해야 됨

 

해결책 : 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간 동안만 CPU에서 실행되도록 하자 라는 아이디어가 나오게 됨.

-> 멀티태스킹 시스템

 

멀티태스킹 시스템

- 프로세스의 응답 시간을 최소화시키는 게 목적

- 오늘날에는 프로세스뿐만 아니라 스레드 또한 아주 짧게 쪼개 된 cpu time을 나눠 갖는 것

- 여러 프로그램이 동시에 실행되는 것처럼 느끼게 됨

단점 :

- 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함

- 프로세스의 컨텍스트 스위칭은 무거운 작업

(컨텍스트 스위칭이란 위에 사진에서 P1을 실행하다가 P2을 실행하기 위해서 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것으로 CPU에서 실행할 프로세스를 교체하는 기술을 의미함)

- 프로세스끼리 데이터 공유가 쉽지 않음

- CPU에서 듀얼 코어가 등장했는데 잘 쓰고 싶다는 아이디어 등장

 

해결책 : 스레드를 사용하자

 

 

스레드

- 프로세스(process) 내에서 실제로 작업을 수행하는 주체

- 프로세스는 최소 한 개 이상의 스레드를 가질 수 있다.

- 이전에는 CPU에서 실행되는 단위가 프로세스였다면 오늘날에는 스레드가 실행되는 단위(unit of execution)

- 프로세스 끼리 하는 것보단 같은 프로세스의 스레드들끼리 하는 컨텍스트 스위칭 작업이 더 가볍다.

- 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유하게 됨

 

 

멀티스레딩 시스템

- 병렬처리가 가능해짐

- OS에서 프로세스가 생성되면 자원을 할당해주는데 이때 Stack 영역, Heap 영역, Data 영역, Code 영역을 할당받음.

스레드마다 Stack 영역은 고유한 영역이고 밑에 메모리 영역을 공유할 수 있으므로 데이터 공유가 쉽다.

 

 

멀티프로세싱 시스템

- 두 개 이상의 프로세서나 코어를 활용하는 시스템

 

 

참고 문헌  

(20) 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍, 이 모든 것을 한 방에 깔끔하게 설명합니다!! 콘텐츠 퀄리티 만족하실 겁니다! - YouTube

 

300x250

'[개인공부] > CS' 카테고리의 다른 글

[CS] 컴퓨터 구조 #1  (0) 2024.02.20