본문 바로가기

운영체제/기본

운영체제 - 컴퓨터구조 기본

운영체제 - 컴퓨터구조 기본



컴퓨터 하드웨어 장치(=I/O device)는 서로 "BUS"를 통해서 서로 연결되어 있다. 또한, 각 I/O device와 CPU간의 통신을 위해 각각의 I/O device는 자신만의 I/O controller를 갖는다. 예를들어, DRAM(main memory)를 위한 I/O Controller로 DRAM controller가 존재한다.


이러한 BUS는 3가지의 종류로 나뉜다.

1) Data BUS : 실제 data의 이동

2) Address BUS : 이동시키고자 하는 data의 address

3) Control BUS : read or write


BUS를 통한 데이티의 이동은 Bus Master(주체), Bus Slave(객체)로 나뉜다.

ex. CPU <> DRAM, CPU <> I/O device, I/O device <> DRAM



Bus Master는 데이터 통신을 하고 싶을 때, Bus를 장악하려고 한다. 그러나, Bus Master는 여러개가 가능하므로 이것을 중재해 주는 중재자를 요구한다. 이것이 Bus Arbiter이다.


Bus 데이터 통신 절차

1) Bus Master는 Bus Arbiter에게 Bus REQUEST 요청을 보낸다.

2-1) Bus가 Idle하면 Bus Arbiter는 Bus Master에게 grant 응답을 보낸다.

2-2) Bus가 busy하면 Bus Arbiter는 Bus Master에게 reject 응답을 보낸다.


Bus Master의 종류

1) CPU

2) I/O Controller : I/O controller가 CPU에게 interrupt를 보낼 때

3) DMA Controller : DMA controller가 CPU에게 interrupt를 보낼 때


Bus Slave의 종류

1) DRAM

2) I/O Controller : CPU가 I/O Controller에게 I/O operation을 요청할 때



CPU가 I/O Controller에게 I/O operation을 요청하는 데 이것은 I/O controller의 memory에 값을 쓴다는 것을 의미한다.

즉, I/O controller 내부에 있는 버퍼 메모리 혹은 레지스터에 값을 쓴다.

이때 I/O controller 메모리를 표현하는 방식이 두가지로 나뉜다.

1) memory mapped I/O

- main memory(DRAM)과 같은 메모리 주소표현을 공유한다.

 Only for I/O controller

 main memory

        << main memory >>


위 메모리 도식도와 같이 메모리의 특정 주소공간을 I/O controller의 메모리 접근을 위한 주소로 사용한다. 해당 주소로 접근하는 연산의 경우 실제로 main memory에 접근하는 것이 아닌 I/O controller의 내부 메모리에 접근한다.

- ARM processor ( RISC 방식이므로 추가적인 instruction을 만들지 않음 )


2) port mapped I/O

- I/O controller의 내부 메모리를 위한 별도의 special instruction을 사용하는 경우.

- Intel x86 processor. ( CISC )



CPU가 I/O device에 data를 쓰는 절차

# Interrupt-driven I/O

1) I/O controller 내부 메모리에 data를 씀.

2) I/O controller에 write 명령을 전달.

3) I/O controller는 BUS를 보다가 BUS idle할 때 연산 수행.

4) I/O operation이 완료되면 interrupt를 발생시켜 연산종료를 CPU에게 알림.


# Polling I/O

- CPU가 I/O operation이 완료될 떄까지 idle한 것.



DMA( Direct Memory Access ) Controller

1) CPU -> DMA controller 에게 ( 전송 data base address, block size )를 전달

2) CPU -> DMA controller 에게 read or write 전달

3) DMA Controller는 내부 버퍼 메모리를 이용하여 disk <> main memory간 데이터를 옮김.

4) 데이터를 모두 옮겼으면 DMA operation이 끝났다는 interrupt를 CPU에게 전달.


DMA 방식

1) Cycle Stealing

- CPU가 Bus를 쓰지 않을때(=Bus idle, CPU가 Instruction을 수행중일때) DMA controller가 BUS를 장악하고 데이터를 옮김.


2) Block transfer

- CPU와 DMA controller가 서로 BUS를 경합