티스토리 뷰

컴퓨터 시스템 구조

 

CPU

  • 매 클럭 사이클 마다 메모리에서 instruction(기계어 명령)를 읽어서 처리하게 된다
  • CPU는 한번의 Instruction을 실행할 때마다 실행하고 난 후 interrupt line을 확인하고 있으면 처리 후 다음 Instruction을 실행한다
  • interrupt가 있으면 일단 처리중인 일을 멈추고 OS로 제어권이 넘어간다. OS는 해당 Interrupt를 보고 적절한 조치를 취하게 된다

 

메모리

  • cpu의 작업 공간

 

Device Controller

  • I/O 장치들을 전담하는 작은 cpu 같은 것으로 I/O device에 붙어있다
  • 디스크의 헤더가 욺직이는 등 I/O디바이스를 전담하는 역활을 한다
  • cpu와 I/O device의 처리성능에서 약 100만배 정도의 매우 큰 차이를 보이므로, device controller가 대신 전담하게 된다

 

Device driver

  • I/O device 구동기로서 CPU가 해당 장치를 실행하기 위해 필요한 것들이 담겨있는 코드이다
    • 참고 - 특정 device를 동작하기 위해 무엇을 실행해야하는지 등은 장치 내부 펌웨어에 있다

 

Local Buffer

  • Device Contoller들의 작업공간이다

 

register

  • 메모리보다 더 작으면서 빠른 공간

 

Mode bit

  • 현재 cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해주는 것
    • 0 : 운영체제에서 CPU가 실행중 (커널, 모니터 모드) - 보안을 해칠수 있는 명령은 커널모드에서만 수행 가능하도록 규정
    • 1 : 사용자 프로그램에서 CPU가 실행중 (사용자 모드) - 특권 명령을 사용할 수 없다
  • I/O 디바이스는 운영체제만이 접근할 수 있다. 따라서 위와같이 CPU를 사용하는 것이 운영체제인지 사용자 프로그램인지에 따라 접근을 막아야하므로 0, 1을 통해 구분하면서 cpu를 넘기게 된다

 

Interrupt line

  • CPU는 매 싸이클마다 하나의 instruction을 처리하고, 주소값을 증가시켜서 다음 instruction을 처리하게 된다.
  • 그러던 중 키보드에 어떠한 입력이 들어왔다던가, 파일을 읽거나 써야하는 요청이나 완료를 한 경우 등의 이벤트를 알려주기 위해 인터럽트가 발생하면 인터럽트 라인에 인터럽트가 들어온다.
  • 만약, instruction에서 디스크 읽기 등의 요청이 interrupt line으로 오게되면 cpu가 직접 디스크를 읽어오는 것이 아니라, disk controller를 통해 읽어오라고 시키게 된다.
    disk가 읽으면서 해당 데이터를 local buffer에 저장하고 끝이 나면 그때 다시 interrupt line을 통해 cpu에게 알려주게 된다. cpu는 데이터를 받고 차례가 오기전까지 다음 작업을 처리하고 있게 된다.

Timer

  • 만약, 무한루프를 도는 프로그램을 만들게 된다면 해당 프로그램은 종료되지 않고 계속 cpu를 사용하게 되어서 다른 프로그램으로 cpu가 넘어가지 못하게 된다.
    따라서 하드웨어에는 Timer를 두고 cpu에게 프로그램을 넘겨줄 때 timer의 시간을 세팅해서 가게된다. 그러고 시간이 끝나게 되면 timer는 interrupt를 cpu에 걸어서 시간이 끝났음을 알려준다
  • 일단 사용자 프로그램으로 cpu의 제어권이 넘어가면 운영체제도 더이상 손쓸 방법이 없다. 따라서 timer를 통해 interrupt를 줘서 cpu 제어권을 다시 운영체제로 가져올 수 있도록 한다

 

사용자 프로그램

  • 프로그램 코드를 처리하다가 입력값을 받거나 결과를 출력하는 I/O를 하게 되면 프로그램이 알아서 OS에게 I/O를 해달라고 OS에게 cpu를 넘겨주게된다. 그럼 OS를 통해 cpu가 IO 컨트롤러에게 시키게 된다.
  1. 요청한 데이터가 충족되면 Contoller가 inturrupt를 날린다.
  2. cpu의 제어권을 가진 OS는 해당 interrupt를 보고 받은 데이터를 처리하기 위해 받은 데이터를 일단 요청 프로그램의 메모리로 옮긴다.
  3. 다시 중간에 멈춘 (타이머가 남아있다면) 그 프로그램을 이어서 처리하게된다.
  4. 이 후 차례가 다시 오면 데이터를 받아서 준비가 완료된 프로그램을 진행하게 된다.

 

DMA controller & Memory Controller - 잦은 I/O로 인한 interrupt 문제점 해결

CPU가 여러 I/O 장치로 인해 지속적으로 Interrupt를 당하게 되면 아무리빠른 장치라도 처리를 제대로 할 수가 없게 된다. 따라서 이를 위해 Direct Memory Access Controller를 두게 된다.

기존에는 Memory에 접근할 수 있는 것은 CPU뿐이였지만, DMA controller를 이용해서 I/O의 interrupt를 통해 요청된 local buffer의 데이터를 메모리로 옮기는 작업을 하게 된다. 작업이 완료되면 그때 DMA가 interrupt를 통해 작업이 완료됐다고 알린다.

 

DMA

  • CPU의 중재없이 device Controller가 device의 buffer storage의 내용을 메모리에 blcok 단위로 직접 전송한다.
  • 바이트 단위가 아니라 buffer에 모아서 Block단위로 인터럽트를 발생

momory Contoller는 DMA와 CPU의 동시적인 메모리 접근을 관리하게 된다

 

입출력의 수행

  • 모든 입출력 명령은 특권명령으로 운영체제를 통해서만 할 수 있다
  • 사용자 프로그램은 어떻게 입출력을 할까?

시스템 콜(system call)

  • 사용자 프로그램이 진행되다가 입출력을 필요로 하면 입출력은 운영체제만이 가능하므로 해당 위치의 instruction으로 가야하는데 mode bit이 1이므로 사용자 프로그램은 운영체제의 메모리로 갈수가없다.
  • 따라서 사용자 프로그램이 스스로 cpu에 interrupt를 줘서 운영체제에게 cpu제어권을 넘기고 cpu는 interrupt를 확인하고 os가 cpu를 통해 I/O 처리를 하게 된다.

 

인터럽트 Interrupt

  • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후 cpu의 제어를 인터럽트 처리 루틴으로 넘기게 된다

Interrupt : 하드웨어 인터럽트

Trap : 소프트웨어 인터럽트

  • Exception : 프로그램이 오류를 범한 경우 (0으로 나누기, 운영체제 메모리 접근 등)
  • System call : 프로그램이 커널 함수를 호출 하는 경우 - cpu제어권 넘김

파일을 작성할 때 I/O작업을 하기 위해 프로그램이 Trap(소프트웨어 인터럽트)을 발생시키고, 작성이 완료되면 DMA 컨트롤러가 Intrurrupt (하드웨어 인터럽트)를 발생시키게 된다.

 

인터럽트 벡터 : 해당 인터럽트의 처리 루틴 주소를 갖고있다

인터럽트 처리 루틴 (인터럽트 핸들러) : 해당 인터럽트를 처리하는 커널 함수

 

사실상 현대 컴퓨터는 인터럽트로 인해 구동된다.

반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday