OS란?
OS는 Operating System의 약자로 운영체제를 뜻한다.
사용자가 컴퓨터를 쉽게 사용할 수 있게해주는 인터페이스로 한정된 메모리나 시스템 자원을 효율적 제어및 관리하는
컴퓨터의 중요한 관리자 역할을 담당한다.
역할
- CPU 스케줄링과 프로세스 관리
- CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리
- 메모리관리
- 한정된 메모리를 어떤 프로세스에 할당해야하는지 관리
- 디스크파일 관리
- 디스크파일을 어떤 방법으로 보관할지 관리
- I/O 디바이스 관리
- I/O 디바이스들 간에 데이터를 주고받는 것을 관리
구조
위 사진을 통해 보면 가장 최상단에 응용 프로그램(유저 프로그램)이 있고 그 아래 GUI, 시스템콜, 커널, 드라이버가
있으며 가장 하단에 하드웨어가 있다. 여기서 GUI ~ 드라이브 까지가 OS다.
여기서 GUI 대신 CUI만 있는 리눅스 구조도 있다.
GUI : 아이콘을 통해 상호작용할 수 있도록하는 사용자 인터페이스의 형태
드라이버 : 하드웨어를 제어하기위한 소프트웨어
CUI : 아이콘이 아닌 명령어로 처리하는 인터페이스
시스템 콜
운영체제가 커널에 접근하기 위한 인터페이스이며 응용 프로그램이 운영체제의 서비스를 받기
위해 커널 함수를 호출할 때 사용된다.
I/O 관련 동작은 커널 영역에서 관리가 되어야한다.
위 c언어 코드로 예를 들면 printf는 출력 함수기 때문에 I/O 관렴 함수이다.
이 때 시스템콜이 유저 모드에서 커널 모드로 modebit을 변경하여 커널 모드에서 내용을 출력한 후
다시 유저모드로 들어가 다른 로직을 수행한다.
이 과정을 통해 컴퓨터 자원에 직접 접근을 차단하여 다른 프로그램으로부터 보호할 수 있다.
modebit : 현재 mode를 나타내는 플래그 변수, 0은 커널 모드, 1은 유저 모드
유저 모드 : 유저가 접근할 수 있는 영역으로 한정된 작업만 할 수 있다.
커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
커널
운영체제의 핵심 부분이자 시스템콜 인터페이스를 제공하는 운영체제의 중추적인 역할
가장 큰 목표는 컴퓨터의 물리적(하드웨어) 자원과 추상화 자원을 관리 하는 것이다.
커널과 운영체제 차이
커널은 운영체제의 핵심 구성요소이고, 이러한 커널에 사용자 애플리케이션과 유틸리티가 추가되면 운영체제가 된다.
즉, 커널 + 애플리케이션, 유틸리티 = 운영체제 이다.
그러므로 운영체제는 커널 공간과 사용자 공간으로 나뉠 수 있다.
이때 리눅스 자체는 File System Utilites, Windowing Systems, Graphical System, Text Editors, Compilers등과
같은 사용자 애플리케이션을 포함하지 않고 핵심기능만 포함하기때문에 커널이라고 할 수 있다.
다만 이러한 리눅스를 기반으로 운영체제를 제공하는 회사들은 기본 리눅스 커널에 다양한 확장
애플리케이션을 추가하여 운영체제를 제공하고 있다.
대표적으로 Ubuntu, CentOS등이 있다.
특징
- 운영체제 중 항상 메모리에 올라가 있는 운영체제의 핵심 부분
- 커널은 사용자가 컴퓨터 자원에 직접 접근하는 것을 방지하고 오직 System Call(인터페이스)을
통해서 컴퓨터 자원을 사용할 수 있게해주는 자원 관리자 역할이다.
종류
커널은 크게 2가지 종류로 나뉜다.
1. 모놀리식 커널
애플리케이션을 제외한 모든 System 서비스들, 예를들면 VFS(Virtual File System),
IPC(InterProcess Communication), File System등을 커널이 직접 처리하는 방식이다.
각 서비스들은 커널 내부의 여러 계층에서 관리된다.
모놀리식 커널은 사용자가 운영체제 서비스들을 System Call을 통해 사용할 수 있게 해준다.
단점
- 커널이 많은 것을 관리하기 때문에 커널의 크기가 크고하나의 오류가 전체 시스템에 영향을 끼칠 수 있다
장점
- 커널 내부에서 서비스들이 서로 시스템 자원을 공유하며 효율적으로 관리할 수 있다.
- 내부 서비스를 직접 커널이 수행하기에 빠른 처리속도를 가지는 장점이 있다.
대표적인 모놀리식 커널에는 Unix, Embedded Linux, OSEK, WinMobile 등이 있다.
2. 마이크로 커널
기존의 모놀리식 커널에서 핵심 서비스(Process 관리, Memory 관리, Network 관리 등)만을
남겨두고 나머지는 제외하여 가볍게 만든 커널이다.
놀리식 커널이 가지고 있던 시스템 서비들(VFS, IPC, Device Driver 등)을 마이크로 커널에서는
개별적인 서버의 형태로 존재한다.
단점
- 메시지 전송에 따른 컨텍스트 스위칭이 많이 발생하고, 시스템 복잡도가 증가될수록 시스템 부하, 오버헤드가 증가한다.
장점
- 커널을 변경하지 않고 간단히 기능을 추가, 수정할 수 있다.
- 프로세스가 각각의 서버영역에서 수행되때문에 하나의 서비스가 다운되어도 다른 서비스에까지도 영향을 끼치지않는다.
가벼운 성질 때문에 임베디드 시스템등에 사용된다.
대표적인 마이크로 커널에는 MacOS, Winodws NT 등이 있다.
iOS 커널 (추가 2024.12.09)
부스트 캠프에서 호눅스 님께 배운 iOS에서 사용하는 커널을 정리해보자.
애플의 OS는 2000년에 개발된 Darwin 커널 기반인 XNU 커널을 사용한다.
다윈(Darwin)은 2000년에 애플에서 만든 오픈 소스 유닉스 컴퓨터 운영 체제이다.
BSD와 다른 자유 소프트웨어 프로젝트뿐만 아니라 넥스트스텝의 소스를 따라 애플에서 개발한 코드로 구성되어 있다.
- XNU는 잡스가 만들다가 만든 NextStep 컴퓨터를 위한 커널이다.
- XNU는 다윈 운영체제에 사용된 커널이다.
- XNU는 X is Not Unix(X는 유닉스가 아니다)를 가리킨다.
XNU = Mach + FreeBSD
Mach = 위에서 배운 마이크로 커널
Darwin = 하이브리드 커널 = 모놀리식 커널과 마이크로 커널의 장점을 합친 것
참고