Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

운영체제의 역할과 iOS에서의 운영체제 구조에 대해 설명해주세요. #3

Open
ujhong7 opened this issue Sep 29, 2024 · 0 comments

Comments

@ujhong7
Copy link
Owner

ujhong7 commented Sep 29, 2024

운영체제의 역할

운영체제(OS)는 컴퓨터 시스템의 자원을 관리하고, 사용자와 하드웨어 간의 인터페이스를 제공하는 소프트웨어입니다.
주요 역할:

  • 자원 관리: CPU, 메모리, 저장장치 등 시스템 자원의 효율적 할당.
    프로세스 관리: 프로세스와 스레드의 생성, 실행, 스케줄링 관리.

  • 파일 시스템 관리: 데이터를 저장하고 파일 간의 상호작용 관리.

  • 입출력 관리: 장치 드라이버를 통해 하드웨어와 소프트웨어 간의 데이터 흐름 관리.

iOS에서의 운영체제 구조

iOS는 유닉스 기반의 운영체제이며, Darwin이라는 운영체제 커널을 사용합니다.
iOS의 구조는 크게 4개의 계층으로 구성됩니다:

  • Core OS: iOS의 가장 하위 레벨로, 커널, 메모리. 관리, 파일 시스템, 네트워크 관리 등의 기본 시스템 서비스를 제공.

  • Core Services: 앱에서 사용할 수 있는 주요 서비스, 예를 들어 Core Foundation, Core Data, SQLite, iCloud 등.

  • Media: 그래픽, 오디오, 비디오 처리 관련 프레임워크가 포함된 계층. 예: AVFoundation, Core Graphics.

  • Cocoa Touch: UI와 관련된 계층으로, UIKit, Foundation을 포함하여 iOS 앱의 인터페이스를 구현하는데 필요한 모든 요소를 제공.


🟡 프로세스와 스레드의 차이점, iOS에서의 프로세스와 스레드 관리 방법

프로세스(Process)

프로세스는 운영체제에서 실행 중인 프로그램의 인스턴스를 말합니다.
각 프로세스는 독립적인 메모리 공간을 가지고, 다른 프로세스와 메모리 자원을 공유하지 않습니다.
프로세스는 실행되는 동안 코드, 데이터, 힙, 스택으로 구성됩니다.

스레드(Thread)

스레드는 프로세스 내에서 실행되는 단위로, 프로세스의 자원을 공유하면서 실행됩니다.
하나의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 독립적으로 실행되지만 동일한 프로세스 내에서 메모리 자원을 공유합니다.

차이점

  • 메모리:
    프로세스는 각각 독립된 메모리 공간을 사용하지만,
    스레드는 같은 프로세스 내에서 메모리를 공유합니다.

  • 생성 비용:
    프로세스 생성은 비교적 무겁고,
    스레드 생성은 가볍습니다.

  • 통신:
    프로세스 간 통신은 IPC(Inter-process communication)와 같은 별도의 방법을 사용하지만,
    스레드는 같은 메모리 공간을 공유하기 때문에 상대적으로 간단한 통신이 가능합니다.

iOS에서의 프로세스와 스레드 관리

iOS는 멀티태스킹을 지원하지만, 백그라운드 앱은 제한된 리소스만 사용할 수 있습니다.
프로세스와 스레드는 다음 방식으로 관리됩니다:

  • GCD (Grand Central Dispatch): iOS에서 스레드 관리를 추상화하여 비동기적으로 여러 작업을 처리하는 API

  • OperationQueue: 작업을 큐에 추가하고, 시스템에서 적절하게 스레드를 관리하여 처리

iOS는 앱당 하나의 프로세스가 기본으로 할당되며, 그 안에서 여러 스레드가 동작할 수 있습니다.
메인 스레드는 주로 UI 관련 작업을 처리하고, 다른 스레드는 백그라운드에서 데이터 처리나 네트워크 작업을 수행합니다.


🟡 메모리 관리 기법 중 iOS에서 사용되는 방식과 그 특징

iOS는 자동 참조 카운팅(ARC)을 사용하여 메모리를 관리합니다.

  • ARC (Automatic Reference Counting)
    ARC는 컴파일러 수준에서 메모리 관리를 자동화하는 방식입니다.
    객체가 생성될 때마다 참조 카운트를 유지하고, 객체에 대한 모든 참조가 사라지면 메모리를 자동으로 해제합니다.

    • 참조 카운트 증가: 객체에 새로운 참조가 생기면 참조 카운트가 증가.
    • 참조 카운트 감소: 객체에 대한 참조가 사라지면 참조 카운트가 감소.
    • 메모리 해제: 참조 카운트가 0이 되면 해당 객체의 메모리가 자동으로 해제됩니다.
  • ARC의 특징

    • 순환 참조(Circular Reference) 문제:
      ARC는 객체들 간의 순환 참조로 인해 메모리 누수가 발생할 수 있습니다.
      이를 방지하기 위해 weak나 unowned 참조를 사용하여 순환 참조를 끊습니다.
    • 자동 관리:
      개발자는 명시적으로 메모리를 관리하지 않아도 ARC가 메모리 할당과 해제를 처리해줍니다.

🟡 iOS의 샌드박스(Sandbox) 개념과 역할, 앱 간 데이터 공유 방법

샌드박스(Sandbox) 개념과 역할

iOS에서 샌드박스는 각 앱이 독립된 환경에서 실행되도록 하는 보안 모델입니다.
샌드박스는 앱이 자신의 데이터에만 접근할 수 있게 하고, 다른 앱의 데이터나 시스템 리소스에 접근하지 못하도록 제한합니다.
이를 통해 앱이 시스템 또는 다른 앱의 동작에 영향을 주는 것을 방지하며, 보안을 강화합니다.

샌드박스의 주요 역할:

  • 보안: 앱이 악의적인 행위를 하지 못하도록 제한.
  • 데이터 보호: 앱이 다른 앱의 데이터에 접근할 수 없도록 보호.
  • 리소스 격리: 앱이 독립된 파일 시스템과 메모리 공간을 사용하게 하여 충돌을 방지.

앱 간 데이터 공유 방법

iOS에서는 샌드박스 환경 때문에 기본적으로 앱 간 데이터 공유가 불가능합니다.
하지만, 특정 방법을 통해 제한적으로 데이터를 공유할 수 있습니다.

  1. App Groups
    앱 그룹을 설정하면, 동일한 개발자가 배포한 앱 간에 데이터를 공유할 수 있습니다.
    공유된 컨테이너에 데이터를 저장하여 앱 간 데이터 접근이 가능합니다.
    예시: 앱과 위젯 간에 데이터를 공유할 때 사용.

  2. UIDocumentPickerViewController
    iOS에서 제공하는 문서 피커를 사용하면 사용자가 다른 앱의 문서에 접근할 수 있습니다.
    이를 통해 파일을 가져오거나 저장할 수 있습니다.

  3. UIPasteboard
    클립보드(Pasteboard)를 사용하여 간단한 텍스트나 이미지 데이터를 앱 간에 복사하고 붙여넣기 방식으로 공유할 수 있습니다.

  4. Keychain
    Keychain을 사용하면 같은 개발자가 배포한 여러 앱이 공통된 자격 증명 데이터를 공유할 수 있습니다.
    보안이 중요한 정보(예: 로그인 정보)를 앱 간에 안전하게 공유할 때 사용됩니다.

  5. URL Scheme / Universal Links
    앱 간 통신을 위해 URL Scheme이나 Universal Links를 사용하여 데이터를 전달할 수 있습니다.
    한 앱에서 다른 앱을 호출하면서 데이터 전달이 가능하지만, 안전한 데이터 공유에는 한계가 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant