I/O 작업의 3가지 의미
1. 파일을 읽고 쓰는 것
2. 네트워크의 어딘가와 데이터를 주고 받는 것
3. 입출력 장치(EX.마우스, 키보드)와 데이터를 주고 받는 것
단일 프로세스 시스템(초창기의 OS Architecture)
한 번에 하나의 프로그램만 실행됨.
프로세스들이 순차적으로 실행이 되므로, 하나의 프로세스가 모두 실행이 완료되어야만 그 다음의 프로세스를 실행할 수
가 있다.
단점 : cpu 사용률이 매우 안 좋음.
-> 프로세스의 I/O 작업 중 CPU는 유휴 상태에 들어 간다.
이러한 문제를 해결하기 위하여 여러 개의 프로그램을 메모리에 올려 놓고 동시에 실행시키자. 즉, I/O 작업이 발생하면 CPU를 놀게 놔 두는 것이 아니라, 대기 중인 프로세스를 올려 실행을 시킨다.
이것을 멀티 프로그래밍(Multi Programming)이라고 한다.
예시
(P1, P2 프로그램은 모두 각각 1 번의 I/O 작업들이 있다고 가정)
멀티 프로그래밍의 단점
CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기를 해야하는 불공평한 issue가 생긴다.
Solution : 프로세스는 한 번 CPU를 사용할 때 quantum이라고 불리는 매우 짧은 시간 동안만 CPU를 점유를 허락하고, 그
짧은 시간이 끝나게 되면 대기하고 있던 다른 프로세스들에게도 똑같이 Quantum 시간 동안만큼만 CPU 점유를 허락한다.
이러한 기법을 멀티 태스킹(Multi Tasking)이라고 한다.
(Quantum 개념은 현대 OS Architecture의 초석이 된다.)
멀티 프로그래밍 vs 멀티 태스킹
2개 이상의 프로세스를 동시에 실행시킨다는 것은 같지만, 멀티 태스킹은 1개의 프로세스가 CPU를 너무 오래 독차지하는
것을 방지하기 위하여 Quantum 개념을 도입.
멀티 태스킹의 장점
프로세스의 응답 시간을 최소화가 가능하다.
-> 멀티 프로그래밍은 I/O 작업 동안에만 다른 프로세스의 실행을 허락하여, 프로그램의 동시 실행을 가능하게 하였다..
그래서 어떤 프로세스가 CPU를 오랫동안 점유를 할 경우, 다른 프로세스의 실행이 늦어 질 수 밖에 없었고, 이러한 단점을
보완하기 위하여 멀티 태스킹이 나왔다.
멀티 태스킹은 각 프로세스에게 공평하게 동일한 시간 동안만 CPU 점유를 허락하므로, 멀티 프로그래밍의 단점이였던
프로세스의 응답 시간 issue를 해결하였다.
그러나, 언제나 그렇듯 개발자들은 아래의 단점들을 극복하고자 스레드(Thread) 개념을 탄생시켰다.
멀티 태스킹의 단점
1. 하나의 프로세스가 동시에 여러 작업을 하지 못함
-> 그럼, 프로세스를 하나가 아니라, 여러 개의 또 다른 프로세스로 나누어서 실행을 하면 되지 않냐? 라고 생각을 할 수 있는데, 이건 아래 2의 이유로 비현실적이다.
2. 프로세스의 컨텍스트 스위칭(context switching, 문맥 교환이라고도 불림)의 작업은 비용이 많이 든다.
-> 실행의 흐름이 다른 곳으로 넘어 갈 때, CPU에서는 해당 프로세스가 다시 CPU로 돌아와서 이어서 실행을 할 때, 여태까
지 CPU가 계산을 해 놓았던 중간값들로 실행을 이어 나간다. Context Switching이란 CPU에서 프로세스(or 스레드)가 모종
의 이유로 실행이 중단되고 out되어서 다시 cpu를 점유하게 되었을 때 중간값들을 사용하기 위하여 그 값들을 저장하는 작
업이다.
3. 프로세스끼리 데이터 공유가 까다로움
-> 서로 다른 프로세스는 메모리 상에서 서로 독립적인 위치에 존재를 한다.
이런 상황에서 프로세스끼리 데이터를 공유하는 것은 까다롭다.
4. 듀얼 코어의 등장
-> 2000년대 초반 이전에는 1개의 cpu만으로 성능을 높였는데, 발열 등의 이슈로 인하여 이제는 1개의 cpu가 아니라 그냥
cpu의 갯수를 여러 개로 늘려서 성능을 높이려고 했다.
이 듀얼 코어를 잘 이용하기 위해서는 멀티 태스킹은 적절하지 않았다.
예를 들어, 4코어 4 쓰레드 cpu의 경우, 한번에 4개의 코어에서 4가지 작업(스레드)을 동시에 처리를 하여, 하나의 프로세
스가 동시에 여러 작업을 수행을 할 수가 있는 것인데, 만약 하나의 프로세스를 스레드로 분할하지 않고 실행을 하게 되면
기존의 멀티 태스킹이랑 다른 것도 없고, 무엇보다 듀얼 코어를 만든 의미가 없어 진다.
스레드(Thread) : 듀얼 코어(요즈음은 멀티 코어!)를 효율적으로 사용하기 위하여 나온 개념이며, 하나의 프로세스가 여러
쓰레드로 나뉘어 하드웨어적인 방법으로 동시에 실행시키는 것이 가능하게 됨에 따라 하나의 프로세스가 동시에 여러 작
업을 할 수 있게 됨.
듀얼 코어의 등장으로 인하여, CPU의 실행 단위(unit of execution)는 프로세스->스레드로 변하였다.
스레드(Thread)의 특징
1. 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유한다.
2. CPU에서 실행되는 단위(unit of execution)
3. 같은 프로세스의 스레드들끼리는 컨텍스트 스위칭이 가볍다.
Thread들은 프로세스에 할당된 메모리 영역 중, heap 영역의 데이터를 공유를 한다.
멀티 스레딩(Multi Threading)
하나의 프로세스가 여러 개의 쓰레드로 나뉘어 동시에 실행되는 것.
(이때의 "동시에"라고는 말은 , 싱글 코어인 경우에는 quantum time으로 인해서 동시에 실행되는 것처럼 보이게 하는 것이고, 멀티 코어인 경우에는 진짜 동시를 뜻한다.)
확장된 멀티 태스킹의 의미
여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것!
( 이전에는 여러 프로세스가 아주 짧게 조개진 cpu time을 나눠 갖는 것이였다.)
멀티 프로세싱(Multi processing)
2개 이상의 Processor나 코어를 활용하는 시스템
'CS 과목(CS科目) > 운영체제(OS)' 카테고리의 다른 글
스핀락(spinlock) 뮤텍스(mutex) 세마포(semaphore) (0) | 2022.12.23 |
---|---|
동기화(synchronization), 경쟁 조건(race condition), 임계 영역(critical section) (0) | 2022.12.23 |
cpu bound vs io bound (0) | 2022.12.20 |
Thread Context Switching vs Process Context Switching (0) | 2022.12.19 |
Stack Frame( in Java ) with THIS pointer (0) | 2022.12.19 |