※학부생의 개인 스터디 목적으로 쓰인 포스트입니다. 해당 포스트를 참조할 시, 반드시 더블 체크를 하는 것을 권장합니다.
| 1.2 운영체제의 구조 |
| 1.2.1 운영체제의 모양 |
| 1.2.2 커널 |
| 1.2.3 시스템 콜 |
| 1.2.4 디바이스 드라이버 |
| 1.2.5 가상머신 |
이번 포스트에서는 운영체제의 구조에 대해서 이해할 것이다. 또한 커널과 인터페이스, 커널이 하는 시스템 콜이 무엇인지 알아보고 커널의 종류에는 어떤 것들이 있는지 살펴볼 것이다. 마지막으로 디바이스 드라이버에 대한 간단한 설명과 가상 머신에 대한 개념으로 마무리한다. 운영체제가 전반적으로 어떻게 구성되어있는지 개략적으로 살펴보는 시간이 되길 바란다.
1.2.1 운영체제의 모양
운영체제는 크게 2+1의 구조로 볼 수 있다. 커널, 인터페이스, 디바이스 드라이버이다. 
커널이 자원을 관리하고, 인터페이스가 사용자에게 그 결과를 알려주며, 디바이스 드라이버는 운영체제가 프린터, 마우스, 키보드와 같은 하드웨어 장치와 통신할 수 있게 해준다. 이 세 가지가 모두 협력한 결과가 운영체제라는 소프트웨어가 되는 것이다. 지금부터 각각의 역할을 더 자세히 알아보도록하겠다.
1.2.2. 커널 Kernel
핵심이라는 뜻의 Kernel은 그 이름에 걸맞게 운영체제의 코어 그 자체이다. 실제로 좁은 의미의 운영체제는 이것만을 지칭한다. 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것이다.
이런 커널이 하는 일은 매우 중요하기 때문에 외부와의 노출을 최소화해야한다. 따라서 CPU 차원에서 User-mode와 Kernel-mode가 분리된다. 작동 모드가 아예 바뀌는 것이다. 커널 모드에서는 하드웨어에 직접 접근하여 메모리, CPU와 같은 자원을 사용할 수 있다. 그러나 사용자 모드에서는 이러한 자원에 접근할 수 없도록 막는다. 그런데 만약 사용자 모드에서 자원을 사용하고 싶다면 어떻게 해야할까?
예를 들어 카카오톡이 이전에 보냈던 메세지를 다시 보기 위해 메모리를 사용해야한다고 생각해보자. 그 경우 카카오톡은 메모리에 접근할 수 없다. 사용자가 사용자 모드에서 실행했기 때문이다. 여기서 새로운 개념이 등장한다. 바로 시스템 콜 System Call이다.
커널의 종류
커널에는 크게 세 가지 종류가 있다.
단일형 커널, 계층형 커널, 마이크로 커널이다.
1. 단일형 커널 Monolithic kernel
초창기 구조로, 커널의 모든 기능이 한 덩어리로 이루어져있다.
메모리 관리, 프로세스 관리, 입출력 관리, 네트워크 관리, 프로세스 간 통신, 파일 시스템 등. 핵심 기능 모듈들은 구분 없이 하나로 구성되어 있고, 그렇게 때문에 통신 비용이 줄어들고 빠르다는 장점을 가지고 있다. 하지만 한 모듈에만 장애가 생겨도 전체에 영향을 미친다. 또한 이식성이 떨어지는 문제가 있다.
따라서 복잡한 현대의 운영체제를 구현하기는 어렵다.
2. 계층형 커널 Kernel stack
이번에는 비슷한 기능을 가진 모듈별로 모아 계층을 만들었다. 계층들은 통신으로 운영체제를 구현한다. 오늘날의 커널은 대부분 이러한 구조를 가지고 있다.
3. 마이크로 커널 Micro kernel
마지막은 마이크로 커널이다. 이 구조에서 커널은 아주 기본적인 기능만을 제공하고 대부분의 기능은 User-level로 이식한 상태이다. 프로세스 간 통신으로 시스템을 운영하는 구조이다. 각 모듈은 독립적으로 작동하기에 한 모듈에 장애가 생겨도 전체에 영향을 주지 않고, 이식성이 뛰어나다. 또한 커널을 최소화하였기에 낮은 사양의 CPU에도 설치가 가능한 장점이 있다. 하지만 모듈간 프로세스 간 통신으로 인해 속도가 느리다.
1.2.3. 시스템 콜 System Call
사용자 모드에서 실행된 모든 응용 프로그램이 곧바로 하드웨어의 자원에 접근한다면 당연히 위험할 것이다. 따라서 커널은 독점적으로 모든 자원을 관리한다. 다만 특정한 요청을 받을 시 커널 자신의 기능을 함수 형태로 제공해주는데 이것을 시스템 콜, Syscall이라 한다.
시스템 콜의 방식을 채택함으로써 커널이 입력값을 검증하고, 권한을 확인하고, 작업 순서를 제어할 수 있다. 이것은 곧 중요한 커널을 보호하는 역할을 한다. 따라서 API로 만들어진 프로그램들은 최종적으로 이 시스템 콜을 호출하는 형태가 된다. 자원을 직접 소유하는 것이 아닌 운영체제에게 빌려 쓰는 것이다.
요약 : 시스템 콜은 사용자 모드에서 커널 모드에 접근해 필요한 기능을 수행할 수 있게 요청하는 시스템 함수이다. 커널은 시스템 콜로 받은 요청을 처리한 후 결과 값을 시스템 콜이라는 함수에 반환한다. 추후 다루게 될 fork(), wait() 등이 이 예이다.
//시스템 콜의 실제 사례 추가 예정
1.2.4. 디바이스 드라이버 Device driver
새로운 장치를 USB에 연결 했을 때, 디바이스 드라이버를 설치하라는 문구는 누구나 한 번씩 보았을 것이다. 이러한 드라이버에 문제가 있다면 장치는 인식되지 않는다. 당장 나는 비싸게 주고 산 타블렛이 필압은 커녕 필기 인식마저 되지 않아 피눈물을 흘린 경험이 있다. 와콤 사이트를 뒤지고 뒤져 드라이버를 다운 받은 후에야 정상 작동하던게 그 때는 이해가지 않았다. 장치는 연결한다면 바로 정상 작동 되어야하는 것 아닌가? 왜 번거롭게 드라이버를 다운 받아야하는 걸까? 하지만 바꾸어 생각해보면 당연하다. 운영체제의 입장에서 갑자기 새롭게 나타난 장치는 말이 통하지 않는 외국인이나 다를바 없다. 드라이버는 둘의 언어를 통역해주는 번역기인 것이다.
디바이스 드라이버는 하드웨어와 직접 연결되고 입력 신호에 대한 '약속'을 정한다. 해당 신호는 무엇으로 인식할 것. 이러한 약속이 정해진 후에서야 비로소 정상작동할 수 있다.
1.2.5. 가상 머신
윈도우와 맥에서 다운로드 받을 수 있는 프로그램이 다르다는 것을 모두 알고 있을 것이다. 프로그램 소스코드는 같은 텐데, 왜 for MAC과 for Windows가 나뉘는 것일까? 위의 디바이스 드라이버와 상황이 유사하다.
운영체제마다 제공하는 API 및 시스템 콜의 모양이 다르기 때문이다. 언어가 다르기 때문에 프로그램 별 호환이 안되는 것이다. 결국 모든 응용 프로그램은 시스템 콜을 통해 커널에게 자원을 요청해야한다는 점을 기억하자
여기서 등장하는 것이 가상머신이다. 이 가상머신은 일종의 통역가라고 할 수 있다. 운영체제와 응용프로그램 사이에 작동하는 이 가상머신은 운영체제간의 이식성을 높여준다. 하나의 프로그램이 다양한 환경에서 실행될 수 있다는 것이다. 무언가를 에뮬레이션 대상이 되는 시스템을 다른 시스템으로 구현한 것 하는 것이라면 어떤 소프트웨어든 가상 머신이라고 말할 수 있다.
'CS > 운영 체제' 카테고리의 다른 글
| 3.1 프로세스의 개념 (4) | 2024.04.17 |
|---|---|
| 3.0 프로세스 (1) | 2024.04.17 |
| 2.1 컴퓨터 구조 (1) | 2024.04.14 |
| 1.1 운영 체제란? (2) | 2024.04.09 |
| 0. 운영 체제 (1) | 2024.04.09 |