'개인/ㄴOSI'에 해당되는 글 2건

  1. 2013.07.23 OSI - Chapter 01
  2. 2013.07.23 OSI - Chapter 00

OSI - Chapter 01

Posted in 개인/ㄴOSI by

1.1 기본 구성요소

컴퓨터 구성요소는 다음과 같이 4가지로 구성된다.

  • 처리기(processor): 컴퓨터의 동작을 제어하고 데이터를 처리, 일반적으로 중앙처리장치(CPU)라고 부른다.
  • 주기억장치(main memory): 데이터와 프로그램을 저장, 휘발성(volatile)이다.
  • 입출력 모듈(I/O module): 컴퓨터와 외부 장치 간의 데이터 이동을 담당한다.
  • 시스템 버스(system bus): 처리기, 주기억장치, 그리고 입출력 모듈 간의 통신을 제공한다.

Figure1.1은 상위 수준의 구성요소를 보여준다. 처리기의 기능 중 하나는 메모리와 데이터를 교환하는 것이다. 이 때 MAR과 MBR, 두 개의 내부 레지스터를 이용한다.

  • 메모리 주소 레지스터(MAR:Memory Address Register): 다음에 읽거나 기록할 메모리의 주소를 명시하는 레지스터
  • 메모리 버퍼 레지스터(MBR:Memory Buffer Register): 메모리에 기록되거나 읽힐 데이터를 저장하고 있는 레지스터
  • 입출력 버퍼 레지스터(I/OBR: I/O Buffer Register): 입출력 모듈과 처리기 간의 데이터 교환을 위해 사용
  • 프로그램 카운터(PC): 다음에 수행할 명령어의 주소를 저장한다.
  • 명령어 레지스터(IR): 현재 수행 중인 명령어를 저장한다.

주기억장치는 주소으로 이루어진 집합이다. 각 주소에는 이진수의 값이 저장되어 있는데 이는 명령어 또는 데이터로 해석될 수 있다. 입출력 모듈은 처리기와 주기억장치로 데이터를 전송하거나, 그 역방향으로 데이터를 전송한다. 데이터가 전달될 때까지 일시적으로 데이터를 보관하는 내부 버퍼를 가지고 있다.


1.2 처리기 레지스터

처리기는 일련의 레지스터를 가지고 있으며, 이들은 두 가지 기능을 제공한다.

  • 사용자가 볼 수 있는 레지스터: 레지스터 사용의 최적화를 통해 주기억장치의 참조를 최소화 할 수 있게 한다. IA32에서는 EAX, EBX... ARM에서는 R0, R1... 같은 레지스터 집합
  • 제어 및 상태 레지스터: 처리기가 자신의 동작을 제어하거나 특권(privileged) 운영체제 루틴들이 프로그램의 수행을 제어하기 위해 사용한다. ARM의 CPSR와 같은 레지스터

사용자가 볼 수 있는 레지스터

이 레지스터는 처리기가 수행하는 기계어를 통해 참조할 수 있으며, 시스템 프로그램뿐만 아니라 응용 프로그램까지 모든 프로그램에서 시용할 수 있다. 레지스터의 유형으로 데이터, 주소, 조건 코드 레지스터 등이 있다.

  • 데이터 레지스터: 본질적으로 범용이며, 데이터에 대한 연산을 수행하는 기계어 명령어에 사용된다.
  • 주소 레지스터: 주기억장치 주소를 저장하고 있거나, 주소를 계산하기 위해 사용되는 주소의 일부를 저장한다.
    • 인덱스 레지스터: 인덱스를 이용한 주소지정은 기준값에 인덱스를 더하여 실제 주소를 계산하는 일반적인 주소지정 형태이다.
    • 세그먼트 포인터: 세그먼트를 이용한 주소지정인 경우, [세그먼트: 메모리는 워드로 구성된 가변적인 길이의 블록들]로 나누어진다. 메모리 참조는 특정 세그먼트 지정과 지정된 세그먼트 내에서의 오프셋을 통해 이루어진다.
    • 스택 포인터: 스택 사용방식에 따라 상단 혹은 하단을 가리키는 레지스터가 있다.

제어 및 상태 레지스터

모든 처리기는 상태 정보를 저장하기 위해 흔히 프로그램 상태 워드(PSW: Program Status Word)라고 불리는 레지스터를 포함하도록 설계된다. PSW는 조건 코드(또는 플래그)뿐만 아니라 인터럽트 가능/불능 비트와 커널/사용자 모드 비트와 같은 상태 정보도 포함한다.


1.3 명령어 수행

프로그램은 처리기에 의해 수행되며, 메모리에 저장된 명령어들의 집합으로 구성된다. 명령어 처리는 간단하게, 메모리로부터 한 번에 하나의 명령어를 읽고(fetch) 명령어를 수행(execution)하는 두 단계로 구성된다. 프로그램 수행은 명령어 반입과 명령어 실행의 반복으로 이루어진다.


명령어 반입과 수행

각 명령어 사이클이 시작될 때, 처리기는 메모리로부터 명령어를 가져온다. 일반적으로 프로그램 카운터(PC)는 다음에 가져올 명령어의 주소를 가지고 있다. 별도의 명령이 없는 한, 처리기는 각 명령어를 반입한 후 항상 PC를 증가시켜 다음 명령어가 순서대로 반입하게 한다.

반입된 명령어는 처리기 내의 명령어 레지스터(IR: Instruction Register)로 적재된다. 명령어의 비트들은 처리기가 행해야 할 작업을 명시한다. 처리기는 명령어를 해석하고 요구된 작업을 수행한다. 일반적으로 이러한 작업은 다음 4가지 범주로 분류될 수 있다.

  • 처리기-메모리: 데이터는 처리기로부터 메모리로, 또는 반대로 전송될 수 있다.
  • 처리기-입출력: 처리기와 입출력 모듈 간의 전송을 통해 주변장치로 데이터를 송수신 할 수 있다.
  • 데이터 처리: 처리기는 데이터에 대해 산술 또는 논리 연산을 수행할 수 있다.
  • 제어: 명령어는 수행 순서 변경을 명시할 수 있다.

Figure 1.4는 프로그램의 수행의 일부를 설명하고 있는데, 메모리와 처리기 레지스터 중 관련된 부분을 보여주고 있다.


입출력 기능

데이터는 입출력 모듈(디스크 컨트롤러 등)과 처리기 간에 직접 교환될 수 있다. 메모리의 주소를 지정함으로써 메모리 읽기와 쓰기를 할 수 있듯이, 입출력 모듈을 대상으로 데이터를 읽고 쓸 수 있다.

입출력 모듈 간의 통신 지연시간으로 인해 발생하는 처리기의 대기시간 및 작업 부담을 덜어주기 위해, 메모리와의 입출력 교환이 직접 이루어지게 하는 것이 바람직하다. 이 경우 처리기는 입출력 모듈에 대해 메모리 읽기나 쓰기 권한을 부여함으로써, 처리기를 개입시키지 않고 입출력-메모리 간 전송이 이루어지게 할 수 있다. 이러한 전공 과정에서, 입출력 모듈은 메모리에 대한 읽기 또는 쓰기 명령을 수행하게 되고, 결과적으로 처리기는 데이터 교환의 책임에서 벗어나게 된다. 이 연산을 직접 메모리 접근(DMA: Direct Memory Access)라 한다.


1.4 인터럽트

OSI - Chapter 00

Posted in 개인/ㄴOSI by

시작하기에 앞서...

William Stallings의 운영체제 내부구조 및 설계 원리(제6판)의 책을 공부하려고 한다. 단순히 책을 읽어나가는 것보다 정리하며 학습하면 오래 기억될 것 같아 공부한 내용들을 포스팅해 나갈 것이다. 끝까지 할 수 있을진 모르겠지만...