본문 바로가기
about COMPUTER/컴퓨터 시스템

# 06. 하드웨어와 운영체제(1) / 컴퓨터 시스템 구조

by saniii 2020. 10. 15.

[ 하드웨어와 운영체제(1) - 컴퓨터 시스템 구조 ]

 

 

- CPUI/O 장치를 사용하기 위해 Device controller에 수행명령을 하고,

  I/O장치의 일이 끝나면 device controllerinterrupt line에 신호를 보내어 CPUI/O일을 마무리하도록 한다.

 

- CPU는 하나의 intruction을 수행할 때마다 interrupt line을 확인한다.

 

-  timer : 운영체제가 부팅된 후 타이머(하드웨어 장치)에 일정한 시간을 부여한 후

  cpu를 프로그램에 넘겨줌, => 어떤 프로그램이 CPU를 독점하지 못하도록 하는 장치

 

 

* 핵심 : 운영체제 부팅 timer에 일정시간 설정 - A에게 CPU 넘김 - 일정시간 지난 후 다른 프로그램으로 CPU 넘김

 

+ cpu를 뺏어서 os에 넘겨줄 수 있는 방법

1. I/o에서 interrupt line을 통해 넘겨줌

2. timer를 통해서 넘겨줌

 

+ 사용자 프로그램이 스스로 CPU를 넘기는것

1. 사용자 프로그램이 자기 일 다 끝나서 os에 돌려줄때

2. 사용자 프로그램이 io작업을 필요로 하여 os에 부탁할 때

 

+ 전체적 구조 설명

프로그램 A,B가 있을 때 먼저 OSCPU를 소유하다가 timer에 시간 설정하고 ACPU넘김

다음으로 A의 연산을 수행하다가 I/o작업이 필요하면 OS에 요청

OSCPU제어권을 가지고 io요청을 진행하고 CPU는 그동안 B에게 소유권을 넘긴다.

이 수행중에 IO작업이 끝나 interrupt line에 신호를 보내면 강제적으로 OSCPU제어권이 넘어간다.

Os가 일을 처리하고 난 후에 아직 Btimer 속 시간이 남아 있으면 A가 아닌 B에게 CPU 제어권을 넘긴다

 


# mode bit 

mode bit : 현재 CPU를 사용하고 있는 프로그램이 OS인지 사용자 프로그램인지 구별하주는 장치(레지스터)

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

 

mode bit : 1 // 사용자 모드 : 사용자 프로그램 수행

mode bit : 0 // 커널 모드(=모니터 모드=시스템 모드) : OS 코드 수행

 

- 보안을 해칠 수 있는 중요한 기계어는 모니터 모드에서만 수행 가능한 특권 모드로 규정

- interruptexception 발생 시 강제로 CPU 제어권을 뺏어 OS에 넘기면서

  하드웨어가 mode bit0으로 바꿈

- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit1set

 

 


+ timer (타이머)

목적 : CPU를 특정 프로그램이 독점하는 것을 차단

정해진 시간이 흐른 뒤 OS에 제어권이 넘어가도록 interrupt 발생

timer는 매 클럭 틱 때마다 1씩 감소

timer 값이 0이 되면 timer interrupt 발생

 

- timertime sharing을 구현하기 위해 널리 이용됨

- timer는 현재 시각을 계산하고 싶을 때도 이용

 


+ Device Controller

* I/O device controller

    - 해당 I/O 장치유형을 관리하는 일종의 작은 CPU

    - 제어 정보를 위해 control register, status register를 가짐

    - local buffer를 가짐 (일종의 data register)

* I/O는 사실상 devicelocal buffer 사이에서 일어남

* Device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알림

 

- device driver (장치구동기) : OS 코드 중 각 장치별 처리루틴  ->  software

- device controller (장치제어기) : : 각 장치를 통제하는 일종의 작은 CPU  -> hardware

 

+ I/O의 수행

- 모든 입출력 명령은 특권 명령으로 커널모드에서만 수행가능

- 사용자 프로그램은 어떻게 I/O를 하는가?

          1. 시스템콜 (system call)

                    사용자 프로그램이 OSI/O 요청

          2. trap을 사용하여 인터럽트 벡터의 특정 위치로 이동

          3. CPU 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴으로 이동

          4. 올바른 I/O 요청인지 확인 후 I/O 수행 (이때 CPU는 타 프로그램으로 넘어감)

          5. I/O 완료 시 CPU 제어권을 시스템 콜 다음 instruction으로 옮김

 


 

+ Interrupt (인터럽트)

* 인터럽트 당한 시점의 레지스터와 program countersave 한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다

 

(넓은 의미)

* Interrupt (하드웨어 인터럽트) : 하드웨어가 발생시킨 인터럽트

        - I/O 요청이 끝났을 때

* Trap (소프트웨어 인터럽트)

        - I/O 요청을 할 때

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

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

 

* 인터럽트 관련 용어

- 인터럽트 벡터

        해당 인터럽트 처리루틴의 주소를 가지고 있음

- 인터럽트 처리 루틴 (=Interrupt Service Routine, 인터럽트 핸들러)

        해당 인터럽트를 처리하는 커널 함수


+ System call (시스템 콜)

* 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것

 


+ DMA (Direct Memory Access)

* 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용

* CPU의 중재 없이 device controllerdevicelocal buffer storage의 내용을 메모리에 block 단위로 직접 전송

          - 다 복사하고 나면 CPUinterrupt 발생

* 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

 

I/O 장치에서 local buffer에 입력이 들어올 때마다 CPUinterrupt되면 효율이 떨어지기 때문에 일정량의 local buffer를 채우면 Memory controller에 신호를 보내 CPU를 interrupt하도록 한다. (- 하드웨어 장치 )

: 메모리에 접근 가능하다. (원래는 CPU만 접근 가능)

 

** Memory controller : CPUDMA가 동시에 memory에 접근하는 것을 막기 위한 장치

 


+ Device Driver (장치 구동기)

OS 코드 중 각 장치별 처리루틴.

하지만 동일한 종류의 디바이스는 같은 인터페이스를 가짐

Kernel I/O subsystem에서 device controller 사이의 차이를 숨기는 것이 목적임

 


+ Interrupt-driven I/O cycle

♧ 사용자 프로그램이 I/O 장치 사용을 요청

 CPUI/O controller에 명령

 I/O controller는 명령을 수행하고 그 사이 CPU는 다른 프로세스를 실행하며 interrupt 확인

    (CPU는 instruction 한 개 수행시마다 interrupt 신호 확인)

 I/O 수행이 끝나 interrupt를 걸고 CPU는 이를 확인하고

interrupt handlerCPU 제어권을 넘긴다. , 커널로 넘기게 되는 것

I/o interrupt를 다 해결하고 난 뒤 기존에 CPU를 사용하고 있던 프로세스에 다시 CPU 제어권을 넘긴다.

    (다만 timertime이 아직 남아 있었어야 함. 남아있지 않았다면 다음 순서의 프로세스에 제어권을 넘긴다.)

 

 

+ DMA transfer

1. 디스크 데이터를 주소 X에서 버퍼로 전송하라는 장치 드라이버의 메시지가 표시됨

2. 장치 드라이버가 디스크 컨트롤러에게 C바이트를 주소 X에서 버퍼로 전송하도록 지시

3. 디스크 컨트롤러가 DMA 전송을 시작함

4. 디스크 컨트롤러가 각 바이트를 DMA 컨트롤러로 전송

5. DMA 컨트롤러는 바이트를 버퍼 X로 전송하여 메모리 주소를 늘리고 C =0까지 C를 감소시킨다.

6. C =0일 때 DMACPU를 간섭하여 신호 전송 완료

 

 

 

 

댓글