운영체제의 구조
운영체제의 구조는 아래의 부품들의 구조와 유사하다.
운영체제의 역할이 바로 이 하드웨어들을 다루는 것이기 때문이다. ▼
그렇기에 각 하드웨어들의 입장에서 운영체제를 볼 수 있다.
각 하드웨어들의 입장에서 본 운영체제가 바로 운영체제가 하는 일이라고 볼 수 있다.
CPU의 입장
CPU는 일을 처리하는 핵심 부품이다.
그렇다면 일을 어떤 순서로 처리해야 효율적이고 공평할까?
사회의 시선으로 보면 먼저 들어온 일 부터 처리하는게 공평하지만, 효율적이라고는 하기 힘들다.
은행업무를 예시로 보자. ▼
사회의 관점에서는 먼저 온 사람부터 업무를 봐주는게 공평하고 당연한 처사다.
번호표를 뽑았으니까 말이다.
그런데 먼저 온 사람의 업무가 2시간이 걸린다면 그건 조금 낭패다. ▼
뒤의 사람들은 기껏해야 1분도 걸리지 않는 업무들이지만 앞의 사람으로 인해 2시간을 기다리게 된다.▼
이론적으로 오래걸리는 사람을 뒤로 넘기는게 좋지만, 그렇게 순서를 미루다보면 공평성이 사라지게 된다.
그래서 운영체제는 CPU자원을 다 같이 조금씩 사용하는 것으로 발전해가고 있다.
이렇게 CPU의 입장에서 본 운영체제를 통해 운영체제가 어떤 방식으로 일을 처리하는 방식을 발전시키고 있는지 알 수 있다.
Memory의 입장
여기서 말하는 메모리는 RAM을 말한다.
요즘에는 RAM 용량이 전에 비해 엄청나게 증가했지만, 용량이 증가한 만큼 사용하는 양도 증가하여 여전히 메모리 관리를 해줘야한다.
멀티 프로그래밍을 하게 되면서 메모리에 여러 개의 프로그램을 올릴 수 있게 되었지만, RAM 역시 유한한 자원이기에 모든 프로그램을 메모리에 올릴 수는 없다.
올릴 수 있다고 해도 성능상 전부 올리고 있지 않는게 좋기 때문에 Working Set이라는 알고리즘이 개발되었고, 메모리를 초과하여 프로그램을 올리기 위해 가상 메모리라는 개념도 등장하게 되었다.
Disk의 입장
디스크의 경우, 요즘에는 SSD나 다른 저장장치들이 등장하여 조금 이야기가 다를 수 있지만 하드디스크의 경우에는 디스크를 읽는 헤드의 움직임을 효율적으로 하는 것이 필요했다.
엘리베이터가 바로 그 예다.
I/O의 입장
입출력 장치는 CPU에 비해 굉장히 느리다.
그래서 입출력 장치를 사용할 때에는 어떻게 대비를 해야하는지 생각해야한다.
이를 해결하기 위해 interrupt를 사용하고, 입출력 장치를 마냥 기다리는게 아니라 입출력 장치가 일하는 동안 다른 일을 하는 비동기적 작업을 수행한다.
그 외
프로세스 관리, 보호 시스템, 네트워킹, 명령어 해석기 등등이 있다.
컴퓨터 시스템 구조
CPU
CPU는 굉장히 빠른 일꾼으로 매 순간 메모리에 있는 instruction을 읽어 수행한다.
한 instruction이 끝나면 다음 instruction을 하고, 그 다음 일을 하고 그런 식으로 빠르게 일들을 왔다갔다 하며 일한다.
CPU에는 CPU의 일들을 도와주는 장치들인 Register, Mode bit, Interrupt Line, Timer라는 것들이 존재한다.
Registers
CPU안에는 작지만 빠른 메모리인 register가 있다.
현재 CPU가 계산 중인 값을 저장하는데 주로 사용된다.
Interrupt Line
Interrupt Line은 I/O 작업과 작업이 끝나는 것을 알아차라기 위해 존재한다.
프로그램을 실행도중에 I/O 를 받는 작업을 수행할 수 있게 된다.
CPU는 instruction을 수행하고 interrupt line을 확인하고 이를 반복하여 I/O 요청이 들어왔는지 확인한다.
DMA Controller
I/O 작업을 받기 위해 interrupt라인을 두어 interrupt를 받게 되면 CPU가 interrupt를 너무 많이 당하게 되는 문제가 발생한다.
CPU는 굉장히 빠른 일꾼이지만 이렇게 계속해서 interrupt가 들어오게 되면, 정말로 이름 뜻대로 CPU가 하는 일들을 계속해서 방해하게 된다.
극단적인 예로는 키보드 하나 칠 때 마다 interrupt를 받게 될 수도 있게 된다.
그래서 Direct Media Access Controller를 두어 I/O를 매번 처리하는게 아니라 일정량을 모아서 한 번에 처리하는 방식으로 처리하게 한다.
Mode Bit
Mode Bit는 운영체제와 사용자를 구분해준다.
Mode Bit가 0일 때는 모든 instruction 실행할 수 있고,
1일 때는 제한된 instruction 실행할 수 있다.
Timer
만약에 무한 루프를 도는 프로그램을 만들어서 CPU가 한 번 그 프로그램에 넘어가게 되면 끝나질 않아서 뺏어올 수 없게 된다.
그래서 Timer라는 것을 두고 있다.
Time sharing을 위해서 타이머를 두고 있는 것도 또 다른 이유가 된다.
Timer에 설정된 시간이 지나서 운영체제가 CPU를 강탈해오면, 운영체제는 강탈한 CPU자원을 다른 프로그램에게 넘겨준다.
Memory
메모리는 CPU의 작업공간이다.
메모리는 원칙적으로 CPU만 접근하게 한다.▼
Memory Controller
메모리 컨트롤러는 race condtion을 막기 위해 존재한다.
특정 데이터에 접근하는 순서에 따라서 그 결과가 천지차이로 바뀔 수도 있게 된다.
1을 빼는 행위와 1을 더하는 행위, 그리고 10을 곱하는 행위를 하나의 요소로 보면 별 거 아니지만 그 순서에 따라 결과의 차이가 극명하게 갈리는 것을 보면 Race Condition을 쉽게 이해할 수 있다.
이렇게 예상하지 못하는 값의 결과가 나오는 것을 막기 위해 Memory Controller를 두고 있다.
Device
Device로는 여러가지가 있지만 공통점은 I/O 작업을 해준다는 것이다.▼
Device Controller
각 기기에는 Device Controller 라는게 붙어있다.
한 기기를 전담하는 소형 CPU라고 생각하면 된다.
CPU는 I/O 디바이스를 직접 접근하지 않는다.
CPU는 Device Controller에게 일을 시키고 그 동안 다른 일을 한다.
Local Buffer
Local Buffer는 각 기기에서 읽어온 데이터를 담아놓는 공간이다.
읽어온 데이터를 다른 기기인 Disk에 옮겨놓게 되면 읽어오는 속도가 느리고, RAM에 옮겨놓게 되면 읽는 속도는 빠르지만 절대적인 용량이 부족해진다.
그래서 읽는 족족 불러오는 것이 아니라 별도의 하드웨어인 Local Buffer를 두어 임시로 저장을 해놓고 CPU가 필요할 때 마다 읽는다.
CPU는 로컬 버퍼와 메모리에 접근 가능하다.
Device Driver
device driver는 소프트웨어를 말한다.
device controller는 하드웨어를 뜻한다.
Driver라고 하면 가끔 프린터를 새로 설치하거나, 다른 주변 기기들을 설치하게 되면 그에 맞는 Driver를 설치하라고 한 것이 기억날 것이다.
프린트 드라이버 그런게 이걸 말함.
Driver는 명령어 처리 루틴을 말하고, 한 가지 주의해야할 것은 이 처리 루틴은 기기가 실행하는게 아니라 CPU가 실행하는 것이다.
'CS > 운영체제' 카테고리의 다른 글
CPU Scheduling (0) | 2024.03.04 |
---|---|
Process (0) | 2024.03.04 |
System Call (0) | 2024.01.31 |
Operating System 개요 (0) | 2024.01.29 |