[운영체제] 컴퓨터 시스템 구조 및 프로그램의 실행
1. 컴퓨터 시스템 구조
컴퓨터는 프로그램 코드들을 정해진 순서대로 실행한다.
이 과정에서 데이터를 읽고(Read), 처리(Processing)하고, 저장(Store)한다.
컴퓨터 시스템 구조는 크게 두 가지로 분류된다.
- Computer
- I/O device (입출력장치)
입출력 장치를 통해서 사용자가 원하는 데이터를 컴퓨터로 전달하면, 컴퓨터는 그 데이터를 가공을 한다. 가공된 데이터는 다시 입출력 장치를 통해 출력된다.
컴퓨터의 구성 요소
- CPU : 메모리로부터 명령어를 받아와 기계어로 변환하고 연산을 수행한다.
- Memory : 명령어 및 데이터가 적재되는 공간이다.
- I/O device : 데이터를 입출력하기 위한 컴퓨터의 외부 장치이다.
컴퓨터 시스템 흐름
다음은 대략적인 컴퓨터 시스템 흐름이다.
- 컴퓨터 전원이 켜진다.
- 메인메모리에 커널이 올라간다.
- CPU는 운영체제를 실행한다.
- 운영체제가 시작되면 다른 프로그램들을 실행시킨다. (메인 메모리에 올라감)
- CPU는 명령어 주소를 레지스터에 저장한다.
- 프로그램은 운영체제에 I/O device 사용 요청을 보낸다. (시스템콜)
- 운영체제는 요청에 따라 I/O device controller에게 데이터 입출력 처리를 요청한다.
- I/O device controller는 Interrupt를 발생시켜 CPU에게 작업이 완료되었다고 알린다.
- CPU는 I/O device의 Buffer에 접근하여 데이터를 읽어 메인 메모리에 올린다.
용어정리
커널 | 전체 운영 체제 중 메모리에 올라가 있는 부분 (핵심 부분) |
레지스터 | 명령어를 실행하기 위해 필요한 데이터와 상태, 명령어를 저장하는 기억 소자 |
시스템콜 | 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것 |
Device Controller | 각각의 디바이스들을 I/O연산, 제어관리를 하는 역할 (device의 작은 CPU 역할) |
버퍼 |
각각의 device controller가 명령을 내려서 device의 데이터를 읽어오거나, 데이터를 저장하는 공간 (device의 Ram 역할) |
2. I/O 연산
입출력(I/O) 수행
- 시스템콜로 사용자 프로그램은 운영체제에게 I/O 요청
- Trap을 사용하여 Interrupt vector의 특정 위치로 이동
- 제어권이 Interrupt vector가 가리키는 Interrupt Service Rotine으로 이동
- 올바른 I/O 요청인지 확인 후 I/O를 수행
- I/O 완료시 제어권을 시스템콜 다음 명령으로 옮긴다.
인터럽트(Interrupt)
CPU는 I/O device가 데이터를 입력할 때까지 기다리는 것이 아니라 자신의 일을 계속 처리하고 있는다. 이때, I/O device에서 입력이 이루어지면 각각의 device controller가 interrupt를 발생시켜서 CPU에게 알려준다. 이 신호를 인터럽트라고 한다.
다시 말하자면, I/O device에 입력이 들어오면 CPU에 보내주는 I/O device controller 신호이다.
CPU는 인터럽트가 발생하면 하던 일을 멈추고 인터럽트가 발생했을 때 수행해야할 코드영역으로 가서 정의된 작업을 수행한다. CPU가 먼저 로컬 버퍼에 있는 내용을 프로그램이 사용할 수 있도록 메모리로 전달하고, 프로그램이 CPU를 할당받을 경우 다음 명령어를 수행할 수 있음을 표시한다.
인터럽트는 크게 두 가지로 나뉜다.
- 하드웨어 인터럽트(Interrupt)
- 소프트웨어 인터럽트(Trap)
하드웨어 인터럽트는 하드웨어가 발생시키고, 소프트웨어는 소프트웨어가 인터럽트를 발생시킨다.
또한, 운영체제는 인터럽트 루틴을 쉽게 찾아갈 수 있도록 주소를 의미하는 인터럽트 벡터를 가지고 있다. 인터럽트 벡터는인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야할 코드가 위치한 부분을 포인터로 가리키고 있는 자료구조를 말한다.
용어정리
Interrupt | = 하드웨어 인터럽트 하드웨어가 발생시킨 인터럽트 |
Trap | = 소프트웨어 인터럽트 |
Interrupt vector | 해당 인터럽트의 처리 루틴 주소를 가지고 있음 |
Interrupt Handler |
인터럽트가 발생한 경우 처리하는 커널 함수 |
Interrupt Service Routine | 다양한 인터럽트에 대해 처리해야할 업무를 정의해놓은 것 |