컴퓨터 시스템의 구조, Structure of Computer System

컴퓨터의 구조

  • 컴퓨터 시스템은 CPU와 Memory 로 구성된 컴퓨터와 I/O 장치들로 이루어져있다.

  • CPU : 매 클럭 사이클마다 메모리에서 인스트럭션을 읽어서 실행한다.

  • 메모리 : CPU의 작업 공간

device controller

  • 모든 I/O device 들은 그들을 관장하는 미니 CPU들을 가지고 있는데, 이것이 바로 device controller 이다.

  • 제어 정보를 위해서 control register, status register 를 가지고 있으며,

  • 처리한 연산결과를 저장하기 위한 local buffer 를 가진다.

    • device controller는 CPU의 역할을 하기 때문에 이 역시도 각각 메모리가 필요하게 되는데, 이것이 바로 local buffer 이다.

  • I/O 는 실제 device 와 local buffer 사이에서 일어난다.

  • I/O 가 끝났을 경우에, interrupt 로 CPU 에게 그 사실을 알린다.

  • 참고

    • device driver : 장치구동기. OS 코드 중, 각 장치별 처리 루틴을 의미하며, 소프트웨어이다.

    • device controller : 장치제어기. 각 장치를 통제하는 일종의 작은 CPU 이며 하드웨어이다.

DMA(Direct Memory Access) controller

  • I/O 장치가 보내는 인터럽 신호에 의해 CPU가 너무 많이 인터럽이 걸려 비효율이 발생하는 것을 막기 위해서 DMA는 I/O 처리 결과를 locall buffer 에서 메인 메모리 내부의 대상 프로그램까지 데이터를 복사해주는 역할을 한다.

  • 복사까지 완료한 뒤에는 CPU에게 인터럽을 걸어 I/O 작업의 결과가 무사히 복사되었다는 것을 알리는데, 그 인터럽의 횟수가 직접 I/O device 로부터 인터럽을 받는 것보다 현저히 줄게 되니, CPU가 보다 빠르고 효율적으로 일을 할 수 있게 된다.

memory controller

  • CPU 와 DMA controller에 의해서 메모리가 동시에 접속되어 데이터가 유실되지 않도록 접속을 관리하는 역할을 수행한다.

registers

  • CPU 안에는 메모리보다 빠르게 접근하여 데이터를 저장하고 조회할 수 있는 곳인 레지스터가 존재한다.

mode bit

  • 지금 CPU에서 실행되는 것이 운영체제인지, 사용자 프로그램인지를 구분해준다.

    • 0 : 커널 모드

    • 1 : 사용자 모드

  • 0일 때는 무슨 일이든 다 할 수 있도록 정의되어있다. 1일때는 사용자 프로그램이 CPU를 가지고 있으니, 제한된 인스트럭션만 수행할 수 있도록 되어있다.

  • 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호장치이다.

  • 따라서 보안을 해칠 수 있는 중요한 명령어는 0 커널모드에서만 수행가능하다.

    • 참고로 커널모드는 모니터모드, 시스템 모드라고 부르기도 한다.

  • interrupt 이나 exception 이 발생하면 하드웨어가 mode bit 을 0으로 바꾼다.

  • 그리고 다시 사용자 프로그램에게 CPU를 넘기기 전에, mode bit을 1로 셋팅한다.

interrupt line

  • I/O device 및 기타 하드웨어에서 보내온 인터럽 신호를 전달받는 통로

  • CPU는 기본적으로 다음과 같은 사이클로 일을 한다.

    • 메모리로부터 수행할 프로그램의 명령어 조회

    • 연산 수행

    • 인터럽트 라인에 인터럽 신호가 들어왔는지 체크

      • 들어왔다면 그것을 수행한다.

      • 안들어왔다면 다시 메모리로 돌아가 프로그램의 명령어를 조회한다.

    • 위를 반복한다.

  • 이때, CPU에게 다른 하드웨어로부터 전달된 인터럽 신호를 전달하는 통로가 바로 interrupt line 이 된다.

  • 기본적으로 I/O device 는 그 자체로 속도가 굉장히 느리다.

  • CPU는 굉장히 빠르고 효율적인 존재이기 때문에 I/O device 들이 일을 끝낼때까지 마냥 놀고 먹으면서 기다릴 수가 없다.

  • 때문에 CPU는 I/O device 의 인터럽이 발생하면 device controller들에게 그 작업을 수행하며 결과를 local buffer 에 쌓고 있으라고 명령한다.

  • 그러면 CPU는 그동안 다시 메모리하고만 일하면서 다른 프로그램들을 실행하고 있는다.

timer

  • 만약에 메모리에 무한루프가 존재하는 프로그램이 실행되고 있다면?

    • 하나의 프로그램이 CPU를 독점할수도 있는 상황이 발생하게 된다.

    • 이때 필요한 것이 바로 timer 이다.

  • 1초보다 훨씬 짧은 시간을 산정하여 프로그램이 한번 수행되는 시간을 제한하고, 제한 시간이 끝나면 interrupt line 에 인터럽 신호를 주어 사용자 프로그램으로부터 운영체제로 CPU 소유권을 자동 이전시킨다.

  • 정해진 시간이 흐른 뒤, 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다.

  • 매 클럭 틱 때마다 1씩 감소한다.

  • 타이머 값이 0이 되면 타이머 인터럽트가 발생한다.

  • CPU를 특정 프로그램이 독점하는 것으로부터 보호한다.

  • time sharing 을 구현하기 위해 널리 이용된다.

  • 현재 시간을 계산하기 위해서도 사용된다.

  • 참고

    • 메모리에서 프로그램의 실행이 종료가 되어도 CPU 소유권은 자동으로 운영체제로 이동한다.

    • 사용자 프로그램에서 I/O작업이 필요할 때도 CPU 소유권을 자동으로 운영체제로 전달한다. 사용자 프로그램은 I/O device 에 접근할 수 있는 권한이 없기 때문이다.

결국 CPU 는 Program Counter 라는 레지스터에 적힌 메모리 주소로 이동하여 데이터를 조회하여 연산을 수행하고 그 결과를 다시 메모리에 적는 일을 반복적으로 수행할 뿐이다.

입출력(I/O)의 수행

  • 앞서 말한대로 모든 입출력 명령은 특권 명령으로써, 오직 운영체제만 그 권한을 가지기 때문에 커널모드에서만 수행될 수 있다.

  • 그러면 사용자 프로그램은 어떻게 I/O 를 할 수 있을까?

    • 사용자 프로그램에서 I/O 가 필요해지면, 프로그램 차원에서 interrupt 를 걸 수 있다. (커널함수호출)

    • 그러면 interrupt line 을 확인한 CPU가 interrupt 가 걸리고, mode bit 이 1→0으로 변경된다.

    • 이때부터 CPU 제어권은 운영체제에게 넘어가게 된다.

    • 이 과정을 시스템콜이라고 한다.

  • 사용자 프로그램은 trap을 이용하여 인터럽트 백터의 특정 위치로 이동하게 된다.

  • 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동하며

  • 올바른 I/O 요청인지 확인 후 이를 수행한다.

  • I/O 완료 시에 제어권을 시스템 콜 다음 명령으로 옮기게 된다.

인터럽트(interrupt)

  • Interrupt : 하드웨어 인터럽트로 timer, device controller 등 하드웨어가 발생시킨 인터럽트를 의미한다.

  • Trap : 소프트웨어 인터럽트로 사용자 프로그램에 의해 발생한 인터럽트를 의미한다.

    • exception : 프로그램이 오류를 범한 경우

    • system call : 프로그램이 커널 함수를 호출하는 경우

  • 관련용어

    • 인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 가지고 있다. 각 인터럽트의 종류마다 어디에 있는 함수를 수행해야하는지 정리해둔 것이다.

    • 인터럽트 처리 루틴 : 해당 인터럽트를 처리하는 커널 함수.

      • 인터럽트는 다양한 주체들에 의해 걸릴 수 있다. (timer, io device controller, 사용자 소프트웨어 등)

      • 다양한 주체들 별로 수행해야하는 일들이 다른데, 이런 것들을 정리해둔 것이 바로 인터럽트 처리 루틴이다.

      • 인터럽트 서비스 루틴, 인터럽트 핸들러라고도 한다.

Last updated