배경지식
- 프로그램: 컴퓨터가 실행할 수 있는 명령어들의 집합
- 프로세스: 컴퓨터에서 실행 중인 프로그램, 각각의 프로세스는 독립된 메모리 공간을 할당 받고 명령어들과 데이터를 가짐
- CPU : 명령어를 실행하는 연산장치
- 메인메모리: 프로세스가 CPU에서 실행되기 위해 대기하는 곳
- IO : 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것, 입출력 장치와 데이터를 주거나 받는 것
단일 프로세스 시스템
- 가장 초창기
- 한번에 하나의 프로그램만 실행
- 단점: CPU 사용률이 좋지 않음 -> 실행중인 프로세스가 IO 작업을 할 때 CPU는 놀게 됨
- 해결책 : 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키자! IO 작업 발생시 다른 프로세스가 CPU에서 실행됨 -> 멀티 프로그래밍
멀티 프로그래밍
- CPU 사용률을 극대화 시키는 것이 목적
- 단점: CPU 사용시간이 길어지면 다른 프로세스는 계속 대기
- 해결책: 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자 -> 멀티태스킹
멀티태스킹
- 프로세스의 응답시간을 최소화 시키는데 목적 -> 사용자가 여러 프로그램이 동시에 실행된다고 "느낌"
- 단점 1: 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함
- 단점 2: 프로세스의 컨텍스트 스위칭은 무거운 작업임
- 컨텍스트 스위칭: CPU에서 실행되기 위해 한 프로세스에서 다른 프로세스로 교체되는 것
- 단점 3: 프로세스끼리 데이터 공유가 까다로움 -> 독립적인 메모리 공간에 위치함
- 단점 4: 듀얼코어가 등장했는데 잘 쓰고 싶음
스레드(OS 레벨)
- 프로세스는 한 개 이상의 스레드를 가질 수 있음
- 스레드 : CPU에서 실행되는 단위(unit of execution), 이전까지는 프로세스가 실행 단위였음
- 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다
- 자신들이 속한 프로세스의 메모리 영역을 공유 -> 컨텍스트 스위칭이 가볍다, 데이터 공유가 쉽다
멀티스레딩
- 하나의 프로세스가 동시에 여러 작업(thread를 통해)을 실행하는 것이 목적
확장된 멀티 태스킹 개념
- 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것
멀티프로세싱
- 두 개 이상의 프로세서나 코어를 활용하는 시스템
예제
- 싱글코어 CPU에 싱글-스레드 프로세스 두 개: 멀티태스킹
- 싱글코어 CPU에 듀얼-스레드 프로세스 한 개: 멀티태스킹, 멀티스레딩
- 듀얼코어 CPU에 싱글-스레드 프로세스 두 개: 멀티스레딩, 멀티프로세싱
- 듀얼코어 CPU에 듀얼-스레드 프로세스 한 개: 멀티스레딩, 멀티프로세싱
- 듀얼코어 CPU에 듀얼-스레드 프로세스 두 개: 멀티태스킹, 멀티스레딩, 멀티프로세싱
'etc > 얍' 카테고리의 다른 글
[영상후기/ 얄팍한 코딩사전] REST API가 뭔가요? (0) | 2023.04.03 |
---|---|
[영상후기/ 얄팍한 코딩사전] 객체지향 디자인패턴2 (1) | 2023.04.03 |
[영상후기/쉬운코드] 백엔드에서 사용되는 데이터베이스(database) 기본 개념을 설명 (0) | 2023.03.13 |
[영상후기/얄팍한 코딩사전] MVC 웹 프레임워크가 뭔가요? (0) | 2023.03.10 |
[영상후기/얄팍한 코딩사전]Scope가 뭔가요? (feat: let, const, var의 차이) (0) | 2023.03.08 |
댓글