본문 바로가기
CS/운영체제

[운영체제] 운영체제의 역할과 구조, 컴퓨터 시스템 구조

by 우다다캣 2022. 11. 27.

운영체제란?

 운영체제(OS, Operating System)는 사용자가 컴퓨터를 사용하기 위해 필요한 모든 시스템을 제어하고, 일반적으로 컴퓨터를 사용하면서 실행한 프로그램을 관리하고 제어하는 시스템 소프트웨어입니다. 운영체제는 컴퓨터 하드웨어 바로 위에 설치됩니다.

 

 운영체제의 모든 부분을 항상 메모리에 올려두는 것은 어렵기 때문에, 운영체제의 가장 핵심적인 부분인 커널만을 메모리에 상주시켜 둡니다. 따라서 좁은 의미에서는 운영체제의 핵심인 커널만을 운영체제라고 부르기도 합니다. 


운영체제의 역할

운영체제의 역할은 다음과 같습니다.

 

1. 컴퓨터 시스템의 자원(프로세스, 메모리, I/O 장치 등)을 효율적으로 관리합니다. 주어진 하드웨어, 소프트웨어 자원으로 최대한의 성능을 내도록 하며, 사용자가 여러 명일 경우 각 사용자 간 형평성 있게 자원을 사용할 수 있도록 분배해 줍니다.

 

2. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공합니다. 하드웨어를 사용자가 직접 다루지 않아도 컴퓨터를 사용할 수 있게 해주며, 여러 가지 프로그램을 동시에 실행할 수 있도록 다중 작업(multi tasking)을 지원해줍니다.

 

멀티태스킹(Multitasking) : 여러 개의 프로그램이 동시에 실행되는 방식을 의미합니다. 정확히는 하나의 CPU에서 동시에 프로그램을 실행하는 것이 아니라, 각각의 프로그램에 아주 짧은 시간을 번갈아가면서 분배해서 마치 동시에 실행되는 것처럼 보이게 하는 방식입니다. 이를 Multiprogramming(여러 프로그램이 메모리에 올라가 있음을 강조), Time Sharing(CPU의 시간을 분할해서 쓴다는 것을 강조)이라고도 합니다.

멀티프로세서(Multiprocessor) : 하나의 컴퓨터에 CPU(processor)가 여러 개임을 의미합니다. 멀티태스킹과 전혀 다른 의미이므로 혼동되지 않도록 주의해야 합니다.

컴퓨터 시스템 구조

 

출처 : 이화여대 반효경 교수님 운영체제 강의 (http://www.kocw.net/home/search/kemView.do?kemId=1046323)

 

 컴퓨터 시스템은 위 그림과 같은 구조를 가지고 있습니다. 컴퓨터는 왼쪽의 CPU와 메모리, 그리고 그와 연결된 여러 요소들로 구성되어 있으며 오른쪽 4가지 장치들은 컴퓨터와 별개의 장치인 I/O 장치(하드디스크, 키보드/마우스, 프린터, 모니터)입니다. 이를 묶어서 컴퓨터 시스템이라고 부릅니다. 각 장치의 역할에 대해 알아보겠습니다.

 

CPU(Central Processing Unit)

 CPU는 기본적으로 매 clock cycle마다 메모리에서 기계어로 된 명령어(instruction)을 읽어서 작업을 실행합니다. 

 

Interrupt line

 CPU는 기본적으로 매 clock cycle마다 메모리에서 명령을 읽어서 실행하고 있습니다. 이 때, 만약 도중에 키보드 입력이 들어오거나 디스크에서 데이터를 가져오는 요청이 오는 등 I/O 장치의 신호가 들어온다면 CPU에 이를 전달해야 하고, 반대로 CPU가 I/O 장치에 일을 시킬 수도 있어야 합니다. 

 

 CPU는 연산 속도가 I/O 장치보다 훨씬 더 빠르지만, 한 번에 하나의 작업밖에 수행할 수 없습니다. 따라서 프로그램이 실행될 때 I/O 처리 등 시간이 오래 걸리는 일이 있으면 CPU가 이 작업을 기다리느라 시간을 낭비하지 않도록 프로그램을 일시 정지 시킵니다. 이를 인터럽트(Interrupt)라고 합니다.

 

 인터럽트가 발생하면 CPU는 즉시 진행하던 프로그램의 작업을 중단하고, CPU의 제어권이 OS에게 넘어갑니다. OS는 이 인터럽트를 처리하고, (일반적으로) 다시 CPU의 제어권을 실행하던 프로그램에게 넘겨줍니다.

 

 인터럽트가 발생했는지를 감지하는 요소가 바로 Interrupt line입니다. CPU는 하나의 명령어를 실행할 때마다 인터럽트 라인을 확인하며 인터럽트가 발생했는지 확인합니다.

 

modebit

 현재 CPU의 제어권이 운영체제에 있는지, 아니면 사용자 프로그램에 있는지 구분하게 해주는 역할을 합니다. modebit이 0이면 OS가, 1이면 사용자 프로그램이 CPU에서 실행되고 있는 것입니다.

modebit
1  사용자 모드(user mode) : 사용자 프로그램 수행
0 모니터 모드, 커널 모드(monitor mode, kernel mode) : OS 코드 수행

 

 modebit이 0일 때, 즉 OS가 CPU에서 실행 중일 때에는 메모리에 접근하거나 I/O device에 접근하는 등 모든 일을 할 수 있습니다. 컴퓨터의 관리자 모드라고 생각할 수 있습니다. 반대로 modebit이 1일 때, 즉 사용자 프로그램이 CPU에서 실행 중일 때는 제한된 작업만 할 수 있습니다. 이를테면 I/O device나 다른 프로그램의 메모리 공간에는 접근하는 명령어는 실행할 수 없습니다.

 

 OS는 사용자 프로그램에 CPU를 넘겨줄 때 modebit을 1로 변경해서 넘겨줍니다. 그리고 인터럽트가 들어와서 CPU의 제어권이 OS로 넘어갈 때에는 modebit이 0으로 변경되면서 넘어갑니다. modebit은 이로써 일종의 보안 역할을 해줍니다.

 

registers

 CPU 안에 있는 매우 빠른 임시기억장치입니다. CPU와 직접 연결되어 있기 때문에 연산 속도가 메모리보다 훨씬 빠릅니다. PC(Program Counter)라는 레지스터가 다음 번에 실행해야 할 명령어가 담긴 메인 메모리의 주소를 가지고 있어, CPU는 이 레지스터에 담긴 주소에서 명령어를 받아와서 실행합니다.

 

Timer

 타이머는 하나의 프로그램이 무한루프 등으로 CPU를 독점하는 것을 막기 위해 컴퓨터에 존재하는 하드웨어 장치입니다. 처음 컴퓨터를 켜면 OS가 메모리에 올라가고, 이 OS는 각각의 사용자 프로그램에게 CPU를 넘겨줍니다. 이 때 타이머에 일정 시간(수~수십ms)을 세팅한 후 프로그램에게 CPU를 넘겨줌으로써 프로그램이 CPU를 독점하는 것을 막습니다.

 

 CPU가 프로그램을 실행할 때 타이머에 지정한 시간이 끝나면, 타이머는 타이머 인터럽트를 발생시켜서 시간이 끝났음을 알려줍니다. CPU는 타이머 인터럽트를 받으면 프로그램 실행을 중단하고, CPU의 제어권은 자동으로 다시 OS에게 넘어갑니다. OS는 다시 CPU를 다른 사용자 프로그램에게 넘겨주고(역시 타이머를 걸고 넘겨줍니다.), 타이머 시간이 끝나면 다시 CPU 제어권이 OS에 넘어오는 과정을 반복하면서 CPU가 번갈아가면서 여러 프로그램을 실행할 수 있게 됩니다.

 

Memory

 CPU의 작업 공간으로, 데이터나 상태, 명령어 등을 기록하는 장치입니다. CPU는 매 clock cycle마다 메모리에서 기계어를 읽어서 작업을 실행합니다. 메모리도 I/O 장치와 같은 장치의 일종이기 때문에 전담 memory controller를 갖습니다.(아래 device controlelr 설명 참조)

 

 원칙적으로 메인 메모리에는 CPU만 접근할 수 있습니다. I/O 장치들은 메모리에 접근할 수 없으며, 각 장치에 따로 존재하는 local buffer에 데이터를 저장하고 작업을 수행합니다. 다만 DMA controller라는 장치는 너무 많은 인터럽트 발생을 막기 위해 CPU와 함께 메모리에 접근할 수 있습니다(아래 DMA controller 설명 참조). 이 때 CPU와 DMA controller가 동시에 메모리에 접근하면 데이터 일관성이 깨지는 등의 문제가 발생할 수 있기 때문에 memory controller가 접근 순서 등을 조율하여 한 번에 하나의 장치만 메모리에 접근할 수 있도록 합니다.

 

I/O Device

 컴퓨터와 별개의 장치로, 키보드, 마우스, 프린터, 모니터, 하드디스크 등이 포함됩니다. 하드디스크의 경우 주로 보조기억장치라고 부르지만, 컴퓨터의 메모리에 데이터를 올리거나(Input) 메모리에서 데이터를 가져오는(output) 작업을 때문에  I/O Device라고 볼 수도 있습니다.

 

device controller

 각 I/O 장치에 붙어서 해당 장치를 관리하는 전담하는 일종의 작은 CPU입니다. 예를 들면 디스크의 헤드가 어떻게 움직일지 컨트롤하는 것은 컴퓨터 CPU의 역할이 아니라 디스크의 device controller의 역할입니다.

 

local buffer

 컴퓨터에 CPU의 작업 공간인 메모리가 있듯이, 각 I/O 장치에도 device controller의 작업 공간이 필요합니다. 이 각 장치의 작업 공간을 local buffer라고 부릅니다. I/O 장치에서 발생한 데이터가 local buffer에 저장됩니다. local buffer에 작업 내용이 쌓이면 인터럽트가 발생하고, CPU가 local buffer의 내용을 읽어서 자신의 작업 공간인 메모리에 복사해 옵니다.

 

DMA(Direct Memory Access) controller

 앞서 컴퓨터의 메인 메모리에는 원칙적으로 CPU만 접근할 수 있다고 했습니다. 그러나 이렇게 제한이 되어 있으면 I/O 장치에서 무언가 신호가 발생할 때마다(ex. 키보드 입력) 인터럽트가 발생하게 되고, 결국 CPU에 너무 많은 인터럽트가 발생하여 많은 부하가 가게 됩니다.

 

 DMA controller는 이를 방지하기 위한 장치입니다. 기존에는 I/O 장치에서 인터럽트가 발생하면 CPU가 하던 일을 멈추고 I/O 장치의 local buffer의 내용을 자신의 메모리로 가져와서 작업을 수행해야 했습니다. DMA controller는 CPU를 대신해서 I/O 장치의 local buffer에 내용이 쌓이면 이 내용을 메모리로 복사해주고, 이 작업이 끝나면 CPU에 한 번만 인터럽트를 걸어 작업이 끝났음을 알립니다.


운영체제의 구조

 

 

 운영체제는 크게 시스템 콜(system call), 커널, 드라이버로 구성되어 있습니다. GUI는 사용자가 운영체제와 상호작용 할 수 있도록 해주는 유저 인터페이스로, GUI 역시 운영체제에 포함된다고 볼 수 있습니다.

 

시스템 콜(system call)

 사용자 프로그램이 I/O 장치에 접근하는 등 권한이 없는 일을 수행해야 할 때, OS에 이를 요청하여 OS가 대신 작업을 수행해 줍니다. 이렇게 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것을 시스템 콜이라고 합니다.

 

인터럽트(Interrupt)

 앞서 Interrupt line을 설명할 때 인터럽트가 발생하면 CPU가 하던 일을 멈추고 CPU의 제어권이 OS에게 넘어간다고 했습니다. 이 과정을 좀 더 정확히 설명하면, 인터럽트 당한 시점의 레지스터와 program counter를 저장한 후 CPU의 제어권이 인터럽트 처리 루틴(인터럽트 핸들러, 인터럽트를 처리하는 커널 함수)으로 넘어갑니다.

 

 CPU 인터럽트는 크게 하드웨어 인터럽트, 소프트웨어 인터럽트로 나눌 수 있습니다. 일반적으로 인터럽트라고 하면 하드웨어 인터럽트를 의미하고, 소프트웨어 인터럽트는 트랩(Trap)이라는 이름으로 부릅니다.

 

Interrupt (하드웨어 인터럽트) : 하드웨어(I/O 장치 등)가 발생시킨 인터럽트
Trap (소프트웨어 인터럽트)
    - Exception : 프로그램이 오류를 범한 경우
    - System call : 프로그램이 커널 함수를 호출한 경우

 

 사용자 프로그램을 실행하던 도중 I/O 장치에 접근해야 한다면 다음과 같은 과정을 거칩니다.

 

1. I/O 장치를 사용하기 위해 사용자 프로그램 A에서 Trap(System call)을 발동합니다. 이는 인터럽트를 발생시키고, CPU의 제어권이 OS로 넘어갑니다. (modebit : 1 -> 0)

2. 커널에서는 I/O 장치에 A 프로그램이 요청한 일을 수행하도록 명령하고, I/O 장치가 이를 수행하는 동안 다른 프로그램 B에게 CPU를 넘깁니다. (modebit : 0 -> 1)

3. I/O 장치에서 작업이 끝나면 하드웨어 인터럽트를 발생시켜 작업이 끝났음을 알립니다.

4. CPU의 제어권은 다시 OS로 넘어가고, OS는 다시 A 프로그램에게 CPU를 넘깁니다. (modebit : 1 -> 0 -> 1)

 

 이와 같이 사용자 프로그램이 I/O 장치에 접근할 때에는 하드웨어 인터럽트, 소프트웨어 인터럽트가 모두 발생하게 됩니다.

 

참고자료

https://core.ewha.ac.kr/publicview/C0101020140307151724641842?vmode=f 

https://ko.wikipedia.org/wiki/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

https://math-coding.tistory.com/80

https://primayy.tistory.com/43

'CS > 운영체제' 카테고리의 다른 글

[운영체제] 메모리 계층구조  (0) 2022.12.11