전공공부/운영체제 (Operating System)

[운영체제] Introduction & Operating System Structure

jooona 2020. 12. 16. 18:59
반응형

운영체제에 대한 공부를 시작하면서 우선은 운영체제가 무엇인지, 무슨 일을 하는지와 같은 운영체제에 대한 기본 지식을 공부해볼까 합니다.

 

1. 운영체제란?

컴퓨터 시스템 (Computer System)

컴퓨터 시스템은 위의 그림과 같은 형태로 이루어져 있습니다. 하드웨어는 중앙 처리 장치(CPU), 메모리, 입출력 장치와 같은 물리적 장치를 뜻합니다. 그리고 응용 프로그램은 우리가 사용하는 Kakao Talk, MS Word, Visual Studio과 같은 실제 프로그램들을 말하죠. 그 사이를 이어주는 것이 운영체제라는 것인데요, 즉, 운영체제하드웨어와 응용 프로그램 사이에서 중개역할을 하는 프로그램으로, 사용자 프로그램들을 실행하고, 문제점들을 쉽게 해결하며, 컴퓨터 시스템을 사용하기 쉽게 만들어주고, 효율적인 방법으로 컴퓨터 하드웨어를 사용할 수 있게 해주는 것을 목표로 합니다.

 

2. 커널 (Kernel)

운영체제를 공부하면서 나오는 꼭 알아야 하는 중요한 개념 중 하나가 바로 Kernel입니다. Kernel을 쉽게 표현하자면 운영체제의 가장 중요한 부분, 즉 운영체제의 core라고 할 수 있습니다. Kernel의 역할은 하드웨어와 프로세스의 보안을 책임지고, 프로그램을 스케쥴링하는 등 시스템 자원들을 관리합니다. 자세한 역할 들은 뒤로 가면서 더 자세히 다뤄보게 될 것 같습니다. 

 

3. 운영체제의 서비스

운영체제는 위에서 언급했듯이 프로그램의 실행 환경을 제공합니다. 운영체제가 제공하는 서비스는 크게 6가지가 있으며, 다음과 같습니다.

 

1. User Interface: 우리가 잘 아는 CLI, GUI와 같은 인터페이스 입니다.

2. Program Execution: 프로그램을 불러(Load) 오고 실행(Run)하며, 성공이든 실패든 실행을 완료(Execute)할 수 있어야 합니다.

3. I/O Operation: 수행 중인 프로그램은 입출력을 요구할 수 있습니다. 대부분의 경우 효율과 보안 상의 문제로 직접 입출력 장치를 제어할 수 없기 때문에 운영체제가 입출력 장치를 제어할 수 있는 수단을 제공해주어야 합니다.

4. File-system manipulation: 파일을 읽고(Read), 쓰고(Write), 만들고(Create), 삭제하고(Delete), 검색하고(Search), 그 목록을 확인할 수(List) 있어야 합니다.

5. Communications: 서로 다른 두 process 간의 통신이 가능해야 합니다.

6. Error Detection: 하드웨어 레벨, 소프트웨어 레벨 모두에서 error를 탐지할 수 있어야 합니다.

 

4. System Call

이러한 서비스들을 받기 위해서는 운영체제의 Kernel에 요청을 해야 합니다. 이때 Kernel에 보내는 요청을 바로 System call이라고 부릅니다. System call은 일반적으로 함수처럼 사용됩니다. 그리고 System call은 Kernel로 들어갈 수 있는 유일한 통로이죠. 서비스들을 필요로 하는 모든 프로그램들은 반드시 System call을 활용해서만 Kernel로부터 자신이 원하는 resource를 받아낼 수 있습니다.

 

이렇게 굳이 System call이라는 것을 사용하는 이유는 바로 보안(Protection)을 위해서입니다. 프로그래머가 만든 프로그램들은 완벽하지 않고, 보안적으로 신뢰할 수 없을 수 있으며, Kernel에 악영향을 미칠지도 모릅니다. 이러한 프로그램들이 하드웨어나 Kernel의 Data sturcture들에 직접 접근을 할 수 없게 막음으로써 이들을 보호하는 역할을 수행하는 것입니다. 하지만 System call을 호출하는 행위 자체가 현재 진행하고 있던 작업을 중지하고 Kernel에 요청을 하는 것이기 때문에 시스템 입장에서 굉장히 큰 overhead라는 단점이 있습니다. Overhead가 크다는 말은 성능적으로 큰 부담이 된다는 뜻으로 받아들일 수 있습니다.

 

System call의 수행을 위해 CPU는 두 가지 mode를 가지고 있으며, 필요에 따라 mode를 변경해가며 역할을 수행합니다. 이 두 가지는 User modeKernel mode이며, User mode는 평상시의 CPU의 상태입니다. 일반적인 응용 프로그램들의 코드를 실행하고 있다가 System call이 호출되면 Kernel mode로 변화합니다. 이 모드는 CPU Register 내에 있는 mode bit를 통해 구분합니다. 현재 mode bit가 1이면 CPU의 상태가 User mode, 0이면 Kernel mode임을 뜻합니다. Mode가 바뀔 때마다 Mode bit는 자동으로 업데이트됩니다.

 

참고로, Privileged instruction들은 Kernel mode에서만 실행할 수 있습니다. Privileged instruction이란 주의 깊게 사용하지 않으면 system을 위험에 빠뜨릴 수 있는 가능성을 가진 instruction들을 말합니다. 대표적으로 메모리 관리와 같은 작업을 수행하는 instruction들이 있습니다. Instruction은 명령어 정도로 생각하시면 될 것 같습니다.

System call의 호출은 최종적으로 아래의 그림과 같은 형태로 진행이 된다고 볼 수 있겠네요.

System call의 실행

 

5. 운영체제의 구조

이번에는 운영체제의 구조에 대해 알아보겠습니다. 

 

첫 번째는 Monolithic Structure입니다. Monolithic Structure은 가장 기본적인 방법으로 Kernel이 수행하는 모든 기능뿐만 아니라 다른 서브 기능들도 Kernel에 넣어 구현한 방법입니다. 장점으로는 모든 기능이 한 군데 모여있기 때문에 자원을 효율적으로 활용할 수 있고, system call로 인한 overhead도 줄일 수 있어서 성능적인 장점들이 있습니다. 하지만 Kernel의 덩치가 커져 관리와 구현이 어렵다는 단점이 있습니다. UNIX가 Monolithic Structure를 기반으로 설계된 가장 대표적인 운영체제입니다.

 

두 번째는 Microkernels입니다. Microkernels는 Monolithic Structure에서는 Kernel이 너무 크기 때문에 Kernel을 최소화시켜보자는 아이디어에서 출발합니다. 즉 Kernel의 필수적인 기능들을 제외하고는 모두 user-level로 빼버리겠다는 이야기입니다. 여기서 필수적인 기능들에는 프로세스 간의 통신, 메모리 관리, CPU 스케쥴링 등이 포함됩니다.

 

Microkernel의 장점은 운영체제의 확장이 쉬워진다는 점입니다. 운영체제에 부가적인 기능을 추가하고 싶더라도 Kernel은 건드리지 않고 user-level에서만 추가를 하면 되니 구현과 관리가 훨씬 쉬워집니다. 또한 대부분의 서비스들이 Kernel 내부로 들어오지 않고 user-level에서 수행을 하다 보니 훨씬 안전하고 신뢰성 있는 작업이 가능합니다. 하지만 단점으로는 user mode와 kernel mode를 자주 왔다 갔다 해야 하다 보니 성능적인 측면에서는 Monolithic Structure에 비해서 많이 부족할 수 있습니다.

 

둘을 그림으로 표현하자면 아래의 그림처럼 나타낼 수 있겠습니다.

Monolithic Kernel과 Microkernels

 

그리고 Monolithic Structure와 Microkernels를 혼합한 방식이 바로 Hybrid kernel입니다. 현재 사용되는 대부분의 운영체제가 Hybrid kernel을 사용하고 있습니다. Linux나 Window는 모두 성능적인 이유 때문에 Monolithic Structure를 사용하고 있지만, 부가적인 서브시스템을 Module의 형태로 동적으로 추가할 수 있는 등 Microkernel과 혼합된 형태를 유지하고 있습니다. 다시 말하자면 Monolithic Structure에 기반을 두지만 서브시스템을 동적으로 user-level에 부착할 수 있는 시스템이라고 볼 수 있을 것 같습니다. 

 

 

 

 

 

여기까지 운영체제의 기본적인 개념과 운영체제의 시스템에 대해 알아보았습니다. 아무래도 운영체제의 첫 부분이다 보니 자세하게 파고들거나 세부적인 내용을 다루지는 않았습니다. 다음 글부터 운영체제에 대해 본격적으로 알아보겠습니다. 읽어주셔서 감사합니다.

반응형