티스토리 뷰
https://github.com/JeaSungLEE/iOSInterviewquestions
컴퓨터 시스템에서 CPU, RAM, 저장 장치의 역할과 이들이 어떻게 상호 작용하는지 설명해주세요.
💡 힌트: 앱 실행 과정을 단계별로 생각해보세요
- 저장 장치에서 앱 바이너리 로드
- RAM에 코드와 초기 데이터 적재
- CPU가 명령어 실행
- 필요시 추가 리소스 로드
- 앱을 실행할 때 이 구성 요소들이 어떤 순서로, 어떻게 상호작용하여 앱 화면을 보여주게 되나요?
- RAM이 부족하면 iOS 시스템은 어떤 동작을 할까요? 이것이 앱 개발 시 왜 중요할까요?
- CPU 속도, RAM 용량, 저장 장치 속도 중 어떤 것이 앱의 '체감 속도'에 가장 큰 영향을 미칠 수 있을까요? 이유와 함께 설명해주세요.
- iOS의 A-시리즈 칩셋에서 CPU와 GPU가 메모리를 공유하는 Unified Memory Architecture가 앱 개발에 미치는 영향은 무엇인가요?
- Metal 프레임워크를 사용할 때 CPU와 GPU 간의 데이터 전송을 최적화하는 방법은 무엇인가요?
CPU (Central Precessing Unit - 중앙 처리 장치)
컴퓨터 시스템에서 모든 계산과 명령어 처리를 담당하는 핵심 부품
내부 구성 요소
- ALU (산술 논리 연산 장치) : 산술 연산과 논리 연산을 수행
- CU (제어 장치) : 명령어를 해석하고 연산 수행 순서와 장치 제어를 담당
- 레지스터 : CPU 내부의 초고속 임시 저장 공간, 프로그램을 실행하는데 필요한 값들을 임시로 저장
역할
- 명령어 해석 : 메모리에 저장된 명령어를 하나씩 읽고 해석해서 어떤 연산을 할지 파악
- 명령어 실행 : 해석한 명령어에 따라 실제 계산(ALU)을 하거나, 다른 장치와 통신을 진행
- 제어 : 실행되는 과정에서 CU가 각 장치에 제어 신호를 보냄
상호작용
- RAM : CPU는 RAM에서 명령어와 데이터를 가져와 실행하고, 결과를 다시 저장합니다.
- 저장장치 : CPU는 저장 장치에서 명령어와 리소스를 RAM으로 불러온 후 처리합니다.
RAM (Random Access Memory - 주 기억장치)
실행 중인 프로그램의 데이터와 명령어를 임시로 저장하는 고속 메모리, 휘발성 메모리이며 CPU가 가장 자주 접근하는 메모리
내부 구성의 특징
- 대부분 DRAM (Dynamic RAM) 기반으로 구성됨 - 레지스터는 SRAM으로 구성
- 휘발성 : 전원이 꺼지면 저장된 내용이 모두 사라짐
- 주소 기반 접근 : 데이터를 저장할 때 주소를 기준으로 빠르게 읽고 쓸 수 있음
- 읽기/쓰기 : 데이터를 자유롭게 읽고 수정할 수 있음
역할
- 앱의 코드 및 데이터 저장 : 저장 장치에서 불러온 명령어(코드)와 앱 실행 중 생성되는 변수, 객체, 리소스 등을 RAM에 저장합니다.
- CPU와 데이터 교환 버퍼 : CPU는 항상 RAM에서 명령어와 데이터를 가져와 처리합니다. 처리한 연산 결과도 RAM에 다시 저장됩니다.
상호작용
- CPU : RAM에 저장된 명령어를 읽고 실행합니다.
- 저장장치 : 앱 실행 시 저장장치에서 프로그램을 읽어 RAM에 올립니다.
저장장치 (Storage - SSD, HDD)
컴퓨터에서 데이터를 장기적으로 보관하는 장치
역할 및 종류
- HDD / SSD 로 2종류가 있으며 iOS 기기는 SSD를 사용합니다.
- 앱실행에 필요한 모든 파일의 원본 저장소입니다. - RAM이 휘발성이므로, 앱이 종료되면 저장 장치에서 다시 불러옵니다.
상호작용
- CPU : OS의 도움을 받아 I/O 요청을 통해 간접적으로 접근합니다.
- RAM : 실행할 파일이나 리소스는 저장 장치에서 RAM으로 복사됩니다.
앱 실행 단계
- CPU는 저장 장치에서 앱 바이너리 정보를 RAM으로 불러옵니다.
- 앱바이너리를 통해 내부 코드 및 plist의 메타데이터를 불러오고 이후 plist를 통해 번들의 리소스 정보 등에 접근해 추가적인 리소스를 불러온다.
- 이후 RAM에서 명령어와 데이터를 가져와 CPU의 CU가 해석하고 ALU가 연산을 수행합니다.
- 연산을 수행하는 과정에서 발생한 데이터나 주소 정보는 레지스터에 임시 저장됩니다. 가상 주소의 경우, MMU가 OS의 페이지 테이블을 기반으로 물리 주소로 변환합니다.
- 또한 연산 수행에 필요한 추가 리소스는 저장 장치에서 RAM으로 불러와 사용합니다.
- 앱 실행에 필요한 명령을 전부 처리하면 앱을 화면에 출력합니다.
RAM이 부족하면 iOS 시스템은 어떤 동작을 할까요? 이것이 앱 개발 시 왜 중요할까요?
iOS는 앱마다 메모리 사용한도가 존재한다. 사용한도를 초과하게되면 아래와 같은 동작을 진행한다.
- didReceiveMemoryWarning() 호출을 통해 메모리 경고를 보냅니다.
- 메모리 경고를 받은 시점에서 캐시, 이미지 등 메모리를 잡아먹지만 사용하지 않는 부분을 해제해야합니다.
- 그럼에도 여전히 해결이 되지않으면 앱이 강제 종료 됩니다.
즉, 앱이 강제 종료되는 불상사가 발생하지 않으려면 메모리를 잘 관리해야합니다. → 메모리 누수X, 이미지 캐시 관리 등
CPU 속도, RAM 용량, 저장 장치 속도 중 어떤 것이 앱의 '체감 속도'에 가장 큰 영향을 미칠 수 있을까요? 이유와 함께 설명해주세요.
체감 속도에 가장 큰 영향을 미치는 부분은 저장장치에서 데이터를 읽고 RAM에 올리는 부분으로 저장 장치의 속도입니다. 가장 큰 이유는 SSD(저장장치)의 데이터를 읽고 쓰는 속도의 차이 입니다. HDD에 비해 그 속도가 빨라졌다고 하더라도 RAM보단 느립니다. 다음 이유는 사용자가 마주하는 컨텐츠 적인 요소를 저장 장치에서 불러오기 때문입니다. 그래서 개발자들은 비동기 처리를 통해 저장 장치에서 데이터를 불러오는 방식을 빠르게 처리하며, 이 지점을 최적화를 하면 사용자로 부터 “앱의 반응이 빠르다”라는 인상을 줄 수 있다고 생각합니다.
iOS의 A-시리즈 칩셋에서 CPU와 GPU가 메모리를 공유하는 Unified Memory Architecture가 앱 개발에 미치는 영향은 무엇인가요?
A-시리즈 칩셋
- Apple Silicon A시리즈를 의미
UMA(Unified Memory Architecture)
- CPU와 GPU가 동일한 물리적 메모리(RAM)를 공유하는 구조
- 기존에는 데이터 공유를 위해 복사 비용이 발생했지만 UMA의 경우에는 같은 RAM을 사용하기 때문에 복사 비용이 발생하지 않습니다.
장점
- 메모리 절약 : 동일한 데이터를 두 번 저장할 필요 없습니다.
- 성능 향상 : 복사없이 사용하기 때문에 버퍼 전송 비용이 절감됩니다.
- 개발 간소화 : 복잡한 동기화를 하지않아 부담이 감소합니다.
앱 개발에 미치는 영향
- 메모리 사용 최적화 : GPU용 VRAM이 따로 없기 때문에 전체 RAM 용량 관리가 중요합니다.
- 개발의 편리성 : 개발 시 CPU-GPU 전환을 고려하지 않아도 됩니다.
- 성능적 이점 : 이미지 처리, 실시간 렌더링 등에서 큰 효과를 발휘합니다.
Metal 프레임워크를 사용할 때 CPU와 GPU 간의 데이터 전송을 최적화하는 방법은 무엇인가요?
https://developer.apple.com/documentation/metal/resource-fundamentals 과 https://developer.apple.com/documentation/metal/mtlstoragemode/shared에 따르면
MTLStorageMode.shared를 통해 CPU와 GPU 모두에서 공유 저장소의 리소스에 액세스할 수 있다고 나와있다. 추가로 애플실리콘환경에서는 shared가 기본값이며, 그외에는 private가 기본값이다. private 환경에서는 GPU에서만 접근이 가능하다고한다.
Metal을 사용한 GPU 렌더러 최적화하기 WWDC23
https://developer.apple.com/kr/videos/play/wwdc2023/10127/
참고 자료
https://hongong.hanbit.co.kr/컴퓨터의-4가지-핵심-부품cpu-메모리-보조기억장/
https://explorer89.tistory.com/114
https://velog.io/@yongheon/앱-실행-시-CPU-RAM-저장-장치의-역할
https://itpe.jackerlab.com/entry/통합-메모리-아키텍처UMA-Unified-Memory-Architecture
'프로그래밍 > 기초' 카테고리의 다른 글
| [Lv1 - 4] 클로저(Closure) (0) | 2025.07.15 |
|---|---|
| 함수와 클로저의 차이점 (0) | 2025.07.08 |
| 클린아키텍처(Clean Architecture) (2) | 2025.05.25 |
| 메모리구조, ARC (with GC, 약한 참조, 미소유 참조) (0) | 2025.02.10 |
| Github 사용해보기 2 (0) | 2025.02.08 |
