인터럽트와 I/O

sun202x·2023년 1월 12일
0

운영체제

목록 보기
2/23
post-thumbnail

해당 게시글은 kocw에서 제공하는 금오공과대학교 최태영 교수님의 무료 강의를 공부하고 정리하기 위해서 만들어졌습니다.

인터럽트

  • 결국 하드웨어가 운영체제에게 전달하기 위해서는 반드시 인터럽트를 통해야 한다.
  • 반대로 운영체제가 하드웨어에게 전달하기 위해서는 두가지 방법이 있다.
    • memory mapped
      • str 24, $300

      • 메모리에 바로 할당
      • 디바이스 안의 레지스터와 버퍼의 내용이 메모리의 특정한 위치에 들어있고
      • 운영체제는 해당 주소에 어떤 값을 넣음으로써 컨트롤러에 명령을 내릴 수 있다.
    • I/O-direct
      • out 24, $300

      • 24번 디바이스에 300이라는 값을 쓰는것과 같다.
      • 컨트롤러를 동작시키는 명령어이다.
    • 명령어를 통해 직접적인 통신을 하게 된다.

소프트웨어 인터럽트

  • trap, exception 이라고 한다.
  • 운영체제 입장에서는 하드웨어에서 인터럽트가 걸리지 않더라도 인터럽트 처럼 동작하길 원할 때가 존재
    • 커널이 관리자 입장에서 일하고자 할 때, 일부러 인터럽트를 거는 일이 존재
  • 소프트웨어 인터럽트는 숫자가 존재
    • int 128

    • 인터럽트 128 번을 걸겠다 라는 의미
    • 인터럽트 벡터에서 각 인터럽트 숫자와 매핑된 매퍼 주소를 가져오고
    • 각 매퍼에서 소프트웨어 인터럽트의 숫자에 해당되는 핸들러를 수행한다.
  • 소프트웨어 인터럽트가 만드는게 시스템 콜이라고 한다.

I/O 구조

  • I/O의 특성에 따라서 기다리는 I/O가 있고, 기다리지 않는 것이 있다.
    • 기다리는 I/O같은 경우 기다리라는 명령어를 통해 처리할 수 있다.
    • wait 명령어는 인터럽트가 발생할 때가지 기다리게 한다.

device-status table

  • 어떤 프로세스가 어떤 내용을 읽거나, 쓰거나 할지 큐에 담아 놓은 구조를 뜻한다.
  • 각 device drive는 처리가 끝나고 인터럽트를 발생시킨 다음
  • 다음 명령을 해당 테이블에서 가져온다.

저장 장치(storage structure)

  • 메모리
    • 랜덤 액세스
      • 어떤 위치에 접근 하더라도 동일한 속도를 가짐
    • 휘발성
      • 전원을 주기적으로 리프레시 해주어야 내용이 유지될 수 있음
    • 어떤 프로그램이던지 메모리에 올라와야 실행 가능하다.
  • secondary storage
    • 비휘발성
    • hard disk
      • 일반적인 저장 장치
      • 모터가 돌아서 원반이 회전하는 방식
      • 자기를 통해 0, 1을 판단하여 데이터를 저장
    • solid-state disk
      • 요즘 쓰는 디스크
      • ssd는 usb를 병렬적으로 연결해서 만든 디스크
      • solid-state란 뜻은 volatile(휘발성)이 아니라는 뜻
      • 결국 속도에 따라서 메모리 계층을 이룸
        • 위로 갈수록 휘발성 속도 빠름
        • 아래로 갈수록 비휘발성 속도가 느림
  • cache
    • 하드 디스크에서 가져와서 메모리에 한번 올린 것을 저장 해놓은 공간을 cache(캐시)라고 한다.
    • 매번 하드 디스크에서 가져오면 속도가 느리기 때문
  • device driver
    • 각 계층의 디바이스(컨트롤러)를 다루기 위한 소프트웨어
    • 인터럽트 핸들러
    • 성능 좋은 그래픽 카드는 device driver를 새로 설치하라고 하는데,
    • 이 때 설치 되는 것이 기존 os의 인터럽트를 대체할 그래픽 카드에 최적화된 인터럽트 핸들러이다.

caching

  • 현대 컴퓨터의 처리 속도를 결정하는 핵심 요소
  • 모든 하드디스크 용량을 다 올려 둘 수 없으니 캐시를 관리해야 한다.
    • cache management

direct memory access(DMA)

  • 인터럽트 핸들링을 한다는 것은
    • local buffer의 내용을 메모리에 올린다는 것을 뜻함
    • 복사하는 내용이 크다면 루프를 돌면서 많은 단계를 수행하고,
    • 인터럽트 핸들러 루틴이 실행될 때 다른 인터럽트를 막는다.
      • 인터럽트 블락
      • 인터럽트 블락이 발생하면 다음 입력은 없어진다.
  • 이것을 방지 하기 위해서는 인터럽트 핸들러의 수행 시간이 되도록 짧아야 한다.
  • 그렇게 하기 위해 또 다른 마이크로 프로세스를 만드는데,
    • 이 것이 direct memory access이다.
  • 각 컨트롤러의 local buffer에서 메모리의 옮기는 과정을 수행하거나, 메모리에서 가져오는 것을 수행하기 위해,
    • bus에 마이크로 프로세스를 달아두는 것이 DMA이다.
  • cpu는 인터럽트 핸들러를 처리하는 시점에서 루프를 돌리지 않고 DMA에 명령을 내린다.
    • 몇번 디바이스의 buffer에서 몇 바이트 만큼 메모리에 옮기라는 명령 수행
  • cpu는 바로 다른 작업 수행
  • DMA가 여러개 존재해도 bus는 한번에 한 개 씩 밖에 못 옮긴다.
    • 따라서 한번에 수행할 수 있는 DMA는 하나 뿐이다.
profile
긍정적으로 살고 싶은 개발자

0개의 댓글