참고자료
프로세스
- 독립된 실행 단위 -> 최소 1개의 스레드 가짐
- 독립된 메모리 공간 -> 코드 데이터 스택 힙
- 자원 소유 및 관리 -> 서로 다른 프로세스의 자원에 접근 x, 하고싶으면 IPC 사용
멀티프로세스
장점
- 안정성 높음
- 프로세스 간 영향 없음
단점
- 자원 소모가 큼
- 컨텍스트 스위칭 비용 높음 -> 캐시 메모리 초기화 등 무거운 작업 발생
스레드
- 프로세스 내 실행 단위
- 프로세스가 할당받은 자원 공유
- 독립된 스택만 할당 -> 그림에서 처럼 스택만 각각 할당 받고 나머지는 공유중
멀티스레드
장점
- 자원 공유로 효율적 -> 프로세스 생성 X, 시스템 콜 감소
- 컨텍스트 스위칭 비용, 통신 속도 낮음
단점
- 동기화 이슈 -> 데드락
- 하나의 스레드 문제가 전체에 영향
데드락(Deadlock)
두 개 이상의 프로세스가 서로의 자원을 기다리며 무한 대기하는 상태
발생 조건
- 상호배제: 자원은 한 번에 하나의 프로세스만 사용 -> 하나의 프로세스가 자원을 독점 사용중
- 점유와 대기: 자원을 보유한 상태에서 다른 자원 대기
- 비선점: os는 자원을 강제로 빼앗을 수 없음
- 순환대기: 프로세스간 순환형태의 자원 대기
예방 방법
- 상호배제 -> 자원의 공유
- 점유와 대기 ->
- 프로세스 시작 시 필요한 자원을한 번에 할당 받기
- 자원이 필요한 경우 보유한 자원 모두 놓고 재요청
- 비선점: 자원을 강제로 빼앗을 수 없음 -> cpu, memory는 일시적으로 빼앗을 수 있음
- 순환대기: 프로세스간 순환형태의 자원 대기 -> 프로세스의 priority를 기준으로 낮은 쪽이 자원 우선 놓기
==> Starvation 발생 가능
대응 알고리즘
Deadlock Avoidance
데드락 발생할 것 같으면 아예 자원을 할당하지 않는 방식
프로세스들이 필요로 하는 각 자원별 최대 사용량을 미리 선언하는 것
- 자원 할당 그래프 알고리즘
- 각 자원 유형이 하나의 인스턴스만 가지고 있는 경우
- 프로세스가 자원을 요청하는 것은 점선, 프로세스에 자원 할당하는 것은 실선으로 나타낸 그래프에서 사이클이 존재하지 않을 때 자원 할당
- 은행원 알고리즘
- 인스턴스가 여럿 존재할 때는 위의 방식 사용 x
- 요청 자원을 모두 할당받았을 땐 일정 시간안에 모두 반납한다는 전제하에 저용
- 요청 자원수가 남은 자원의 수보다 적은 프로세스만 선택하여 할당
Deadlock Detection & Recovery
- 자원 선점시에 어떤 프로세스를 종료할 지 정해서 데드락 발생 이전 상태로 롤백
- 프로세스 재시작
- 롤백 회수를 지정함으로써 계속해서 동일한 프로세스가 종료되어 starvation 발생하는 것을 막음
Deadlock Ignorance
- 데드락은 어차피 드물게 일어나니 대처하면서 더 큰 오버헤드가 발생하는 경우를 제거
- unix, window 대부분이 채택
'CS > 운영체제' 카테고리의 다른 글
[Linux] 시스템 모니터링 (0) | 2022.05.13 |
---|---|
[Linux]환경변수&bash 스크립트 (0) | 2022.05.13 |
[Linux]nohup (0) | 2022.05.13 |
[Linux]입출력, 표준 스트림 (0) | 2022.02.11 |
[Linux]패키지&프로세스 (0) | 2022.02.10 |