왜 운영체제를 공부하는가?
거의 모든 코드가 운영체제 위에서 실행되므로 운영체제 작동방식에 대한 지식은 적절하고 효율적이며 효과적이며 안전한 프로그래밍에 중요하기 때문이다.
운영체제란 무엇인가?
컴퓨터의 하드웨어를 관리하는 소프트웨어다. 운영체제는 또한 응용 프로그램을 위한 기반을 제공하며 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다.
운영체제가 할 일
1. 사용자 관점 : 사용되는 인터페이스에 따라 달라진다. 한 사용자가 자원을 독점하도록 설계되었으며 목표는 사용자가 수행하는 작업을 최대화하는 것, 이러한 경우 운영체제는 대부분 사용의 용이성을 위해 설계되고 성능에 약간 신경을 쓰고 다양한 하드웨어와 소프트웨어 자원이 어떻게 공유되느냐의 자원의 이용에는 전혀 신경을 쓰지 않음
2. 시스템 관점
1) 컴퓨터의 관점에서 운영체제는 가장 밀접하게 연관된 프로그램, 자원 할당자(관리자)로 볼 수 있음, 컴퓨터 시스템을 효율적이고 공정하게 운영할 수 있도록 어느 요청에 자원을 할당할지를 정해야함
2) 또 다른 관점으로는 운영체제는 제어 프로그램, 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 수행을 제어
운영체제 서비스
운영체제는 프로그램 실행 환경을 제공하는데 프로그램과 그 프로그램의 사용자에게 특정 서비스를 제공한다. 이러한 서비스는 프로그래머가 프로그래밍 작업을 더 쉽게 수행할 수 있게 해준다.
1. 사용자 인터페이스 : GUI(그래픽 사용자 인터페이스), 터치 스크린 인터페이스, CLI(명령어 라인 인터페이스)
2. 프로그램 수행
3. 입출력 연산
4. 파일 시스템 조작
5. 통신 : 한 프로세스가 다른 프로세스와 정보를 교환해야 할 필요가 있는 여러 상황이 있음. 통신은 공유 메모리를 통해서 구현될 수도 있고, 메시지 전달 기법을 사용하여 구현될 수 있음
6. 오류 탐지
사용자에게 도움을 주는 것이 목적이 아니라 시스템 자체의 효율적인 동작을 보장하기 위한 운영체제 기능도 존재한다. 다수의 프로세스가 사용하는 시스템에서는 프로세스들 간에 컴퓨터 자원을 공유하게 함으로써 효율성을 얻을 수 있음
1. 자원 할당
2. 기록 작성 : 어떤 프로그램이 어떤 종류의 컴퓨터 자원을 얼마나 많이 사용하는지 추적 가능
3. 보호와 보완
Android 운영체제
Android 장치의 소프트웨어 설계자는 Java 언어로 응용 프로그램을 개발하지만 일반적으로 표준 Java API를 사용하지 않는다. Google은 Java 개발을 위해 별도의 Android API를 설계하였다. Java 응용 프로그램은 Android RunTime ART에서 실행할 수 있는 형식으로 컴파일된다.
ART : Android 용으로 설계되어 메모리와 CPU 처리 능력이 제한적인 모바일 장치에 최적화된 가상머신, AOT 컴파일을 수행함, 이는 모바일 시스템에 중요한 기능인 전력 소비를 줄이면서 더 효율적인 응용 프로그램 실행을 가능하게 함
JNI : Java 네이티브 인터페이스로 개발자가 가상 머신을 우회할 수 있게 함. Android 개발자를 이를 이용해 Java 프로그램을 작성하여 특정 하드웨어 기능에 액세스 할 수 있는 프로그램을 작성할 수 있음. JNI를 사용하여 작성된 프로그램을 일반적으로 한 하드웨어 장치에서 다른 하드웨어 장치로 이식할 수 없음
Android 응용 프로그램에서 사용가능한 네이티브 라이브러리 집합에는 웹브라우저(webkit), 데이터베이스 지원(SQLite) 및 네트워크 소켓(예: SSL)을 개발하기 위한 프레임워크가 포함됨
HAL : 카메라, GPS 칩 및 기타 센서와 같은 모든 하드웨어를 추상화하여 특정 하드웨어와 상관없이 일관된 뷰를 응용프로그램에게 제공, 이 기능을 통해 개발자는 다른 하드웨어 플랫폼에서 이식 가능한 프로그램 작성 가능
Bionic 표준 C 라이브러리 : Linux 시스템에서 사용하는 표준 C 라이브러리는 GNU C 라이브러리(glibc). Google은 Glibc보다 메모리 사용량이 적을 뿐 아니라 모바일 장치를 특징짓는 느린 CPU를 위해 Bionic 표준 C 라이브러리를 개발함
Linux 커널 : 전원 관리와 같은 모바일 시스템의 특수한 요구를 지원하기 위해 다양한 영역에서 Android에서 사용되는 Linux 커널을 수정하였음. 또한, 메모리 관리 및 할당을 변경하였으며 Binder로 알려진 새로운 형태의 IPC를 추가하였음
안드로이드 소프트웨어 스택의 맨 밑에 위치하며, 장치 하드웨어의 기반 운영체제 역할을 담당함, 즉 멀티태스킹을 지원하고 메모리 관리와 프로세스 관리 및 전원 관리 등을 처리하는 저수준의 핵심 시스템 서비스를 비롯해서 네트워크 스택과 각종 하드웨어의 장치 드라이버를 제공
💖 참고 자료 💖
아브라함 실버스카츠, [운영체제 10th Edition], 퍼스트북 (2020)