[운영체제] 3. System Structure & Program Execution 1

이건회·2022년 3월 8일
0

운영체제

목록 보기
2/27

  • 다음은 컴퓨터 시스템의 구조를 나타낸 그림이다. i/o 디바이스의 데이터가 컴퓨터로 넘어가면 인풋, 컴퓨터에서 i/o 디바이스로 가면 아웃풋이다.
  • cpu는 매 클럭 사이클마다 메모리에서 지시를 하나씩 읽어 실행한다.

  • 인풋 디바이스에서 입력을 하여 컴퓨터로 들어가고 컴퓨터가 입력을 처리해 아웃풋 디바이스로 보낸다.
  • i/o 디바이스에는 디바이스를 전담하는 cpu가 붙는데 이를 device 컨트롤러라 한다. 이것이 디바이스를 전담하여 컨트롤 한다. 디바이스 컨트롤로의 작업 공간이 로컬 버퍼다.

  • cpu에는 메모리보다 빠르면서 정보를 저장하는 공간이 있는데 이를 레지스터라 부른다.
  • mode bit는 cpu에서 실행하는 것이 운영체제인지 사용자 프로그램인지 구분해주는 것이다.
  • interrupt line은 cpu가 메모리를 읽어들이고 있다가 입출력 명령이 들어왔을때 이를 cpu에 전달하는 역할이다.
  • cpu는 디스크로부터 무언가를 읽어오기 위해 직접 읽는 것이 아닌 디바이스 컨트롤러에게 명령을 보낸다.
  • cpu가 입출력 명령없이 무한정 메모리로부터 읽는 작업만 하면 다른 작업을 수행할 수 없다. 따라서 timer를 통해 특정 프로그램이 cpu를 독점하지 못하도록 한다. 운영체제가 타이머에 시간을 세팅하여 넘겨주는데 다음에 cpu를 얻는사용자 프로그램은 타이머에 할당된 시간동안만 cpu를 사용할 수 있다. 한 timer가 끝날 때 마다 cpu는 interrupt line을 체크해 입출력 명령이 들어왔으면 작업 중단, 안 들어왔으면 작업을 계속한다.

  • mode bit이 0이면 운영체제가 cpu에서 수행 중인 것이고, 1일 때는 사용자 프로그램이 cpu에서 수행 중인 것이다. 따라서 mode bit이 0일때는 cpu가 자유로운 instruction을 수행하고 1일 때는 cpu가 한정된 instruction만을 실행하도록 한다. 이는 사용자 프로그램으로부터 보안을 해치지 않도록 하기 위해서이다.

  • 타이머는 특정 프로그램의 독점을 막기 위해 운영체제가 사용자 프로그램에 cpu를 넘겨줄 때 시간을 셋팅하여 그 시간만큼만 cpu를 사용자 프로그램에 할당하는 것이다.

  • 메모리 컨트롤러는 메모리를 전담하는 컨트롤러다.
  • cpu에 너무 입출력 인터럽트가 많이 들어오면 작업이 중단되므로 효율적이지 않다. 따라서 DMA controller라는 것을 두는데, 원칙적으로는 cpu만이 메모리에 접근할 수 있지만 이 경우 DMA 컨트롤러 또한 cpu에 접근 가능하다. 이 둘이 한꺼번에 메모리에 접근하면 문제가 생길 수 있으므로 이를 메모리 컨트롤러에서 중재한다.
  • DMA는 입출력 요청이 들어왔을 때 cpu가 중단 없이 계속 메모리에서 읽는 작업을 하게 하도록 직접 요청을 처리하여 데이터를 메모리에 복사해주는 역할을 한다. DMA의 작업이 끝나면 cpu에 한 번만 인터럽트를 걸어 작업이 완료되었음을 알린다. 이렇게 인터럽트를 줄여 효율성을 높인다.

  • 디바이스 컨트롤러는 i/o 장치를 전담하는 작은 cpu다. cpu가 지시한 내용을 수행하기 위한 제어 정보를 전담하고, 화면에 출력하는 등의 데이터를 담기 위한 로컬 버퍼 등을 가진다.
  • 즉 디바이스 컨트롤러는 하드웨어인데, "디바이스 드라이버"라는 소프트웨어가 있다. 운영체제에 있는 코드 중 각 디바이스에 맞는 처리를 할 수 있도록 하는 소프트웨어다.
  • 따라서 하드웨어를 하나 설치할 때마다. 그 디바이스에 맞는 디바이스 드라이버를 운영체제에 설치해줘야 한다.

  • 입출력 명령은 특권 명령이므로 사용자 프로그램이 직접 접근하지 못하고 운영체제를 통해서만 접근할 수 있다.
  • 따라서 사용자 프로그램이 디스크에서 무언가를 읽기 위해서 운영체제에 부탁을 해야 한다. 이를 "시스템 콜"이라 부른다.
  • 사용자 프로그램일때 디스크를 읽기 위해서는 운영체제가 이를 수행해야 하는데 현재 mode bit 이 1이므로 불가능하다. 이럴 경우 사용자 프로그램이 직접 운영체제로 cpu를 넘기기 위해 cpu에 인터럽트를 걸고 cpu가 이를 확인하면 mode bit이 0으로 바뀌고 작업이 수행된다. 이 과정이 시스템 콜이다.

  • 인터럽트는 일반적으로 하드웨어가 직접 인터럽트를 거는 것을 말하지만, 소프트웨어가 인터럽트를 거는 경우도 있는데 이를 Trap이라 부른다.
  • Trap에서 프로그램이 오류를 범한 경우를 Exception이라 하고, 프로그램이 커널 함수를 호출하는 경우를 위에서 언급한 시스템 콜이라 부른다.

  • 사용자 프로그램의 i/o 요청은 본인이 직접 인터럽트를 걸어 cpu가 os에게 넘어가게 하는 것이다. 이것이 트랩이다.
  • os는 항상 접근 권한 등을 확인하여 요청이 올바른지 확인하고, 올바른 요청인 경우에 i/o 요청을 컨트롤러에 명령하는 것이다. i/o가 끝났을 때 i/o 컨트롤러에 의한 하드웨어 인터럽트가 걸리게 되므로 제어권을 시스템콜 다음 명령으로 옮긴다.
  • 즉 i/o 요청을 할때는 소프트웨어 인터럽트가, i/o 요청을 끝내면 하드웨어 인터럽트가 걸리는 것이다.

  • 시스템 콜은 꼭 i/o 요청이 아니더라도 사용자 프로그램이 운영체제에 무언가를 부탁할때 수행되는 것이다. 운영체제의 코드를 직접 수행하는 것이 불가능한 경우이다.

  • 인터럽트는 다양한 종류가 있고 각각의 종류마다 해야하는 일이 다르다. 이렇게 각각의 인터럽트가 무엇을 해야 하는지를 운영체제의 코드에 정의한 것이 인터럽트 처리 루틴이다.
  • 그러면 각 인터럽트 마다 어떤 인터럽트 처리 루틴으로 가야 할지를 표시해야 하는데, 이 주소 표시를 테이블에 저장해 놓은 곳이 인터럽트 벡터이다.
profile
하마드

0개의 댓글