https://www.youtube.com/watch?v=QmtYKZC0lMU&t=2s
오늘의 토픽 🌱 공부하다가 이 영상을 봤는데 너무 유익해서 간단하고 쉽게 영상 내용 정리하고 마저 공부하려고!
프로그램 (program)
컴퓨터가 실행할 수 있는 명령어들의 집합
프로세스 (process)
컴퓨터에서 실행 중인 프로그램
각각의 프로세스는 독립된 메모리 공간을 할당 받는다
명렁어들과 데이터를 갖는다
CPU (Central Processing Unit)
명령어를 실행하는 연산 장치
메인 메모리 (main memory)
프로세스가 CPU에서 실행되기 위해 대기하는 곳
I/O (Input/Output)
파일을 읽고 쓰거나, 네트워크의 어딘가와 데이터를 주고 받는 것
입출력 장치와 데이터를 주고 받는 것
단일 프로세스 시스템
한 번에 하나의 프로그램만 실행됨
CPU 사용률이 좋지 않다는 단점이 있다
단일 프로세스 시스템의 한계 극복
단일 프로세스 시스템은 하나의 프로세스만 사용하기 때문에, CPU 사용률이 좋지 않다
따라서 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키는 해결책이 제시된다!
한 프로세스에서 I/O 작업이 발생하면 다른 프로세스가 CPU에서 실행되도록 한다
멀티 프로그래밍 (multi programming)
단일 프로세스 시스템의 한계를 극복한 프로그램
여러 개의 프로그래밍이 동시에 실행된다
이는 CPU 사용률을 극대화시키는 것이 목적이다
멀티 태스킹 (multitasking)
멀티태스킹은 멀티 프로그래밍의 한계점을 극복하기 위해 탄생한 개념이다
멀티 프로그래밍은 한 프로세스의 CPU 사용시간이 길어지만 다른 프로세스는 계속 대기해야 한다는 단점이 있다
이를 해결하기 위한 방법은 프로세스가 한 번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하는 것이다!
따라서 멀티태스킹은 프로세스의 응답 시간을 최소화시키는 것이 목적이다
멀티태스킹의 아쉬운 점..
하나의 프로세스가 동시에 여러 작업을 수행하지는 못한다
프로세스의 컨텍스트 스위칭은 무거운 작업이다
프로세스끼리 데이터 공유가 까다롭다
듀얼 코어가 등장했는데 이를 잘 쓰고 싶다!
스레드 (Thread)
멀티태스킹의 한계를 극복하기 위해 나온 개념이 바로 '스레드'이다
프로세스는 한 개 이상의 스레드를 가질 수 있다
스레드는 CPU에서 실행되는 작업의 최소 단위이다 (unit of execution)
같은 프로세스의 스레들끼리는 컨텍스트 스위칭이 가볍다
스레드들은 자신들의 속한 프로세스의 메모리 영역을 공유한다 -> Code/Data/Heap
메모리 구조 비교 (싱글 스레드 vs 멀티 스레드)
스레드끼리 Code/Heap/Data 영역을 공유한다
하지만 Stack 영역은 스레드마다 독립적으로 존재한다
멀티스레딩(multithreading)
하나의 프로세스가 동시에 여러 작업을 실행하는 데 목적이 있다
멀티스레딩의 등장 이후 멀티태스킹의 개념 또한 확장되었다
확장된 멀티태스킹 개념
여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 CPU time을 나눠 갖는 것
멀티 프로세싱 (multiprocessing)
2개 이상의 프로세서나 코어를 활용하는 시스템을 의미한다
예제로 비교해보는 멀티태스킹/멀티스레딩/멀티프로세싱
- 프로세스 2개가 1개의 CPU(코어)를 나눠서 사용하니까 멀티태스킹 O
- 싱글 스레드이기 때문에 멀티스레딩 X
- CPU가 1개니까 멀티프로세싱 X
- CPU(코어) 1개를 2개의 스레드가 나눠서 사용하니까 멀티태스킹 O
- 듀얼 스레드를 사용하니까 멀티스레딩 O
- CPU(코어) 1개니까 멀티프로세싱 X
- 2개의 코어를 각각 1개씩 사용하니까 코어 경쟁을 하지 않으므로 멀티태스킹 X
- 싱글 스레드니까 멀티스레딩 X
- 코어가 2개니까 멀티프로세싱 O
- 코어로 경쟁하지 않고 1개씩 사용하니까 멀티태스킹 X
- 듀얼 스레드니까 멀티 스레딩 O
- 코어가 2개니까 멀티프로세싱 O
-코어가 경합하고 있으니까 멀티태스킹 O
- 듀얼 스레드니까 멀티스레딩 O
- 코어가 2개니까 멀티프로세싱 O
확실히 영상 보면서 정리하니까 이해가 더 잘된다!
그럼 마저 공부하러.. 빠잉!
'야미스터디 > OS' 카테고리의 다른 글
[OS] 인터럽트와 시스템 콜 (0) | 2022.08.24 |
---|---|
[OS] Critical Section 📌 (0) | 2022.08.05 |
[OS] 세마포어와 뮤텍스 📌 (0) | 2022.07.24 |
[OS] 교착 상태 (Dead Lock) 📌 (0) | 2022.07.21 |
[OS] 멀티프로세스와 멀티스레드 차이 📌 (0) | 2022.07.15 |
댓글