본문 바로가기
IT Basic/Operating System

[OS] 3장 컴퓨터 시스템의 동작 원리

by HouseDust 2021. 12. 15.
반응형

3장, 컴퓨터 시스템의 동작 원리

 

컴퓨터는 외부장치에서 내부장치로 데이터를 읽어와 각종 연산을 수행한 후, → 입력(input)

그 결과를 외부장치로 다시 내보내는 방식으로 업무를 처리한다 → 출력(output)

 

각 하드웨어 장치에는 컨트롤러가 존재한다. 컨트롤러는 일종의 작은 CPU로서, 각 하드웨어 장치를 제어한다.

장치 컨트롤러는, 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리-로컬 버퍼(local buffer)-를 가지고 있다. 컨트롤러는 인터럽트를 발생시켜 CPU에 데이터가 들어왔음을 보고한다.

 

CPU는 매 시점 메모리에서 명령(instruction)을 하나씩 읽어와서 수행하는데, 이때 CPU 옆에 인터럽트 라인(interrupt line)이 있어서 신호가 들어오면 하던 일을 멈추고 인터럽트를 먼저 처리한다. CPU는 하나의 명령을 수행할 때마다 인터럽트의 발생 여부를 확인한다.

 

인터럽트 처리 루틴? 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의한 것

 

인터럽트 종류

- 하드웨어 인터럽트

컨트롤러 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅

- 소프트웨어 인터럽트

소프트웨어가 CPU의 인터럽트 라인을 세팅

 

인터럽트 발생 시, CPU는 하던 일을 멈추고, 디스크의 로컬 버퍼에 있는 내용을 사용자 프로그램의 메모리로 전달하고, 해당 프로그램이 CPU를 할당받았을 때 다음 명령을 수행할 수 있도록 표시한다. 이후 커널 내에서 해당 인터럽트의 처리를 위해 정의된 코드를 찾는다. 운영체제는 할 일을 쉽게 찾아가기 위해 인터럽트 벡터(interrupt vector)를 가지고 있으며, 실제 처리해야 할 코드는 인터럽트 처리 루틴(interrupt service routine) 혹은 인터럽트 핸들러(interrupt handler)에 정의된다. 인터럽트 처리 후에는 수행하던 작업으로 돌아가야 하는데, 돌아갈 위치를 반드시 저장해두어야 한다.

 

인터럽트 벡터? 인터럽트 종류마다 번호를 정하여 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키는 자료구조

 

소프트웨어 인터럽트는 주로 트랩(trap)이라고 불리며, 예외상황(exception)과 시스템 콜(system call)이 있다.

- 예외상황 : 비정상적인 작업 시도 시 

- 시스템 콜 : 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스를 요청하는 방법

예외상황, 시스템 콜 모두 CPU의 제어권이 운영체제로 넘겨져 처리된다.

 

인터럽트 핸들링? 인터럽트가 발생한 경우 처리해야 할 일의 절차

프로그램이 실행될 때 인터럽트가 발생하면, 실행 중이던 프로그램의 현재 상태를 먼저 저장한다. 인터럽트가 발생하여 새로운 명령을 실행하면, CPU 내부 임시 기억장치인 레지스터(Register)에 담긴 값들이 모두 지워지기 때문에 이런 상태를 저장해두어야 한다.  

 

프로세스 제어블록(Process Control Block : PCB)?  현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 쓰이는 자료구조. 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지를 저장한다. 

(프로그램이 실행 중이던 코드의 메모리 주소, 레지스터 값, 하드웨어 상태 등)

 

운영체제는 인터럽트가 발생한 순간에만 CPU를 사용한다. 이 외에는 사용자 프로그램에 의해 CPU가 사용된다.

 

 

입출력 방식

동기식 입출력(synchronous I/O)

어떤 프로그램이 입출력 요청을 했을 때, 입출력 작업이 완료된 후에야 그 프로그램이 후속 작업을 수행할 수 있는 방식.

CPU는 입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비하게 된다. CPU의 명령 수행 속도는 빠르지만, 입출력 연산은 상대적으로 느리다. 입출력 연산이 끝날 때까지 기다리는 것은 자원의 낭비를 초래한다. 때문에 일반적으로는 입출력 수행 중 CPU를 다른 프로그램에 이양해 사용할 수 있도록 한다. 이때, 입출력을 진행 중인 프로그램은 봉쇄 상태(blocked state)가 되어 CPU를 할당받지 못한다.

A 프로그램의 입출력 연산 중 CPU를 할당받은 B 프로그램이 동시에 입출력을 요청하고, 같은 데이터에 접근할 경우, 입출력 연산의 순서가 꼬일 수 있다. 이를 방지하고 동기성(synchronization)을 보장하기 위해 동기식 입출력에서는 입출력 요청을 장치별로 큐(queue)에 담아 처리한다. 

 

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

입출력 연산을 요청한 후에 연산이 끝나기를 기다리는 것이 아니라 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 다시 부여하는 방식.

불러올 데이터가 반드시 필요한 작업은 제외하고 다른 작업을 먼저 처리한다. 

 

DMA

메모리를 CPU에 의해서만 접근할 수 있도록 하면, 입출력 장치가 메모리 접근을 원할 때마다 CPU의 업무가 방해받게 된다. 이를 해결하기 위해 CPU 이외에 메모리에 접근이 가능한 장치를 하나 더 두는데, 이것이 DMA(Direct Memory Access)다. DMA는 일종의 컨트롤러로서, CPU가 입출력 장치들의 메모리 접근 요청에 의해 인터럽트 당하는 것을 막아준다. DMA는 byte가 아니라 block이라는 큰 단위로 메모리를 읽고, CPU에 인터럽트를 발생시켜 작업 완료를 알린다.

 

 

저장장치

- 주기억장치 - 메모리

  • 휘발성의 RAM을 매체로 사용

- 보조기억장치

  • 비휘발성의 마그네틱 디스크 사용
  • 용도
    1. 파일 시스템(file system)용
    2. 스왑 영역(swap area)용, 메모리의 연장 공간
    스왑 아웃(swap out) : 스왑 영역에서 디스크로 내려놓는 것

하드 디스크 구성 - 마그네틱 원판, 암(arm). 원판의 표면은 트랙(Track)으로 나뉘며, 트랙은 섹터(Sector)로 나뉜다.

 

저장장치 계층 구조

  • 빠른 저장장치
    단위 공간당 가격이 높아 적은 용량을 사용한다.
  • 느린 저장장치
    가격이 저렴하여 대용량으로 사용하지만, 접근 속도가 느리다.

메인 메모리 아래는 비휘발성 저장장치

 

캐싱 기법? 상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능을 향상하는 총체적 기법

빠른 저장장치에 빈번히 사용될 데이터를 저장하면, 전체적인 성능이 향상된다.

 

 

하드웨어 보안

다중 프로그래밍(multi-programming) 환경에서 동작할 때, 각 프로그램이 다른 프로그램을 방해하거나, 프로그램 간 충돌이 일어나는 것을 막기 위해 하드웨어에 대한 보안 기법이 필요하다.

보안을 위해 운영체제는 기본적으로 커널 모드(kernel mode, system mode)사용자 모드(user mode)를 지원하여, 중요한 정보에 접근해야 하는 연산은 커널 모드에서만 실행할 수 있도록 한다.

CPU 내부에 모드 비트(mode bit)를 두어 사용자 프로그램을 감시한다. 모드 비트가 0이면 커널 모드, 1이면 사용자 모드로 제한된 명령만을 수행할 수 있다.

 

특권 명령? 시스템의 보안과 관련된 명령들, 커널 모드에서 운영체제에 의해서만 수행 가능. 입출력은 특권 명령

 

메모리 보안

여러 프로그램이 동시에 메모리에 올라가서 실행되기 때문에, 메모리 영역을 침범하지 못하도록 메모리 보안이 필요하다.

2개의 레지스터를 사용하여 프로그램이 접근하려는 메모리 부분이 합법적인지 체크한다. 

- 기준 레지스터(base register) : 프로그램이 합법적으로 접근할 수 있는 메모리 상의 가장 작은 주소

- 한계 레지스터(limit register) : 기준 레지스터 값부터 접근할 수 있는 메모리의 범위

기준 레지스터부터 기준 레지스터 + 한계 레지스터까지의 주소 영역에만 접근이 가능하다.

기준 레지스터와 한계 레지스터의 값을 세팅하는 것은 특권 명령이다.

 

CPU 보호

정해진 시간이 지나면 인터럽트를 발생시켜 CPU의 제어권을 획득할 수 있도록 하는 타이머(Timer)를 사용한다. 클럭 틱(clock tick) 단위. 타이머의 값을 세팅하는 명령을 로드 타이머(load timer)라고 하며, 이는 특권 명령이다.

 

사용자 프로그램은 시스템 콜(system call)을 통해 서비스 대행 요청을 하여 입출력을 수행한다.

 


참고 자료

반효경, 『운영체제와 정보기술의 원리』, 이화여자대학교출판문화원(2020), p67-p93

 

반응형

'IT Basic > Operating System' 카테고리의 다른 글

[OS] 6장 CPU 스케줄링  (0) 2021.12.28
[OS] 5장 프로세스 관리  (0) 2021.12.22
[OS] 4장 프로그램의 구조와 실행  (0) 2021.12.22
캐시 메모리(Cache Memory)  (0) 2021.12.15
[OS] 2장 운영체제 개요  (0) 2021.12.15

댓글