ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기술 면접 - 운영체제 (2)
    기술 면접 2021. 4. 19. 03:09

    인터럽트

    인터럽트란?

    • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술

    어느 한 순간 CPU가 실행하는 명령은 하나, 다른 장치와 어떻게 커뮤니케이션을 할까?

    인터럽트 필요 이유

    • 선점형 스케쥴러 구현
      • 프로세스 running 중 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해, 현재 프로세스를 중단시킴
    • io Device와의 커뮤니케이션
      • 저장매체에서 데이터 처리 완료 시, 프로세스를 깨워야 함(block state -> ready state)
    • 예외 상황 핸들링
      • CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생할 경우 CPU가 해당 처리를 할 수 있도록 CPU에 알려줘야 함

    주요 인터럽트

    1. Divide-by-Zero 인터럽트
    2. 타이머 인터럽트
      • 선점형 스케쥴러를 위해 필요
      • 하드웨어로부터 일정 시간마다 타이머 인터럽트를 운영체제에 알려준다
    3. 입출력 인터럽트

    인터럽트 종류

    • 내부 인터럽트 -> 소프트웨어 인터럽트
      • 주로 프로그램 내부에서 잘못된 명령 또는 잘못된 데이터 사용시 발생
        • 0으로 나눌 때
        • 허용되지 않은 명령 또는 공간 접근
        • 계산 결과 overflow / underflow
    • 외부 인터럽트 -> 하드웨어 인터럽트
      • 주로 하드웨어에서 발생하는 이벤트 (프로그램 외부)
        • 전원 이상, 기계 문제, 키보드, Timer 이벤트

    시스템 콜 인터럽트

    • 시스템 콜 실행을 위해서는 강제로 코드에 인터럽트 명령을 넣어, CPU에게 실행시켜야 함

    image

    • 프로세스 변경할 때도 사용자 모드와 커널 모드로 수시로 바뀌면서 실행

    인터럽트와 IDT

    • 인터럽트는 미리 정의되어 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있음
      • IDT(Interrupt Descriptor Table)에 기록되어 있음
      • 컴퓨터 부팅 시 운영체제가 기록
    • 항상 인터럽트가 발생하면, IDT를 확인

    인터럽트와 프로세스

    image

    1. 프로세스 실행 중 인터럽트 발생
    2. 현 프로세스 실행 중단
    3. 인터럽트 처리 함수 실행
    4. 현 프로세스 재실행

    프로세스와 컨텍스트 스위칭

    프로세스 구조

    image

    1. 코드 영역
      • 프로그램의 코드가 저장이 된다
    2. 데이터 영역
      • 변수가 어떤 것들이 선언되어 있는지 데이터 영역에 저장
    3. 스택 영역
      • 함수, 지역 변수, 콜 스택( 임시 데이터 )
    4. 힙 영역
      • 동적으로 메모리 공간 할당
      • 데이터 영역과 코드 영역은 고정된 영역

    Data 영역

    • BSS
      • 초기화 되지 않은 전역변수
    • Data
      • 초기 값이 있는 전역변수

    컨텍스트 스위칭

    PCB

    Program Counter, Stack Pointer는 어디에 저장하지?

    • Process Control Block(PCB)에 저장
      • 프로세스가 실행중인 상태를 캡쳐 / 구조화해서 저장함
      • Process ID, Register 값, 스케쥴링 정보, 메모리 정보 등

    Context Switching(문맥 교환)

    • CPU에 실행할 프로세스를 교체하는 기술
      • 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
      • 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행

    디스패치(dispatch) : ready 상태의 프로세스를 running 상태로 바꾸는 것

    프로세스 간 커뮤니케이션 (IPC)

    프로세스들이 서로의 공간을 쉽게 접근할 수 있다면, 얼마나 위험할까

    • 프로세스는 다른 프로세스의 공간을 접근할 수 없다
    • 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위해 프로세스간 통신 필요ㅕ
    • 프로세스간 통신 방법을 제공한다

    파일을 사용한 커뮤니케이션

    • 파일을 사용하면, 실시간으로 직접 원하는 프로세스에 데이터 전달이 어려움

    커널 공간을 사용한 커뮤니케이션

    프로세스끼리 커널공간은 공유된다

    • Message Queue
    • Shared Memory
    • Pipe
    • Signal
    • Semaphore
    • Socket

    프로세스 총 정리

    프로그램이 실행 되는 과정!!

    1. 코드를 컴파일 한다 -> 실행 파일이 만들어짐
    2. 쉘(gui, cli)을 사용해서 운영체제에 실행 파일 실행을 요청
    3. 프로세스 구조가 만들어짐
      • 데이터 (BSS, DATA)
      • 코드
      • 스택
    4. 스케쥴러 방식에 따라 실행이 된다 ( ready 상태에 진입 ) ( 예를 들어 선점형 라운드 로빈 방식 )
    5. 일정 시간마다 타이머 인터럽트가 발생한다
    6. 인터럽트를 처리
      • 사용자 모드를 커널 모드로 바꿈
      • IDT(Interrupt Descriptor Table)에서 해당 주소를 찾아서 실행
    7. 컨텍스트 스위칭을 통해 내가 실행한 프로그램이 running 상태가 된다
      • PCB 정보를 CPU에 넣어준다
      • 코드 영역 실행
    8. 실행 중, io 디바이스 처리 같은 시스템 콜을 만나면 block 상태로 전환(wait)
    9. io 디바이스 처리가 완료 되면 다시 인터럽트 발생 -> wait 상태에서 ready 상태로 다시 전환

    '기술 면접' 카테고리의 다른 글

    기술 면접 - 데이터 베이스 (2)  (0) 2021.04.20
    기술 면접 - 데이터 베이스 (1)  (0) 2021.04.20
    기술 면접 - 운영체제 (4)  (0) 2021.04.19
    기술 면접 - 운영체제 (3)  (0) 2021.04.19
    기술 면접 - 운영체제 (1)  (0) 2021.04.19

    댓글

Designed by Tistory.