본문 바로가기
CS/OS

[OS] 운영체제 02 : System Structure

by Dani K 2022. 5. 22.

 시스템 구조 (System Structure)

  • CPU
    • register
    • mode bit
    • interrupt line
  • Memory
  • Timer
  • I/O
    • Device Controller
    • Local Buffer
    • Interrupt / System Call
  • DMA Controller

컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 장치(입출력 장치)인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구분된다. 컴퓨터는 외부 장치에서 내부 장치로 데이터를 읽어와 (input) 각종 연산을 수행한 후, 그 결과를 외부 장치로 내보내는(output) 방식으로 업무를 처리한다.

 


CPU

CPU는 매순간 Memory 어딘가에 올라와 있는 기계어를 처리한다.

기계어를 하나 읽어오고 실행하는 일을 반복적으로 한다. (Fetch & Execution)

CPU의 운명이자 역할은 평생 매 클럭마다 메모리에서 Instruction(약 4 Byte)을 하나씩 읽어서 실행하는 것이다.

 

그렇다면 메모리 위치를 어떻게 아는가?
=> Registers 중에 메모리 주소를 가르키는 Register가 존재 => Program Counter 라고 한다.

 

CPU는 Program Counter가 가르키는 주소에서 Instruction을 꺼내와서 실행하는 일을 반복적으로 수행한다.
Program Counter는 CPU가 하나 꺼내갔을 때, 다음 주소를 가르킨다.

 

만약 Interrupt가 존재한다면, Program Counter가 가르키는 주소에서 Instruction을 가져오는 것이 아니라
지금 하던 작업을 멈추고 CPU 제어권이 운영체제에게 넘어가게 된다.

 

  • registers : 메모리보다 더 빠르면서 정보를 저장할 수 있는 작은 공간들
  • mode bit  : CPU에서 현재 실행중인 프로그램이 OS인지, 사용자 프로그램인지 구분하는 보호장치
  • Interrupt line : Interrupt 신호를 처리하기 위한 하드웨어

 

Mode bit

 

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

Mode bit을 통해 하드웨어적으로 두 가지 모드의 operation 지원

1 사용자 모드 : 사용자 프로그램 수행
0 모니터 모드 : OS 코드 수행

 

  • 보안을 해칠 수 있는 중요한 명령어는 모니터모드(0)에서만 수행 가능한 특권 명령으로 규정
  • Interrupt나 Exception 발생시 하드웨어가 mode bit을 0으로 바꿈
  • 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 셋팅

 

Interrupt Line

인터럽트를 발생시키기 위해 장치들은 인터럽트 라인(Interrupt Line)을 세팅하게 되고,

CPU는 매번 명령을 수행한 직후 인터럽트 라인을 체크해 서비스 요청이 들어왔는지를 체크하게 된다.

 

 


Timer

CPU의 독점을 막기 위해서 일정 간격으로 interrupt 를 발생시키는 하드웨어

할당된 시간이 흐른 뒤 운영체제에게 제어권이 넘어가도록 인터럽트를 발생시킨다. 

1 사용자 모드 : 사용자 프로그램 수행
0 모니터 모드 : OS 코드 수행

 

  • CPU를 특정 프로그램이 독점하는 것으로부터 보호
  • 타이머는 time sharing을 구현하기 위해 널리 이용됨
  • 타이머는 현재 시간을 계산하기 위해서도 사용

 


I/O Device

 

Device Controller

각각의 I/O 디바이스들은 그 디바이스를 전담하는 작은 CPU 같은 것들이 붙어있게 된다.

그것을 우리는 device controller 라고 한다.

 

디스크에서 헤드가 어떻게 움직이고 어떤 데이터를 읽을지 디스크의 내부를 통제하는 것은 CPU의 역할이 아니다. 디스크에 붙어있는 디스크 컨트롤러가 그런 작업을 하게 된다. 키보드에 붙어있는건 키보드 컨트롤러 이런식으로 컨트롤러들이 각 I/O 디바이스마다 붙어있어서 그 디바이스를 전담하는 작은 CPU 역할을 한다고 보면 된다.


메인 CPU의 작업공간인 메인 메모리가 있듯이 이러한 디바이스 컨트롤러들도 그들의 작업공간이 필요하다.
그들의 작업 공간이 위와 같이 각각 존재하는데 그것을 우리는 local buffer 라고 부른다.

 

사용자 프로그램의 결과를 화면에 출력하기 위해서는, 실제 프로그램에 있는 데이터는 모니터의 local buffer에 담는 것이고, 화면에 출력을 하라는 지시는 control register(제어 레지스터)를 통해서 명령한다. 마찬가지로 사용자 프로그램에 있는 어떤 데이터를 파일에 저장하고 싶다면, 그 데이터 자체는 디스크 쪽 local buffer에 넣고, 파일에 저장하라는 명령은 control register(제어 레지스터)를 통해서 CPU가 I/O Controller에게 전달을 하게 되는 것이다.

 

  • 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU
  • 제어 정보를 위해 control register, status register를 가짐
  • 실제 데이터를 저장하는 local buffer를 가짐
  • I/O는 실제 device와 local buffer 사이에서 일어남

 

device driver(장치구동기) : CPU 가 실행하는 각 I/O 기기를 다루는 코드를 가지고 있는 SW
device controller(장치제어기) : 각 장치를 통제하는 일종의 작은 CPU → HW

 

DMA(Direct Memory Access) Controller

CPU는 메모리 접근도 할 수 있고 local buffer 접근도 할 수 있게 되어 있고, 작은 CPU(device controller)들은 자기 자신의 local buffer 만 접근할 수 있게 정의되어 있다. 하지만 그렇게 하다 보면 CPU가 너무 Interrupt를 많이 당하게 되고, 그다지 효율적이지 않게 동작을 하게 된다. 그래서 DMA 라는 컨트롤러를 하나 더 두고 있다.

 

  • 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 사용
  • CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송
  • 바이트 단위가 아니라 block 단위로 인터럽트를 발생시킴

 

출처 : https://www.quora.com/What-is-the-function-of-DMA-in-a-computer

 

local buffer에 들어오는 작업이 끝났으면 DMA가 직접 local buffer에 있는 내용을 메모리로 복사하는 일을 하고, 그 작업이 다 끝났으면 CPU한테 Interrupt를 걸어서 작업이 완료되었음을 알린다. 이와 같이, CPU가 중간에 Interrupt 당하는 빈도가 줄어들어서 자신의 빠른 장치를 좀 더 효율적으로 쓸 수 있는 역할을 해 준다.

 

  • Direct Memory Access Controller, 직접 메모리를 접근할 수 있는 컨트롤러 (원래 CPU만 가능)
  • DMA Controller를 두게 되면 CPU도, DMA도 메모리에 접근 가능
  • Memory Controller 는 DMA와 CPU가 동시 접근하는 것을 중재, 조율, 교통정리하는 역할

 


I/O 의 수행

I/O의 명령은 특권 명령이라 OS를 통해서만 접근할 수 있다.

사용자 프로그램이 디스크에서 파일을 읽어와야 할 경우 운영체제한테 부탁한다. (system call)

OS가 올바른 요청인지 확인한 후 I/O 요청을 수행하고, 완료 시 제어권을 system call 다음 명령으로 옮기게 된다.

 

시스템 호출 (System Call) 

사용자 프로그램 내에서 메모리 주소를 바꾸는 것은 쉽다. 하지만 사용자 프로그램은 I/O 같은 작업이 필요할 때, OS 커널의 (I/O 작업과 관련된) 메모리 주소에 접근할 수가 없다. (because Mode bit = 1) 이 경우, 사용자 프로그램이 OS에게 무언가를 요청하기 위해 interrupt 를 걸어서 OS의 함수를 호출할 수 있다. 이것이 바로 system call.

 

 

인터럽트 (Interrupt)  ★

인터럽트 당한 시점의 레지스터와 program counter 를 저장한 후 CPU 제어권을 인터럽트 처리 루틴에 넘긴다.

인터럽트의 목적은 프로세서가 프로그램을 실행 하는 도중에 계속된 실행이 불가능한 문제를 만났을 때 인터럽트를 호출하여 그 문제를 해결하고 다시 원래의 프로그램으로 돌아와서 나머지 프로그램을 정상적으로 수행하는데 있다.

 

인터럽트의 발생원인은 크게 1. HW Interrupt  2. SW Interrupt로 나뉜다.

 

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

 

  • Timer
  • Device Controller / DMA Controller

 

2. SW Interrupt (Trap) : 소프트웨어 인터럽트

 

  • Exception : 프로그램이 오류를 범한 경우
  • System Call : 사용자 프로그램이 커널 함수를 호출하는 경우

 


Sync / Async I/O

 

 

(a) 동기식 입출력 (Synchronous I/O)

I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다.

하지만 하나의 I/O가 완료될 때까지 계속 기다리는 것은 CPU와 I/O 장치의 낭비이므로, 다음과 같이 진행한다.

 

  • I/O 작업이 완료될 때까지 해당 프로그램에게서 CPU를 빼앗는다.
  • I/O 처리를 기다리는 줄에 그 프로그램을 줄 세운다.
  • 다른 프로그램에게 CPU를 준다.
  • 끝나면 디바이스 컨트롤러가 인터럽트로 알려준다.

 

(b) 비동기식 입출력 (Asynchronous I/O)

I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램(다른 일)에 즉시 넘어간다.

 

→ 두 경우 모두 I/O가 완료는 inetrrupt 로 알려준다.

 

 

 


KOCW 반효경 교수님의 운영체제 강의 내용 정리 (kocw.net)

    •  

 

'CS > OS' 카테고리의 다른 글

[OS] 운영체제 03 : Program Execution  (0) 2022.05.23
[OS] 운영체제 01 : Introduction to Operating Systems  (0) 2022.05.22

댓글