📢 주저리 주저리
때는 2020년, 코로나가 한창 유행하기 시작했을 무렵 나는 비대면으로 os 수업을 듣게 되었다.
선배들에게 말로만 듣던 그 악명높은 전필과목을 듣게 된다니 얼마나 무시무시한 내용들이 기다리고 있을지 심장이 달달 떨렸다.
수업을 듣기 전에는 os라 하면 '뭐, 윈도우10 그런거 아닌가' 라고 생각하는게 다였다.
OS 수업을 들으며 내가 얼마자 무지했었는지를 절실히 깨달았고, 수업을 듣고 나서는 컴퓨터에 대한 이해도가 한층 깊어진 느낌이었다.
개인적으로 내용도 재밌어서 즐겁게 수업을 들었던 것 같다(물론 과제는 힘들었지만...ㅎ)
그렇게 한 학기를 열심히 공부했것만, 현재 운영체제에 대한 것을 떠올려보니 흐릿한 것이 복습이 필요함을 느꼈다.
그래서 OS를 정리하면서 복습하고 다시 잊어버리지 않기 위해 꾸준히 블로그에 기록해보려 한다.
운영체제란?
컴퓨터 시스템은 크게 하드웨어 + 소프트웨어 + 사용자로 구성된다.
- 하드웨어: CPU, 메모리, I/O 장치 등의 컴퓨터 자원
- 소프트웨어: 컴퓨터가 기능을 수행하는데 필요한 프로그램
운영체제(operating system = os)는 사용자가 하드웨어를 사용할 수 있도록 하는 소프트웨어이다.
운영체제는 다음과 같은 목적을 위해 발전해왔다.
- 사용자에게 편리한 환경 제공
- 시스템 성능 향상
- 제어 서비스 향상
운영체제의 구조
운영체제의 구조를 알기에 앞서 커널이 무엇인지를 알아야 한다.
커널이란 os의 핵심부분, 다시 말해 가장 빈번히 사용되는 기능들을 담당하는 부분을 말하며, 메모리에 상주한다.
이 커널을 어떻게 구성하느냐에 따라 운영체제의 구조를 3가지로 나눠볼 수 있다.
1. 단일 구조 (모놀리식 커널 구조)
운영체제 대부분의 기능을 커널에 그룹화하여 구현하는 방식이다.
장점
- 커널 내에서 직접 통신이 이뤄지기에 효율적인 시스템 자원 관리 가능
단점
- 커널 크기가 커짐에 따른 수정과 유지보수의 어려움
- 한 부분에서 발생한 문제가 시스템 전체에 영향을 끼칠 수 있음
- 악성코드로 인한 피해를 입기 쉬움
2. 계층 구조
비슷한 기능을 수행하는 것들끼리 모듈화하여 계층적으로 커널을 구성하는 방식이다.
운영체제가 복잡해짐에 따라 관리가 어려웠던 단일 구조 운영체제의 문제를 모듈화를 통해 해결하였다.
각 계층은 인접한 계층과 상호작용한다.
장점
- 시스템의 수정 및 유지보수가 쉬움
- 시스템 설계나 구현이 단순해짐
단점
- 프로세스의 요청을 수행 시 여러 계층을 거쳐야 하므로 추가적인 시스템 호출이 발생하여 성능이 저하됨
- 계층을 정의하기 어려움 (계층 구분, 계층 개수 설정 등...)
3. 마이크로 커널 구조
최소 기능만 포함시켜 크기를 줄인 마이크로 커널을 만들고, 기타 기능들은 사용자 영역에서 수행하는 방식이다.
예시를 보면 메모리 관리 / 프로세스 간 통신 / 프로세스 관리 기능만 커널에서 수행되고, 파일 시스템 / 프로세서 스케줄링 / 장치 관리자 기능 같은 나머지 기능들은 사용자 영역에서 수행된다.
장점
- 운영체제의 많은 기능들이 사용자 영역에서 구현 가능하기에 개발과 변경이 쉬움
- 사용자 영역과 독립적인 공간에서 수행되기에 잘못되더라도 커널에 영향을 주지 않음
단점
- 모듈 간 통신이 빈번하게 일어나 성능이 저하됨
운영체제의 기능
운영체제는 주로 관리하는 기능을 담당한다.
- 프로세스 관리
- 메모리 관리
- I/O 장치 관리
- 파일 관리
- 네트워킹(통신)
- 명령 해석기
- 보안
가상머신(VM)
응용 프로그램은 특정 플랫폼(ISA(instruction set architecture) + os)에서만 돌아간다.
그래서 플랫폼의 제약을 제거하여 이식성과 유연성을 증대시키는 것을 원하게 되었다.
이를 실현하기 위해 교차 플랫폼 호환성을 제공하는 소프트웨어가 바로 VM이다.
VM이 필요한 이유
1. 네트워크 컴퓨팅에서 이식성은 필수적이다.
특히 모바일에서, 다양한 cpu/os/하드웨어 환경에서 일정한 실행이 가능한 무선 다운로드 플랫폼을 제공하는 것이 요구되기 때문에 VM을 필요로 한다.
2. 오래된 인터페이스에서는 cpu 혁신이 제약될 수밖에 없다.
발전된 cpu에서도 옛날에 썼던 바이너리 파일들을 돌리고 싶을 때 필요하다.
3. 단일 os는 보안 허점이 존재할 가능성이 있다.
만약 다른 그룹의 사용자들에 의해 공유되는 서버의 경우 보안을 유지할 수 있는 환경을 원한다.
이를 위해서는 유저마다 별개의 os가 제공되어야 한다.
4. os 개발을 할 때 유용하다.
vm의 종류
- process VM
각각의 프로세스들만 가상화하는 것. (e.g. jvm)
ISA나 OS의 일부를 가상화 = VM은 ABI(application binary interface)을 모방 = runtime
이를 통해 응용 프로그램이 플랫폼에서 독립적으로 수행될 수 있다. (어떤 플랫폼에서나 동일하게 실행됨)
- system VM
완전한 시스템을 가상화하는 것 (e.g. 윈도우 위에서 리눅스를 돌리는 것)
VM이 전체 ISA를 모방 = VMM(virtual machine manager) 또는 하이퍼바이저
여러 개의 운영체제가 완전히 독립된 상태로 하나의 컴퓨터에 존재할 수 있다.
system VM 구현 방식
- host OS 위에서 프로세스를 가동
하드웨어와의 인터렉션을 host OS에 의존해야 한다.
- 하드웨어 위에 바로 VMM 가동
모든 하드웨어 인터렉션이 VMM에 의해 수행되기에 앞선 방법보다 훨씬 효율적이다.
댓글