-
프로세스와 스레드의 실행 방식CS/운영체제 2023. 10. 22. 16:51
글을 시작하기에 앞서, 이 글은 유튜브 영상을 기반으로 학습을 위해 정리한 글이라는 점 말씀드립니다.
더 정확하고 알찬 설명은 아래의 영상을 보시기를 권해드립니다.
쉬운코드 - 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍, 이 모든 것을 한 방에 깔끔하게 설명합니다!! 콘텐츠 퀄리티 만족하실 겁니다!
"컴퓨터를 사용한다"는 문장의 뜻
우리가 컴퓨터를 사용한다고 하면 대개 컴퓨터에 설치되어있는 프로그램을 사용하는 것을 이야기한다.
위 문장을 행동을 기반으로 다시 작성해보면,
"컴퓨터에 설치되어 있는 프로그램을 화면에서 더블클릭 한 뒤에 본체가 실행시키면 그 것을 이용하는 것"으로 바꿀 수 있겠다.
다시, 이 문장은 크게 3가지로 부분으로 나눠 볼 수 있겠다.
1. 컴퓨터에 설치되어 있는 프로그램
2. 화면에서 더블 클릭 하는 것
3. 본체에서 실행 시키는 것
# 컴퓨터에 설치되어 있는 프로그램
나는 누가 프로그램이 무엇이냐고 묻는다면
"개발자가 작성한 코드와 그 코드가 실행되기 위해 필요한 데이터들을 하나로 묶어서 컴퓨터가 실행가능한 형태로 만들어 둔 것"
이라고 설명할 것 같다.
# 화면에서 더블 클릭 하는 것
더블 클릭을 한다는 건, "프로그램을 실행될 준비상태로 만드는 것" 이라고 설명하고 싶다.
더 구체적으로는 저장장치에 있는 데이터를 가져다 프로세스를 생성해서 메모리에 올리는 작업 정도로 생각해 볼 수 있겠다.
# 본체에서 실행 시키는 것
마지막으로, 본체가 실행 시킨다는 것은 "컴퓨터 속의 어떤 부품이 준비상태의 프로그램을 가져다가 사용자가 화면에서 볼 수 있게 실행시키는 것"이라고 말할 수 있겠다. (컴퓨터 속의 어떤 부품은 CPU이다.)
위의 3가지에서 프로그램, 프로세스, 프로세서를 유추해낼 수 있다.
- 프로그램: 개발자가 작성한 코드와 그 코드가 실행되기 위해 필요한 데이터들을 하나로 묶어서 컴퓨터가 실행가능한 형태로 만들어 둔 것
- 프로세스: 프로그램이 실행될 준비 상태가 된 형태
- 프로세서: 프로세스를 실행시키는 장치
운영체제 과목의 가장 기본이 되는 내용을 아주 아주 추상화해서 살펴보았다.
본론에 들어가기에 앞서 한가지 개념만 더 살펴보자.
"가까울 수록 빠르다"
"컴퓨터를 사용한다."라는 문장을 통해서 프로그램의 실행 과정을 추상적으로 살펴보았다.
위 3가지 단계는 실제로 여러가지 물리적인 장치들을 거치게 되는데, 이 장치들이 다들 실행 속도가 다르다는 점이 항상 문제가 된다.
운영체제 과목 중 "어떻게 하면 이 장치들간의 속도 차이를 효율적으로 대응하는가" 가 커다란 한 줄기라고 생각이 된다.
가까울 수록 빠르다고 이야기했다. 어디와 가까울 수록 빠를까?
우리 컴퓨터의 실행장치 (프로세서)에 가까워 질 수록 장치의 수행 속도가 빠르다는 특징을 가지고 있다.
하지만 아쉽게 속도가 빠를 수록 비싸고, 저장공간이 작다는 특징도 함께 가지고 있다.
( cpu > cache > ram > disc > network )
RAM을 기준으로 이전, 이후 장치들의 속도차이가 현격하게 벌어지는데, 이 때문에 RAM 이후의 장치에서 데이터를 읽거나 쓰는 작업을
I/O (input/output) 라고 부르고, 속도가 오래 걸리는 작업으로 분류하게 된다.
이제 프로그램, 프로세스, 프로세서, I/O 개념을 가지고 본론으로 가보자.
프로세서가 프로세스를 실행시키는 방법들
1. 단일 프로세스 시스템 ( Single-tasking )
가장 초기형태의 프로세서 운영방법이다.
1개의 코어 CPU가 1개의 프로세스를 실행하는 방법이다.
# 문제점
실행 중인 프로세스에서 Disk I/O 혹은 Network I/O가 발생한다면 CPU 역시 대기하는 상황이 발생하여 효율이 좋지 않다.
# 해결책
여러 개의 프로세스를 만들어서 번갈아 가면서 실행하자.
2. 멀티 프로그래밍 ( Multi-programming )
여러개의 프로세스를 만들어서 CPU를 최대한 활용하자.
(비슷하게 시분할 시스템이 있는데 이는 동시에 여러 사용자가 컴퓨터를 사용할 수 있게 하는 것에 초점)
# 문제점
한 프로세스에서 I/O가 발생할 경우, 다른 프로세스로 교체되어 CPU 효율은 증가하나, 실행 중인 프로세스의 실행시간이 길 경우,
뒤 쪽의 프로세스들은 대기를 해야하는 경우가 발생.
# 해결책
개별 프로세스를 더 작게 나눠서 번갈아가면서 실행할 수 있도록 하자.
3. 멀티 태스킹 ( Multi-tasking )
cpu 최대활용 + 프로세스의 응답시간을 최소화 하는것.
사용자의 입장에서는 여러 프로그램이 동시에 실행되는 것 처럼 느껴짐.
선점형, 비선점형의 방식이 있다.
(응답시간: input을 받고 output을 보기까지 걸리는 시간)
# 아쉬운 점
프로세스가 교대 되는 것을 컨텍스트 스위칭이라 하는데, 프로세스의 컨텍스트 스위칭은 무거운 작업이라 오버헤드가 존재.
프로세스 간의 데이터 공유는 별도의 매커니즘이 필요한 까다로운 작업.
듀얼 코어의 개발로 동시에 2개의 프로세스를 실행할 수 있게 됨.
# 개선책
쓰레드를 활용하자 (Thread)
쓰레드 ( Thread )
- 쓰레드는 Light Weight Process 라는 별칭을 가지고 있다.
- 프로세스 내부에서 별도의 스택을 가지고, 스택의 힙 영역을 다른 쓰레드 들과 공유함.
- 프로세서의 활용도를 높히나 동시성 이슈를 고려해야한다.
- 현대 컴퓨터에서는 쓰레드가 OS 실행 단위.
4. 멀티 쓰레딩 (Multi Threading)
하나의 프로세스가 동시에 여러 작업을 할 수 있게 만듬.
1) 싱글 코어
2) 듀얼 코어
멀티 태스킹을 어떤 부분에서 개선할 수 있는지 생각해본 예시를 적어본다.
기존에 멀티태스킹에서는 P1이 할당받은 시간에 I/O 작업이 있으면 무조건 컨텍스트 스위칭이 발생하였겠지만,
쓰레드가 있다면, 프로세스는 그대로 두고 다른 쓰레드의 작업을 진행하면 되기 때문에 프로세스의 컨텍스트 스위칭을 줄일 수 있다.
실행의 기본 단위는 쓰레드.
5. 멀티 프로세싱 ( Multi-processing )
두 개이상의 프로세서를 사용하는 시스템
정리를 위한 퀴즈
퀴즈 1 )
O / X / X
퀴즈 2 )
X / O / X-> O / O / X프로세스는 1개이지만 2개의 스레드가 CPU사용을 놓고 경합을 벌여야하기 때문에 멀티 태스킹
퀴즈3)
O / X / O-> X / X / O코어가 2개에 쓰레드 2개이기 때문에 CPU 경합이 발생하지 않는다.
퀴즈4)
X / O / O
퀴즈5)
O / O / O
'CS > 운영체제' 카테고리의 다른 글
가상화와 컨테이너화 기술의 비교 (1) 2024.01.05