สถาปัตยกรรมของระบบหน้าต่างของ Mac OS X คืออะไร?


34

ฉันคุ้นเคยกับการทำงานของระบบ X11 ที่ซึ่งลูกค้าเชื่อมต่อผ่านซ็อกเก็ตไปยังกระบวนการเซิร์ฟเวอร์และส่งการดำเนินการไปยังเซิร์ฟเวอร์หน้าต่างเพื่อดำเนินการบางอย่างในนามของพวกเขา

แต่ฉันไม่เข้าใจ (และฉันไม่สามารถหาเอกสารที่ดี) อธิบายว่าแอปพลิเคชัน GUI โต้ตอบกับระบบหน้าต่างบน Mac OS X ได้อย่างไรคำถามบางข้อที่ฉันมี:

  • แอพรับเหตุการณ์จากระบบหน้าต่างได้อย่างไร
  • แอปจำเป็นต้องลงทะเบียนกับเคอร์เนลหรือเซิร์ฟเวอร์ระบบเซิร์ฟเวอร์บางตัวหรือไม่?
  • ระบบ windowing ร้องขอให้แอปอัปเดตจอแสดงผลอย่างไร
  • แอพเรียกใช้การดำเนินการแสดงซ้ำอย่างไร
  • มีโปรโตคอลแบบซ็อกเก็ตหรือระบบ RPC อื่น ๆ ไปยังระบบหน้าต่างหรือไม่?
  • ระบบหน้าต่างหรือแอพพลิเคชั่นมีการเข้าถึงฮาร์ดแวร์โดยตรงหรือไม่?
  • การดำเนินการระหว่างแอพไคลเอ็นต์กับระบบหน้าต่างคืออะไร

คำตอบ:


14

นี่คือสิ่งที่ฉันสามารถรวบรวมได้:

แอปพลิเคชั่นสื่อสารผ่าน API ส่วนตัวบางประเภทกับกระบวนการ WindowServer กระบวนการ WindowServer เป็นแอปที่ได้รับเหตุการณ์ฮาร์ดแวร์ (เมาส์แป้นพิมพ์) และส่งไปยังแอปพลิเคชันไคลเอนต์ (นี่ยังคงเป็นคำถามที่เปิดอยู่: โปรโตคอลใดที่พวกเขาใช้ถ้ามีพวกเขาใช้พอร์ต Mach และ MIG หรือ API ที่ใช้ซ็อกเก็ตบางตัวไม่แน่ใจ)

ข้อมูลบางอย่างอยู่ที่นี่:

https://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/OSX_Technology_Overview/GraphicsTechnologies/GraphicsTechnologies.html#//apple_ref/doc/uid/TP40001067-CH273-SW1

WindowServer เป็น Quartz Compositor โดยทั่วไปแล้วแอปพลิเคชันจะใช้ Quartz2D API ซึ่งเปิดเผยใน CoreGraphics API (CGXXX funtions) แอปพลิเคชั่นสร้าง CoreGraphics "Contexts" (CGContext) และวาดตรงนั้น ไม่ว่าบริบทจะถูกผลักเมื่อทำเช่นนั้นเป็นบิตแมปขนาดใหญ่หรือถ้าการดำเนินการถูกส่งไปยังเซิร์ฟเวอร์เช่นพวกเขาอยู่ใน X11 ยังคงเป็นคำถามเปิด

มี API ที่ จำกัด ในการควบคุมลักษณะบางอย่างของกระบวนการ WindowServer การเรียงลำดับของการตั้งค่าที่มักจะทำจากแอปพลิเคชันการตั้งค่า แต่ไม่มีเอกสารเกี่ยวกับวิธีที่แอปสื่อสารคำขอกราฟิกหรือปั๊มข้อความจากเซิร์ฟเวอร์จริง ๆ API ของ Carbon / Cocoa ที่เปิดเผย


ลิงก์ใช้งานไม่ได้
มิก

3

"โกโก้คืออะไร" ส่วนของCocoa Fundamentals Guideมีภาพประกอบมากมายของสถาปัตยกรรมตั้งแต่ล่างขึ้นบน


2
(ขออภัยยังไม่สามารถโพสต์บันทึกย่อ): Quartz หรือ Core Graphics เป็นระบบวาดรูปและหน้าต่างใน OS X (แทนที่ QuickDraw) กราฟิกคอร์เป็นส่วนหนึ่งของโกโก้ (Cocoa โดยรวมมีความสามารถเทียบเท่ากับ Win32 API ทั้งหมดมากกว่า GDI, Direct2D หรือ X)
KellyClowers

2

ทรัพยากรที่ดีที่สุดสำหรับ OS X internals เป็นAmit ซิงห์ของ Mac OS X Internals มีรายละเอียดที่น่าอัศจรรย์ แต่น่าเสียดายที่ครอบคลุมเฉพาะ OS X มากถึง 10.4 หนังสือ Google มีการแสดงตัวอย่าง

เอกสารประกอบของ Apple สำหรับ OS Xยังเป็นแหล่งข้อมูลที่ดีและเห็นได้ชัดว่าทันสมัยยิ่งขึ้น


1

XQuartz เป็นโครงการโอเพนซอร์ซของ X.org X Window System ที่ทำงานบน Mac OS X ผู้พัฒนาวิกิและรายชื่อผู้รับจดหมายของพวกเขาควรช่วยคุณตอบคำถามดูเหมือนว่าคุณต้องการคนที่มีส่วนเกี่ยวข้องในโครงการเพื่อตอบคำถามเหล่านั้น


4
ถูกต้อง แต่ครอบคลุมเฉพาะ XQuartz ซึ่งเป็นเพียงโปรแกรมที่พูดถึงระบบหน้าต่างจริงของพวกเขา คำถามคือว่าแอพอย่าง XQuarts หรือ Finder คุยกับระบบหน้าต่างนี้ได้อย่างไร
miguel.de.icaza

1

ในเวอร์ชัน MacOS ก่อนหน้าการยกทำได้โดย QuickDraw ใน OS X ที่ Cocoa ถูกแทนที่โดย ...

มันไม่เพียง แต่ขนาน X11 ตัวอย่างเช่น X11 ไม่รวมเสียง แต่ Cocoa ทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.