OS란?
운영체제(OS, Operating System)는 사용자와 컴퓨터 하드웨어 사이에서 중개자 역할을 하는 소프트웨어입니다. 사용자가 컴퓨터 시스템을 편리하게 이용할 수 있도록 돕고, 하드웨어 자원(메모리, CPU 등)의 효율적인 관리를 담당하여 시스템의 성능을 극대화합니다.
또한, 운영체제는 여러 응용 프로그램이 동시에 작동할 수 있도록 지원하며, 이들 간의 자원 충돌을 방지하고, 시스템의 안정성을 유지하는 역할도 수행합니다.
참고로, 운영체제와 비슷한 특성을 가지면서 추가적인 소프트웨어 설치가 불가능한 시스템을 펌웨어(firmware)라고 부릅니다.
운영체제의 주요 기능
운영체제는 CPU, 메모리 등의 컴퓨터 하드웨어와 사용자가 작성한 소프트웨어(응용 프로그램) 사이에서 다리 역할을 합니다. 이를 통해 사용자는 복잡한 하드웨어 조작 없이도 응용 프로그램을 통해 컴퓨터를 효과적으로 사용할 수 있습니다.
운영체제가 수행하는 핵심 역할은 다음과 같습니다.
- CPU 스케줄링과 프로세스 관리: 운영체제는 CPU의 처리 권한을 어느 프로세스에게 할당할지 결정하며, 프로세스의 생성, 삭제, 자원 할당 및 반환을 담당합니다.
- 메모리 관리: 제한된 메모리 자원을 효율적으로 분배하여 각 프로세스가 적절히 작동할 수 있도록 관리합니다.
- 디스크 파일 관리: 디스크에 저장되는 파일들의 구조와 저장 방법을 관리합니다.
- 입출력(I/O) 디바이스 관리: 마우스, 키보드 등의 I/O 디바이스와 컴퓨터 간의 데이터 교환을 관리합니다.
운영체제의 구조
운영체제의 구조는 사용자 인터페이스(GUI, CUI), 시스템 호출, 커널(드라이버, 파일 시스템 등)로 구성되어 있습니다.
사용자 프로그램은 최상단에 위치하고, 그 아래로 차례대로 GUI, 시스템 호출, 커널, 드라이버가 위치해 있습니다. 가장 하단에는 하드웨어가 위치해 있습니다. 이때 GUI, 시스템 호출, 커널, 드라이버 부분이 바로 운영체제를 구성합니다. 참고로, GUI가 없고 CUI만을 활용하는 리눅스 서버도 존재합니다.
주어 용어 정리
- GUI: 그래픽 사용자 인터페이스(GUI)는 사용자가 전자 장치와 상호작용 할 수 있도록 하는 사용자 인터페이스의 한 형태입니다. 아이콘을 마우스로 클릭하는 등의 직관적인 동작으로 컴퓨터와 상호작용할 수 있습니다.
- 드라이버: 하드웨어를 제어하기 위한 소프트웨어입니다.
- CUI: 명령어를 통해 작동하는 사용자 인터페이스로, 그래픽 요소가 없습니다.
시스템 호출(System Call)
시스템 호출은 사용자 레벨의 프로그램이 운영체제의 서비스를 이용하기 위해 커널 함수를 호출하는 인터페이스입니다. 이를 통해 유저 프로그램은 필요한 시스템 자원을 안전하게 이용할 수 있습니다.
유저 프로그램이 I/O 요청을 하면, 이는 트랩(trap)을 발생시키고 운영체제는 이 요청이 올바른지 확인합니다. 이후 유저 모드는 시스템 호출을 통해 커널 모드로 전환되어 요청을 수행합니다. 예를 들어, 파일 시스템에서 파일을 읽는 fs.readFile() 함수를 호출한 경우를 생각해 봅시다.
이 경우, 파일 읽기 작업은 유저 모드가 아닌 커널 모드에서 수행되며, 작업이 완료된 후에 다시 유저 모드로 복귀하여 유저 프로그램의 나머지 로직을 수행합니다. 이런 과정을 통해 컴퓨터의 자원에 대한 직접적인 접근을 제어하고, 프로그램을 다른 프로그램으로부터 보호할 수 있습니다.
주어 용어 정리
- I/O 요청: 입출력 관련 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 요청입니다.
시스템 호출의 역할
프로세스나 스레드가 운영체제에게 어떠한 요청을 할 때, 이는 시스템 호출이라는 인터페이스와 커널을 거쳐 운영체제에 전달됩니다. 이 시스템 호출은 중요한 추상화 계층을 형성하며, 이를 통해 개발자는 네트워크 통신이나 데이터베이스와 같은 낮은 수준의 작업 처리에 대해 깊게 고민하지 않고도 프로그램을 구현할 수 있습니다. 이는 시스템 호출이 복잡한 하드웨어 조작을 대신 수행해 주기 때문입니다.
Mode Bit의 역할
시스템 호출이 수행될 때, Mode Bit를 참조하여 유저 모드와 커널 모드를 구분합니다. Mode Bit는 1 또는 0의 값을 가지는 플래그 변수로, 시스템의 현재 상태를 나타냅니다.
예를 들어, 카메라나 키보드와 같은 I/O 디바이스는 운영체제를 통해서만 작동되어야 합니다. 카메라를 작동시키는 프로그램이 있다고 가정해봅시다. 이 프로그램이 유저 모드에서 작동한다면, 사용자의 의도와 무관하게 공격자가 카메라를 켜거나 다른 불필요한 조작을 수행할 위험이 있습니다.
이런 위험을 줄이기 위해서는, 디바이스의 작동은 커널 모드를 거쳐 운영체제를 통해 이루어져야 합니다. 이렇게 하면, 완벽하게 모든 위험을 차단할 수는 없지만, 보안을 강화하는 데 있어 큰 도움이 됩니다. 이런 역할을 수행하는 것이 바로 Mode Bit입니다. Mode Bit의 값이 0이면 커널 모드를, 1이면 사용자 모드를 나타냅니다.
주어 용어 정리
- 유저 모드: 사용자가 접근할 수 있는 영역을 제한적으로 설정하여 컴퓨터 자원에 임의로 접근하지 못하도록 하는 모드입니다.
- 커널 모드: 모든 컴퓨터 자원에 접근할 수 있는 모드로, 시스템의 보안과 안정성을 유지하는 데 필요한 모드입니다.
- 커널: 운영체제의 핵심 부분으로, 시스템 호출 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 수행합니다.