본문 바로가기

운영체제 정리

쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 1, PART 2]

다음 글 : 2021/01/14 - [운영체제 정리] - 쉽게 배우는 운영체제 챕터별 연습문제 및 심화문제 정리 [PART 3, PART 4]

Chapter 1

[연습문제]

 

1. 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어는 무엇인가?

- 운영체제

 

2. 가전제품과 같이 CPU의 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만든 운영체제를 무엇이라고 하는가?

- 임베디드 시스템 / 임베디드 운영체제

 

3. 사용자가 원하는 기능을 수행하기 위해 컴퓨터 자원을 사용하는 소프트웨어는 무엇인가?

- 응용 프로그램

 

4. 운영체제가 없는 컴퓨터에서는 어떤 문제가 발생하는지 설명하시오

- 새로운 기능을 구현하려면 매번 회로를 변경해야 하고 복잡한 기능은 구현하기 어렵다.

 

5. 기계와 사용자 사이에 명령을 전달하고 처리한 결과를 알려주는 것을 무엇이라고 하는가?

- 운영체제 인터페이스

 

6. 프로그램과 데이터를 한 번에 입력한 후 작업의 최종 결과만 얻는 운영체제 방식을 무엇이라고 하는가?

- 일괄 작업 시스템 (batch processing system)

 

7. 프로그램이 진행되는 도중에 사용자로부터 데이터를 입력받아 프로그램 진행에 반영할 수 있는 운영체제 방식을 무엇이라고 하는가?

- 대화형 시스템 (interactive system)

 

8. CPU 사용 시간을 쪼개어 여러 개의 프로그램이 동시에 실행되는 것처럼 보이는 운영체제 방식을 무엇이라고 하는가

- 시분할 시스템 (time sharing system)

 

9. 멀티프로그래밍 수준은 동시에 실행되는 작업의 개수를 나타낸다. 멀티프로그래밍 수준이 1인 시스템을 무엇이라고 하는가?

- 일괄 작업 시스템

 

10. 멀티프로그래밍 수준이 2보다 크거나 같은 시스템을 두 개 이상 쓰시오

- 시분할 시스템, 분산 시스템, 클라이언트 / 서버 시스템, 

 

11. 특정 작업이 일정 시간 안에 처리되도록 보장하는 시스템을 무엇이라고 하는가?

- 실시간 시스템 (real time system)

 

12. 작고 싼 컴퓨터를 네트워크로 묶어 대형 컴퓨터와 같은 일을 할 수 있도록 만든 시스템을 무엇이라고 하는가?

- 분산 시스템 (distributed system)

 

13. 서버 없이 말단 노드끼리 데이터를 주고받는 시스템을 무엇이라고 하는가?

- P2P 시스템 (peer to peer system)

 

14. 커널이 자신의 자원을 보호하기 위해 만든 함수의 집합을 무엇이라고 하는가?

- 시스템 호출 (System call)

 

15. 커널과 하드웨어 사이의 인터페이스를 무엇이라고 하는가?

- 드라이버

 

16. 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있는 커널 구조를 무엇이라고 하는가?

- 단일형 구조 커널 (monolithic architecture)

- 모듈이 분리되어 있지 않아서 효율적인 운영이 가능함.

- 버그나 오류를 처리하기 어려움.

- 기능상의 작은 결함이 시스템 전체로 확산될 수 있음

- 이식성이 낮음

 

17. 커널의 기능을 최소화하여 여러 컴퓨터에 이식하기 쉽게 만든 커널 구조를 무엇이라고 하는가?

- 마이크로 구조 커널 (micro architecture)

 

18. 서로 다른 운영체제에서 하나의 응용 프로그램으로도 작동할 수 있도록 만든 시스템을 무엇이라고 하는가?

- 가상 머신 (virtual machine)

 

 

[심화문제]

 

1. 운영체제의 역할을 설명하시오

  1. 자원 관리: 키보드, 네트워크카드, 사운드 카드 등의 컴퓨터 자원을 응용 프로그램에 나누어 주어, 사용자가 원활하게 작업할 수 있도록 돕는다.
  2. 자원 보호: 비정상적인 작업으로부터 컴퓨터 자원을 지킨다.
  3. 하드웨어 인터페이스 제공: 다양한 장치를 사용할 수 있도록 해주는 하드웨어 인터페이스를 제공한다. 드라이버는 하드웨어 장치와 상호작용하기 위해 만들어진 컴퓨터 프로그램이다. 
  4. 사용자 인터페이스 제공: 사용자가 운영체제를 편리하게 사용하도록 지원하기 위한 것. (ex ) GUI, 모바일 인터페이스 등)

 

2. 운영체제의 목표를 설명하시오

  1. 효율성: 운영체제의 목표는 자원을 효율적으로 관리하는 것. 역할 중 자원 관리와 연관된다. 일반적으로 운영체제의 크기를 최소화하고 운영체제가 사용하는 코드를 최적화해야 한다.
  2. 안정성: 자원 보호와 연관된다. 운영체제가 안정적이려면 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제를 처리할 수 있어야 하며, 시스템에 문제가 발생했을 때 이전으로 복구하는 결함 포용 기능을 수행해야 한다.
  3. 확장성: 다양한 시스템 자원을 추가하거나 제거하기가 편리해야 한다. 하드웨어 인터페이스 제공과 연관된다. 사용자의 편리성뿐만 아니라 하드웨어 제작자의 편리성도 고려해야 한다.
  4. 편리성: 사용자 인터페이스 제공과 연관된다. 응용 프로그램과 사용자에게 다양한 편리성을 제공하면서도 자원의 낭비 요소를 막아야 한다.

 

3. CPU 집중 작업과 입출력 집중 작업에 대해 설명하시오

- 일괄 작업 시스템에서는 프로그램이 실행되는 동안에 입출력이 불가능하기 때문에 대부분의 작업이 CPU만 사용하는 계산 작업이다. 이를 CPU 집중 작업(CPU bound job) 이라고 한다. ex) 고도의 수학 계산

-  대화형 시스템에서는 프로그램이 실행되는 동안에 입출력이 가능하기 때문에 입출력 집중 작업 (I/O bound job) 이 생겨났다. ex) 동영상 플레이어와 데이터베이스

 

4. 실시간 시스템에 대해 설명하시오

- 특정 시스템에서 일정 시간 안에 작업이 처리되도록 보장하는 것이다.

  1. 경성 실시간 시스템 (hard real-time system): 지정한 응답 시간을 정확히 지키는 시스템. 원자력 발전소의 원자로 온도 젱, 미사일 요격 등에 사용
  2. 연성 실시간 시스템 (soft real-time system): 지정한 응답 시간을 최대한 지키지만 융통성이 어느 정도 허용됨. 동영상 재생기를 예로 들 수 있다.

 

5. 클라우드 컴퓨팅에 대해 설명하시오

- 그리드 컴퓨팅과 SaaS를 합쳐놓은 형태. 시스템이 구름이 가려진 것처럼 사용자에게 보이지 않는 환경이라서 클라우드라는 명칭이 붙음.

- 언제 어디서나 응용 프로그램과 데이터를 자유롭게 사용할 수 있는 컴퓨팅 환경.

 

6. API와 SDK를 비교하여 설명하시오

  1. API (Application Programming Interface): 응용 프로그램이 자신과 연관된 프로그램을 만들 수 있도록 제공하는 인터페이스. 시스템 호출보다 광범위한 개념이며, 운영체제의 API를 시스템 호출이라고 정의할 수 있음.
  2. SDK (System Developers`s Kit): 프로그램 개발자를 위해 API 및 사용 매뉴얼 뿐만 아니라 코드 편집기와 에뮬레이터 등 각종 개발용 응용 프로그램까지 하나로 묶어서 배포하는 개발 툴. ex) Android Studio.

 

7. 단일형 구조 커널의 특징을 설명하시오

- 모듈이 분리되어 있지 않아서 효율적인 운영이 가능함.

- 버그나 오류를 처리하기 어려움.

- 기능상의 작은 결함이 시스템 전체로 확산될 수 있음

- 이식성이 낮음

 

8. 마이크로 구조 커널의 특징을 설명하시오

- 가장 기본적인 기능만 제공 (프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등)

- 각 모듈이 독립적으로 작동하기 때문에 하나의 모듈이 실패하더라도 전체 운영체제가 멈추지 않음.

- 커널이 가벼워 CPU 용량이 작은 시스템에도 적용이 가능함.

 

 

Chapter 2

[연습문제]

 

1. CPU의 구성에 대해 설명하시오

- 산술논리 연산장치, 제어장치, 레지스터로 구성된다.

 

2. 폰노이만 구조의 가장 중요한 특징을 설명하시오

- 모든 프로그램은 메모리에 올라와야 실행이 가능하다.

 

3. 버스의 종류를 나열하시오

- 제어 버스, 주소 버스, 데이터 버스

 

4. 단방향 버스에 대해 설명하시오

- 주소 버스가 단방향 버스이다. CPU에서 메모리나 주변장치로 나가는 주소 정보는 있지만 주소 버스를 통해 CPU로 전달되는 정보는 없다.

 

5. 다음에 실행할 명령어의 주소를 가지고 있는 레지스터는 무엇인가?

- 프로그램 카운터 (PC). 

 

6. 다음에 실행할 명령어를 보관하는 레지스터는 무엇인가?

- 프로그램 카운터 (PC).

 

7. 메모리 주소를 보관하는 레지스터는 무엇인가?

- 주소 레지스터 (address register)

 

8. 메모리에 저장할 데이터나 메모리에서 가져온 데이터를 임시로 보관하는 레지스터는 무엇인가?

- 메모리 버퍼 레지스터 (Memory Buffer Register)

 

9. 주소 버스와 연결되어 있는 레지스터는 무엇인가?

- 메모리 주소 레지스터 (Memory Address Register)

 

10. 데이터 버스와 연결되어 있는 레지스터는 무엇인가?

- 메모리 버퍼 레지스터 (Memory Buffer Register)

 

11. 프로그램을 보호하기 위해 사용하는 두 가지 레지스터는 무엇인가?

- 경계 레지스터 (bound register): 현재 진행 중인 작업의 메모리 시작 주소를 저장하는 곳.

- 한계 레지스터 (limit register): 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 마지막 주소까지의 차이를 저장하는 곳.

- 사용자의 작업이 진행되는 동안 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검한다.

 

12. 속도 차이가 나는 두 장치 사이에서 속도를 완화하는 장치를 무엇이라고 통칭하는가?

- 버퍼 (Buffer): 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 장치가 버퍼이다.

 

13. 응용 프로그램과 프린터 사이에서 속도 차이를 완화하는 소프트웨어를 무엇이라고 하는가?

- 스풀 (SPOOL): CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼.

 

14. 부팅 시 운영체제를 메모리로 가져오기 위해 사용하는 작은 프로그램은 무엇인가?

- 부트스트랩.

 

15. 속도가 빠르고 값이 비싼 저장장치를 CPU 가까운 쪽에 두고, 값이 싸고 용량이 큰 저장장치를 반대쪽에 배열하는 방식을 무엇이라고 하는가?

- 저장장치의 계층 구조

 

16. 작업의 효율성을 높이기 위해 CPU가 입출력 관리자에게 입출력 작업을 요청하면 작업을 마친 입출력 관리자는 CPU에 무엇을 보내는가?

- 인터럽트. 입출력 관리자가 CPU에 보내는 완료 신호. 

 

17. CPU의 도움 없이도 메모리를 사용할 수 있도록 입출력 관리자에게 주는 권한을 무엇이라고 하는가?

- 직접 메모리 접근 (DMA: Direct Memory Access)

 

18. CPU와 입출력 관리자가 서로 다른 메모리 영역을 사용하는 기법을 무엇이라고 하는가?

- 메모리 매핑 입출력 (Memory Mapped I/O. MMIO)

 

19. CPU가 병렬 처리를 지원하지 않을 때 소프트웨어적으로 병렬 처리를 하는 기법을 무엇이라고 하는가?

- VLIW 기법 (Very Long Instruction Word): 동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행. 하드웨어 병렬 처리와 다르게, 컴파일 시 병렬 처리가 이루어진다.

 

 

[심화문제]

 

1. 컴퓨터에서 클록이 하는 역할을 설명하시오

- CPU가 작업할 때 일정한 박자가 있는데, 이 박자를 만들어 내는것이 클록이다. 일정 간격으로 Tick을 만들면 거기에 맞추어 CPU안의 모든 구성 부품이 작업을 한다. 메인보드의 클록이 틱을 보낼 때마다 데이터를 보내거나 받는다.

 

2. 프로그램 카운터 레지스터의 역할을 설명하시오

- 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려준다. 

 

3. 제어 버스, 주소 버스, 데이터 버스에 대해 설명하시오

  1. 제어 버스: 다음에 어떤 작업을 할 지 지시하는 제어 신호가 오고 간다. CPU, 메모리, 주변 장치와 양방향으로 오고 간다.
  2. 주소 버스: 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보가 오고 간다. 메모리 주소 레지스터와 연결되어 있고, 단방향이다.
  3. 데이터 버스: 32bit, 64bit CPU는 한 번에 처리할 수 있는 데이터의 최대 크기이다. 이것을 word라고 하며, 32bit CPU에서 1워드는 32bit이다.

 

4. 휘발성 메모리와 비휘발성 메모리를 비교하여 설명하시오

- 휘발성 메모리: DRAM과 SRAM으로 나뉜다. DRAM은 시간이 지나면 데이터가 사라지기 때문에 일정 시간마다 다시 재생 시켜야 한다. SRAM은 전력이 공급되는 동안에는 데이터를 보관할 수 있다. 일반적으로 메인메모리에는 DRAM을 사용하고, 캐시 같은 고속 메모리에는 SRAM을 사용한다.

 

- 비휘발성 메모리: 플래시 메모리, FRAM, PRAM 등이 있다. 전력이 없어도 데이터를 보관하는 장치로 많이 사용된다. 요즘은 SSD가 많이 사용되는데 이것 또한 비휘발성 메모리이다. 

 

5. DDR SDRAM에 대해 설명하시오

- CPU와 SDRAM의 속도 차이를 완화하기 위해 SDRAM의 대역폭을 늘려 데이터 입출력 속도를 빠르게 한 것이 DDR (Double Data Rate) SDRAM이다. 

 

6. 스풀에 대해 설명하시오

- CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼. 

 

7. 즉시 쓰기 방식의 캐시와 지연 쓰기 방식의 캐시를 비교하여 설명하시오

- 캐시의 변경된 데이터를 메모리에 반영하는 방법이 두가지가 있다.

  1. 즉시 쓰기 방식: 캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식. 성능이 느려진다는 것이 단점. 급작스러운 정전에도 데이터를 잃지 않음.
  2. 지연 쓰기 방식: 변경된 내용을 모아서 주기적으로 반영하는 방식. 카피백.

 

8. 인터럽트 번호를 사용하는 이유를 설명하시오

- 인터럽트 번호는 완료 신호를 보낼 때 장치의 이름 대신 사용하는 장치의 고유 번호. 운영체제마다 다르다. 많은 주변장치 중 어떤 것의 작업이 끝났는지를 CPU에 알려주기 위해서 사용한다.

 

9. 메모리 직접 접근에 대해 설명하시오 (DMA)

- 메모리는 CPU만 접근 권한을 가진 작업 공간이라 입출력 관리자는 접근이 불가능하다. 그래서 입출력 관리자에게는 CPU의 허락없이 메모리에 접근할 수 있는 권한이 필요한데, 이러한 권한을 직접 메모리 접근이라고 한다.

 

10. 메모리 매핑 입출력에 대해 설명하시오

- 직접 메모리 접근을 통해 들어온 데이터를 메모리에 아무렇게나 둔다면 CPU가 사용하는 데이터와 섞여서 관리하기 어려울 것이므로 이를 막기 위해 메모리를 나누어 사용하는 방법이다. 이렇게 메모리의 일정 공간을 입출력에 할당하는 기법을 말한다.

 

Chapter 3

[연습문제]

 

1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가?

- 프로세스 제어 블록 (Process Control Block)

 

2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가?

- 준비 상태 (Ready status)

 

3. 프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태는 무엇인가?

- 대기 상태 (Blocking status)

 

4. CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업을 무엇이라고 하는가?

- 실행 상태 (Running status)

 

5. 유닉스에서 Ctrl + Z 키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가?

- 휴식 상태 (Pause status)

 

6. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가?

- 문맥 교환 (Context Switching): 두 프로세스 제어 블록의 내용이 변경된다. 지금까지의 작업 내용을 저장하고, 실행 상태로 들어오는 프로세스 제어 블록의 내용으로 CPU가 세팅된다. 이렇게 두 프로세스의 프로세스 제어 블록을 교환하는 작업을 말한다.

 

7. 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가?

- fork(): 실행중인 프로세스와 똑같은 프로세스가 하나 더 만들어진다. 프로세스를 복사할 때 기존의 프로세스는 부모 프로세스가 되고 새로 생긴 프로세스는 자식 프로세스가 되며, 두 프로세스는 부모-자식 관계로 연결된다.

 

8. 프로세스의 골격은 그대로 둔 채 코드 영역만 바꾸는 시스템 호출은 무엇인가?

- exec(): 목적은 프로세스의 구조체를 재활용하기 위함. 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있음. 새로운 코드 영역만 가져오면 됨. 

 

9. 부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아 있는 프로세스는 무엇인가?

- 고아 프로세스 or 좀비 프로세스

 

10. 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로서 가벼운 프로세스라고 불리는 것은 무엇인가?

- 스레드 (Thread): CPU 스케줄러가 CPU에 전달하는 일 하나가 스레드이다. CPU가 처리하는 작업의 단위.

 

11. 미아 프로세스를 방지하기 위해 부모 프로세스는 어떤 시스템 호출을 사용하는가?

- wait(): 자식 프로세스가 끝나기를 기다렸다가 자식 프로세스가 종료되면 다음 문장을 실행한다.

 

12. 작업이 끝난 프로세스의 자원을 회수하는 행위를 무엇이라고 하는가?

- 가비지 컬렉션 (garbage collection)

 

13. 모든 프로세스를 부모-자식 관계로 만들어 자원 회수를 용이하게 하는 프로세스의 구조는 무엇인가?

- 프로세스 계층 구조

 

[심화문제]

 

1. 다섯 가지 프로세스 상태도를 그리시오

- 준비 상태 -> 실행 상태 -> 대기 상태

- (대기 상태) -> 보류 대기 상태 -> 보류 준비 상태 -> (준비 상태);

 

2. 프로세스의 상태 중 휴식 상태와 보류 상태에 대해 설명하시오

  1. 휴식 상태 (pause status): 프로세스가 작업을 일시적으로 쉬고 있는 상태. 휴식 상태는 유닉스에서 프로그램을 실행하는 도중에 ctrl + z 누르면 확인 가능함.
  2. 보류 상태 (suspend status): 프로세스가 메모리에서 잠시 쫓겨난 상태로 휴식 상태와 차이가 있다.
    1. 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
    2. 프로그램에 오류가 있어서 실행을 미루어야 할 때
    3. 바이러스와 같이 악의적은 공격을 하는 프로세스라고 판단할 때
    4. 매우 긴 주기로 반복되는 프로세스라서
    5. 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때

- 보류 상태는 스왑 영역에 있는 상태고 휴식 상태는 프로세스가 메모리에 있으나 멈춘 상태이다.

 

3. 프로세스 제어 블록의 구성에 대해 설명하시오

- 프로세스를 실행하는 데 필요한 중요한 정보를 보관하는 자료 구조이다.

- 포인터, 프로세스 상태, 프로세스 구분자, 프로그램 카운터, 프로세스 우선순위, 각종 레지스터 정보, 메모리 관리 정보, 할당된 자원 정보, 계정 정보, PPID와 CPID 등

 

4. 문맥 교환에 대해 설명하시오

- CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업. 이때 두 프로세스 제어 블록의 내용이 변경된다.

 

5. 프로세스를 구성하는 코드 영역, 데이터 영역, 스택 영역에 대해 설명하시오

  1. 코드 영역: 프로그램의 본문이 기술된 곳. 텍스트 영역이라고도 함. 탑재된 코드는 읽기 전용으로 처리 된다.
  2. 데이터 영역: 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳. 읽기와 쓰기가 가능하다. 
  3. 스택 영역: 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳. ex) 프로세스 내에서 함수를 호출하면 함수를 수행하고 원래 프로그램으로 되돌아올 위치를 이 영역에 저장한다. 사용자에게는 보이지 않는다.

 

6. fork() 시스템 호출의 장점을 설명하시오

- 프로세스를 새로 만들지 않고 fork()로 복사하면 다음과 같은 장점이 있다.

  1. 프로세스의 생성 속도가 빠르다.
    1. 하드디스크로부터 프로그램을 새로 가져오지 않고 기존 메모리에서 복사하기 때문에 자식 프로세스의 생성 속도가 빠름.
  2. 추가 작업 없이 자원을 상속할 수 있다.
    1. 부모 프로세스가 사용하던 자원을 자식 프로세스에 모두 상속할 수 있다. 
  3. 시스템 관리를 효율적으로 할 수 있다.
    1. 부모 프로세스 구분자로 연결되어 있기 때문에, 자식 프로세스를 종료하면 자식이 사용하던 자원을 부모 프로세스가 정리할 수 있다. 

 

7. exec() 시스템 호출을 사용하는 이유를 설명하시오

- exec() 호출은 기존의 프로세스를 새로운 프로세스로 전환하는 함수. 목적은 프로세스 구조체를 재활용하기 위함이다.

- 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있다. 새로운 코드 영역만 가져오면 되기 때문에 운영체제의 작업이 수월함.

 

8. 프로세스 계층 구조의 장점을 설명하시오

- 동시에 여러 작업을 처리하고 종료된 프로세스의 자원을 회수하는데 유용하다.

  1. 여러 작업의 동시 처리: fork()와 exec() 메서드를 사용하여 프로세스 계층 구조를 만들어서 새로운 프로세스를 계속 만들기 보다 자원을 더 효율적으로 사용할 수 있다.
  2. 용이한 자원 회수: 프로세스를 계층 구조로 만들면 프로세스 간의 책임 관계가 분명해져서 시스템을 관리하기가 수월하다. 프로세스가 작업을 마쳐서 자원을 회수할 때 특히 편리하다.

9. 멀티스레드, 멀티태스킹, 멀티프로세싱, CPU 멀티스레드를 비교하여 설명하시오

  1. 멀티스레드: 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 작업의 부담을 줄임.
  2. 멀티태스킹: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법. 이런 시스템을 시분할 시스템이라고 한다. 시분할 시스템에서 운영체제가 CPU에 전달하는 작업은 프로세스가 아니라 스레드이다.
  3. 멀티프로세싱: CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경. 하나의 컴퓨터에 여러 개의 CPU 혹은 하나의 CPU 내 여러 개의 코어에 스레드를 배정하여 동시에 작동하는 것.
  4. CPU 멀티스레드: 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법이다. 프로세스의 멀티스레드와 구분하기 위해 이 책에서는 이렇게 부름.

 

Chapter 4

 

[연습문제]

 

1. 시스템 내 전체 프로세스의 수를 조절하는 것으로, 장기 스케줄링 또는 작업 스케줄링이라 불리는 스케줄링 수준은 무엇인가?

- 고수준 스케줄링

 

2. 어떤 프로세스에 CPU를 할당하고 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 스케줄링 수준은 무엇인가?

- 저수준 스케줄링

 

3. 어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링은 무엇인가?

- 선점형 스케줄링 (preemptive scheduling)

 

4. 현재 입출력을 진행하는 프로세스로, 사용자와 상호작용이 가능하여 상호작용 프로세스라고도 불리는 것은 무엇인가?

- 전면 프로세스. 현재 입력과 출력을 사용하는 프로세스이다.

 

5. 준비 큐에 도착한 순서대로 CPU를 할당하는 비선점형 스케줄링 알고리즘은 무엇인가?

- FCFS 알고리즘

 

6. 준비 큐에 있는 프로세스 중 실행 시간이 가장 짧은 작업부터 CPU를 할당하는 비선점형 스케줄링 알고리즘은 무엇인가?

- SJF 스케줄링 (Shortest Job First)

 

7. SJF 스케줄링 알고리즘의 단점으로 크기가 큰 작업이 계속 뒤로 밀리는 현상을 무엇이라 하는가?

- 아사 현상 / 무한 봉쇄 현상. 

 

8. 아사 현상을 해결하는 방법을 설명하시오

  1. 프로세스가 자신의 작업 시간을 운영체제에 알려줄 수 있다. 그렇다면 제출한 작업 시간 기준으로 스케줄링을 한다. 하지만 이 방법은 작업 시간을 측정하기 힘들기 때문에 어렵다.
  2. 에이징: 프로세스가 양보할 수 있는 상한선을 정하고, 한번 양보할 때마다 나이를 한 살씩 먹고 일정 나이가 되면 더 이상 양보를 하지 않도록 만드는 방식.

 

9. 서비스를 받기 위해 대기한 시간과 CPU 사용 시간을 고려하여 우선순위를 정하는 스케줄링 알고리즘은 무엇인가?

- HRN 스케줄링 (Highest Response Ratio Next): SJF 스케줄링의 아사 현상을 해결 하기 위해 만들어짐. 

 

10. 프로세스가 할당받은 시간(타임 슬라이스) 동안 작업하다가 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 다음 자기 차례가 올 때까지 기다리는 선점형 스케줄링 알고리즘 중 가장 단순한 것은 무엇인가?

- 라운드 로빈 스케줄링 (Round Robin, RR): FCFS 스케줄링과 유사하지만 각 프로세스마다 CPU를 사용할 수 있는 최대 시간이 있는 것이 차이점. 

 

11. 타임 슬라이스의 크기와 문맥 교환의 관계를 설명하시오

- 타임 슬라이스 크기가 크다면 하나의 작업이 끝난 뒤 다음 작업이 시작되는 것처럼 동작함. 이 경우 FCFS와 비슷하게 됨.

- 타임 슬라이스 크기가 매우 작은 경우는 문맥 교환이 너무 자주 일어나 문맥 교환에 걸리는 시간이 실제 작업 시간보다 상대적으로 커지며, 문맥 교환에 많은 시간을 낭비하여 실제 작업을 못하는 문제가 발생한다.

 

12. 기본적으로 라운드 로빈 방식을 사용하지만, CPU를 할당받을 프로세스를 선택할 때 남아있는 작업 시간이 가장 적은 것을 선택하는 스케줄링 알고리즘은 무엇인가?

- SRT 스케줄링 (Shortest Remaining Time).

 

13. 우선순위에 따라 준비 큐를 여러 개 사용하며 고정형 우선순위를 적용하는 스케줄링 알고리즘은 무엇인가?

- 다단계 큐 스케줄링. 상단의 큐에 있는 모든 프로세스의 작업이 끝나야 다음 우선순위 큐의 작업이 시작된다.

 

14. 우선순위에 따라 준비 큐를 여러 개 사용하며, 프로세스가 CPU를 사용한 후 우선순위가 낮아지는 특징을 가진 스케줄링 알고리즘은 무엇인가?

- 다단계 피드백 큐 스케줄링. CPU를 사용할 때마다 원래의 큐로 돌아가지 않고 우선순위가 하나 낮은 큐의 끝으로 돌아간다. 단, 커널 프로세스가 일반 프로세스 큐에 들어가지는 않는다. 우선순위가 낮은 큐일수록 해당 큐의 타임 슬라이스가 커진다. 가장 낮은 우선순위 큐는 무한대의 타임 슬라이스를 가지게 되어 FCFS로 동작한다. 일반적으로 오늘날의 운영체제에서 많이 쓰인다.

 

15. 다단계 피드백 큐 스케줄링에서 마지막 큐에 있는 프로세스(우선순위가 가장 낮은 프로세스)의 타임 슬라이스 크기는 얼마인가?

- 무한대. FCFS로 동작함.

 

16. 다단계 피드백 큐 스케줄링에서 우선순위가 낮아질수록 타임 슬라이스의 크기는 어떻게 변하는가?

- 점점 커진다.

 

17. 다단계 피드백 큐 스케줄링에서 마지막 큐(우선순위가 가장 낮은 큐)는 어떤 스케줄링 알고리즘처럼 동작하는가?

- FCFS로 동작한다.

 

[심화문제]

 

1. 스케줄링의 단계와 그 특징을 설명하시오

  1. 고수준 스케줄링: 전체 시스템의 부하를 고려하여 작업을 시작할지 말지를 결정한다. 메인프레임과 같은 큰 시스템에서 규모가 큰 일괄 작업을 처리할 때 사용된다.
  2. 중간 수준 스케줄링: 시스템에 과부하가 걸려서 전체 프로세스 수를 조절해야 한다면 이미 활성화된 프로세스 중 일부를 보류 상태로 보낸다. 
  3. 저수준 스케줄링: 오늘날의 CPU 스케줄러는 대부분 중간 수준 스케줄링과 저수준 스케줄링으로 구성되어 있다.

 

 

2. 스케줄링의 목적을 설명하시오

- 원래 목적은 모든 프로세스가 공평하게 작업하도록 하는 것. 그러나 시스템의 안정성과 효율성을 높이기 위해 일정 부분 공평성을 희생한다.

  1. 공평성: 모든 프로세스가 자원을 공평하게 배정 받아야 함. 자원 배정 과정에서 특정 프로세스가 배제되어서는 안됨.
  2. 효율성: 시스템 자원이 유휴 시간 없이 사용되도록 스케줄링을 하고, 유휴 자원을 사용하려는 프로세스에는 우선권을 주어야 함
  3. 안정성: 우선순위를 사용하여 중요 프로세스가 먼저 작동하도록 배정함으로써 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호한다.
  4. 확장성: 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야 함. 시스템 자원이 늘어나는 경우 이 혜택이 시스템에 반영되야 한다.
  5. 반응 시간 보장: 응답이 없는 경우 시스템이 멈춘 것으로 가정하기 때문에 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야 한다.
  6. 무한 연기 방지: 특정 프로세스의 작업이 무한히 연기되어서는 안 된다.

 

3. 선점형 스케줄링과 비선점형 스케줄링을 비교하여 설명하시오

  1. 선점형 스케줄링 (preemptive scheduling): 어떤 프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있음. 문맥 교환 같은 부가적인 작업으로 인해 낭비가 생기는 것이 단점.
  2. 비선점형 스케줄링 (non-preemptive scheduling): 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없음. 선점형 스케줄링보다 스케줄러의 작업량이 적고 문맥 교환에 의한 낭비도 적다.

 

4. 스케줄링 알고리즘의 선택 기준에 대해 설명하시오

  1. CPU 사용률: 전체 시스템의 동작 시간 중 CPU가 사용된 시간을 측정함.
  2. 처리량: 단위 시간당 작업을 마친 프로세스의 수. 클수록 좋은 알고리즘.
  3. 대기 시간: 실제 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기하는 시간. 짧을 수록 좋음.
  4. 응답 시간: 프로세스 시작 후 첫 번째 출력 또는 반응이 나올때까지 걸리는 시간.
  5. 반환 시간: 대기 시간과 실행 시간을 더한 값. 프로세스가 생성된 후 종료되어 사용하던 자원을 모두 반환하는 데까지 걸리는 시간.

- 사용률과 처리량은 계산하기가 쉽지 않아, 주로 대기, 응답, 반환 시간을 계산한다.

- 주로 평균 대기 시간을 본다. 평균 대기 시간은 모든 프로세스의 대기 시간을 합한 뒤 프로세스의 수로 나눈 값이다.

 

5. FCFS, SJF, HRN 스케줄링의 특징을 설명하시오

  1. FCFS (First Come First Served): 준비 큐에 도착한 순서대로 CPU를 할당하는 비선점형 방식. 처리 시간이 긴 프로세스가 CPU를 차지하는 경우 시스템의 효율성이 떨어짐. 현재 작업중인 프로세스가 입출력을 요구하면 CPU가 쉬는 시간이 많아져 효율이 떨어짐.
  2. SJF (Shortest Job First): 프로세스 중에서 실행 시간이 가장 짧은 작업부터 할당하는 비선점형 방식. 종료 시간을 파악하기 어려워 사용하기가 쉽지 않다. 아사 현상이 발생하기 쉬워서 잘 쓰이지 않는다.
  3. HRN (Highest Response Ratio Next): SJF에서 발생할 수 있는 아사 현상을 해결한 알고리즘. 서비스를 받기 위해 기다린 시간과 CPU 사용 시간을 고려하여 스케줄링을 하는 방식. 공평성이 위배되어 많이 사용하지 않는다.

 

6. 라운드 로빈, SRT, 다단계 큐, 다단계 피드백 큐 스케줄링의 특징을 설명하시오

  1. 라운드 로빈 (Round Robin, RR): FCFS 스케줄링과 유사하지만, 각 프로세스마다 CPU를 할당받는 최대 시간인 타임 슬라이스가 정해져 있다는 것이다. 
  2. SRT (shortest remaining time): 기본적으로 라운드 로빈 방식과 같이 동작하지만, CPU를 할당 받을 프로세스를 선택할 때 남아 있는 작업 시간이 가장 적은 프로세스를 선택한다. 하지만 운영체제가 프로세스의 종료 시간을 예측하기 어려우므로 잘 사용되지는 않는다.
  3. 다단계 큐 (multilevel queue): 우선 순위에 따라 준비큐를 여러개 사용하는 방식. 프로세스가 큐에 삽입되는 것 만으로 우선순위가 결정된다. 상단 큐의 모든 작업이 끝나야 다음 우선순위 큐의 작업이 진행된다. 우선 순위가 높은 프로세스 때문에 낮은 프로세스의 작업이 연기되는 문제를 해결한 방식이 다단계 피드백 큐 스케줄링이다.
  4. 다단계 피드백 큐 (multilevel feedback queeu): 다단계 큐 스케줄링과 비슷하지만 프로세스가 한번 CPU를 사용할 때마다 프로세스의 우선순위가 낮아진다. 단, 커널 프로세스가 일반 프로세스 큐에 삽입되지는 않는다. 그리고 각 큐의 우선순위가 아래로 내려갈 수록 타임 슬라이스의 크기도 커져서, 마지막 우선순위 큐의 타임 슬라이스는 무한대로, FCFS 처럼 동작한다. 오늘날의 운영체제가 CPU 스케줄링을 위해 일반적으로 사용하는 방식이다.

 

7. 아사 현상과 에이징에 대해 설명하시오

- 프로세스의 우선도 순으로 작업을 처리하는 스케줄링이라면, 우선도가 낮은 프로세스는 계속해서 자원을 할당 받지 못하는 문제가 생기는데, 이것을 아사 현상이라고 한다.

- 에이징은 아사 현상을 해결할 수 있는 방법 중 하나인데, 프로세스가 자신의 순서를 양보할 때마다 나이를 한 살씩 먹는다고 가정하고, 이 나이가 일정한 값에 도달하게 되면 더 이상 양보하지 않고 자원을 할당받도록 하는 것을 말한다.

 

8. 타임 슬라이스의 크기를 정하는 것과 시스템 효율성에 대해 설명하시오

- 타임 슬라이스의 크기가 커질 경우, 점점 커질수록 스케줄링은 FCFS로 동작하게 되어 효율성이 떨어진다. 그렇다고 해서 타임 슬라이스를 아주 작게 할 경우에는 문맥 교환이 너무 자주 일어나 시스템의 전반적인 성능이 떨어진다. 

- 결론은 타임 슬라이스는 되도록 작게 설정하되 문맥 교환이 너무 자주 일어나지 않을 정도로 설정해야 한다. 유닉스 운영체제에서는 보통 타임 슬라이스는 약 100 ms이다. 이것은 10~200 ms 사이에서 조정할 수 있으며, 조정할 수 있도록 되어있는 이유는 다단계 피드백 큐 스케줄링에서 각 큐마다 타임 슬라이스가 다르게 설정 되어야 하기 때문이다.

 

Chapter 5

 

[연습문제]

 

1. 프로세스 간 통신에서 데이터를 양방향으로 전송 가능하지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 통신 방식은 무엇인가?

- 반양방향 통신. 무전기를 예로 들 수 있다.

 

2. 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 무엇이라 하는가?

- 바쁜 대기 (busy waiting). 자원 낭비의 전형적인 예이다. 

 

3. 프로세스 간 통신에서 대기가 없는 통신과 대기가 있는 통신의 예를 각각 제시하시오

- 대기가 없는 통신: 전역 변수, 파일

- 대기가 있는 통신: 파이프, 소켓.

 

4. 파이프를 이용하여 통신할 때 파이프를 2개 사용하는 이유는 무엇인가?

- 양방향 통신을 하기 위해서. 서로 다른 두 개의 프로세스가 각각 하나의 파이프를 쓰고, 읽는다.

 

5. 공유 자원을 병행적으로 읽거나 쓰는 상황을 무엇이라고 하는가?

- 경쟁 조건 (race condition)의 발생

 

6. 공유 자원의 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역은 무엇인가?

- 임계 구역 (critical section)

 

7. 임계구역 해결 조건 중 한 프로세스가 임계구역에 들어갔을 때 다른 프로세스는 임계구역에 들어갈 수 없는 조건을 무엇이라 하는가?

- 상호 배제 (mutual exclusion). 임계구역 내에는 한 번에 하나의 프로세스만 있어야 한다.

 

8. 임계구역 해결 조건 중 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 조건을 무엇이라 하는가?

- 진행의 융통성 (progress flexibility).

 

9. 임계구역 문제를 하드웨어적으로 해결한 방식으로, 하드웨어의 지원을 받아 명령어를 실행하는 도중에 타임아웃이 걸리지 않도록 하는 방식을 무엇이라 하는가?

- 검사와 지정 (test-and-set). 편리하지만 바쁜 대기를 사용하기 때문에 자원 낭비가 있다.

 

10. 세마포어의 Semaphore(n)에서 n은 무엇을 가리키는가?

- 공유 가능한 자원의 수를 나타낸다. 

 

11. 세마포어에서 내부 변수를 RS라고 할 때 세마포어 P()의 내부 코드를 쓰시오

- if (RS>) then RS= RS-1;

else block();

 

12. 세마포어에서 내부 변수를 RS라고 할 때 세마포어 V()의 내부 코드를 쓰시오

- RS=RS+1;

wake_up();

 

13. 세마포어가 제대로 작동하지 않는 경우를 설명하시오

  1. 프로세스가 세마포어를 사용하지 않고 바로 임계구역에 들어간 경우.
  2. P()를 두번 사용하여 wake_up 신호가 발생하지 않은 경우. 프로세스 간의 동기화가 이루어지지 않아 세마포어 큐에서 대기하고 있는 프로세스들이 무한 대기 상태가 됨
  3. P()와 V()를 반대로 사용하여 상호 배제가 보장되지 않은 경우.

 

14. 세마포어의 내부 코드도 타임아웃이 걸리면 문제가 발생할 수도 있다. 그래서 내부 코드는 무엇으로 보호받는가?

- P()와 V()의 내부 코드는 검사와 지정을 사용하여 분리 실행되지 않도록 해야한다.

 

15. 공유 자원을 내부적으로 숨기고 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고 프로세스 간에 동기화를 시키는 것으로, 세마포어의 단점을 해결하면서 임계구역 문제를 해결한 방식은 무엇인가?

- 모니터.

 

 

[심화문제]

 

1. 프로세스 간 통신을 통신 방향에 따라 분류하여 설명하시오

  1. 양방향 통신: 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조. 일반적인 통신은 모두 양방향이다.
  2. 반양방향 통신: 데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능한 것. 무전기를 예로 들 수 있음.
  3. 단방향 통신: 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있음. 전역 변수와 파이프가 단방향 통신이다.

2. 대기가 있는 통신과 대기가 없는 통신의 의미를 설명하고 적절한 예를 제시하시오

- 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 바쁜 대기라고 한다. 이 문제를 해결하기 위해서 데이터가 도착했음을 알려주는 동기화를 사용한다. 이것을 사용하면 운영 체제가 알아서 알려준다.

  1. 대기가 있는 통신 (동기화 통신): 동기화를 지원하는 통신 방식이다. 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있다. 파이프, 소켓을 예로 들 수 있다.
  2. 대기가 없는 통신 (비동기화 통신): 데이터를 받는 쪽은 바쁜 대기를 사용한다. 전역 변수와 파일을 예로 들 수 있다.

 

3. 실생활의 예를 들어 임계구역 문제를 설명하시오

- 은행의 예금 기록 문제. 

 

4~5. (책 참조) 다음 코드의 문제점을 설명하시오

 

6. 파일을 이용하여 Test라는 문자를 주고받는 코드를 작성하시오

 

 

Chapter 6

 

[연습문제]

 

1. 2개 이상의 프로세스가 서로의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 무엇이라 하는가?

- 교착 상태 (dead lock)

 

2. 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 나타내는 방향성이 있는 그래프를 무엇이라 하는가?

- 자원 할당 그래프 (resource allocation graph)

 

3. 네 가지 교착 상태 필요조건에 대해 설명하시오

  1. 상호 배제 (mutual exclusion): 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다.
  2. 비선점 (non-preemption): 한 프로세스가 사용중인 자원은 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다.
  3. 점유와 대기 (hold and wait): 프로세스가 어떤 자원을 할당 받은 상태에서 다른 자원을 기다리는 상태여야 한다.
  4. 원형 대기 (circular wait): 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 한다. 점유와 대기를 하는 프로세스들이 서로 방해하는 방향이 원을 이루면 프로세스들이 서로 양보하지 않는다.

 

4. 교착 상태 해결 방법 중, 교착 상태를 유발하는 네 가지 조건을 무력화하는 방법은 무엇인가?

- 교착 상태 예방. 실효성이 적다.

 

5. 교착 상태 해결 방법 중, 교착 상태가 발생하지 않는 수준으로 자원을 할당하는 방법은 무엇인가?

- 교착 상태 회피. 자원을 할당하다가 교착 상태를 유발할 가능성이 있다고 판단되면 자원 할당을 중단하고 지켜보는 것. 이것 또한 실효성이 적음.

 

6. 교착 상태 해결 방법 중, 자원 할당 그래프를 사용하여 교착 상태를 발견하는 방법은 무엇인가?

- 교착 상태 검출. 교착 상태가 발생하면 교착 상태 회복 단계가 진행된다.

 

7. 교착 상태 해결 방법 중, 타임아웃을 이용하여 해결하는 방법은 무엇인가?

- 타임 아웃을 이용한 교착 상태 검출. 일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리하는 방법. 아래와 같은 문제가 있다.

  1. 엉뚱한 프로세스가 강제 종료될 수 있음: 교착 상태 외의 다른 이유로 작업이 진행되지 못하는 모든 프로세스가 강제 종료될 수 있다.
  2. 여러 군데에 데이터가 나뉘어 있는 분산 데이터베이스의 경우에는 타임아웃을 이용하는 방법을 적용하기가 어렵다. 원격지에 있는 프로세스의 응답이 교착 상태 때문인지, 네트워크 때문인지 모르기 때문이다.

 

8. 교착 상태 해결 방법 중, 은행원 알고리즘을 사용하여 해결하는 방법은 무엇인가?

- 교착 상태 회피.

 

9. 교착 상태 해결 방법 중, 모든 자원에 번호를 부여하고 낮은 번호의 자원을 사용할 수 없도록 하는 방법은 무엇인가?

- 교착 상태 예방.

 

10. 교착 상태 해결 방법 중, 프로세스가 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나, 그렇지 못할 경우 자원을 모두 반납하는 방법은 무엇인가?

- 점유와 대기 예방. 프로세스는 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나 그렇지 못할 경우 자원을 모두 반납해야 한다. 아래와 같은 단점이 있다.

  1. 프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다.
  2. 자원의 활용성이 떨어진다. 현재 사용하지도 않을 자원을 미리 잡고 있기 때문이다.
  3. 많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다.
  4. 결국 일괄 작업 방식으로 동작한다.

 

11. 교착 상태 해결 방법 중, 교착 상태가 검출되면 교착 상태를 일으킨 모든 프로세스를 종료하는 방법은 무엇인가?

- 교착 상태 회복.

 

12. 자원 할당 그래프에서 무엇이 발견되면 교착 상태라고 판단할 수 있는가?

- 단일 자원을 사용하는 경우 자원 할당 그래프에 사이클이 있으면 교착 상태이다. 

- 다중 자원의 경우 대기 그래프와 그래프 감소 방법을 이용하여 사이클을 찾는다.

 

 

[심화문제]

 

1. 교착 상태 해결 방법 중 프로세스가 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나, 그렇지 못할 경우 자원을 모두 반납하는 방법이 있다. 이 방법의 단점을 설명하시오

  1. 프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다.
  2. 자원의 활용성이 떨어진다. 현재 사용하지도 않을 자원을 미리 잡고 있기 때문이다.
  3. 많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다.
  4. 결국 일괄 작업 방식으로 동작한다.

 

2. 교착 상태 회피 방법인 은행원 알고리즘의 단점을 설명하시오

  1. 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다. 실제로 불가능하다.
  2. 시스템의 전체 자원 수가 고정적이어야 한다.
  3. 자원이 낭비된다. 모든 불안정 상태가 교착 상태가 되는 것이 아닌데도 자원을 할당하지 않는 것은 자원 낭비이다. 

 

3. 교착 상태 검출 시 타임아웃을 이용하는 방법의 장단점을 설명하시오

- 장점: 특별한 알고리즘 없이 쉽게 구현할 수 있다.

- 단점:

  1. 엉뚱한 프로세스가 강제 종료될 수 있음: 교착 상태 외의 다른 이유로 작업이 진행되지 못하는 모든 프로세스가 강제 종료될 수 있다.
  2. 여러 군데에 데이터가 나뉘어 있는 분산 데이터베이스의 경우에는 타임아웃을 이용하는 방법을 적용하기가 어렵다. 원격지에 있는 프로세스의 응답이 교착 상태 때문인지, 네트워크 때문인지 모르기 때문이다.