티스토리 뷰
교착상태란 무엇일까?
교착상태(Deadlock)란 자원이 한정적인 상황에서 두 개 이상의 프로세스가 각자의 자원을 가진 채 상대방의 자원을 필요로 하는 경우, 아무 일도 못하고 기다리는 상태를 의미한다. 외부의 조치가 없는 한 프로세스들은 영원히 그 상태를 유지하며 서로의 자원을 사용할 수 있을 때까지 기다리게 된다. OS? Oh Yes(김주균 지음) 교재에서는 강아지의 집을 만들기 위해 형은 톱을 갖고 있고, 동생은 망치를 들고 있는 채로 서로의 도구를 필요로 할 때를 가정하고 있다.
교착상태의 원인
시스템의 한정적인 자원 < 프로세스들의 요청 |
위에서 교착상태의 예시로 든 형과 동생의 상황을 가장 쉽게 해결하고 싶다면 톱과 망치를 두 개씩 준비해놓으면 된다. 하지만 과연 이 방법이 최선일까? 경제적인 관점에서 효과적인가?
교착상태의 문제점
1. 해당 프로세스들이 더 이상 실행되지 않고 사용자에게 응답을 주지 못한다.
2. 프로세스들이 갖고 있는 자원들은 교착 상태를 빠져나가기 전까지 전혀 활용되지 못한다.
프로세스가 가질 수 있는 자원은 무엇이 있을까?
자원은 다음의 기준으로 분류할 수 있다.
1. 하드웨어 / 소프트웨어의 관점
1) 하드웨어 자원
- 눈으로 보고 만질 수 있는 모든 자원들이 속한다.
ex) 하드디스크, 테이프 드라이브, 메모리 등
2) 소프트웨어 자원
ex) 데이터, 메시지 등
2. 선점 가능성의 관점
1) 선점 가능(Preemptible) 자원
- 프로세스가 사용하는 도중에 선점되어 다른 프로세스에게 할당했다가, 이후에 다시 원래 프로세스에게 돌려주는 자원
ex) CPU, 메모리 등
2) 선점 불가능(Nonpreemtible) 자원
- 프로세스가 사용하는 중간에 선점되면 기존에 사용하던 프로세스는 정상적인 진행을 포기해야하는 경우의 자원
ex) 프린터, 테이프 드라이브 등
3. 자원 사용 방식의 관점
1) 공유 가능(Sharable) 자원
- 동시에 여러 프로세스에게 할당해 같이 사용할 수 있는 자원
ex) 공유 가능한 프로그램, 공유 데이터 등
2) 배타적 사용(Exclusive Use) 자원
- 한 프로세스에게만 할당해 독점적으로 사용해야 하는 자원
ex) CPU, 메모리, 버퍼, 키보드와 모니터 등
4. 자원 속성에 따른 관점
1) 순차적 재사용 가능 (Serially Reusable) 자원
- 아무리 사용해도 없어지지 않고 영구히 존재하는 자원
- 한 프로세스가 사용하고 반납한 자원을 또 다른 프로세스에게 할당할 수 있는 경우
ex) CPU, 메모리, 테이프, 하드디스크, 버퍼, 프로그램 등
2) 소모성(Consumable) 자원
- 일시적으로 생성되었다가 사용된 후 없어지는 자원
ex) 시그널(Signal), 메시지 등
여기서 우리가 교착 상태로 다룰 수 있는 자원의 종류는 1. 배타적 사용, 2. 순차적 재사용 가능한 자원이다.
프로세스가 할 수 있는 행동들은 . . .
실행 중인 프로세스가 자원을 위해 취할 수 있는 행동은 두 가지가 있다.
1. 필요한 자원을 요청(Request)한다.
- 요청된 자원이 사용 가능하다면 -> 자원을 할당받아 사용한다.
- 자원이 이미 사용 중이라면 -> 반납될 때까지 대기 상태로 기다린다.
2. 사용이 끝난 자원을 반납한다.
자원의 요청과 반납은 프로세스가 서비스를 호출하면, 운영체제에 의해 이루어진다.
'OS' 카테고리의 다른 글
[OS] 주기억장치 vs 보조기억장치, 메모리에 관하여 (0) | 2022.04.10 |
---|---|
[OS] 교착 상태 : 교착 상태 해결 방법! (0) | 2022.04.07 |
[OS] 교착상태 : 교착상태의 원인 (0) | 2022.04.05 |
[OS] CPU 스케줄링 : 다중 큐 스케줄링, PR 스케줄링 (0) | 2022.03.27 |
[OS] 프로세스 생성과 종료, 쓰레드(Thread) (0) | 2022.03.20 |
- Total
- Today
- Yesterday
- linux파일
- awk프로그램
- 코테
- linuxgedit
- OnActivityForResult
- 백준27211
- api문서
- E_FAIL
- 사용자ID
- 리눅스
- 쇼미더코드
- GitHubAPIforJava
- Baekjoon27211
- linuxawk
- atq
- 백준27219
- 버추억박스에러
- cat
- cron시스템
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 버추억박스오류
- baekjoon
- whatis
- 리눅스cron
- linuxtouch
- 백준
- Baekjoon27219
- GithubAPI
- Linux
- virtualbox
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |