💋 인트로
안녕하세요, 우아한테크코스 5기 백엔드 깃짱이라고 합니다.
이번 포스팅부터는 유튜브 쉬운코드의 운영체제 영상을 보면서, 운영 체제의 기초에 대해 정리해 나가려고 합니다.
대부분의 내용과 사진은 쉬운코드 개발자님의 영상을 보고 작성한 내용입니다.
텍스트로 이해가 잘 되지 않는다면 참고자료에 있는 영상을 직접 보면서 공부하시면 많은 도움 될 거에요!
💋 용어 정리
먼저 기본적인 용어부터 정리하고 시작해야 한다.
✔️ 프로세스
컴퓨터에서 실행중인 프로그램으로, 각각의 프로세스는 독립된 메모리 공간
을 할당 받는다.
또 각 메모리 공간은 독립적인 명령어와 데이터를 가진다.
✔️ CPU(Central Processing Unit)
명령어를 실행하는 연산 장치
✔️ 메인 메모리
프로세스가 CPU에서 실행되기 위해 대기하는 곳이다.
우리가 흔히 메모리라고 부르는 것의 정식 명칭은 메인 메모리다.
✔️ IO
파일을 읽고 쓰거나, 네트워크 어딘가와 데이터를 주고 받는 것.
마우스, 키보드, 프린터 등의 입출력 장치와 데이터를 주거나 받는 것.
💋 시스템의 발전 과정
✔️ 단일 프로세스 시스템
한 번에 하나의 프로그램만 실행되는 가장 초창기의 시스템
또 다른 프로그램을 실행하려면, 먼저 실행하던 프로그램을 종료하고 그 다음 프로그램을 실행해야 한다.
P1, P2를 순차적으로 실행하는 경우에 P1에서 IO 작업이 일어나는 동안 CPU는 놀고 있다. → CPU 사용률이 좋지 않다.
✔️ 멀티 프로그래밍
단일 프로세스 시스템의 단점을 보완해서 등장함.
여러 개의 프로그램을 메모리에 올려놓고, 동시에 실행
현재 CPU에서 실행중인 프로세스에 IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨.
CPU 사용률을 극대화 시키는 데에 목적이 있다.
CPU 사용 시간이 길어지면, 다른 프로세스는 계속해서 대기해야 한다는 단점이 있다.
✔️ 멀티태스킹
프로세스는 한 번 CPU를 사용할 때, quantum이라고 하는 아주 짧은 시간만 CPU에서 실행되도록 한다
P1, P2가 매우 짧은 CPU 타임만큼 쪼개서, 하나씩 쪼금씩 실행한다.
프로세스의 응답 시간을 최소화 시키는 데 목적
일반 사용자가 느끼기에는, 마치 정말 여러 프로세스가 동시에
실행되는 것처럼 느껴진다.
하나의 프로세스가 동시에 여러 작업을 수행하지 못한다는 한계가 있음.
- 프로세스의 컨텍스트 스위칭은 무거운 작업
- 프로세스는 독립적 메모리를 가지기 때문에 프로세스끼리의 데이터 공유가 까다롭다.
💋 스레드
✔️ 듀얼 코어 CPU의 등장
CPU 성능을 계속 발전시키는 것이 발열 등 이슈로 쉽지 않아, 한 CPU 안에 두 개의 코어를 두어 전체적 성능을 향상시키는 방향으로 전환했다.
✔️ 개념
한 프로세스 안에서 여러 개의 작업을 처리하기 위해서 스레드가 등장했다.
✔️ 특징
- 프로세스는 1개 이상의 스레드를 가질 수 있다.
- 스레드는 CPU에서 실행되는 단위이다.
- 과거에는 프로세스가 CPU에서 실행되는 단위였다면, 이제는 프로세스 대신 스레드가 이 단위가 되었다. →
unit of execution
- 같은 프로세스의 스레드끼리 컨텍스트 스위칭은 가볍다.
- 스레드들은 자신들이 속한 프로세스의 메모리 영역을 공유한다. → 데이터 공유가 쉽다.
💋 메모리 구조 비교
✔️ 싱글 스레드 프로세스의 메모리 구조 (스레드 등장 전)
- 이 프로세스에 할당된 메모리 영역을 나타내는 그림.
- Stack, Heap, Stack Pointer, Program Counter 존재
✔️ 멀티 스레드 프로세스의 메모리 구조
- 스레드 간 Heap 메모리 영역 공유
- 스레드마다 Stack 영역 따로따로 독립적
- 스레드마다 Stack Pointer, Program Counter도 따로따로
→ 같은 프로세스에 속한 스레드는 그 프로세스의 메모리 영역을 공유
한다.
→ 스레드만의 고유한 영역
도 있다.
✔️ Program Counter란?
이 다음번에 실행될 명령어가 있는 메모리 주소
💋 시스템은 계속 발전한다!
✔️ 멀티 스레딩
하나의 프로세스
가 동시에 여러 작업(=쓰레드)
을 실행
⇒ 싱글 스레드면 멀티 스레딩 (X)
⇒ 듀얼 스레드면 멀티 스레딩 (O)
✔️ 확장된 멀티태스킹 개념
Before: 프로세스끼리의 짧은 시간 안에서의 컨텍스트 스위칭
→ After: 여러 프로세스와 여러 스레드
가 아주 짧게 쪼개진 CPU Time을 나눠
갖는 것
⇒ 코어에 경합하고 있는 작업이 존재해야 함.
✔️ 멀티 프로세싱
2개 이상의 프로세서나 코어
를 활용하는 시스템
⇒ 코어가 2개 이상이면 멀티 프로세싱
💋 예제
- 싱글 코어 CPU에 싱글 스레드 프로세스 2개 → 멀티 태스킹
- 싱글 코어 CPU에 듀얼 스레드 프로세스 1개 → 멀티 태스킹, 멀티 스레딩
- 듀얼 코어 CPU에 싱글 스레드 프로세스 2개 → 멀티 프로세싱
- 듀얼 코어 CPU에 듀얼 스레드 프로세스 1개 → 멀티 프로세싱, 멀티 스레딩
- 듀얼 코어 CPU에 듀얼 스레드 프로세스 2개 → 멀티 프로세싱, 멀티 스레딩, 멀티 태스킹
둘 중 어떤 경우더라도, 모두 멀티 태스킹, 멀티 스레딩, 멀티 프로세싱을 만족한다.
이 경우가 우리가 요즘 컴퓨터에서 쓰는 것과 가장 비슷한 상황이다.
💋 결론
오늘날 컴퓨터는 아래의 특징을 가진다.
- 2개 이상의 CPU = 2개 이상의 프로세스를 정말로 ‘동시에’ 실행 가능 ⇒ 멀티 프로세싱
- 1개의 프로세스가 여러 스레드를 실행 ⇒ 멀티 스레딩
- 여러 프로세스의 여러 스레드가 CPU Time을 quantum으로 쪼개 사용 ⇒ 멀티 태스킹
동일한 프로세스에 속하는 스레드는 아래 특징을 가진다.
- Heap 영역 → 메모리를 공유
- Stack 영역 → 스레드마다 따로따로
💋 참고자료
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 동기화 메커니즘(Synchronization Mechanisms)(1): 스핀락(Spinlock), 뮤텍스(Mutex), 세마포어(Semaphore) (0) | 2023.11.20 |
---|---|
[OS] 동기화(synchronization)의 필요성: 경쟁 조건(race condition), 임계 영역(critical section) (0) | 2023.11.12 |
[OS] CPU Bound VS IO Bound: 스레드는 몇 개가 좋을까? (0) | 2023.11.10 |
[OS] 컨텍스트 스위칭: 프로세스 컨텍스트 스위칭 VS 스레드 컨텍스트 스위칭 (0) | 2023.11.09 |
[OS] Connection Pool Size를 줄이면 오히려 성능이 개선될 수 있다. (1) | 2023.09.29 |