티스토리 뷰
안녕하세요 :) Zedd입니다.
어제 Let'Swift in 판교..모임을 갔었는데, 진짜,,,다들 너므 갓......
진짜 아 너무너무 팬입니ㄷ ㅏ...............진짜 존경과 경외심.........
이제 제 좌우명은 이제 어제보다 더 나은 코드를 짜는 사람이 되자...입니다.......
아무튼 다 너무 좋은 세션이었고, 마지막 민소네님 세션을 들으면서
뭔가 제가 이런..컴파일러(?)관련 용어..? 라고 하는게 맞는건지도 지금 잘 모르겠는데..zzzz
Mach-O가 뭔지 아시나욥..!?!?!?
이 용어를 알았으면 더 이해가 잘 됐을텐데 제가 이런 용어들을 잘 몰라서리..
아무튼 공부를 해보고자 합니다 :D
음 근데, 제가 이걸 공부하면서..틀린 내용이 있을 수 있는데 발견하면 꼭!! 댓글로 말씀해주시면 정말로 감사하겠습니다.
Mach-O
Mach는 사실 저한테는zzzzzz "마하"...로 밖에 안보이는...
근데 왜 한글로는 마하일까요....영어로 발음하면 ㅁ ㅏK..이런 느낌인데..
자 암튼;;
꼭 순서대로 읽어주세요. 제 흐름...이기 때문...ㅎ
- Mach-O는 Mach Object file format의 줄임말이라고 합니다!
- Mach는 Carnegie Mellon University에서 개발된 커널(kernel)이라고 합니다.
(커널 : 컴퓨터 과학에서 커널(kernel)은 컴퓨터의 운영 체제의 핵심이 되는 컴퓨터 프로그램의 하나로, 시스템의 모든 것을 완전히 통제한다. 운영 체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러 가지 서비스를 제공한다.)
TMI긴 하지만....뭐 확실하진 않지만...!!! 위키에 따르면 요 Mach 프로젝트의 수석개발자인 Richard Rashid가 Mach라는 철자를 좋아했다고 해요!?
- Mach-O는 마이크로 커널의 가장 초기 예시로 언급되곤 하는데, 모든 Mach버전이 마이크로 커널인것은 아니래요.
(마이크로 커널 : 마이크로커널(microkernel)은 컴퓨터 과학에서 운영 체제에 추가되어야 하는 메커니즘을 최소한으로 제공하는 초소형 커널이다. )
- macOS, iOS, iPadOS, tvOS, 그리고 watchOS에 사용되는 Apple의 XNU가 이 Mach를 기반으로 했다고 합니다.
Apple의 XNU을 알아야겠죠! 이것 역시 처음들어보네요.
Mach가 커널이랬고, XNU가 이 Mach를 기반으로 만들어졌으니..
XNU도 당연히 커널이겠죠?
맞습니다.
XNU는 애플에서 만든!! 운영체제 커널입니다.
XNU는 Xcode에서 정의를 타고타고 들어가다보면 만나는 그 Darwin의 일부라고 합니다.
놀랍게도 XNU은...X is Not Unix......의 약자..
저는 아나 뭐ㅇ ㅑ...설마 저 뜻이겠어..!?..애플 오피셜을 보기 전까지 못믿겠는데..?
ㅋ..맞군
아니 왜 X is Not Unix인건데 궁금하게
암튼 지금 보니까 Mach가 이 Apple의 플랫폼과..밀접하게 관련되어있다는 걸 알 수 있네요!
Mach에 대해 이제 좀 알아봤으니...다시 Mach-O이야기로 돌아갑시다.
Mach-O는 위에서 언급했다 시피
Mach-O는 Mach Object file format의 줄임말이라고 합니다!
Mach-O는 OS X에서 바이너리의 네이티브 executable format이고,
shipping code에 선호되는 포맷이라고...
애플에서 나온 OverView of the Mach-O Executable Format.....문서에 나오는데요.
Executable file, Object code shared library, dynamically-loaded code, core dumps를 위한
파일 형식! 이라고 생각하면 편할 것 같아요.
Mach-O에는 뭐 JSON같이 특정한 포맷! 이 있는게 아니라,
그냥 의미가 있는 data chunks로 그룹화된 바이너리 바이트 스트림일 뿐이라고 합니다..
이러한 chunks에는 뭐 바이트 순서, CPU타입, chunks크기 등같은 메타정보가 들어간다고 합니다.
저 .o, .dylib, .bundle이런게 전부 Mach-O 포맷이라고 생각하면 되는거겠죠..>!?!?
흠....
문서를 보는데 계속 OS X라고 하는데..이건 macOS로 수정해서 적을게요!
- macOS는 각각 자체 런타임 규칙이 있는 여러 응용프로그램 환경을 지원하는데,
- macOS에서 kernel extensions, command-line tools, applications, frameworks, 그리고 libraries (shared and static)는 Mach-O파일을 사용하여 구현된다고 합니다.
Xcode의 Build Setting에 가면, Mach-O Type을 고를 수 있습니다.
Single View App이나 command line tool은 기본적으로 Executable이네요.
이 Build Setting의 Mach-O타입은
바이너리의 타입을 지정하는 identifier입니다.
그러니까 내가 만들고 싶은(?) 응용프로그램에 맞게 이 Mach-O Type을 지정해줘야 한다는 소리겠지..?
- Framework로 만들었을 때,
Dynamic Library로 기본적으로 설정됩니다.
- Static Library로 만들었을 때
Static Library로 기본적으로 설정되네요.
- Mach-O파일은 크게 Header, Load Commands, Raw segment data부분으로 이루어져 있는데,
뭐 각 Mach-O타입에 따라....이 부분중 어딘가가 바뀌겠죠..!?.....그냥 그럴것 같은데 확실하게...말할수가 없음
이거 header어케봐 ㅠㅠㅠ
사실 진짜 엄청나게 많은 내용이 있는 것 같은데..
보면
뭐 이런거 적혀있는 Mach-O header가 있다는것 같은데 ㅠㅠㅠㅠㅠㅠ
이거 보는법 아시느 분,,,
아무튼 오늘..Mach-O에 대해 완벽히 안것 같지는 않지만
어제보다는 많이 아는 듯 하네요 ^-^..긍정..
다음 글로는 Mach-O Type에 들어갈 수 있는 애들...을 보며
아니다..
사실 Mach-O Type이 바이너리의 타입을 지정(결정?)하는 애니까..
이친구들을 공부하면 되겠군요
이 글이 제대로 된, 그리고 정확한 정보전달 글인지 잘 모르겠는데
그래도
1. Mach/XNU가 어떤건지,
2. Mach-O Type은 바이너리의 타입을 지정하는 identifier
라는 사실만 알아도..!! 좋은 수확이라고 생각합니다.
틀린점이나 피드백은 정말 언제든지!!!!!!! 환영입니다.
'공부' 카테고리의 다른 글
Mac에서 Go 시작하기 - 설치와 설정 (0) | 2020.01.03 |
---|---|
Behind the Scenes of the Xcode Build Process (1) (1) | 2019.12.14 |
Xcode canvas 살펴보기 (1) | 2019.12.05 |
SonarQube 삽질기 (2) | 2019.12.04 |
Fastlane (4) - Upload Screenshots to the App Store (0) | 2019.11.08 |
- swift array
- swift sort
- Git
- Swift
- 제이슨 파싱
- iOS delegate
- FLUTTER
- IOS
- np-hard
- ios 13
- 회고
- Combine
- swift delegate
- 스위프트
- actor
- SwiftUI
- WKWebView
- swift3
- Xcode
- 스위프트 문법
- Accessibility
- swift tutorial
- WidgetKit
- swift 공부
- fastlane
- github
- 피아노
- np-complete
- WWDC
- UIBezierPath
- Total
- Today
- Yesterday