본문 바로가기

운영체제

운영체제; 컴퓨터구조, device controller(장치 제어기)

반응형

# 컴퓨터 구조

 

 

컴퓨터 내부의 버스와 컨트롤러는 위와 같은 구조를 이루고 있습니다. 컴퓨터 내부의 장치들이 서로 소통을 하기 위해서는 데이터 선이 필요한데 이를 bus라고 하고, 최근에는 PCI bus를 많이 사용하고 있습니다. bus들은 여러가지 종류가 있는데, PCI는 그 중에 하나입니다.


 

정리

bus is data line;

PCI bus를 많이 사용;

 

 

컴퓨터는 PCI bus를 중심으로 여러가지 프로토콜의 데이터를 주고받을 수 있어야 합니다. 장치마다 모두 사용하는 bus의 종류가 다르기 때문입니다. 비교적 저속의 데이터를 주고 받기 위해서는 expansion bus를 사용하고, SCSI bus와 같은 경우는 SCSI 프로토콜을 가진 장치들이 데이터를 송수신할 때 사용합니다. 이외에도 모니터와 프로세서와 같은 요소들과 효율적으로 데이터를 주고받을 수 있어야 합니다.


 

정리

kind of bus is various;

1. expansion bus : 저속 데이터 송수신;

2. SCSI bus : SCSI프로토콜 가진 장치들 데이터 송수신;

 

 

 

 

 

 

controller의 역할을 정리하면 아래와 같습니다.

  • 다른 프로토콜의 bus 규격을 가진 bus와의 소통을 위하여 필요
  • 여러 개의 연결된 디바이스의 데이터들을 보내기 위하여 필요
  • 효율적인 데이터 전송을 위하여 그래픽 장치나 프로세서, 메모리와 같은 요소들과 버스 사이에 위치

 

 

Controller 의 역할

소통, 송신, 장치나 요소 사이 위치;

 

 

 

 

 

 

PCH

많은 콘트롤러들은 메인보드에서 기존에는 노스브릿지에 위치하고 있었지만, 현재는 PCH(Platform Controller Hub) 내부에 위치하고 있습니다. 이름부터 Controller Hub이니 많은 컨트롤러들이 들어 있겠죠. 디바이스 컨트롤러는 구글에 많은 자료들에서 I/O Controller와 혼용해서 사용하는 것 같습니다.

 


 

정리

PCH 내부에 많은 컨트롤러가 있다;

 

 

 

 

 

 

 

# 디바이스 드라이버 (Device Driver)

 

controllor는 hardware , driver는 softmware로 분류

device driver and device controller connection

디바이스 드라이버는 위키백과의 내용을 많이 참조했습니다. 가장 이해하기 좋은 것 같습니다. 장치 드라이버/제어기(문화어: 장치구동기, 장치구동프로그람) 또는 디바이스 드라이버(영어: device driver)는 특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램입니다. 호스트 시스템의 운영체제가 각각의 디바이스를 접근하게 하기위한 인터페이스 역할을 하는 소프트웨어라고 할 수 있습니다. 장치를 식별하고, 구동/정지하며 절전시키기 위한 기능들이 구현되어있습니다.

장치드라이버는 커널의 일부분이기는 하나 커널과 통합되는 것은 처음부터 해당 드라이버 프로그램 코드소스가 커널 전체 소스에 포함되어 컴파일되는 경우도 있고, 그리고 별도로 컴파일된 파일(윈도의 *.sys, 리눅스의 *.o)의 형태로 존재하고 부팅 시 또는 필요 시 해당 파일이 로드되어 커널과 통합되기도 합니다.

드라이버는 흔히 컴퓨터 버스, 또는 하드웨어와 이어진 통신 하위 시스템을 통해 장치와 통신합니다. 요청하는 프로그램이 드라이버의 명령어를 호출하면, 드라이버는 장치에 명령어를 전달합니다. 장치가 드라이버에게 데이터를 되돌려 주면, 드라이버는 원래 요청한 프로그램의 명령어로 데이터를 다시 전달합니다.

 

 


 

정리

device driver는 커널의 일부분이며 소프트웨어다;

driver는 bus, 통신 하위 시스템을 통해 장치와 통신; // 프로그램이 드라이버 명령어 호출->전달

 

 

 

 

 

 

 

device와 소통 과정

장치 드라이버는 흔히 장치 칩의 레지스터에 접근하여 하드웨어를 제어하며 하드웨어와 주변 기기를 사용하는 프로그램의 중간 다리 역할을 합니다.

응용 프로그램은 하드웨어를 직접 제어할 수 없어, 커널의 디바이스 드라이버를 사용하기 위하여 시스템 콜을 이용합니다.

또한, 전자 제품에서 각각의 주변 장치들을 제어하기 위하여 설계된 펌웨어도 장치 드라이버로 분류됩니다. 이런 해석은 위키백과의 ‘펌웨어’ 부분을 참조해보면 나오는 아래와 같은 부분을 보고 이해할 수 있습니다.

펌웨어와 장치 드라이버

드라이버는 흔히 컴퓨터 버스, 또는 하드웨어와 이어진 통신 하위 시스템을 통해 장치와 통신한다. 요청하는 프로그램이 드라이버의 명령어를 호출하면, 드라이버는 장치에 명령어를 전달한다. 장치가 드라이버에게 데이터를 되돌려 주면, 드라이버는 원래 요청한 프로그램의 명령어로 데이터를 다시 전달한다. 드라이버는 하드웨어에 의존하며 특정한 운영 체제를 따른다. 이러한 드라이버는 비동기 시간에 의존하는 하드웨어 인터페이스에 필요한 인터럽트를 다룰 수 있다. 장치 드라이버는 흔히 장치 칩의 레지스터에 접근하여 하드웨어를 제어하며 하드웨어와 주변 기기를 사용하는 프로그램의 중간 다리 역할을 한다.

 


 

정리

펌웨어는 장치드라이버 (device driver);

 

 

 

 

 

3. 장치 안에도 컨트롤러가 있다?

SATA 규격의 SSD

위에서 언급한 device controller가 아닌 device 안에도 컨트롤러가 있습니다. 두 개의 차이점은 무엇일까요? 예시로 SSD를 들겠습니다. SSD에는 연결된 호스트 시스템(컴퓨터나 아이패드 같은 녀석들)과 교신할 수 있게 하는 컨트롤러가 포함되어 있습니다. 가령 위의 이미지에서 SSD에는 대부분 1개 이상의 Nand Flash가 있습니다. 여러 Nand Flash에 효율적으로 데이터를 쓰는 것이 필요합니다. 또, 연결된 호스트 시스템의 명령 없이도 불필요한 데이터를 제거하며, 컴퓨터와 소통을 하기 위하여 SSD 컨트롤러가 필요합니다. 아래의 두 이미지를 통하여 제대로 이해할 수 있습니다.

Conventional Flash Interface

SSD Controller

디테일하게 이미지를 통하여 보면 SSD 컨트롤러 안에 DRAM 컨트롤러가 있는 것을 확인할 수 있습니다. 또, Host Interface Logic(Buffer & Controller) 안에도 컨트롤러가 있는 것을 확인할 수 있습니다. 즉, SSD 컨트롤러 안에 여러가지의 디바이스 컨트롤러가 들어있다고 보면 될 것 같습니다.

SSD Controller SOC Architecture

USB와 같은 경우도 Flash 메모리와 컨트롤러가 있습니다. 위의 그림에서 볼 수 있는 SATA 규격의 SSD도 컨트롤러가 있는데, SATA 버스에 데이터를 주고받기 위하여 SSD 컨트롤러가 필요합니다. SSD 컨트롤러가 데이터를 SATA 버스로 보내면, 호스트 시스템에 있는 SATA 컨트롤러가 해당 데이터를 받아서 처리를 한다고 보면 됩니다.

 

 

4. 사례를 통한 정리

4.1. 파일 읽기

  1. 사용자가 어떤 파일을 읽기 요청을 합니다.
  2. 그러면 CPU가 읽기 명령을 내리게 되고, I/O 장치와 바로 통신을 하는 것이 아니라 먼저 디바이스 컨트롤러에 명령을 내립니다. 이 때, 디바이스 컨트롤러에 있는 Instruction Register(IR)와 Data register에 명령을 집어 넣습니다.
  3. 디바이스 컨트롤러는 자신의 IR에 있는 명령어를 순차적으로 수행하게 됩니다. 수행하다보니, 방금 보낸 읽기 명령어가 수행될 차례입니다.
  4. 해당 컨트롤러가 연결된 장치들 중에서 명령어에 해당되는 장치에게 읽을 데이터를 요청합니다.
  5. 장치 내부의 컨트롤러는 이를 인지하고 요청한 데이터(Host가 읽은 데이터)를 디바이스 컨트롤러를 이용하여 DRAM(ssd의 경우 내부의 DRAM controller 사용)이나 Host의 디바이스 컨트롤러의 내부 메모리(버퍼)에 집어 넣습니다. 만약 데이터 크기가 클 경우에, 읽은 데이터를 매번 CPU에게 알려주려고 인터럽트를 주면 효율이 떨어지게 됩니다.(매번 CPU가 데이터를 처리하는 방식은 PIO라고 합니다) 따라서, DMA(직접 메모리 접근, Direct Memory Access)를 이용하여 데이터를 알아서 메모리에 옮겨 놓고 옮겼다고만 알려줍니다.

PIO & DMA


출처

 

728x90