System Structure & Program Execution 1
이화여대 ‘반효경’교수님의 Operating Systems강의 중, ‘System Structure & Program Execution 1’강의를 수강하고 학습합니다.
컴퓨터 시스템 구조
컴퓨터 시스템은 크게 CPU(중앙처리장치), 메모리, 그리고 I/O 디바이스(입출력 장치)로 구성됩니다. 각 구성 요소는 다음과 같은 역할을 합니다.
- CPU (Central Processing Unit): 프로그램 명령어를 처리하는 주체입니다. 메모리에서 명령어를 읽어들이고, 해당 명령어를 실행합니다.
- 메모리: CPU가 작업을 수행하는 동안 필요한 데이터를 저장하고, CPU가 데이터를 빠르게 읽고 쓸 수 있도록 지원합니다.
- I/O 디바이스: 데이터를 컴퓨터 내부와 외부로 주고받는 역할을 합니다. 대표적인 입력 장치로는 마우스, 키보드가 있으며, 출력 장치로는 모니터, 프린터가 있습니다.
각 I/O 디바이스는 디바이스 컨트롤러라는 작은 CPU를 통해 제어됩니다. 이 컨트롤러는 디바이스의 동작을 관리하고, 로컬 버퍼를 통해 데이터를 임시로 저장합니다.
🤔 로컬 버퍼란?
CPU
CPU는 컴퓨터 시스템의 핵심입니다. CPU는 매 클럭 주기마다 메모리에서 명령어를 읽고 이를 실행하는 작업을 반복합니다.
CPU 내부 구성 요소
- 레지스터(Register): 메모리보다 더 빠른 속도를 가진 작은 저장 공간입니다. CPU는 자주 사용하는 데이터를 레지스터에 저장해 빠르게 접근할 수 있습니다.
- 모드 비트(Mode Bit): CPU가 현재 운영체제 모드인지 사용자 모드인지 구분해주는 비트입니다.
- 인터럽트 라인(Interrupt Line): 각 I/O 디바이스나 시스템에서 요청이 발생하면 인터럽트 라인에 신호가 쌓여 순차적으로 처리됩니다.
CPU와 I/O 디바이스 간의 작업 흐름
- CPU는 작업을 메모리에서 읽고 실행합니다.
- 디스크 작업과 같은 시간이 오래 걸리는 작업이 요청되면, CPU는 해당 작업을 디스크 컨트롤러에 요청하고, 다른 작업을 계속 진행합니다.
- 디스크 작업이 완료되면, 디바이스 컨트롤러는 결과를 로컬 버퍼에 저장합니다.
- 디바이스 컨트롤러는 CPU에 인터럽트를 걸어 작업이 완료되었음을 알립니다.
‼️ 무한 루프 프로그램 문제
만약 CPU가 무한 루프를 도는 프로그램을 만난다면, 해당 프로그램이 CPU를 독점하게 되어 다른 작업이 진행되지 않을 수 있습니다. 이를 방지하기 위해 타이머(Timer) 라는 하드웨어가 사용됩니다. 타이머는 특정 프로그램이 CPU를 독점하지 않도록 설정된 시간 내에 인터럽트를 발생시켜, CPU 제어를 운영체제에게 다시 넘깁니다.
타이머의 역할
- 운영체제가 시작되면 CPU를 제어합니다.
- 사용자 프로그램이 실행될 때, 운영체제는 타이머를 설정하고 CPU를 사용자 프로그램에 넘깁니다.
- 타이머가 설정된 시간이 다 되면, CPU는 운영체제로 제어권을 다시 돌려줍니다.
- 운영체제는 다른 프로그램에게 CPU를 할당합니다.
※ 타이머는 time-sharing을 구현하는 데 널리 사용되며, 현재 시간을 계산하는 데도 이용됩니다.
모드 비트 (Mode Bit)
컴퓨터 시스템에서는 사용자 프로그램의 잘못된 동작으로 인해 다른 프로그램이나 운영체제에 피해가 가지 않도록 보호 장치가 필요합니다. 이를 위해 CPU는 모드 비트를 통해 두 가지 모드를 지원합니다.
- 사용자 모드(User Mode): 사용자 프로그램이 실행될 때 설정됩니다. 이 모드에서는 제한된 명령어만 실행할 수 있으며, I/O 장치에 직접 접근할 수 없습니다.
- 1 : 사용자/일반 모드 - 사용자 프로그램 수행, 제한적 명령 수행
- 모니터 모드(Monitor Mode): 운영체제가 실행될 때 설정됩니다. 이 모드에서는 모든 명령어를 실행할 수 있으며, I/O 장치에 접근할 수 있습니다.
- 0 : 모니터/커널/시스템 모드 - OS 코드 수행, 보안이 필요한 중요한 명령 수행
운영체제가 사용자 프로그램에게 CPU를 넘길 때는 모드 비트를 사용자 모드로 설정합니다. 이렇게 함으로써 보안상의 이유로 사용자 프로그램이 시스템에 직접 접근하지 못하게 제한합니다.
인터럽트 (Interrupt)
- *인터럽트(Interrupt)**는 하드웨어나 소프트웨어에서 발생하는 이벤트로, CPU의 제어를 잠시 중단하고 인터럽트 처리 루틴을 실행하게 합니다.
인터럽트의 종류
- 하드웨어 인터럽트: I/O 디바이스나 다른 하드웨어에서 발생합니다.
- 트랩(Trap) 또는 소프트웨어 인터럽트: 소프트웨어에서 발생하며, 두 가지 주요 유형이 있습니다.
- 예외(Exception): 프로그램이 오류를 범했을 때 발생합니다.
- 시스템 콜(System Call): 프로그램이 운영체제의 기능을 요청할 때 발생합니다.
시스템 콜
시스템 콜은 사용자 프로그램이 운영체제에게 특정 작업(예: 파일 읽기/쓰기, 네트워크 통신 등)을 수행해달라고 요청하는 방법입니다. CPU는 이 요청을 트랩(Trap)으로 처리하며, 운영체제는 올바른 요청인지 확인한 후, 작업을 수행하고 결과를 반환합니다.
I/O 작업의 수행
I/O(Input/Output) 입출력의 실행은 컴퓨터 시스템에서 데이터가 입력 장치(예: 키보드, 마우스)를 통해 들어오고, 출력 장치(예: 모니터, 프린터)를 통해 나가는 과정을 의미합니다. 이 과정은 시스템의 성능과 효율성에 중요한 영향을 미칩니다. 운영체제는 이러한 I/O 작업을 관리하며, 하드웨어와 소프트웨어 간의 원활한 상호작용을 보장합니다.
개념과 동작방식
- 운영체제의 역할
- 운영체제는 I/O 장치와의 상호작용을 관리하며, 사용자 프로그램이 I/O 장치에 직접 접근하는 것을 제어합니다. 이러한 접근 제어는 시스템의 안정성과 보안을 유지하는 데 필수적입니다.
- 사용자 프로그램이 I/O 작업을 요청하면, 운영체제는 이 요청이 적합한지 확인한 후 I/O 작업을 수행합니다.
- 시스템 콜(System Call)
- 시스템 콜은 사용자 프로그램이 운영체제에게 특정 작업(예: 파일 읽기/쓰기, 네트워크 통신 등)을 수행해달라고 요청하는 방법입니다. I/O 작업도 시스템 콜을 통해 요청됩니다.
- 예를 들어, 프로그램이 파일을 읽으려면 시스템 콜을 통해 운영체제에게 이 작업을 요청합니다. 운영체제는 요청을 받아들여 파일을 읽고, 데이터를 프로그램에 전달합니다.
- 트랩(Trap)
- 트랩은 소프트웨어 인터럽트로, 사용자 프로그램이 시스템 콜을 호출하면 발생합니다. 트랩이 발생하면 제어권이 운영체제로 넘어가고, 운영체제가 요청된 작업을 처리합니다.
- I/O 요청의 처리
- 운영체제는 사용자 프로그램이 요청한 I/O 작업이 올바른지 확인한 후, 실제 I/O 작업을 수행합니다. 이 작업은 I/O 디바이스 컨트롤러를 통해 이루어지며, 데이터를 로컬 버퍼로 전송합니다.
- 작업이 완료되면, 디바이스 컨트롤러가 CPU에 인터럽트를 걸어 I/O 작업이 완료되었음을 알립니다.
- 인터럽트와 제어권 반환
- I/O 작업이 완료되면, 디바이스 컨트롤러는 인터럽트를 통해 CPU에게 작업 완료를 알립니다. CPU는 이 인터럽트를 처리한 후, 제어권을 시스템 콜 다음 명령어로 옮겨 사용자 프로그램의 실행을 계속합니다.
🤔 I/O 작업의 수행 과정 예시
DMA 컨트롤러
DMA(Direct Memory Access) 컨트롤러는 CPU의 부하를 줄이기 위해 I/O 장치가 메모리에 직접 접근할 수 있도록 도와주는 장치입니다. DMA 컨트롤러는 CPU의 개입 없이 데이터를 전송하고, 작업이 완료되면 CPU에 인터럽트를 걸어 알립니다. 이 방식은 특히 대량의 데이터 전송 시 CPU의 부담을 크게 줄일 수 있습니다.