관리 메뉴

공부 기록장 💻

[운영체제/OS] 쉽게 배우는 운영체제 03장 문제 풀이 (프로세스) 본문

# CS Study/Opearing System

[운영체제/OS] 쉽게 배우는 운영체제 03장 문제 풀이 (프로세스)

dream_for 2022. 8. 21. 13:48

연습 문제

  1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가?
    • 운영체제로부터 프로세스 제어 블록을 얻어야 함
  2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가?
    • 준비 상태
  3. 프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태는 무엇인가?
    • 대기 상태 - 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될때까지 기다리는 상태 (wait status)
  4. 유닉스에서 Ctrl + Z 키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가?
    • 휴식 상태 - 프로그램이 잠시 실행을 멈춘 상태
  5. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가?
    • 문맥 교환 - CPU를 차지하던 프로세스가 나가고, 새로운 프로세스를 받아들이는 작업
      • 실행 상태에서 나가는 프로세스 제어 블록에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태로 들어오는 프로세스 제어 블록의 내용으로 CPU가 다시 세팅된다.
  6. 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가?
    • fork() 시스템 호출
  7. 프로세스의 골격은 그대로 둔 채 코드 영역만 바꾸는 시스템 호출은 무엇인가?
    • exec() 시스템 호출
      • 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 그대로 사용하고, 새로운 코드 영역만 가져오는 시스템 호출
  8. 부모 프로세스가 기다리지 않아 자원이 회수되지 못하고 계속 살아 있는 프로세스는 무엇인가?
    • 미아 프로세스
  9. 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위로서 가벼운 프로세스라고 불리는 것은 무엇인가?
    • 스레드
  10. 미아 프로세스를 방지하기 위해 부모 프로세스는 어떤 시스템 호출을 사용하는가?
    • exit() 시스템 호출
  11. 작업이 끝난 프로세스의 자원을 회수하는 행위를 무엇이라고 하는가?
    • 가비지 컬렉션(Garbage Collection)
  12. 모든 프로세스를 부모-자식 관계로 만들어 자원 회수를 용이하게 하는 프로세스의 구조는 무엇인가?
    • 프로세스 계층 구조
      • 프로세스 간의 책임 관계가 붐녛애져서 시스템을 관리하기가 수월하며, 프로세스가 작업을 마쳐 그 프로세스가 사용하던 자원을 회수할 때 편리하다

 

심화 문제

 

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

 

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

  • 휴식 상태(pause status): 프로세스가 작업을 일시적으로 쉬고 있는 상태 사용하던 데이터가 그대로 메모리에 그대로 있고, 프로세스 제어 블록도 유지되므로 프로세스는 멈춘 지점에서부터 재시작될 수 있다.
  • 보류 상태(suspend status): 프로세스가 메모리에서 잠시 쫓겨난 일시 정재 상태이다. 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때, 프로그램에 오류가 있어 실행을 미루어야 할 때, 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때 등의 여러가지 이유로 메모리 밖으로 쫓겨나 스왑 영역에 보관된다.

 

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

  1. 프로세스 제어 블록(PCB, Process Control Block)은 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료구조이다. 모든 프로세스는 고유의 프로세스 제어 블록을 가지며, 프로세스 생성 시 만들어져 프로세스가 실행을 완료하면 폐기된다.

 

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

  1. 문맥 교환(context switching)은 실행 상태에서 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이며, 두 프로세스의 프로세스 제어 블록을 교환하는 작업이다. 실행 상태에서 나가는 PCB에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태로 들어오는 PCB의 내용으로 CPU가 다시 세팅된다.

 

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

  • 코드 영역: 프로그램이 본문이 기술된 영역
  • 데이터 영역: 코드가 실행되며 사용하는 벼수나 파일 등의 데이터를 모아놓은 영역
  • 스택 영역: 운영체제가 프로세스를 실해하기 위해 부수적으로 필요한 데이터를 모아놓은 영역
    • ex) 함수를 호출하면, 함수를 수행하고 원래 프로그램으로 되돌아올 위치

 

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

  • 프로세스의 생성 속도가 빠르다.
    • 하드디스크로부터 프로그램을 새로 가져와 생성하는 것이 아니라, 기존 메모리에서 복사하기 때문에 자식 프로세스의 생성 속도가 빠르다.
  • 추가 작업 없이 자원을 상속할 수 있다.
    • 부모 프로세서가 사용하던 모든 자원을 추가 작업 없이 자식 프로세스에 상속 가능하다.
  • 시스템 관리를 효율적으로 할 수 있다.
    • 부모 프로세스와 자식 프로세스가 자식 프로세스 구분자와 부모 프로세스 구분자로 연결되어 있기 때문에, 자식 프로세스를 종료하면 자식이 사용하던 자원을 부모 프로세스가 정리할 수 있다.

 

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

  1. fork() 시스템이 새로운 프로세스를 복사하는 시스템 호출인 반면, exec() 시스템 호출은 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출이다. 이는 프로세스의 구조체를 재활용하기 위함이다. 새로운 프로세스를 만들려면, PCB를 만들고 메모리의 자리를 확보하는 과정이 필요하며, 프로세스를 종료한 후에는 사용한 메모리를 청소하기 위해 상위 프로세스와 부모-자식 관계를 만들어야 한다. 반면, exec() 시스템 호출을 사용하면 이미 만들어진 PCB, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있기 때문에 편리하다.

 

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

  • 여러 작업의 동시 처리
    • 유닉스 운영체제는 컴퓨터에 동시에 접속하는 여러 사용자를 동시에 처리하기 위해 fork() 시스템 호출로 인증을 거쳐 컴퓨터에 접속하는 login 프로세스를 여러 개 만들어 사용자에게 나누어 여러 사용자를 동시에 처리 가능하다.
    • login 프로세스 통과 후에는 shell 프로세스가 필요하다. login 프로세스가 차지하고 있던 메모리 공간이 비워지고 PCB가 제거되며, shell 프로세스를 메모리에 올리기 위한 공간이 확보되고 PCB도 새로 생성된다. 이때, exec() 시스템 호출을 사용해 login 프로세스의 구조를 shell 프로세스로 다시 활용하면 자원을 효율적으로 관리할 수 있다.
    • shell 프로세스에서 명령어로 응용 프로그램을 실행할 때도 fork()와 exec() 시스템 호출을 이용한다.
  • 용이한 자원 회수
    • 프로세스가 작업을 마쳐서 그 프로세스가 사용하던 자원을 회수할 때, 모든 프로세스가 부모0자식 관계로 구성되어 있어, 사용하던 자원을 부모 프로세스가 회수하면 되기 때문에 프로세스 간의 책임 관계가 분명해져 시스템을 관리하기가 수월하다.

 

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

  • 멀티스레드: 운영체제가 소프트웨어적으로 프로세스를 작은 단위의 스레드로 분할하여 운영하는 기법이다.
  • 멀티태스킹: 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하여, 여러 스레드에 시간을 잘게 나누어주는 시스템이라고도 하며 시분할 시스템이라고도 한다.
  • 멀티프로세싱: CPU를 여러 개 사용하여 여러 개의 스레드를 동시에 처리하는 작업 환경이다. 하나의 컴퓨터에 여러 개의 CPU 혹은 하나의 CPU 내 여러 개의 코어에 스레드를 배정하여 동시에 작동하는 것이다.
  • CPU 멀티스레드: 한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용해 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법이다.
728x90
반응형
Comments