컴퓨터 시스템 조직

운영체제가 동작하는 기본 토대는 물리적인 컴퓨터 하드웨어이다. 컴퓨터 시스템의 구성 요소는 CPU(중앙처리장치), 메모리, 다양한 I/O(입출력) 장치, 그리고 이 모든 요소들을 연결하는 시스템 버스(bus)로 이뤄진다.

CPU, 메모리, 그리고 버스

CPU는 프로그램의 명령어를 해석(Decode)하고 실행(Execute)하는 ‘두뇌’ 역할을 하며, 메모리는 데이터를 임시로 저장하는 공간이다. 모든 데이터와 명령어는 실제 실행되기 전 반드시 메모리(RAM)에 적재되어야 한다. CPU는 시스템 버스를 통해 메모리에 접근하여 필요한 명령어/데이터를 가져오거나, 결과를 메모리에 저장한다.

이와 별도로, 각종 입출력 장치(키보드, 마우스, 모니터, 디스크, 네트워크 등)는 각각 고유의 디바이스 컨트롤러(Device Controller)를 통해 컴퓨터와 연결된다. 각 컨트롤러는 버스를 통해 CPU와 메모리와 통신하며, 자신이 관리하는 장치와의 데이터 송수신 및 제어를 담당한다.

하드웨어의 동작 원리는, 예를 들어, 키보드가 입력 신호를 보내면 키보드 컨트롤러가 이를 감지하여 메모리에 저장하고, CPU는 시스템 버스를 통해 해당 신호를 읽어 프로그램에 전달한다. 이러한 일련의 흐름이 “컴퓨터 시스템 조직”의 근간이다.

운영체제와 디바이스 드라이버

운영체제는 각 장치별로 “디바이스 드라이버(Device Driver)”를 제공한다. 드라이버는 특정 하드웨어 장치를 조작할 수 있도록 OS와 하드웨어를 중계하는 특수한 소프트웨어다. 예를 들어, 프린터 드라이버는 OS가 프린터 하드웨어에 올바른 신호를 보내고, 결과를 받도록 도와준다. 이 계층화된 구조 덕분에 OS는 여러 하드웨어가 동시에 붙어 있더라도, 장치별 특성을 몰라도 일관된 방식으로 모든 장치를 다룰 수 있다.

병렬 처리와 동기화

현대의 컴퓨터는 하나의 CPU와 여러 I/O 장치들이 동시에, 즉 병렬적으로 동작한다. 예를 들어, CPU는 연산을 수행하는 동안에도, 디스크 컨트롤러는 파일을 읽고, 네트워크 컨트롤러는 데이터를 수신할 수 있다. 이런 상황에서는 각 장치가 동시에 메모리나 버스를 사용하려 하므로, 메모리 컨트롤러 등 하드웨어적 장치가 버스 접근을 적절히 조정하여 충돌을 방지한다.

운영체제 입장에서는 이러한 동시성(Concurrency)을 효과적으로 관리해야 한다. 예를 들어, 여러 프로그램이 한꺼번에 I/O 요청을 하거나, CPU가 연산과 입출력을 동시에 진행할 때, 누가 언제 어떤 자원을 사용할지 명확한 규칙이 필요하다.


1.2.1 인터럽트 (Interrupts)

컴퓨터 시스템의 “반응성”을 보장하는 가장 핵심적인 기법은 ‘인터럽트(Interrupt)’이다. 인터럽트는 하드웨어나 소프트웨어에서 발생하는 ‘예상치 못한 사건’에 대해, 시스템이 즉각적으로 반응할 수 있게 하는 메커니즘이다.

인터럽트의 동작 원리

일반적으로, 프로그램은 순차적으로 명령어를 실행한다. 하지만, 예를 들어 프린터가 인쇄를 마쳤다거나, 네트워크 패킷이 도착했다거나, 사용자가 키보드를 눌렀다거나 하는 “이벤트”가 발생하면, 관련 하드웨어가 CPU에 “인터럽트 신호”를 보낸다.

이때, CPU는 현재 하던 작업을 잠시 멈추고(즉, 현재 명령 실행 상태와 관련 데이터를 저장), 정해진 메모리 주소(인터럽트 벡터라고 부름)로 이동하여, 해당 이벤트를 처리하는 인터럽트 서비스 루틴(Interrupt Service Routine, ISR)을 실행한다. ISR이 끝나면, CPU는 원래의 명령어로 돌아가 이어서 작업을 계속한다.

이러한 메커니즘은, 마치 일상생활에서 갑작스런 전화벨이 울릴 때 현재 하고 있던 일을 잠시 멈추고 전화를 받는 것과 같다. 전화 통화(인터럽트 처리)가 끝나면 다시 본래 일(프로그램 실행)로 복귀한다.

인터럽트의 역할과 구조

인터럽트는 컴퓨터 시스템이 외부 세계와 효율적으로 상호작용하고, 다양한 하드웨어 장치를 비동기적으로 제어할 수 있게 해주는 핵심 원리다. 만약 인터럽트가 없다면, 모든 프로그램은 I/O 작업이 끝날 때까지 ‘계속 대기’해야 하므로, 시스템 자원이 낭비된다.

운영체제는 “인터럽트 벡터(Interrupt Vector)”라는 특별한 테이블을 가지고 있다. 여기에는 각 인터럽트 유형별로, 해당 이벤트 발생 시 호출할 함수(주소)가 저장된다. CPU는 인터럽트 발생 시, 인터럽트 신호에 포함된 번호를 이용해 벡터 테이블을 참조하고, 알맞은 핸들러를 호출한다.

현대 CPU는 인터럽트에 우선순위를 매길 수 있다. 예를 들어, 치명적인 하드웨어 오류(Non-Maskable Interrupt)는 반드시 즉각 처리하고, 키보드 입력 같은 일상적 인터럽트는 필요시 ‘마스킹(일시 무시)’할 수 있다. 이런 기능 덕분에, 더 긴급하고 중요한 사건에 먼저 반응할 수 있게 된다.

인터럽트의 효율성

효율적인 인터럽트 처리는 운영체제의 반응 속도와 시스템 전체 성능에 직접적인 영향을 준다. 수많은 입출력 이벤트, 예외 상황, 사용자 입력 등이 빠른 속도로 발생하기 때문에, 인터럽트 시스템의 설계는 컴퓨터 아키텍처와 OS 설계의 핵심 중 하나다.


1.2.2 저장장치 구조 (Storage Structure)

컴퓨터 시스템에서 정보는 다양한 종류의 저장장치에 계층적으로 저장된다. 운영체제의 중요한 임무 중 하나는 이러한 여러 계층의 저장장치를 효과적으로 관리하여, 데이터의 안정성, 접근 속도, 용량을 균형 있게 보장하는 것이다.

저장장치의 계층 구조

  • 레지스터(Register): CPU 내부에 존재하는 매우 작은 용량의 임시 저장공간. 연산에 직접 사용되며, 접근 속도가 가장 빠르다.

  • 캐시(Cache): CPU와 메모리 사이에 위치한 임시 저장소. 자주 쓰이는 데이터를 미리 저장하여, 메모리 접근보다 훨씬 빠르게 데이터에 접근할 수 있다.

  • 주기억장치(Main Memory, RAM): 실행 중인 프로그램과 데이터를 저장하는 공간. 휘발성이기 때문에, 전원이 꺼지면 데이터가 모두 소실된다.

  • 보조기억장치(Secondary Storage): 하드디스크(HDD), 솔리드스테이트드라이브(SSD) 등이 대표적. 대용량, 비휘발성. 프로그램/데이터가 장기간 저장된다.

  • 테이프/광디스크(Tertiary Storage): 백업/아카이브용 대용량 저장매체. 접근 속도는 느리지만, 극히 대용량 데이터의 장기 저장에 사용된다.

저장장치의 속도와 용량

이 계층구조에서, 위로 올라갈수록 속도는 빨라지지만, 용량은 작아지고, 가격은 비싸진다. 반대로, 아래로 내려갈수록 속도는 느려지지만, 대용량 데이터를 저렴하게 저장할 수 있다. 운영체제는 이런 다양한 저장장치 사이에서 데이터를 효과적으로 옮기고, 캐싱/버퍼링 등의 기법을 통해 전체 시스템의 응답 속도를 높인다.

데이터의 휘발성

RAM(주기억장치)은 전원이 꺼지면 내용이 사라지는 휘발성 메모리다. 반면, SSD/HDD/테이프/광디스크 등은 비휘발성으로, 데이터를 오랫동안 안전하게 보존한다. 운영체제는 시스템의 안정성을 보장하기 위해, 중요한 데이터와 프로그램을 항상 보조기억장치에 저장하고, 필요한 순간에만 메모리로 옮겨 실행한다.

Last updated