이번에는 운영체제의 기본적인 역할과 iOS에 대해 알아보겠습니다.

운영체제와 역할
운영체제는 이전에 컴퓨터 구조 정리글에서 알아보았던 CPU, RAM, 저장장치 그리고 네트워크 등 컴퓨터의 자원들을 관리한다. 이를 통해 여러 응용프로그램들이 동시에 실행될 수 있고, 자원을 효과적으로 사용할 수 있게 해준다.
위에서는 대표적으로 4개만 설명하고 있지만 사실 훨씬 많은 장치들을 관리한다.
예를 들면, 아이폰은 여러 종류가 있다. 그리고 계속해서 신제품이 출시되고 있다. 새로운 제품이 출시 되면 더 좋은 성능의 내부 장치들(카메라, 스피커 등)로 변경된다. 하지만 사용자나 개발자는 카메라 장치의 종류가 어떤것인지, 스피커 장치의 종류가 어떤것인지 신경 쓸 필요가 없다. 카메라 앱을 누르면 운영체제는 카메라에 접근하고, 카메라는 활성화 된다. 이게 가능한 이유는 바로 운영체제가 장치들을 관리해주기 때문이다.
그러면 이어서 윤영체제의 역할에 대해 알아보자
자원 관리
- CPU스케줄링: 여러 프로세스 간에 CPU를 공유하고 실행 순서를 결정한다.
- 메모리 관리: 물리적인 메모리를 가상 메모리로 추상화하고, 프로세스에게 메모리 공간을 할당 및 해제한다.
- 파일 시스템 관리: 파일을 저장하고 관리하며, 사용자 및 응용 프로그램이 파일에 접근할 수 있느 인터페이스를 제공한다.
- 디바이스 관리: 입출력 장치와 통신을 조정하고 디바이스 드라이버를 관리하여 하드웨어 자원을 효율적으로 사용한다.
제어
- 운영체제는 컴퓨터 시스템의 동작을 제어하고 조정한다. 이를 통해 프로그램이 자원을 오작동 하거나 다른 프로그렘에 영향을 주지 않도록 보장한다. 또한 사용자와 하드웨어 간의 상호작용을 관리하여 안정성과 신뢰성을 유지한다.
사용자 인터페이스 제공
- 운영체제는 사용자와 컴퓨터 간의 상호 작용을 위한 인터페이스를 제공한다. 이를 통해 편리하고 직관적인 사용자 경험을 제공하여 사용자의 작업을 효율적으로 수행할 수 있도록 한다.
오류 처리와 보안 기능
- 운영체제는 시스템의 오류를 감지하고 처리하여 시스템의 안정성을 유지한다. 또한 사용자 및 시스템 지원에 대한 접근을 제어하야 보안을 강화한다. 비인가 된 엑세스나 악의적인 소프트웨어의 실행을 방지하고, 데이터의 무결성과 기밀성을 보호한다.
영화에서 구닥다리 컴퓨터에서 검은 배경에 수많은 초록색 글씨들로 이루어진 화면에 알 수 없는 코드들을 작성하는 장면을 본적이 있는데. 이렇게 어려운 컴퓨터 사용 방식을 운영체제의 도입으로 초등학생들도 쉽게 사용할 수 있게 된것이다.
iOS에서의 운영체제
iOS는 개발자라면 모두 알겠지만 APPle에서 개발한 운영체제이다. 주로 iPhone, iPadm iPod touch같은 Apple 제품에 사용된다. iOS 운영체제의 구조느 크게 네 가지 주요 구성 요소로 이루어져 있다.
커널(Kernael)
- iOS 핵심은 XNU 커널이다. XNU커널은 macOS와 iOS에 모두 사용되는 하이브리드 커널로, Mach 마이크로커널을 기반으로 하며, BSD 라이브러리와 기타 여러 기능을 포함한다. 이 커널은 하드웨어와 상호 작용하며, 프로세스 관리, 메모리 관리, 파일 시스템, 네트워킹 및 보안 기능을 제공한다. 솔직히... 잘 모르겠다 아마 따로 알아보면 좋을듯. 일단은 이렇게만 알고 가자.
시스템 프레임워크(System Frameworks)
- iOS는 Cocoa Touch 프레임워크와 함께 제공되는 시스템 프레임워크를 기반으로 한다. 이전에 한번 정리해본적 있었다~ 이러한 프레임워크는 iOS 애플리케이션을 개발하기 위한 필수적인 라이브러리 및 인터페이스를 제공한다. ex) UIKit -> 유저 인터페이스 구축, Foundation -> 데이터 관리 및 기타 핵심 기능 제공
시스템 애플리케이션(System Application)
- iOS는 다양한 시스템 애플리케이션을 포함하고 있다. ex) 메시지, 카메라, 사진, 설정 등. 기본 앱들을 말하는 것
커널 확장(Kernel Extensions)
- iOS에서는 커널 확장을 통해 운영체제의 기능을 확장할 수 있다. 이러한 확장은 시스템의 보안성을 유지하면서 커널 수준에서의 추가 기능을 제공할 수 있다.
윈도우와 안드로이드를 먼저 접했기 때문에 iOS는 뭔가 특별하다는 느낌을 받았는데 다른 운영체제와 비교했을 때 어떤 차이점이 있을지 궁금했다.
iOS의 특징
UI,UX
- iOS는 사용자 경험과 인터페이스에 매우 중점을 둔다고 한다. Apple은 매끄럽고 직관적인 사용자 인터페이스를 제공하여 사용자가 쉽게 응용 프로그램을 찾고 사용할 수 있도록 해준다.
이부분은 리얼이다.
많은 사람들이 iOS가 너무 독립적이라고 비난하기도 하는데, 애플의 사용자 경험과 인터페이스를 개선하기 위한 많은 노력은 iOS뿐만 아니라 다른 운영체제나 어플리케이션들의 인터페이스 향상에 큰 역할을 했다고 본다.
하드웨어 및 소프트웨어 최적화
- iOS는 Apple이 하드워어와 소프트웨어를 모두 제어하는 단일 벤더 환경에서 실행된다. 즉 운영체제와 기기를 함께 만들고 있다는 것, 이는 하드웨어와 소프트웨어간의 최적화 성능을 제공하게 된다.
보안
- iOS는 강력한 보안 및 프라이버시 기능을 갖추고 있다. 데이터를 보호하기 위해 엄격한 보안 정책을 시행하고, 앱 승인 및 앱스토어의 감독을 강화한다. 그리고 논란이 많이 되고 있지만 앱을 설치할 수 있는 경로를 앱스토어로만 지원하게 하여 보안에 더 신경을 쓰고 있다.
애플 생태계
- iOS는 애플의 다양한 생태계와 통합되어 있다. iCloud, Apple Music, iTunes와 같은 멀티미디어 서비스, 다양한 악세서리 및 서드파티 앱 생태계를 포함한다. 애플 기기간의 연동은 너무 편해서 모두가 공감하는 부분이다.
개발
- iOS는 앱스토어를 통해 다양한 애플리케이션을 제공하며, 개발자들에게 큰 수익 창출의 기회를 제공한다.(수수료 너무쎈데), Swift와 같은 개발 언어와 Xcode와 같은 개발 환경은 iOS 개발을 위한 강력한 도구들을 제공한다.
프로세스와 스레드
알고있는 내용이지만 가볍게 정리해보자
프로세스
: 프로세스는 운영체제에서 실행중인 프로그램의 인스턴스를 의미한다. 각 프로세스는 독립적인 메모리 공간을 가지고 운영체제에 의해 별도로 관리된다. 이러한 독립성은 프로세스 간의 데이터 공유와 통신을 어렵게 하지만 높은 안정성을 제공한다.
스레드
: 스레드는 프로세스 내에서 실행되는 실행 흐름의 단위를 의미한다. 각 프로세스는 하나 이상의 스레드를 포함할 수 있다. 프로세스의 메모리 공간을 공유하며, 이를 통해 데이터 자원에 대한 공유와 효율적인 작업 분할 이 가능해진다. 운영체제에 의해 스케줄링 된다.
iOS의 프로세스와 스레드 관리
- 멀티태스킹
: iOS는 멀티태스킹 환경을 지원, 여러 앱이 동시에 실행될 수 있다. 각 앱은 하나 이상의 포로세스를 포함하고 각 프로세스는 여러 스레드로 구성될 수 있다.
- 스레드 관리
: iOS는 스레드 생성 및 관리를 위한 API(GCD)를 제공한다.
- 메인 스레드
: iOS 애플리케이션은 메인 스레드에서 실행된다. 메인 스레드는 UI이벤트 처리와 화면 업데이트 등 사용자 인터페이스 작업을 담당한다. 따라서 메인 스레드의 작업은 빠르게 처리 되어야 하며, 오래 걸리는 작업은 백그라운드 스레드에서 처리하는것이 좋다.
iOS의 메모리 관리 방식
iOS에서는 메모리 관리를 위해 여러가지 방법을 지원하고 있다.
Automatic Reference counting(ARC)
- ARC에 대해서도 이전에 정리해보았고 이젠 익숙하다. ARC는 컴파일러 기반의 메모리 관리 기법으로, 개발자가 메모리 할당과 해제를 명시적으로 관리하는 번거러움을 중여준다. 객체가 사용되는 만큼 참조 카운트를 증가, 감소 시켜 더 이상 사용되지 않을 때 메모리에서 해제된다.
가비지 컬렉션(Garbage Collection)
- 가비지 컬렉션은 사용되지 않는 객체를 식별하고 해제하는 메모리 관리 기법이다. 하지만 iOS에서는 ARC를 주로 사용한다.
메모리 경고(Memory Waring)
- iOS는 시스템이 메모리 부족 상태에 빠지면 앱에게 경고를 보내 적절한 조취를 취하도록 한다. 이 경고를 통해 사용 중인 메모리를 줄이고 불필요한 자원을 해제하여 성능을 유지한다.
메모리 압축(Memory Compression)
- iOS는 메모리 압축을 통해 시스템의 메모리 사용량을 최적화 단다. 메모리에 저장된 데이터를 압축하여 더 많은 데이터를 기존 메모리 공간에 보관함으로 메모리 사용량을 줄인다.
메모리 리소스 관리
- iOS는 다양한 메모리 리소스 관리 기능을 제공하여 앱이 효율적으로 메모리를 사용할 수 있도록 지원한다. 앱이 백그라운드로 이동할 때 사용중인 메모리를 해제하고, 필요한 경우 메모리를 다시 할단한다.
iOS의 샌드박스(Sandbox)
iOS의 모든 앱들은 샌드박스 모델을 따른다고 한다.
그러면 샌드박스란건 무엇일까?
샌드박스는 앱을 격리된 공간으로 분리하여 다른 앱이나 시스템 지원에 접근하지 못하게 하는 매커니즘이다. 앱이 자체적으로 생성하고 관리하는 데이터를 보호하고, 다른 앱이나 시스템의 개인 정보에 접근하는 것을 방지한다.
애플이 보안에 엄격하다는 소문이 자자한데 바로 이러한 메커니즘 때문이다.
코로나 감역을 막기 위해 감금시키는데 애플은 그냥 모든 사람들을 격리시켜버린 느낌~
이러한 방식은 나쁜 의도로부터 앱이 손상되거나 시스템, 사용자 데이터의 피해를 방지하기 위한 설계이다. 즉 iOS의 모든 앱들은 격리되어 있다는 것!
아이들이 안전하게 놀던 모래박스(SandBox)에서 유래되었다고 한다. 한국 어머님들은 모래도 균 많다고 싫어하는디~
그럼 좀더 구분해서 알아보도록 하자
독립된 환경
- iOS의 앱들은 자체적인 샌드박스 내에서 실행된다. 이는 자신의 디렉토리와 리소스에만 접근할 수 있으며, 다른 앱이나 시스템 리소스에는 접근할 수 없음을 의미한다.
파일 시스템 제한
- 각 앱의 샌드박스는 사용할 수 있는 파일 시스템 영역을 제한한다. 이는 즉 자체 데이터 및 설정을 저장할 수 있는 디렉토리를 할당하여 데이터를 안전하게 거장하고 관리할 수 있게 한다.
시스템 리소스 제한
- 샌드박스는 앱이 사용할 수 있는 시스템 리소스 또한 제한한다. ex) 앱은 시스템 레벨에서 특정 작업을 수행할 수 없다, 사용자 개인 정보에 접근하기 위해서는 사용자의 명시적인 승인이 필요
네트워크 엑세스 제한
- 각 앱이 인터넷을 통해 데이터를 전송하거나 외부 서버와 통신하는 것을 제한한다. 이는 사용자 데이터를 무단으로 수집하거나 외부 서버에 민감한 정보를 전송하는 것을 방지한다.
이러한 샌드박스는 앱 자체도 보호하고 앱으로 부터 사용자도 보호하는 중요한 역할을 하고 있는 것이다. 이러한 방식은 보수적이고, 폐쇄적이라는 평가를 받기도 하지만 이는 안정성과 신뢰성을 보여주는 iOS의 장점이라고 할 수 있다.
iOS의 공유
위에서 iOS의 모든 앱들은 샌드박스 방식으로 모두 격리되어 있다고 했는데 그럼 앱 간에 데이터를 공유하는 것이 불가능할까? 어떻게 안전하게 공유할 수 있을까?
iOS 공유 앱 확장(Share Extension)
- iOS에서는 사용자가 앱 내에서 특정 콘텐츠를 선택하고 다른 앱과 공유할 수 있는 공유 확장 기능을 제공한다. 이전에 알아본 UIActivityViewController로 구현했었다.
키체인(Keychain)
- 키체인은 iOS에서 바안된 저장소를 제공하여 인증 정보나 기타 민감한 데이터를 안전하게 저장한다. (비밀번호, 토큰, 인증서 등)
파일 공유
- 사용자는 앱 간에 파일을 공유하거나 앱으로 파일을 이동할 수 있다.
인터앱 통신(Inter-App Communication)
- 인터앱 통신을 통해 앱 간에 데이터를 안전하게 교환할 수 있다. 이는 (URL Scheme, Universal Links, Custom URL Scheme, 푸시 알림) 등을 통해 가능하다.
이러한 방법들을 통해 안전하게 격리되어 있는 앱들의 공유를 안전성을 유지한체 공유가 가능하게 해주는 편리한 방법이다.
마치면서
이번에 운영체제 iOS에 대해 여러 가지 알아보았는데. 이미 알고 있던 내용들도 많았지만 역시 알아볼수록 더 알아야 할 것들이 보이는 거 같다. 뭐 어쩔 수 없지, 계속 해야지~
끝