파게로그

컴퓨터와 시스템의 작동과 구조 본문

콤퓨타 왕왕기초/OS

컴퓨터와 시스템의 작동과 구조

파게 2020. 11. 10. 13:18
1.2 Computer-System Organization

 

1.2.1 Computer-System Operation

 

1개 이상의 CPU와 많은 디바이스 컨트롤러들은 공유 메모리로의 접근을 제공하는 common bus를 통해 연결되어 있다. 각 디바이스 컨트롤러는 디스크 드라이브, 오디오 디바이스, 비디오 디스플레이와 같은 특정한 유형의 장치를 책임진다. CPU와 장치 컨트롤러들은 memory cycle를 얻기 위해 경쟁하며 parallel하게 실행될 수 있다. 공유 메모리로의 순서대로의 접근을 보장하기 위해 메모리 컨트롤러는 메모리로의 접근을 synchronize한다.

컴퓨터가 켜지면 - 펌웨어라고 알려진 bootstrap program(ROM이나 EEPROM에 저장되어 있음)이 CPU 레지스터, 장치 컨트롤러, 메모리 내용 등 시스템의 모든 측면을 초기화한다. bootstrap program은 운영체제를 load하는 방법을 알고 있어야만 하며, 시스템을 어떻게 실행하기 시작하는지 알고 있어야만 한다. bootstrap program은 운영체제 커널의 위치를 찾아서 메모리로 load해야 한다.

커널이 loaded되고 executing되면, 시스템과 사용자에게 서비스를 제공할 수 있다. 부팅 때 어떤 서비스들은, 커널이 실행되는 전체 시간 동안 실행되는, 시스템 프로세스나 시스템 daemons에 의해 커널 외부에서 제공된다. 예를 들어 UNIX에서는 첫 번째 시스템 프로세스가 init이고 이것이 많은 다른 daemon들을 실행시킨다. 이러한 과정이 완료되면 시스템은 event 발생을 기다린다.

event의 발생은 주로 하드웨어나 소프트웨어의 interrupt에 의해 신호된다. 하드웨어는 주로 시스템 버스를 이용하는 방식으로 CPU에 신호를 보내며, 소프트웨어는 system call(monitor call)을 실행함으로써 인터럽트를 유발한다.

CPU는 interrupt가 발생하면, 실행을 즉시 고정된 위치로 옮겨가며, 그 고정된 위치는 주로, 인터럽트를 위한 서비스 루틴이 저장된 시작 주소를 포함하고 있다. 인터럽트 서비스 루틴이 실행 후 완료되면 중단된 연산을 계속한다.

컴퓨터 아키텍쳐에서 인터럽트는 중요한 부분인데, 각 컴퓨터 디자인은 고유한 인터럽트 메커니즘을 지니지만, 몇 기능들은 공통적이다. 인터럽트는 control을 적절한 인터럽트 서비스 루틴으로 전송해야만 한다. 이러한 전송을 처리하는 방법은 인터럽트 정보를 검토하기 위한 포괄적인 루틴을 부르는 것이다. 그 결과 루틴은 interrupt-specific handler를 부르게 된다. 그러나, 인터럽트는 빠르게 다루어져야 한다. 미리 정의된 인터럽트만 발생할 수 있기에, 필요한 속도를 제공하기 위해서는 인터럽트 루틴을 가리키는 포인터의 표가 대신해서 사용될 수 있다. 인터럽트 루틴은 표를 통해 간접적으로 호출되고, 중간 과정은 필요하지 않다. 일반적으로 포인터의 표는 첫 100번대와 같은 low memory에 저장되어 있다. 이러한 위치는 다양한 기기를 위한 인터럽트 서비스 루틴을 가지고 있다. 주소에 대한 이러한 array, 또는 interrupt vector는 인터럽트 요청이 주어지면 interrupting device에 대한 인터럽트 서비스 루틴의 주소를 제공하기 위해 고유한 장치 번호에 의해 색인된다. 윈도우와 유닉스만큼이나 다른 운영체제들은 이러한 방식으로 인터럽트를 발송한다.

인터럽트 아키텍쳐는 또한 interrupted instruction의 주소도 저장해야 한다. 많은 구식의 설계는 단순히 고정된 위치나 device number에 의해 색인된 장소에 interrupt address를 저장하곤 했다. 근래의 아키텍쳐는 시스템 스택의 return address를 저장한다. 만약 인터럽트 루틴이 예를 들면 레지스터의 값과 같은 프로세서의 상태를 바꾸어야 한다면, 현재 상태를 저장하고 그것을 returning 이전에 복구해야 함은 명백하다. 인터럽트가 다루어지고나면, 저장된 return address가 프로그램 카운터로 불러와지고, 중단된 computation은 마치 인터럽트가 발생하지 않았던 것처럼 재개된다.

 

1.2.2 Storage Structure

 

CPU는 인스트럭션을 메모리에서만 불러올 수 있어서 실행될 프로그램은 어떤 것이라도 메모리에 저장되어 있어야 한다. 일반적인 목적의 컴퓨터는 대부분의 프로그램을 RAM(Random Access Memory)라고도 불리는 rewritable한 main memory로부터 실행한다. 메인 메모리는 주로 dynamic random-access memory(DRAM)이라 불리는 반도체 기술로 구현된다.

ROM은 변경될 수 없기에 bootstrap program과 같은 정적인 프로그램만 저장되고 그래서 게임 카트리지에서 자주 사용된다. EEPROM은 변경될 수 있지만 자주 변경될 수는 없어서 대부분 정적인 프로그램을 보관하는데, 예를 들어 스마트폰은 공장 단계에서 설치된 프로그램을 EEPROM에 저장하고 있다.

모든 형태의 메모리는 바이트의 배열을 제공하며 각 바이트는 주소를 지니며, 특정 메모리 주소에 대한 일련의 load나 store 인스트럭션에 의해 상호작용이 이루어진다. load 인스트럭션은 메인 메모리로부터 CPU 내 레지스터로 byte나 word를 옮기는 것이고, store 인스트럭션은 그 반대이다. 명시적인 loads나 stores 외에도, CPU는 실행을 위해 자동적으로 메인 메모리로부터 인스트럭션을 load한다.

 

(instruction-execution cycle in von Neumann architecture)

 

메인 메모리에 모든 프로그램과 데이터가 상주할 수 없는 이유

  • 메인 메모리는 대개 너무 작아서 모든 프로그램과 데이터를 영구적으로 저장할 수 없다.
  • 메인 메모리는 휘발성(volatile) 장치라 전원이 꺼지거나 어떤 방식으로든 내용이 사라질 수 있다.

 

1.2.3 I/O Structure

 

운영체제의 코드에서 I/O에 관련된 내용이 많은 이유

  • 시스템의 신뢰성과 성능에 대한 I/O의 중요성
  • 장치들의 변화하는 속성

device controller

각 device controller는 특정 유형의 장치를 책임지며, 경우에 따라 한 개 이상의 장치가 부착될 수도 있다.

예를 들어 SCSI controller에는 7대 이상의 장치가 부착될 수 있다.

local buffer storage를 가지며 특수 목적의 레지스터 집합을 가진다.

device controller는 자신이 통제하는 주변부 기기와 그 local buffer storage 사이의 데이터 운반을 담당한다.

OS는 각 device controller를 위한 device driver를 가진다. 이는 device controller를 이해하며, OS의 나머지에게 장치에 대한 균일한 인터페이스를 제공한다.

 

interrupt driven I/O

  • I/O가 시작되기 위해서는 디바이스 드라이버가 디바이스 컨트롤러 내의 적절한 레지스터를 불러온다.
  • 그러면 디바이스 컨트롤러는 "키보드로부터 문자를 읽어온다"와 같이 어떤 행동을 취할지 결정하기 위해 레지스터의 내용을 검토한다.
  • 디바이스 컨트롤러는 장치로부터 로컬 버퍼로 데이터를 전송하기 시작한다.
  • 전송이 완료되면, 장치 컨트롤러는 디바이스 드라이버에게 interrupt를 통해서 데이터 전송이 완료되었다고 알린다.
  • 그러면 디바이스 드라이버는 제어권을 운영체제에 돌려주고, 만약 operation이 read였다면 데이터 또는 데이터에 대한 포인터를 return할 수 있다. 다른 operation에 대해서는, 디바이스 드라이버는 status information을 return한다.

 

DMA(direct memory access)

interrupt-driven I/O는 적은 양의 데이터를 이동시키는 데에는 양호하지만, disk I/O와 같은 bulk data movement를 위해 이용하기에는 오버헤드가 너무 클 수 있다. 이를 해결하고자 DMA가 사용된다. I/O 장치를 위한 버퍼, 포인터, 카운터 세팅이 완료되면, 디바이스 컨트롤러는 데이터 전체 블록을 to or from its own buffer storage to memory 전송시키며, 이 때 CPU의 개입은 없다. 한 블록마다 오직 하나의 interrupt만이 발생하는데, 디바이스 드라이버에게 operation이 완료되었다는 것을 말하기 위함이며, 이는 low-speed devices에서 발생하는 바이트마다의 인터럽션을 대체한다. 디바이스 컨트롤러가 이러한 operation을 수행하는 동안, CPU는 다른 작업을 수행할 수 있다.

 

switch

버스 아키텍쳐 대신 스위치를 사용하는 고성능 시스템도 있다. 이러한 시스템에서는 다양한 구성요소가 동시에 다른 구성요소와 상호작용할 수 있는데, 이는 공유 버스에서 사이클을 위해 경쟁하는 것과 대비된다. 이러한 경우에서 DMA는 심지어 더 효과적이다.


* 용어

 

ROM

  • read-only memory

EEPROM

  • electrically erasable programmable read-only memory

SSD(Solid-state disks)

  • 비휘발성. 평소엔 large DRAM array에 저장하다가 전원이 차단되면 디스크 컨트롤러가 데이터를 램에서 마그네틱 디스크로 옮기고, 전원이 복구되면 디스크 컨트롤러가 데이터를 다시 램으로 옮긴다.

Flash memory

  • DRAM보다 느리지만 전원이 필요없다.

NVRAM

  • 배터리가 지속되는 한 비휘발성. backup power 배터리가 있는 DRAM

SCSI

  • small computer-systems interface

'콤퓨타 왕왕기초 > OS' 카테고리의 다른 글

운영체제의 작동  (0) 2020.11.17
운영체제의 구조  (0) 2020.11.13
컴퓨터 시스템 아키텍쳐  (0) 2020.11.10
운영체제의 역할  (0) 2020.11.09
큰 그림  (0) 2020.10.15
Comments