CS 스터디 운영체제 #1(성재)

[CS 스터디 - 1회차]
발표자 : 민성재
날짜 : 4/11
범위 : 운영체제) 인터럽트, 시스템 콜, PCB와 Context Switching

1. 인터럽트 (Interrupt)

근본적으로 하나의 CPU에 여러 프로세스가 경쟁적으로 수행할 시간을 부여 받는 환경인데, 이때 인터럽트란 프로그램을 실행하는 중에 예기치 않은 상황이 발생할 경우 혹은 지금 수행중인 작업보다 더 중요한 일이 생기면 CPU에 신호를 보내서 현재 진행중인 프로그램을 즉시 중단하고 발생한 상황을 우선적으로 처리하고 다시 복귀하는 과정이다.
이러한 인터럽트를 유발하는 상황은 다음과 같이 3가지가 있다.

1) 외부 인터럽트
갑작스러운 전원 이상, 기계 착오, 입출력 요청(보통 입출력 장치 속도가 느려서 얘 먼저 해줌)

2) 내부 인터럽트
보통 Trap 이라고 불리며 잘못된 명령이나 데이터를 사용할 때 발생한다.
예를 들어 0으로 나누기가 발생, 오버플로우, 명령어 잘못 사용 등등
이러한 예외상황이 발생하면 CPU에 인터럽트 신호를 보내서 Process Kill 을 통해 핸들링 해줘야 하는 것.

3) 소프트웨어 인터럽트
사용자가 직접 프로그램을 실행 (SuperVisor Call = SVC)

원래 프로그램을 실행 중 2번에서 인터럽트 신호가 CPU에 전달되면 즉시 수행중인 프로그램을 중지한다. 추후에 다시 복귀해야 하므로 상태 레지스터 , PC(Program Counter)를 스택에 저장한 후에 인터럽트 처리를 위해 이동한다. 이때 인터럽트 벡터로의 점프란 아키텍쳐 구조에 따라 인터럽트 벡터를 다르게 지정하는데 쉽게 말하면 인터럽트 처리하려는 주소로 이동하겠다는 뜻이다.

  • 여기서 상태 레지스터란 프로그램 상태 플래그와 같은 상태 값을 저장하는 레지스터이며 PC도 포함한다.
  • PC(Program Counter)란 명령어의 실행 순서를 담고 다음 실행할 명령어의 주소를 저장한다.
  • 인터럽트가 필요한 이유
    인터럽트라는 신호를 CPU에 보내주지 않으면 CPU는 스스로 이벤트 발생 여부를 일정 시간 마다 감시(Polling)를 해야 되는데 감시하는 동안에는 프로세스 수행 효율이 떨어진다.
    인터럽트가 있다면 감시를 아예 하지 않고 인터럽트 요청이 올 때만 따로 수행해주면 되므로 프로세스 수행 효율이 올라가는 것이다.

<예상 문제>
1) 인터럽트는 무엇인가?
2) 인터럽트의 과정을 설명하세요
3) 인터럽트를 씀으로써 얻는 이득이 뭔가요?
4) 인터럽트를 유발하는 경우는 뭐가 있나요?


2. 시스템 콜 (System Call)

운영체제는 커널 모드(Kernel Mode)와 사용자 모드(User Mode)로 나뉘어 구동한다. 모드를 나눈 이유는 커널에서 중요한 자원을 관리하기 때문에 접근 제어를 하기 위해서이다.

근데 사용자는 일반적으로 사용자 모드를 사용한다. 커널의 기능을 사용하기 위해서는 사용자 프로세스가 소프트웨어 인터럽트를 통해 운영체제에게 시스템 콜을 하면 커널 기능을 사용자모드에서 사용 가능하게 해준다.
즉 커널 모드와 사용자 모드의 인터페이스 역할을 해준다.

  • 프로세스 관련 시스템 콜

1) Fork() : 새로운 프로세스를 생성하는 시스템 콜인데, 이렇게 새로운 프로세스를 child 프로세스라고 부름. 이때 fork를 만든 프로세스는 parent가 되고 이 둘은 동일한 복사본을 갖게됨.
이때, OS는 똑 같은 2개의 프로그램이 동작한다고 생각하고 fork()가 리턴될 차례라고 생각
2) Exec() : 다른 프로그램의 실행
3) Wait() : 자식 프로세스가 끝날 때 까지 대기

<예상 문제>
1) 커널 모드와 사용자 모드 개념을 사용해서 시스템 콜을 설명하세요


3. PCB와 Context Switching

CPU는 프로세스가 여러 개 있을 때 Process Management를 통해서 스케줄링 한다. 이때, 각 프로세스를 구별하기 위해서는 프로세스들의 특징을 알아야 함.
이러한 프로세스의 특징을 Process Metadata라고 한다.

이러한 메타 데이터는 프로세스가 생성되면 PCB(Process Control Block) 이라는 위치에 저장된다. 즉, PCB란 운영체제의 프로세스 스케줄링을 위해 프로세스의 상태 정보를 저장하는 구조체이다.
프로세스가 생성될 때 마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB를 제거된다.

  • PCB가 필요한 이유
    CPU에서는 프로세스의 상태에 따라 교체작업이 이루어지는데, 예를 들어 인터럽트가 발생하여 Running 중이던 프로세스는 Waiting 상태가 되고 다른 프로세스가 Running 상태가 된다.
    이때 다시 원래 프로세스로 복귀할 때 프로세스에 대한 저장 값을 PCB에 저장해두는 것이다. (앞에서 언급한 상태 레지스터와 PC는 돌아가는 위치 , PCB는 수행할 프로세스에 대한 정보를 포함하는 것이다.)
    Context Switching 이란?
    CPU가 이전 프로세스의 상태를 PCB에 저장하고 현재 실행하려는 프로세스의 정보(Context)를 PCB에서 읽어오고 레지스터에 적재하는 과정이다. 즉 Context란 PCB에 저장되는 프로세스의 정보를 의미한다.
    보통 인터럽트가 발생하거나 실행중인 프로세스가 할당 받은 시간이 초과되면 발생한다.

  • Context Switching 할 때는 해당 CPU는 아무런 일을 못함. 따라서 Context Switching이 잦아지면 오히려 오버헤드가 생겨서 효율이 떨어진다.
    그럼에도 CPU가 놀지 않고 계속 프로세스를 수행시키게 하려면 계속적으로 프로세스의 레지스터에 다음 실행할 프로세스의 정보를 적재해야 한다.
    이를 Context Switching 의 Overhead라고 한다. 보통 오버헤드는 안 좋은 의미이지만, 여기서는 CPU가 놀지 않게 하기 위한 기능이다. (즉, 어쩔 수 없는 트레이드 오프)

<예상 문제>
1) PCB가 무엇이고 어떤 정보를 담는지 설명하세요
2) PCB를 쓰는 이유가 뭔가요?
3) Context Switching 는 무엇이고 언제 일어나는가?
4) Context Switching 을 통해 얻는 이득은?

좋은 웹페이지 즐겨찾기