개발자공부일기

어떻게 여러 그로그램이 동시에 실행되는가 본문

CS지식/OS

어떻게 여러 그로그램이 동시에 실행되는가

JavaCPP 2025. 11. 21. 18:38

프로그램은 컴퓨터가 실행할 수 있는 명령어의 집합입니다.

 

프로세스는 컴퓨터에서 실행 중인 프로그램으로 각각의 프로세스는 독립된 메모리 공간을 OS로부터 할당받습니다.

 

CPU는 명령어를 실행하는 연산장치고

메인 메모리는 프로세스가 CPU에서 실행되기 위해 대기하는곳입니다.

IO(Input/output) 이름에서 알 수 있듯 네트워크라던가 우리의 마우스나 키보드같은 입출력장치와 데이터를 주고받는 것입니다.

 

간단히 필요한 용어들을 알아봤고 이제 어떻게 여러 그로그램이 동시에 실행되는지 알아보겠습니다.

 

 

단일 프로세스 시스템

처음에는 한 번에 하나의 프로그램만 실행 할 수 있었습니다.

다른 프로그램을 실행하고 싶다면 지금 프로그램을 종료하고 실행해야했죠.

그냥 듣기에도 비효율적입니다.

 

단일 프로세스에서 프로세스는 cpu에서 작업을 하다가 I/O작업이 발생하면 cpu는 I/O작업을 하는동안 아무것도 하지 않고 대기하게 됩니다. I/O가 끝나야 다시 작업을 시작하죠. 

 

그래서 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키기로 합니다. I/O가 발생했을때 대기하는 시간을 사용하고자 했죠.

 

 

멀티 프로그래밍

그 방법이 멀티 프로그래밍입니다.

 

아래 표같이 여러개의 프로세스를 실행하게 됩니다.

cpu에서 작업중인 프로세스 p1 p2 (작업할 프로세스x) p1
상황 p1작업 시작 p1 I/O발생
p2 작업 시작
p2 I/O발생 p1작업 시작

 

단일 프로세스를 먼저 소개해서 그런걸까요? 상대적으로 굉장히 좋아보입니다!

근데 문제가 있어요. 만약 p1의 작업이 엄~청 길게 이어진다면 어떨까요?

 

p2는 p1이 I/O에 들어갈때까지 그 엄~청 긴 시간을 기다리고 있어야 합니다.

 

cpu에서 작업중인 프로세스 p1 p2 (작업할 프로세스x) p1

 

이렇게 말이죠.

 

그래서 해결하려고 프로세스가 한 번 작업할때 제한시간을 주기로 합니다.

 

멀티태스킹

문제를 해결하기 위해 한 번 cpu를 사용할 때 아주 짧은 시간(quantum)을 주어 긴 대기시간을 없애려고 합니다.

p1 p2 p1 p2 p1 p2 p1 p2 p1 p2

 

이렇게  각 프로세스를 조금씩 여러번 실행하는 방법입니다.

저 시간은 밀리세컨드 단위까지도 쪼갭니다.

 

이렇게 프로세스의 응답 시간을 최소화 시키는데 목적을 둡니다.

각 프로세스들은 사람이 느끼기 어려운 빠른 속도로 번갈아 실행하기 때문에 응답을 즉각 받아 사용자는 정말 동시에 실행되는것처럼 느낄 수 있습니다.

 

이제 우린 동시에 여러 프로세스를 실행하는 것까진 했는데 이제 프로세스 내부로 시선이 옮겨갑니다.

하나의 프로세스가 동시에 여러 작업을 할 수는 없었는데요.

우리가 게임을 로딩할때 여러가지 파일들(사운드,이미지,저장내역 등등..)을 불러올때 하나씩만 불러올 수 있는겁니다.

굉장히 불편하죠.

 

그럼 프로세스 여러개를 둬서 작업하고 모으면? 되지 않냐 할 수 있지만 단점이 많습니다.

1.프로세스의 컨텍스트 스위칭은 무겁습니다.

2.프로세스는 독립된 메모리 공간을 할당받는다 했죠? 그래서 프로세스간 데이터 공유가 어렵습니다.

 

그리고 시대가 발전하면서 코어가 여러개인 CPU가 등장하기 시작합니다. 이제 코어가 여러개니까 잘 쓸 수 있게 고민해야겠죠.

 

그래서 스레드(thread)라는 친구가 등장합니다.

 

멀티스레딩

하나의 프로세스 안에서 여러개의 작업을 동시에 하고싶어 등장한게 스레드기 때문에 하나의 프로세스는 여러개의 스레드를 가지게 됩니다.

 

과거에는 프로세스가 cpu에서 실행되는 단위였다면 이제 스레드가 실행되는 단위가 됐습니다.

 

스레드는 같은 프로세스에 속해있다면 메모리를 공유합니다.

아까 프로세스는 독립적인 메모리라 컨택스트 스위칭이 무겁다고 했었는데, 이 친구들은 메모리를 공유하니까 컨택스트 스위칭이 가볍겠죠.

 

 

 

이렇게 하나의 프로그래밍을 어떻게 동시에 처리하는지 간단하게 소개해 봤습니다.

 

멀티스레딩의 분량이 매우 적은데, 양이 많아 https://javacpp.tistory.com/134에 정리해 두었습니다.

'CS지식 > OS' 카테고리의 다른 글

Deadlock  (0) 2025.03.07
멀티프로세스와 멀티쓰레드  (0) 2025.02.28