프로세스
- 프로세스는 실행 중인 프로그램이다. 디스크에서 메모리로 적재되어, CPU 자원의 할당을 받을 수 있는 것을 말한다.
- 메모리 영역(스택, 힙, 데이터, 코드 영역)을 다른 프로세스와 공유하지 않는다.
- 최소 1개의 스레드를 갖고 있다.
스레드
- 프로세스의 작업 실행 단위이다.
- 프로세스 내에서 스택만 따로 할당 받고 그 외 메모리 영역(힙, 데이터, 코드)을 공유하기 때문에 다른 스레드의 실행 결과를 즉시 확인할 수 있다.
- 스레드 구성: 스레드 ID / PC / 레지스터 집합 / 스택
멀티 스레드
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 멀티 스레드라고 합니다. 하나의 프로세스 내에서 메모리 공간을 공유하기 때문에 메모리 공간과 시스템 자원 소모가 줄어들게 됩니다. 스레드의 context switching은 프로세스의 context switching과는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠릅니다.
단점으로는 힙 영역을 공유하기 때문에 동시성 이슈가 발생할 수 있어 동기화를 해주어야 합니다. 또한 하나의 스레드가 오류가 발생하면 같은 메모리를 공유하고 있어 다른 스레드에도 영향을 미칠 수 있습니다.
동시성: 멀티 작업을 위해 싱글 코어에서 여러 개의 스레드가 번갈아 실행하는 것을 말한다.
병렬성: 멀티 작업을 위해 멀티 코어에서 한 개 이상의 스레드를 포함하는 각 코어들을 동시에 실행하는 것을 말한다.
장점
- 메모리 공간과 시스템 자원 소모가 줄어들게 된다.
- 스레드 간의 통신할 때 전역 변수의 공간 또는 동적으로 할당된 공간인 heap 영역을 이용하여 데이터를 주고받아 프로세스 간 통신 방법에 비해 스레드 간의 통신 방법이 훨씬 간단하다.
- 스레드의 context switch 는 프로세스 context switch 와는 달리 캐시 메모리를 비울 필요가 없기 때문에 더 빠르다.
- 시스템의 처리량이 늘고 자원 소모가 줄어들며 자연스럽게 프로그램의 응답 시간이 단축된다.
단점
- 힙 영역을 공유하기 때문에, 해당 자원을 사용할 때 동기화를 해주어야 함.
- 동기화를 위해 과도한 Lock 사용시 병목 현상때문에 성능이 저하될 수 있음
멀티 프로세스 vs 멀티 스레드
- 멀티 스레드는 메모리 영역을 공유하기 때문에 메모리와 자원의 이점을 얻는 대신 하나의 스레드가 오류를 일으켜 종료되면 다른 스레드도 종료될 수 있다. 또한 heap 영역을 공유하기 때문에, 해당 자원을 사용할 때 동기화 해주어야 한다.
- 멀티 프로세스는 자원을 공유하지 않기 때문에 멀티 스레드보다 CPU 자원을 더 많이 소모한다.
Context Switching(문맥 교환)
멀티 프로세스 환경에서 CPU 스케줄러가 인터럽트 발생 시 현재 프로세스의 상태를 PCB에 저장하고, 새로운 프로세스의 상태를 레지스터에 저장하는 것을 말합니다.
스레드의 context switching은 프로세스의 context switching과 달리 프로세스의 자원들을 공유하고 캐시 메모리를 비울 필요가 없기 때문에 속도면에서 빠르고 CPU의 부담도 덜 가게 됩니다.
교착상태(DeadLock)
둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 상황이다.
- 데드락 발생 조건
- 상호 배제: 한 번에 한 프로세스만 공유 자원에 접근 가능해야 합니다.
- 점유 대기: 자원을 점유하고 있는 상태로 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스
- 순환 대기: 대기 프로세스들이 순환 형태로 자원을 대기하고 있어야 합니다.
- 비선점: 프로세스에서 자원을 할당 받은 후 프로세스가 완료될 때 까지 System에서 프로세스의 제어 빼앗지 못함
- 선점형 스케줄링은 하나의 프로세스가 다른 프로세스 대신에 CPU를 차지할 수 있는 것
- 비선점형 스케줄링은 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없는 것
- 데드락 발생 조건 중 하나만 발생하지 않게 해도 교착상태를 예방할 수 있다. 하지만 이런 예방법은 1차원 적인 해결법으로 비효율적이다. 교착상태가 발생하지 않도록 교착상태 회피 방식이 있다. 이는 자원을 할당할 때 데드락이 발생하지 않도록 할당하는 방식이다. 이를 위한 대표적인 알고리즘으로 은행원 알고리즘이 있다.
또 다른 방식으로는 교착상태 탐지 및 회복 방식이 있다.
콘보이 현상
작업 시간이 긴 프로세스가 먼저 큐에 도착해서 다른 프로세스의 실행 시간이 전부 늦춰져 효율성을 떨어트리는 현상
PCB (Process Control Block)
운영체제가 프로세스를 관리하기 위해 정보를 저장해 놓은 곳입니다.(주기억장치에 저장)
PCB에는 PID, 프로세스 상태, PC, 진행하던 작업, CPU 스케줄링 정보 등이 있습니다.
PC (Program Counter)
다음에 실행될 명령어의 주소가 들어있는 레지스터
캐시 메모리
CPU의 레지스터와 메모리 사이에서, 캐싱을 통해 병목 현상을 완화하는 것
동기화
스레드 동기화는 멀티스레드 환경에서 다수의 작업이 실행해서 공유데이터에 동시에 접근할 경우 문제가 발생하는데 이런 접근을 막는 것을 말한다.
Race Condition
경쟁 상태란 동시에 여러 개의 프로세스 혹은 스레드가 동일한 자료를 접근할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태
Critical Section (임계 영역)
프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한 번에 하나의 프로세스 접근을 보장하는 영역입니다. 임계 구역은 세 가지 요구조건을 충족해야 합니다.
- 상호 배제: 하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 합니다.
- 진행: 임계 영역에 들어간 프로세스가 없는 상태에서 들어가려하는 프로세스가 여러 개라면 어느것이 들어갈지 결정해주어야 한다.
- 한정 대기: 다른 프로세스의 기아를 방지하기 위해, 한 번 임계 구역에 들어간 프로세스는 다음 번 임계 영역에 들어갈 때 제한을 두어야 한다.
기아 상태
우선순위가 낮은 프로세스가 자원을 계속 할당받지 못하는 상태입니다. Priority Scheduling에서 찾아볼 수 있으면 해결 방법으로 대기한 만큼 우선순위를 높여주는 방법(Aging)이 있습니다.
Mutex와 Semaphore의 차이
Mutex와 Semaphore는 임계 구역을 보호하고 경쟁 상태를 방지하고 해결하기 위한 방법입니다.
- Mutex
- 임계 구역에 들어가기 전에 Lock을 획득하여 공유자원에 접근하고 임계 구역을 빠져 나올 때 Lock을 반환하여 다음 프로세스/스레드가 임계 구역에 들어올 수 있게 해주는 것입니다.
- 장점 : Lock을 기다리는 동안 문맥 교환이 발생되지 않기 때문에 CPU 성능을 올릴 수 있습니다.
- 단점 : 한 프로세스가 자원을 사용 중이라면, Lock을 획득할 때까지 대기하게 됩니다.(바쁜 대기)
- Semaphore
- 세마포어는 세마포어 변수(공유자원에 접근할 수 있는 스레드의 수를 나타내는 값)를 두어 상호 배제를 하는 기법입니다.
- 바이너리 세마포어는 세마포어 변수가 1이며 Mutex 처럼 사용될 수 있습니다.
카운팅 세마포어는 세파모어 변수가 2이상인 경우입니다.
- Mutex와 Semaphore 차이점
- 둘의 차이점은 동기화 대상의 갯수입니다. 뮤텍스는 동기화 대상이 하나 뿐이고, 세마포어는 동기화 대상이 하나 이상일 수 있습니다. 또한 뮤텍스틑 Locking 메커니즘으로 Lock을 걸은 스레드만이 Lock을 해제할 수 있지만 Semaphore는 Signaling 메커니즘으로 Lock을 걸지 않은 스레드도 signal을 사용해 Lock을 해제할 수 있습니다.
동기 & 비동기
- 동기
- 순차적, 직렬적으로 task를 수행한다.
- 서버에 데이터를 요청하고 데이터가 반환되기 전까지 다른 task들은 블로킹(blocking) 된다.
- 때문에 메소드를 실행시킴과 동시에 반환이 이루어진다.
- 비동기
- 병렬적으로 task를 수행한다.
- 서버에 데이터를 요청한 이후 서버로부터 데이터가 반환될 때까지 대기하지 않고(non-blocking) 이벤트 큐에 넣거나 백그라운드 스레드에게 해당 task를 위임한다.
- 때문에 메소드를 실행시켜도 바로 반환이 이루어지지 않을 수 있다.
가상 메모리
프로세스가 실제 메모리의 크기와 상관없이 메모리를 이용할 수 있도록 지원하는 기술입니다.
가상 메모리는 실제 메모리(RAM)와 보조 기억 장치의 Swap 영역으로 구성됩니다. OS는 메모리 관리자를 통해 메모리를 관리하며 프로세스는 사용하는 메모리가 실제 메모리인지, Swap 영역인지 모릅니다.
Swap 영역은 실제 메모리가 아니기 때문에 지연시간이 많이 발생하기 때문에 가급적 사용하지 않도록 설계하는 것이 좋습니다.
'CS > 면접 준비' 카테고리의 다른 글
백엔드 면접 질문 (0) | 2023.02.05 |
---|---|
웹과 네트워크 면접 질문 (0) | 2022.12.23 |
Database 면접 질문 (0) | 2022.12.22 |
Spring & Spring Boot 면접 질문 (0) | 2022.12.22 |
객체지향 프로그래밍 & Java 면접 질문 (0) | 2022.12.22 |