1. Single CPU Systemì—서 프로세서 A ê°€ Run ì¤‘ì¼ ë•Œ, I/O ìž‘ì—…ì„ í•´ì•¼ ë¼ì„œ 다른 프로세서 B로 스위ì¹ì„ 하는 ìƒí™©ì´ë‹¤. * 스위ì¹ì„ 한다면, 프로세서 Aì— Time Slice를 조금 ë‚¨ê²¨ë†“ê³ ìŠ¤ìœ„ì¹ì„ 하는 것ì¸ê°€? 즉 I/O ìž‘ì—…ì„ ê³„ì† í• ìˆ˜ 있ë„ë¡ CPUê°€ 조금씩 I/O ìž‘ì—…ì„ ì§„í–‰í•˜ë©´ì„œ 프로세서 B를 실행하는 것ì¸ê°€? * 만약 ê·¸ê²ƒì´ ì•„ë‹ˆë¼ë©´, I/O ìž‘ì—…ì„ CPUê°€ 담당하지 않는 것ì¸ê°€? CPU ë‚´ë¶€ ALU와 I/O 작업 회로가 따로 있는 Independent ìƒí™©ì´ê¸° ë•Œë¬¸ì— ê·¸ëŸ° 것ì¸ê°€? * A) ë‹¤ìŒ ë§í¬ë¥¼ 참조하세요. [http://en.wikipedia.org/wiki/Direct_memory_access DMA] - [변형진] * ê°ì‚¬í•©ë‹ˆë‹¤. DMAë¼ëŠ” 특성 ë•ë¶„ì— ë…립ì 으로 I/O를 í• ìˆ˜ 있는거군요. - [박성현] 2. Single CPU & Single-processor & Multi-thread 환경ì´ë‹¤. * CPUê°€ í• ë‹¹í•œ Time Slice를 í•˜ë‚˜ì˜ Processorë‚´ë¶€ì— ìžˆëŠ” ê°ê°ì˜ Threadê°€ 쪼개서 사용 하는 것ì¸ê°€? * ê·¸ë ‡ë‹¤ë©´ ê°œë…ì 으로 Single CPUì—서 Processor Switchingê³¼ ê°™ì€ ê²ƒì¸ê°€? * 그럼 여러 ê°œì˜ Threadê°€ 존재하는 ìƒí™©ì¼ 때, í•˜ë‚˜ì˜ Threadê°€ One Time Slice를 ì „ë¶€ 사용하는 경우가 있는가?? * A) processorë¼ê³ ì“°ì‹ ê²ƒì´ ì•„ë§ˆë„ process를 ì˜ë¯¸í•˜ëŠ” 것 같군요? scheduling 기법ì´ë‚˜, time slice ì •ì±…, preemption 여부 ë“±ì€ ì•„í‚¤í…처와 ìš´ì˜ì²´ì œ ì»¤ë„ êµ¬í˜„ 등 ì‹œìŠ¤í…œì— ë”°ë¼ ì„œë¡œ 다르게 최ì í™”ë˜ì–´ 설계합니다. thread ë“±ì˜ ê°œë…ë„ ìš´ì˜ì²´ì œì™€ 개발 언어 런타임 등 플랫í¼ì— ë”°ë¼ ë‹¤ë¥¼ 수 있습니다. ì¼ë°˜ì 으로 processì˜ context switchingì€ PCB 등 복잡한 contextì˜ ì „í™˜ì„ ë‹¤ë£¨ë¯€ë¡œ 단순한 thread 스케줄ë§ë³´ë‹¤ ì¢€ë” ë³µìž¡í• ìˆ˜ëŠ” 있으나 반드시 그런 ê²ƒì€ ì•„ë‹™ë‹ˆë‹¤. - [변형진] * 첫번째와 세번째 ì§ˆë¬¸ì— ëŒ€í•œ ë‹µë³€ì€ "time slice ì •ì±…ì— ë”°ë¼ ë‹¤ë¥´ë‹¤." ì¸ê±°ì—ìš”?? - [박성현] * 아키í…처, ìš´ì˜ì²´ì œ, 개발 언어 런타임 등 해당 í”Œëž«í¼ í™˜ê²½ì—ì„œì˜ thread 구현 ë°©ì‹ì— ë”°ë¼ ë‹¤ë¥¼ 수 있습니다. - [변형진] 3. 다ìŒì˜ 예가 ì ì ˆí•œ 예ì¸ê°€? - í•™êµ ë‚´ì— ê±´ë¬¼ì´ í•˜ë‚˜ ë°–ì— ì—†ë‹¤ê³ ê°€ì • * Single Processor & Single Thread - ê·¸ 건물엔 í™”ìž¥ì‹¤ì´ í•˜ë‚˜ 있네. ê·¸ë¦¬ê³ í•œ 명 들어가면 ë”는 못 들어가네. * Single Processor & Multi Thread - ì—시 í™”ìž¥ì‹¤ì´ í•˜ë‚˜ 있네. ê·¸ëŸ°ë° ì—¬ëŸ¬ 명 ë™ì‹œì— 들어갈 수 있네. * Multi Processor & Single Thread - í™”ìž¥ì‹¤ì´ ì—¬ëŸ¬ ê°œ 있네. ê° í™”ìž¥ì‹¤ì—는 한 명만 들어갈 수 있네. * Multi Processor & Multi Thread - í™”ìž¥ì‹¤ì´ ì—¬ëŸ¬ ê°œ 있네. ê° í™”ìž¥ì‹¤ì—는 여러 ëª…ì´ ë™ì‹œì— 들어갈 수 있네. * … ì´ ë¹„ìœ ì— CPU Schedulerë„ ì¶”ê°€í•œë‹¤ë©´ ì–´ë–¤ ë¹„ìœ ë¥¼ 들 수 있ì„까? * Single CPU 환경ì´ë¼ë©´ - Observerê°€ 건물 위ì—서 í•˜ë‚˜ì˜ ë³€ê¸° ì„ íƒ?? * Multi CPU 환경ì´ë¼ë©´ - Observerê°€ 건물 위ì—서 여러 ê°œì˜ ë³€ê¸° ì„ íƒ?? * A) processorë¼ê³ ì“°ì‹ ê²ƒì´ process, cpuê°€ processor를 ì˜ë¯¸í•˜ì‹ 것 같군요. process는 실행ë˜ê³ 있는 í•˜ë‚˜ì˜ í”„ë¡œê·¸ëž¨ ì¸ìŠ¤í„´ìŠ¤ì´ë©°, thread는 a flow of control입니다. 즉, í•˜ë‚˜ì˜ í”„ë¡œê·¸ëž¨ ì•ˆì— ë…¼ë¦¬ì 으로 여러 ê°œì˜ ì œì–´ íë¦„ì´ ì¡´ìž¬í•˜ëŠëƒ(*-thread)와, í•˜ë‚˜ì˜ ì»´í“¨í„°ì— ë…¼ë¦¬ì 으로 여러 ê°œì˜ í”„ë¡œê·¸ëž¨ ì¸ìŠ¤í„´ìŠ¤ê°€ 실행ë˜ê³ 있ëŠëƒ(*-process)로 ìƒê°í•˜ëŠ”ê²Œ 가장 좋습니다. multi-processor(multi-core)는 ë§ ê·¸ëŒ€ë¡œ ë™ì‹œì— 물리ì 으로 여러 ê°œì˜ íë¦„ì„ ì²˜ë¦¬í• ë…립ì ì¸ ì²˜ë¦¬ê¸°ê°€ ë³‘ë ¬ë¡œ 존재하ëŠëƒìž…니다. ìœ„ì— ì œì‹œëœ ì˜ˆëŠ” ì ì ˆí•˜ì§€ 못한 것 같습니다. - [변형진] * "물리ì 으로 ì—¬ëŸ¬ê°œì˜ 'í름'ì„ ì²˜ë¦¬í•œë‹¤."는 ë§ì”€ì€ 'ê°ê°ì˜ CPUë“¤ì´ '''í•˜ë‚˜ì˜ í”„ë¡œì„¸ìŠ¤''' ë‚´ë¶€ì˜ '''여러 ê°œì˜ ì“°ë ˆë“œ'''들 중 개별ì 으로 ì“°ë ˆë“œë¥¼ ì„ íƒí•´ 처리한다'는 ë§ì”€ì´ì‹ 가요? - [박성현] * ì–´ëŠ ë°”ìœ ìŒì‹ì (machine)입니다. ë‘ ëª…ì˜ ìš”ë¦¬ì‚¬(processor)ê°€ 있는ë°, ì£¼ë¬¸ì´ ë°€ë ¤ì„œ 5ê°œì˜ ìš”ë¦¬(process)를 ë™ì‹œì— í•˜ê³ ìžˆìŠµë‹ˆë‹¤. ê·¸ 중 ì–´ë–¤ 한 요리는 소스를 ë“ì´ë©´ì„œ(thread) ë™ì‹œì— ì–‘ë…ë„ ë‹¤ì§€ê³ (thread), ìž¬ë£Œë“¤ì„ ì˜¤ë¸ì— 굽는ë°(thread) 요리를 ë¹ ë¥´ê²Œ 완성하기 위해 ì´ ëª¨ë“ ê²ƒì„ ë™ì‹œì— 합니다. 한 ëª…ì˜ ìš”ë¦¬ì‚¬ëŠ” íŠ¹ì •ì‹œì ì— ë‹¨ 한 가지 행위(instruction)ë§Œ í• ìˆ˜ 있으므로, ì–‘ë…ì„ ë‹¤ì§€ë‹¤ê°€ (context switching) 소스가 잘 ë“ë„ë¡ ì €ì–´ì£¼ê¸°ë„ í•˜ê³ (context switching) 다시 ì–‘ë…ì„ ë‹¤ì§€ë‹¤ê°€ (context switching) ê°™ì´ í•˜ë˜ ë‹¤ë¥¸ 요리를 확ì¸í•˜ë‹¤ê°€, 오ë¸ì— 타ì´ë¨¸ê°€ 울리면(interrupt) 구워진 재료를 꺼내어 요리합니다. ë¬¼ë¡ ë‘ ëª…ì˜ ìš”ë¦¬ì‚¬ëŠ” ê°™ì€ ì‹œì ì— ê°ìžê°€ 물리ì 으로 서로 다른 행위를 í• ìˆ˜ 있으며, í•˜ë‚˜ì˜ ìš”ë¦¬ë¥¼ ë‘ ìš”ë¦¬ì‚¬ê°€ ë‚˜ëˆ ì„œ(parallel program) ë™ì‹œì— í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. - [변형진] ---- * 공부하다 í—·ê°ˆë ¤ì„œ 질문 ì˜¬ë ¤ë´…ë‹ˆë‹¤; - [박성현]