0. 개요
개발은 프로그램을 만드는 것이다.
그리고 그렇게 만들어진 프로그램이 컴퓨터에서 실행되면, 실행 중인 프로그램을 프로세스라고 부른다.
프로그램 (program)
: 컴퓨터가 실행할 수 있는 명령어들의 집합
✔️ 프로세스 (process)
“Process is a program in execution” / 컴퓨터에서 실행 중인 프로그램
: 각각의 프로세스는 독립된 메모리 공간을 할당받는다. 그리고 명령어들과 데이터를 가진다.
CPU (central processing unit)
: 명령어를 실행하는 연산 장치
메인 메모리 (main memory)
: 프로세스가 CPU에서 실행되기 위해 대기하는 곳
I/O (input/output)
: 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고받는 것
: 입출력 장치와 데이터를 주거나 받는 것
1) 단일 프로세스 시스템
: 한 번에 하나의 프로그램만 실행 -> (단점) CPU 사용률이 좋지 않다.
2) 멀티프로그래밍 (multiprogramming)
-> (해결방법) 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키자. I/O 작업이 발생하면 다른 프로세스가 CPU에서 실행됨
: CPU 사용률을 극대화 시키는데 목적
-> (단점) CPU 사용 시간이 길어지면 다른 프로세스는 계속 대기
3) 멀티태스킹 (multitasking)
-> (해결방법) 프로세스는 한번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자!
: 프로세스의 응답 시간을 최소화 시키는데 목적
-> (아쉬움) 하나의 프로세스가 동시에 여러 작업을 수행하지는 못함
-> (아쉬움) 프로세스의 컨텍스트 스위칭은 무거운 작업
-> (아쉬움) 프로세스끼리 데이터 공유가 까다로움
-> (아쉬움) 듀얼 코어가 등장했는데 잘 쓰고 싶음
✔️ 스레드 (thread)
- 프로세스는 한 개 이상의 스레드를 가질 수 있다.
- CPU에서 실행되는 단위 (unit of execution)
- 같은 프로세스의 스레드들끼리 컨텍스트 스위칭은 가볍다.
- 자신들이 속한 프로세스의 메모리 영역을 공유
- 프로세스의 text, data, heap 영역을 공유
- 각 스레드는 별도의 stack 영역을 가진다.
4) 멀티스레딩
: 하나의 프로세스가 동시에 여러 작업을 실행하는데 목적
5) 확장된 멀티태스킹
: 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것
: CPU 사용 시간을 아주 짧게 쪼개서 time slice 단위로 여러 스레드들이 번갈아 CPU에서 실행될 수 있도록 하는 방식
(이때 스레드들은 같은 프로세스 소속일 수도 있고 다른 프로세스 소속일 수도 있다.)
6) 멀티프로세싱 (multiprocessing)
: 두 개 이상의 프로세서나 코어를 활용하는 시스템
✔️ Point 1 : 프로세스와 스레드
프로세스: 컴퓨터에서 실행 중인 프로그램(program)
스레드: 프로세스가 CPU 코어에서 실제로 실행(execution) 혹은 스케줄링(scheduling)되기 위한 기본 단위
💡실제로 CPU 코어에서 실행되는 것은 언제나 스레드다.
그렇기 때문에 하나의 프로세스가 CPU 코어에서 실행되기 위해서는 최소한 한 개의 스레드를 반드시 가져야 한다.
1. 프로세스 (Process)
[ 프로세스의 상태 (Process State) ]
1. Running
- CPU를 잡고 instruction을 수행 중인 상태
2. Ready
- (메모리 등 다른 조건을 모두 만족하고) CPU를 기다리는 상태
3. Blocked (wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event (예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- ex. 디스크에서 file을 읽어와야 하는 경우
4. Suspended (stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 된다.
- ex. 사용자가 프로그램을 일시 정지시킨 경우 (break key), 메모리에 너무 많은 프로세스가 올라와 있을 때
[ Process Control Block (PCB) ]
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거된다.
⚙️ 구성 요소
1) OS가 관리상 사용하는 정보
2) CPU 수행 관련 하드웨어 값
3) 메모리 관련 (code, data, stack의 위치 정보 등)
4) 파일 관련
2. 컨텍스트 스위칭 (Context Switching)
CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것
0. 개요에서 설명한 멀티태스킹이 가능하려면 여러 프로세스나 스레드가 번갈아 가면서 CPU에서 실행될 수 있어야 한다.
컨텍스트 스위칭은 어떤 것이고 우리 프로그램 성능에 어떤 영향을 끼칠까.
- CPU를 내어주는 프로세스의 상태를 그 프로세스 제어 블록(PCB)에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
[ 컨텍스트 ]
- CPU의 수행 상태를 나타내는 하드웨어 문맥, 프로세스의 주소 공간, 프로세스 관련 커널 자료 구조
- 프로세스/스레드의 상태, CPU, 메모리 등등
[ 왜 컨텍스트 스위칭이 필요할까 ]
여러 프로세스/스레드를 동시에 실행시키기 위해서
[ 프로세스 컨텍스트 스위칭 (Process Context Switching) / 스레드 컨텍스트 스위칭 (Thread Context Switching) ]
1) 공통점
- 커널 모드에서 실행
- CPU의 레지스터 상태를 교체
2) 차이점
- 프로세스 컨텍스트 스위칭
- 서로 다른 프로세스에 속한 스레드 간의 컨텍스트 스위칭 발생
- 가상(virtual) 메모리 주소 관련 처리를 추가로 수행 / MMU, TLB 다시 세팅해야 함
- 스레드 컨텍스트 스위칭
- 같은 프로세스에 속한 스레드 간의 컨텍스트 스위칭 발생
✔️ Point2 : 스레드 컨텍스트 스위칭이 더 빠른 이유
메모리 주소 관련 처리를 하지 않기 때문이다.
- 현재 실행 중인 프로세스 혹은 스레드의 context 백업 (가령, CPU 레지스터 값들, 어디까지 실행됐는지 등)
- CPU 캐시를 비움(flush) (CPU 마다 L1, L2 cache에 대한 동작이 다를 수 있음, 심지어 안 비울 수도 있음)
- TLB(table lookaside buffer)를 비움
- MMU(memory management unit) 설정을 변경
( MMU: 가상 메모리 주소에서 물리적인 메모리 주소로 변환하는 역할)
프로세스 컨텍스트 스위칭은 위 4가지 모두 수행하지만, 스레드 컨텍스트 스위칭은 첫번 째만 수행하면 된다.
💁♀️ 서로 다른 프로세스 : 서로 다른 메모리 주소 공간(memory address space)
💁♂️ 같은 프로세스 내 스레드 : 소속된 프로세스의 메모리 주소 공간 공유
그래서 프로세스가 바뀔 때 새로 실행되는 프로세스가 기존에 실행되는 프로세스의 메모리 주소 공간에 침범하면 안 되기 때문에 추가적인 작업이 필요하다.
그래서 프로세스 컨텍스트 스위칭 작업이 더 오래 걸린다.
[ 스케줄러 (Scheduler) ]
1. Long-term scheduler (장기 스케줄러, job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 프로세스에 memory을 주는 문제
- degree of Multiprogramming을 제어
- time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)
2. Short-term scheduler (단기 스케줄러, CPU scheduler)
- 어떤 프로세스를 다음번에 running 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야 함 (millisecond 단위)
3. Medium-term scheduler (중기 스케줄러, Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어
📢 같이 공부하면 좋을 면접 질문
- 프로세스와 스레드의 차이
- 싱글 프로세싱이 있고 멀티 프로세싱이 있을 때 항상 멀티 프로세싱이 언제나 효율적일까
- 멀티스레드 프로그래밍에 대해 설명해보세요.
- Context Switching에 대하여 설명해보세요.
- 멀티 스레드와 멀티 프로세스의 차이
📌 Reference
'Computer Science > OS' 카테고리의 다른 글
[OS] 동기화(Synchronization) | 스핀락, 뮤텍스, 세마포어 (6) | 2023.02.02 |
---|---|
[OS] 교착상태 (Deadlock) (2) | 2023.01.21 |
댓글