# Compute System Architecture


- CPU, Memory, I/O Device


1. System interconnect

- 시스템버스 : 데이터버스, 어드레스버스스

- Bus Master :  Bus를 장악하여 read/write transaction을 수행 (CPU, I/O Controller, DMA Controller, ...)

- Bus Arista : 여러 Bus Master들이 버스를 장악하려 할 떄, 특정 버스마스터에게 권한을 부여하는 역할을 수행. 

버스 마스터로부터 버스 request signal을 받은 후 알맞은 버스 마스터를 선정하여 grant signal을 부여

- Bus Slave : 데이터를 담고있는 장치이며, 데이터의 주소 정보를 저장하여야 함 (메인메모리, I/O Controller안의 버퍼메모리나 레지스터들)


- Memory의 Address와 I/O Device들의 Address의 주소 형식은 같게 할수도 다르게 할수도 있음

: 빈 주소/공간의 메모리에 엑세스를 하면 메모리의 셀에 접근하지 않고 I/O Device의 레지스터에 정보를 넘기는 방식 등...


- Interrupt-Driven I/O : I/O가 완료되면 I/O Controller가 CPU에게 비동기적으로 완료됨을 알려주는 방식

- Polling I/O : 무한루프를 돌면서 I/O Controller를 체크하여 I/O가 완료되었는지 확인


- I/O Address : I/O Controller의 주소

- Port Mapped I/O : I/O Contoller의 레지스터들을 Port 레지스터라고도 함. 메모리와 디바이스 레지스터들의 관리를 별도로 수행.

디바이스 레지스터들을 위해 별도의 주소공간을 할애하여 Port Address Space를 가짐. Input/Output을 위해 별도의 매커니즘이 필요

- Memory Mapped I/O : 메모리 공간의 일부를 디바이스 레지스터들을 위해 따로 할당하여 관리를 수행


- DMA(Direct Memory Access)

: 일반적으로 사용하던 character I/O 방식은 1byte 전송시마다 인터럽트가 수행되므로 Block Data I/O 에는 맞지않음

: CPU가 DMA Contoller에게 Initation하려면, CPU는 메모리상에서의 데이터의 시작주소와 Block Data의 크기, read/write Command를 DMA Controller에게 전달

: DMA Conrtoller는 Bus 마스터로 버스를 장악하여 버스로 메인메모리에서 데이터를 가져와 자신의 버퍼에 저장하였다가 I/O 디바이스로 전송

=> CPU의 개입없이 I/O Controller가 메모리에 직접 접근하여 데이터 Read/Write 수행


- DMA가 Block 데이터를 I/O하는 두가지 방식

1. Cycle Stealing : cpu가 버스를 사용하고 있지 않을때만 DMA Controller가 bus를 사용하는 방식

CPU의 성능에는 영향을 주지는 않음

2. Block Transfer : CPU와 DMA Controller가 대등하게 경쟁하여 Bus를 장악하는 방식으로 CPU의 성능에는 영향을 줌



# Interrupt Mechanism

: Interrupt Driven Operating System


- 기본적으로는 하드웨어적인 매커니즘으로 처리되며, 대부분의 경우 비동기적 매커니즘

- CPU의 컨트롤이 Interrupt Service routine 함수로 넘어와 수행하게 됨


- 소프트웨어 인터럽트 : 컴퓨터 내부에서의 알림. Trap

- 소프트웨어 인터럽트는 발생할 시점을 미리 예측할 수 있어, 동기적 매커니즘이라고 함함


- 인터럽트 매커니즘의 세부 Operation


- 하드웨어 인터럽트

: 마이크로 프로세서에 인터럽트 시그널을 받을 수 있는 Pin이 존재해야 함

: 인터럽트 Sources (DMA Controller, I/O Controller 등..)


처리 1. PC에서 현재 마이크로 프로세서에서 수행중인 인스트럭션의 주소를 저장

처리 2. Pin을 통해서 인터럽스 시그널을 받으면 현재 수행중인 현 인스트럭션의 수행은 마무리하고 중단

처리 3. 시그널을 받으면, 마이크로 프로세서는 인터럽트 Source를 구별하는 Interrupt Request Number(IRQ)를 가지고 어떤 Source 인지를 판별

처리 4. 메모리상의 한 부분에는 Interrupt Vector Table이라는 처리해야할 인터럽트 핸들러 정보가 저장되어 있어(인덱스로 저장되어 있음), 

이를 참조하여 인터럽트 서비스 루틴의 주소를 확인하고 수행

처리 5. 인터럽트 수행이 종료되면 수행중이었던 인스트럭션의 주소정보를 가지고 다시 처리가 진행되게 됨


=> 인터럽트 Pin의 scalability의 문제로 Programmable Interrupt Controller(PIC)이 등장


- PIC : Interrupt Source와 CPU사이에 존재하여, 하나의 output 라인과 여러개(약 16개정도)의 input 라인을 가짐

        : PIC를 확장하여, 앞의 PIC의 input line 하나와 연결하는 식으로 캐스캐이딩하게 확장이 가능함

: Interrupt Source들의 프로그래머블한 제어가 가능함(PIC에 Interrupt Source들에 대한 1bit의 플래그를 이용하여 소프트웨어적으로 disable/enable 설정이 가능)

=> 16개의 Interrupt Sources가 있으면 16비트짜리 플래그 레지스터가 존재 => Interrupt Mask Register


: Interrupt Mask Register는 I/O Operation이 필요하므로 Mask Register의 port number(I/O Address)를 타겟으로 output 작업이 수행됨

즉 Interrupt Mask Register는 I/O Address Range에 속해야하고 Port number를 부여받음



# Hardware Protection Mechanisms


- Active Job들의 Multi 수행을 위해 Base Register, Bound Register의 값을 설정하여 메모리 상의 주소를 관리

- Privileged instruction의 구현


1. Basic Mechanism - Dual Mode Operation

: 두가지의 수행모드로 동작. Kernel mode, User mode


- Processor Status Regitster : 마이크로프로세서의 특정 상태를 나타내는 레지스터.

최근에 수행한 작업들의 내용을 플래그 기반으로 기억하여 다음 작업의 수행에 영행을 미치게 됨

해당 레지스터의 mode bit라고하는 한 비트를 사용하여 수행모드를 결정함(Kernel mode : 0, User mode : 1)


- Priviliged Instruction의 수행 

1. 작업을 patch

2. patch한 작업을 디코딩하는 과정에서 mode bit을 확인

3. 문제가 있을 시 trap으로 소프트웨어 인터럽트를 발생시킴


=> Kernel Mode : Priviliged Instruction의 수행, Memory Access에 대한 모든 권한


- 모드간의 전환 : 소프트웨어적인 처리로는 매끄럽게 해결할 수 없음. 하드웨어적인 인터럽트 매커니즘을 사용하여 mode bit를 바꿔주어 처리

커널 모드로 변하는 순간 모드 체인지를 관할 할 수 있는 인터럽트 서비스 루틴이 시스템을 장악



2. I/O Protection

: I/O 자원을 여러 Job들이 공평하게 혹은 효율적으로 나누어 쓰게하기 위해 I/O Protection이 이루어 져야함


3. Memory Protection


4. CPU Protection

: CPU 자원을 monopollize 하지않기 위해 수행시간을 할당해 줌. counter 등등



'System > Etc.' 카테고리의 다른 글

[OS기초] CPU Scheduling  (0) 2015.09.22
[OS기초] Process & Thread  (0) 2015.09.21
KVM/KSM  (0) 2015.08.13
RAID  (0) 2015.08.12
마이크로커널운영체제  (0) 2015.06.25

+ Recent posts