컴퓨터 시스템의 동작 원리는 하드웨어와 소프트웨어가 상호작용하여 작업을 처리하는 과정을 의미한다. 컴퓨터 내부 장치에는 CPU와 메모리가 있고, 외부 장치에는 키보드, 모니터, 마우스 등이 있다.
각 하드웨어 장치에는 컨트롤러가 존재한다. 컨트롤러는 일종의 작은 CPU로서, 해당 하드웨어 장치를 제어한다.
입출력 장치들의 I/O 연산은 I/O 컨트롤러가 담당하며, 컴퓨터 내에서 수행되는 연산은 Main CPU가 담당한다. 입출력 장치와 CPU는 동시 수행이 가능하다. 각 장치에는 이를 제어하기 위해 설치된 장치 컨트롤러와 데이터를 임시로 저장하기 위한 작은 메모리인 로컬 버퍼(Local buffer)가 있다.
인터럽트는 컨트롤러들이 CPU의 서비스가 필요할 때, 이를 통보하는 방법이다. 키보드 입력, 디스크 데이터 읽기 완료 등의 이벤트를 CPU에게 알리기 위해 컨트롤러가 인터럽트를 발생시킨다.
인터럽트 처리 루틴은 인터럽트 벡터와 인터럽트 서비스 루틴을 포함한다.
인터럽트가 발생한 경우 처리 절차:
운영체제 커널 영역에는 현재 시스템 내에서 수행되는 프로그램들을 관리하기 위한 프로세스 제어 블록(PCB)이 있다. 인터럽트 발생 시, 프로그램의 수행 지점을 PCB에 저장하고, 인터럽트 처리가 완료되면 PCB에 저장된 지점부터 다시 수행을 이어간다.
1. 프로그램 A 수행 중 인터럽트 발생
2. A의 현재 상태를 PCB에 저장
3. 인터럽트 처리 루틴으로 이동하여 인터럽트 처리
4. 인터럽트 처리 후 PCB에 저장된 상태를 복원하여 프로그램 A 재개
인터럽트 처리 중에는 다른 인터럽트 발생을 허용하지 않는다. 데이터 일관성 유지를 위해서이다.
통상적으로 인터럽트는 하드웨어 인터럽트를 의미하며, 소프트웨어 인터럽트는 트랩(trap)이라 불린다. 예를 들어 예외 상황(exception), 시스템 콜(System Call)이 있다.
일반적인 함수 호출 vs 시스템 콜
입출력(I/O)란 컴퓨터 시스템이 외부 주변 장치들과 데이터를 주고받는 것을 의미한다.
DMA는 메모리 접근이 가능한 장치로, CPU의 인터럽트 발생 빈도를 줄여 CPU의 효율을 높인다. 블록 단위로 데이터를 메모리에 읽어온 후 인터럽트를 발생시켜 작업 완료를 알린다.
적은 용량의 캐시 메모리를 사용해 메인 메모리와 같이 큰 용량을 가진 것처럼 효율적으로 관리하는 기법. 자주 사용되는 정보를 캐시에 저장해 속도 향상.
다중 프로그래밍 환경에서 프로그램 간 충돌을 방지하기 위한 하드웨어 보안 기법 필요. 커널 모드와 사용자 모드로 오퍼레이션을 구분한다.
메모리에는 여러 프로그램이 동시에 올라가서 실행되므로 각 프로그램의 메모리 영역을 보호해야 한다. 기준 레지스터와 한계 레지스터를 사용해 메모리 접근을 관리한다.
CPU가 특정 프로그램에 독점되지 않도록 타이머를 사용한다. 타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 CPU 제어권을 운영체제로 넘긴다.
타이머
타이머는 시분할 시스템에서 현재 시간을 계산하고, 타이머 값을 설정하는 명령(로드 타이머)은 특권 명령으로 분류된다.
입출력 명령은 특권 명령이므로 사용자 프로그램은 직접 수행할 수 없다. 시스템 콜을 통해 운영체제에게 요청하여 입출력을 수행한다. 시스템 콜은 소프트웨어 인터럽트로, 운영체제가 해당 명령을 대신 수행하고 완료 후 인터럽트를 발생시켜 사용자 프로그램에게 CPU를 할당한다.
컴퓨터 시스템의 동작 원리는 하드웨어와 소프트웨어의 상호작용을 통해 다양한 작업을 수행하는 과정을 포함한다. CPU, 메모리, 입출력 장치, 인터럽트 등의 작동 원리를 이해함으로써 시스템의 효율적인 관리와 성능 향상을 도모할 수 있다. 운영체제는 이러한 자원 관리와 보안, 효율성을 제공하여 사용자와 프로그램들이 원활하게 상호작용할 수 있도록 지원한다.