운영체제라는 말을 어디선가 한번씩은 들어본 적 있으실 것입니다.
대표적으로 윈도우, 안드로이드, IOS 등
우리가 흔히 쓰는 컴퓨터, 핸드폰을 쓰는데 필수적으로 있어야 하는 것들이죠.
하지만 일반적으로 운영체제가 무엇을 하는지, 왜 필요한 것인지 잘 알지는 못할 것입니다.
운영체제가 어떤 일을 하는지 한번 알아보겠습니다.
운영체제란 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층입니다.
https://terms.naver.com/entry.naver?docId=4383176&cid=59941&categoryId=59941
쉽게 말해 하드웨어와, 사용자에서부터 운영체제 전까지의 모든 프로그램을 이어주는 중간자 역할을 하는 소프트웨어입니다.
운영체제의 핵심 부분입니다.
좁은 의미에서 운영체제를 말할 때는 커널만을 얘기하기도 합니다.
프로그램이 여러 개 실행되더라도 프로그램끼리 충돌하지 않도록 조율하고,
CPU가 효율적으로 사용될 수 있도록 관리하며,
사용자가 직접적으로 하드웨어에 직접적으로 접근하지 못 하도록 막는 역할을 합니다.
응용 프로그램을 실행하기 위한 플랫폼을 제공하거나 하드웨어를 제어할 수 있는 소프트웨어입니다.
개발할 때 사용되는 툴 ─비주얼 스튜디오, VSC 등─ 이나
컴파일러, 장치 드라이버, 쉘 등이 있습니다.
운영체제의 역할은 실질적으로 커널의 역할과 같다고 볼 수 있습니다.
- 메모리 관리 : 메모리가 어디에서 무엇을 저장하는 데 얼마나 사용되는지를 추적합니다.
> 컴퓨터 시스템을 효율적으로 운영하기 위해 자원을 어떻게 할당할 지 관리합니다.
- 프로세스 관리 : 어느 프로세스가 중앙 처리 장치(CPU)를 언제 얼마나 오랫동안 사용할지를 결정합니다.
> 위와 같습니다.
- 장치 드라이버 : 하드웨어와 프로세스 사이에서 중재자/인터프리터의 역할을 수행합니다.
> 입력이 들어오거나 먼저 실행되어야 할 프로세스가 있을 때 실행 순서를 조정합니다.
- 시스템 호출 및 보안 : 프로세스의 서비스 요청을 수신합니다.
> 응용 프로그램이 하드웨어의 데이터에 직접 접근하거나,
사용자가 부적절하게 데이터를 변경하지 못하도록 막습니다.
사용자가 프로그램을 사용할 수 없다면 컴퓨터를 사용하는 의미가 없겠죠?
운영체제는 사용자가 메모리에 접근할 수 있도록 인터페이스를 제공합니다.
인터페이스에는 CLI 환경과 GUI 환경 두 가지가 있습니다.
CLI(Command Line Interface) : 사용자는 콘솔에 명령어 입력을 통해 파일에 접근합니다.
명령 프롬프트가 이에 해당합니다.GUI(Graphic User Interface) : 현재 우리가 쓰는 프로그램들이 전부 GUI 인터페이스입니다.
마우스를 이용해 프로그램을 실행하고, 종료하게 됩니다.
사용자는 다양한 명령어나 조작을 통해 운영체제와 상호작용할 수 있습니다.
혹시 프로그램이 실행 중일 때 그 프로그램을 삭제하려고 해보신 적이 있나요?
거의 대부분의 경우 삭제에 실패하셨을 겁니다.
프로그램이 실행되면 보조 기억 장치에서 주 기억 장치, 캐시 메모리 등 CPU가 꺼내쓰기 쉽도록 CPU와 가까운 곳으로 데이터를 꺼내고 갖다놓고를 반복합니다.
그런데 이 상태에서 프로그램이 삭제되면 어떻게 될까요?
있어야 할 것이 없어지니 컴퓨터가 작동을 제대로 할 수 없겠죠.
이를 방지하기 위해 운영체제가 데이터 접근 요청을 관리합니다.
시스템 콜(시스템 호출) : 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한, 커널과 응용 프로그램 사이의 인터페이스입니다.
응용 프로그램이 시스템 콜 함수를 호출하면, ↓ 응용 프로그램은 사용자 모드(접근 권한 X)에서 커널 모드(권한 O)로 바뀌고, ↓ 커널이 요청을 처리하면 ↓ 프로그램은 다시 사용자 모드로 돌아가 작업을 계속합니다.
커널은 운영체제에서 아주 중요한 부분이기 때문에 한번 더 짚고 가겠습니다.
커널은 위의 동작들을 하드웨어와 연결하고, 관리하는 운영체제의 핵심 요소입니다.
1. 데이터 접근, 생성 / 삭제 등 데이터를 관리합니다.
2. 주변 장치(입출력 장치 등)을 스케줄링하고 입출력의 전반적인 사항을 지시합니다.
3. 프로세스 생성, 제거 등 프로세스를 관리합니다.
4. 기억 공간을 할당, 회수 등 기억 장치를 관리합니다.
5. 동기화와 프로세서의 스케줄링을 위해 프로세서를 관리합니다.
주변 장치를 제어하기 위해 설치해야 하는 소프트웨어입니다.
커널의 일부가 되어 응용 프로그램과 장치를 이어주는 역할을 하게 됩니다.
외부부터 내부 순으로 운영체제의 구조를 알아보았습니다.
사용자가 볼 때는 단순히 프로그램이 하나 실행되는 것일 뿐이지만
내부에서는 화면을 1초 동안 띄우기 위해 셀 수 없을 정도의 연산이 일어나고 있습니다.
운영체제가 어떻게 이렇게 많은 연산을 관리하는 지는 나중에 더 자세히 알아보도록 하겠습니다.
특정 플랫폼을 위한 소프트웨어 개발을 위한 개발 도구들의 집합
SDK는 IDE나 API를 전부 포괄하는 개념이며 ,
안드로이드 앱 개발을 하고 싶다면 Android SDK,
애플 앱 개발을 하고 싶다면 IOS SDK를 사용하면 됩니다.
커뮤니케이션에 관한 정의로 다른 앱, 서비스와의 통신을 위한 정의와 프로토콜이 있습니다.
운영체제에서는 프로그램을 개발할 때 언어 별로 시스템 콜을 호출하는 API가 내장되어 있어 추상화된 시스템 콜을 사용할 수 있습니다.
API를 호출하면 API의 결과값만을 정보로 받아오며,
그 정보를 어떻게 가공할 지는 프로그래머에게 달렸습니다.
https://math-coding.tistory.com/80
https://www.redhat.com/ko/topics/linux/what-is-the-linux-kernel
https://velog.io/@hacha2011/SDK%EC%99%80-API%EA%B0%80-%EB%AD%90%EA%B0%80-%EB%8B%AC%EB%9D%BC
《Practical Operating System》