운영체제 - Computer System

eucartio·2024년 4월 7일

운영체제

목록 보기
4/19

Schematic Overview of Computer System

아래 하단의 파란색 직사각형은 DRAM을 의미한다. 우측에 네 가지로 뻗어나간 장치들은 입출력 장치이다. SSD, HDD와 같은 보조기억장치 역시 입출력 장치이다.

Von Neumann Machine

모든 현대 컴퓨터 시스템의 시초가 되는 시스템이다.

  • Stored-Program 시스템
  • Processing Unit은 메인 메모리하고만 통신할 수 있다.
    • 산술 논리 장치와 프로세서를 포함하는 Processing Unit
    • 명령어 레지스터와 프로그램 카운터를 포함하는 Control Unit
    • 데이터와 명령어를 저장하는 Memory
    • 외부 대용량 저장 장치
    • 입출력 메커니즘
  • Von Neumann Bottleneck
    프로그램 메모리와 데이터 메모리 사이의 공유 즉, CPU와 메모리간 데이터 전송율의 한계로 인해 발생하는 병목현상을 이른다.

Computer System

Mode Bit

위 사진의 메모리 내부에는 Program A, Program B, OS가 존재한다. 프로그램 카운터(PC)가 Mode Bit 메모리 주소에서 Program을 가리키면 User Mode, OS를 가리키면 Kernel Mode가 되는 것이다. 참고로 프로그램 카운터는 CPU 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다.

Kernel Mode는 시스템의 핵심 부분을 관리하고 시스템 리소스에 직접 접근할 수 있으며, User Mode는 일반 프로그램이 실행되는 영역으로 시스템의 핵심 부분에 직접적인 접근을 제한한다. 이러한 분리는 시스템의 보안, 안정성, 리소스 관리 및 성능 향상을 위해 필요하다.

Timer

Timer는 Computing System에 일정 시간마다 신호를 주는 역할을 한다. 이전에 배운 Time Sharing System을 위해 가장 중요한 요소이다. 시간이 지날수록 카운터가 감소하고 0에 도달할 때 인터럽트가 발생한다.

위 그림은 Program 1과 Program 2에서 Time Sharing이 진행되는 상황이다. Program 1이 실행되는 User Mode에서 인터럽트가 발생한다. 그리고 Kernel Mode로 넘어감과 동시에 Program 1의 현재 상태가 OS에 저장된다. 그 후 OS에서 프로그램의 우선순위를 판단하고 순위에 해당하는 Program 2가 실행되는 것이다. 이런 과정의 반복으로 Time Sharing System이 진행된다.

I/O Device

I/O Device Controller는 원래 CPU의 역할이었지만 Multi Programming의 등장 이후 분리되었다. 시스템 버스(입출력)에 부착되어 컴퓨터와 I/O 장치 사이하드웨어 인터페이스를 제공한다. 다른 유형의 소형 CPU라고 생각할 수 있으며, 예로는 제어 레지스터, 상태 레지스터가 있다. I/O 처리가 끝나면 장치 컨트롤러는 CPU에 인터럽트 신호를 보낸다.

입출력 장치에도 펌웨어라고 하는 OS가 존재한다. 우리가 흔히 보는 장치 드라이버 역시 펌웨어의 일종으로, 컴퓨터에 연결된 특정 유형의 장치를 작동하거나 제어하는 컴퓨터 프로그램이다.

Exception

Exception은 특정 이벤트에 대한 응답으로 OS로 제어권을 전송하는 것이다. 쉽게 말해 정지 후 재개하는 기술이다. 그 예로는 프로세스 상태 변경이 있다.

위의 그림에서처럼 User Code에서 어떤 이벤트가 발생했을 경우에, 그리고 그 이벤트가 User Mode에서 해결이 불가능하다면 시스템에서 Exception을 발생시킨다. 그 후 Kernel Mode로 변경하여 OS에서 그 이벤트를 해결한 후, 결과를 다시 User Code로 전송한다. Exception은 다음과 같이 크게 네 가지로 나눌 수 있다. Asynchronous Exception인 InterruptSynchronous Exception인 Traps, Faults, Aborts가 있다.

Asynchronous Exception

Asynchronous(비동기)는 동시에 똑같이 진행되지 않는다는 뜻을 가지고 있다. 따라서 요청을 보낸 후 응답과 관계없이 다음 동작을 실행할 수 있다.
Interrupt
Interrupt는 입출력 장치와 같이, 프로세서 외의 하드웨어에서 발생하는 이벤트가 원인이 되어 진행 중인 프로그램을 중지시킨다. 요청을 받아 중지가 되고, 그것이 해결되면 다음 명령으로 진행돼야 한다. 특징이 있다. 대표적인 Interrupt로는 다음 두 가지가 있다.

  • Timer Interrupt

    • 일정 ms마다 외부 타이머 칩이 Interrupt를 발생시킨다.
    • 사용자 프로그램으로부터 제어권을 되찾기 위해 커널이 사용한다.
  • I/O Interrupt from External Device

    • 키보드에서 Ctrl-C를 누를 때 발생한다.
    • 네트워크에서 패킷이 도착하거나 디스크(HDD, SSD) 등의 입출력 장치에서 메모리로 데이터 도착할 때 발생한다.

Synchronous Exception

Synchronous(동기)는 동시에 똑같이 진행된다는 뜻을 가지고 있다. 따라서 요청을 보낸 후 해당 요청의 응답을 받아야 다음 동작을 실행할 수 있다. Synchronous Exception은 Asynchronous Exception인 Interrupt와 달리 프로세서(CPU)에서 발생하거나 명령어 수행 결과로 발생하는 이벤트가 원인이 되어 진행 중인 프로그램을 중지시킨다. 다음 세 가지 예시를 살펴보자.

Traps
사용자가 의도할 때 사용된다. 대표적인 예로 System Calls가 있다. Traps 역시 다음 명령을 Return하며 끝난다.

Faults
사용자의 의도와 상관없이 발생한다. 일부는 복구가 가능하고 나머지는 복구가 불가능하여 시스템 재시동이 필요하다. 대표적인 예로 Page Faults가 존재한다. Fault는 다음 명령을 Return하지 않고 Fault가 발생한 명령을 다시 수행한다.

Aborts
역시 사용자의 의도와 상관없이 발생하고 복구가 불가능하다. 예로는 Illegal Instruction이 있다.
Abort는 실행 중인 명령이나 프로그램을 중단한다.
다음 표는 위의 Exception들을 요약한 것이다.

Handling Exception

  1. Program Counter에 있는 메모리 주소, $1000의 명령을 실행한다.
  2. 해당 명령에서 Exception이 발생하는지 확인한다.
  3. 발생한다면 어떤 Exception인지 확인한 후 프로세스를 일시 정지하고 현재 상태를 저장한다.
    PSW(Mode Bit)OS의 권한을 위해 User Mode($0x1)에서 Kernel Mode($0x0)으로 바뀐다.
  4. 해당 Exception Number를 확인하여 일치하는 Exception Vector Table로 이동한다.
  5. Table에서 해당 Exception Handler의 위치를 나타내는 메모리 주소를 찾고 Exception을 해결한다. Program Counter는 이 메모리 주소가 된다.
  6. Exception의 종류에 따라 다음 명령으로 진행하거나, 이전 명령을 다시 수행하거나, 프로세스를 중단한다.
  7. 다음 명령어를 진행한다. Program Counter는 $1004, PSW는 User Mode($0x1)가 된다.

DMA

Programmed I/O

초기 컴퓨터 시스템에서 사용된 입출력으로, CPU가 입출력 장치와 버스를 통해 데이터 전송을 직접 제어했다. 그러기 위해서 CPU는 명령어를 반복적으로 실행하고, 입출력 장치의 상태를 주기적으로 확인해야 했다. 또한 CPU는 입출력 작업을 완료할 때까지 다른 작업을 수행할 수 없어 효율적이지 못했다.

Interrupt Driven I/O

이러한 문제를 해결하기 위해 발전된 버전의 입출력이다. 입출력 장치가 데이터 전송을 완료하면 CPU에게 Interrupt Signal을 발생시킨다. 따라서 CPU는 작업을 수행하다가 Interrupt를 수신하면 Interrupt Handling의 과정을 진행하면 되는 것이다. 덕분에 CPU는 입출력 작업의 완료를 기다리는 동안 다른 작업을 수행하는 것이 가능하다. 하지만 여전히 CPU의 버스를 통해서 메모리 주소나 어떤 데이터를 전송할지 등을 전송해야 한다.

DMA

Direct Memory Access라는 뜻의 DMA는 Interrupt Driven I/O의 성능 향상을 위해 개발된 하드웨어이다. DMA는 CPU의 개입 없이 메모리(DRAM)와 입출력 장치 간의 직접적인 데이터 전송이 가능하게 한다. CPU는 DMA에게 데이터 전송을 위한 파라미터를 제공하고, DMA가 전송을 완료하면 Interrupt를 발생시켜 CPU에게 알린다. 아래 사진을 확인해보자.

앞서 얘기했듯이 입출력 장치가 메모리에 데이터를 넣고 싶으면 CPU에 얘기하지 않고 DMA에 얘기해야 한다. 이것이 그림에 나와있는 DRQ(Direct Request)이다. 입출력 장치가 DMA를 통해 메모리와 데이터를 주고 받기 위해 CPU에게 DMA 작업을 요청할 때 사용된다. 마지막으로 DMA Ack(Acknowledge) 작업이 DMA에서 입출력 장치에 전달되면 버스를 사용하여 메모리와 데이터를 주고 받을 수 있게 된다.

Operation Mode

버스에 대한 권한을 기준으로 우선 순위를 다르게 하는 세 가지 모드가 있다.

  • Burst - DMA가 CPU보다 우선 순위가 높은 경우. CPU를 멈추고 DMA가 입출력을 위해 버스를 사용한다.
  • Transparent - CPU가 DMA보다 우선 순위가 높은 경우. CPU가 버스를 사용하지 않을 때 DMA가 사용한다.
  • Cycle Steal - CPU와 DMA의 우선 순위가 같다고 보는 경우. CPU와 DMA가 Clock Cycle을 나눠서 사용한다.

Pros and Cons of DMA

  • Advantages of DMA
    CPU 개입 없이 데이터를 전송하기 때문에 R/W 작업 속도가 증가하고, 클럭 사이클과 CPU 오버헤드는 감소한다. 따라서 CPU Utilization에 도움된다.
    ⠀⠀
  • Disadvantages of DMA
    하드웨어 장치를 추가하는 것이다 보니 비용이 증가한다. Cache Coherence(=캐시, DRAM, SSD와 DMA 내의 데이터가 달라지는 것) 역시 발생 가능하다.

⠀⠀
⠀⠀
⠀⠀
⠀⠀
⠀⠀
분량이 너무 많아요 교수님!

0개의 댓글