コンテã‚ストスイッãƒ
出典: フリー百科事典『ウィã‚ペディア(Wikipedia)ã€
コンテã‚ストスイッム(context switch) ã¨ã¯ã€è¤‡æ•°ã®ãƒ—ãƒã‚»ã‚¹ãŒ1ã¤ã®CPUを共有ã§ãるよã†ã«ã€CPUã®çŠ¶æ…‹(コンテã‚スト)ã‚’ä¿å˜ã—ãŸã‚Šå¾©å…ƒã—ãŸã‚Šã™ã‚‹éŽç¨‹ã®ã“ã¨ã§ã‚る。コンテã‚ストスイッãƒã¯ãƒžãƒ«ãƒã‚¿ã‚¹ã‚¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«ä¸å¯æ¬ ãªæ©Ÿèƒ½ã§ã‚る。通常コンテã‚ストスイッãƒã¯å¤šãã®è¨ˆç®—機処ç†ã‚’å¿…è¦ã¨ã™ã‚‹ãŸã‚ã€ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã®è¨è¨ˆã«ãŠã„ã¦ã¯ã‚³ãƒ³ãƒ†ã‚ストスイッãƒã‚’最é©åŒ–ã™ã‚‹ã“ã¨ãŒé‡è¦ã§ã‚る。
目次[éžè¡¨ç¤º] |
[編集] コンテã‚ストスイッãƒã®ç™ºç”Ÿã™ã‚‹ã‚±ãƒ¼ã‚¹
[編集] マルãƒã‚¿ã‚¹ã‚ング
マルãƒã‚¿ã‚¹ã‚¯ãƒ»ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«ãŠã„ã¦ã¯ã€å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚»ã‚¹ã¯é€”ä¸ã§CPUを明ã‘渡ã—ã€ä»–ã®ãƒ—ãƒã‚»ã‚¹ã‚‚実行ã•ã‚Œã‚‹ã‚ˆã†ã«ã™ã‚‹å¿…è¦ãŒã‚る。ã“ã®ãƒ—ãƒã‚»ã‚¹ã®åˆ‡ã‚Šæ›¿ãˆã®éš›ã«ã‚³ãƒ³ãƒ†ã‚ストスイッãƒãŒç™ºç”Ÿã™ã‚‹ã€‚
プリエンプティブãªãƒžãƒ«ãƒã‚¿ã‚¹ã‚¯OSã§ã¯ã€ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ãƒ¼ãŒå„プãƒã‚»ã‚¹ã‚’「タイムスライスã€ã¨å‘¼ã°ã‚Œã‚‹ã‚ã‚‹çŸã„時間ãšã¤èµ°è¡Œã•ã›ã‚‹ã€‚ ã—ã‹ã—ã€ãƒ—ãƒã‚»ã‚¹ãŒãã®æ™‚間内ã«CPUを明ã‘渡ã•ãªã‹ã£ãŸå ´åˆ(明ã‘渡ã™ã¨ã¯ã€ä¾‹ãˆã°I/Oã‚’è¡Œã£ã¦ãã®å®Œäº†ã‚’å¾…ã¤å ´åˆãªã©)ã€ã‚¿ã‚¤ãƒžå‰²ã‚Šè¾¼ã¿ãŒç™ºç”Ÿã—ã€OSãŒåˆ¥ã®ãƒ—ãƒã‚»ã‚¹ã‚’èµ°è¡Œã•ã›ã‚‹ã‚ˆã†ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«è¨å®šã—コンテã‚ストスイッãƒãŒç™ºç”Ÿã™ã‚‹ã€‚ã“ã‚Œã«ã‚ˆã‚ŠCPUãŒè¨ˆç®—ã°ã‹ã‚Šã™ã‚‹ã‚¢ãƒ—リケーションã«å é ˜ã•ã‚Œãªã„よã†ã«ã™ã‚‹ã®ã§ã‚る。
[編集] 割り込ã¿å‡¦ç†
割り込ã¿ãŒç™ºç”Ÿã—ãŸæ™‚ã«ã¯ã€ç¾åœ¨ã®ãƒ—ãƒã‚»ã‚¹ã®å®Ÿè¡Œã‚’åœæ¢ã—ã¦å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ã‚’実行ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ãŸã‚ã€ã‚³ãƒ³ãƒ†ã‚ストスイッãƒãŒç™ºç”Ÿã™ã‚‹ã€‚
リアルタイムOSã®å ´åˆã€ãƒ—リエンティブãªã‚¿ã‚¹ã‚¯ãŒå®Ÿè¡Œä¸ã«å‰²ã‚Šè¾¼ã¿ãŒç™ºç”Ÿã—ãŸæ™‚ã¯ã€å‰²ã‚Šè¾¼ã¿å‡¦ç†ãŒçµ‚了ã—ã¦ã‚‚åœæ¢ã•ã›ãŸã‚¿ã‚¹ã‚¯ã«å®Ÿè¡Œæ¨©ãŒæˆ»ã‚‹ã¨ã¯é™ã‚‰ãªã„。 割り込ã¿å‡¦ç†çµ‚了時ã«åœæ¢ã•ã›ãŸã‚¿ã‚¹ã‚¯ã‚ˆã‚Šãƒ—ライオリティã®é«˜ã„タスクãŒå®Ÿè¡Œå¯èƒ½ã¨ãªã£ã¦ã„ã‚‹å ´åˆã¯ãƒ‡ã‚£ã‚¹ãƒ‘ッãƒãŒè¡Œã‚れプライオリティã®é«˜ã„タスクを優先ã—ã¦å‡¦ç†ã™ã‚‹ã®ãŒä¸€èˆ¬çš„ã§ã‚る。
[編集] ユーザーモードã¨ã‚«ãƒ¼ãƒãƒ«ãƒ¢ãƒ¼ãƒ‰ã®åˆ‡ã‚Šæ›¿ãˆ
ユーザーモードã¨ã‚«ãƒ¼ãƒãƒ«ãƒ¢ãƒ¼ãƒ‰é–“ã®é·ç§»ãŒå¿…è¦ã¨ãªã£ãŸå ´åˆã€ã‚³ãƒ³ãƒ†ã‚ストスイッãƒãŒç™ºç”Ÿã™ã‚‹ã€‚システムコールã¯ã‚«ãƒ¼ãƒãƒ«ãƒ¢ãƒ¼ãƒ‰ã§å®Ÿè¡Œã•ã‚Œã‚‹ã®ã§ã€ã“れらã®é–¢æ•°ãŒå‘¼ã³å‡ºã•ã‚Œã‚‹éš›ã«ã¯ã¾ãšã‚«ãƒ¼ãƒãƒ«ã®ã‚³ãƒ³ãƒ†ã‚ストをèªã¿å‡ºã—ã€ã‚·ã‚¹ãƒ†ãƒ コールを実行ã—ã¦ã€ãã‚Œã‹ã‚‰å…ƒã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã®ã‚³ãƒ³ãƒ†ã‚ストを復元ã™ã‚‹å¿…è¦ãŒã‚る。
[編集] コンテã‚ストスイッãƒã®æ‰‹é †
コンテã‚ストスイッãƒã§ã¯ã€å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚»ã‚¹ã®çŠ¶æ…‹ã‚’何らã‹ã®æ–¹æ³•ã§ä¿å˜ã—ã€å¾Œã«ãã®ãƒ—ãƒã‚»ã‚¹ã‚’å†é–‹ã™ã‚‹éš›ã«ãã®çŠ¶æ…‹ã‚’復元ã—ã¦ã€æ£å¸¸ã«å®Ÿè¡Œã‚’継続ã§ãるよã†ã«ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„。
プãƒã‚»ã‚¹ã®çŠ¶æ…‹ã«ã¯ã€ãã®ãƒ—ãƒã‚»ã‚¹ãŒä½¿ç”¨ã—å¾—ã‚‹å…¨ã¦ã®ãƒ¬ã‚¸ã‚¹ã‚¿(特ã«ãƒ—ãƒã‚°ãƒ©ãƒ カウンタ)ã‚„ã€ãƒ—ãƒã‚»ã‚¹ã®å®Ÿè¡Œã«å¿…è¦ã¨ãªã‚‹ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ 固有ã®æƒ…å ±ãŒå«ã¾ã‚Œã‚‹ã€‚多ãã®å ´åˆã€ã“れらã®ãƒ‡ãƒ¼ã‚¿ã¯1ã¤ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã¨ã—ã¦ä¿å˜ã•ã‚Œã‚‹ã€‚
プãƒã‚»ã‚¹ã‚’切り替ãˆã‚‹ãŸã‚ã«ã¯ã€å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚»ã‚¹ã®çŠ¶æ…‹ã‚’表ã™ãƒ‡ãƒ¼ã‚¿æ§‹é€ を作æˆã—ã€ä¿å˜ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„。ã“ã®ãƒ‡ãƒ¼ã‚¿ã¯ã€ã‚«ãƒ¼ãƒãƒ«ãƒ¡ãƒ¢ãƒªä¸Šã«ã‚るプãƒã‚»ã‚¹ã”ã¨ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹ã‚¹ã‚¿ãƒƒã‚¯ã‹ã€ã‚ã‚‹ã„ã¯ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«ã‚ˆã£ã¦å®šç¾©ã•ã‚ŒãŸå›ºæœ‰ã®ãƒ‡ãƒ¼ã‚¿æ§‹é€ ã«ä¿å˜ã•ã‚Œã‚‹ã€‚
[編集] 様々ãªå®Ÿè£…例
コンテã‚ストスイッãƒã¯ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§å®Ÿè¡Œã•ã‚Œã‚‹ã€‚インテルã®80386ã‚„ãã®å¾Œç¶™CPUã¯ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒã‚³ãƒ³ãƒ†ã‚ストスイッãƒã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¦ã€ãã®ãŸã‚ã®ç‰¹åˆ¥ãªãƒ‡ãƒ¼ã‚¿ã‚»ã‚°ãƒ¡ãƒ³ãƒˆ(タスク・ステート・セグメントã€TSS)を用æ„ã—ã¦ã„る。タスクスイッãƒãŒç™ºç”Ÿã™ã‚‹ã¨(明示的ã«ã‚¿ã‚¹ã‚¯ã‚’切り替ãˆã‚‹å‘½ä»¤ã‚’実行ã™ã‚‹ã‹ã€å‰²ã‚Šè¾¼ã¿ãŒç™ºç”Ÿã—ãŸã¨ã)ã€CPUã¯è‡ªå‹•çš„ã«æ–°ã—ã„コンテã‚ストをTSSã‹ã‚‰ãƒãƒ¼ãƒ‰ã™ã‚‹ã€‚ã“ã®ã‚ˆã†ã«ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã§ã‚³ãƒ³ãƒ†ã‚ストスイッãƒã‚’è¡Œã†ã¨é«˜é€Ÿã ã¨æ€ã‚れるã‹ã‚‚ã—ã‚Œãªã„ãŒã€Windowsã‚’å«ã‚ãŸä¸»ãªOSã¯ã“ã®æ©Ÿèƒ½ã‚’使ã£ã¦ã„ãªã„。ã“ã‚Œã¯ä¸»ã«ãµãŸã¤ã®ç†ç”±ã«ã‚ˆã‚‹ã‚‚ã®ã§ã‚る。ã¾ãšãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã«ã‚ˆã‚‹ã‚³ãƒ³ãƒ†ã‚ストスイッãƒã¯å…¨éƒ¨ã®ãƒ¬ã‚¸ã‚¹ã‚¿ã‚’セーブã—ãªã„(汎用レジスタã ã‘ã§ã€æµ®å‹•å°æ•°ç‚¹ãƒ¬ã‚¸ã‚¹ã‚¿ã‚‚セーブã—ãªã„)。もã†ã²ã¨ã¤ã®ç†ç”±ã¯æ€§èƒ½ã®å•é¡Œã§ã‚る。
アーã‚テクãƒãƒ£ã«ã‚ˆã£ã¦ã¯è¤‡æ•°ã®ã‚³ãƒ³ãƒ†ã‚ストをåŒæ™‚ã«ä¿æŒã™ã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚‚å˜åœ¨ã™ã‚‹ã€‚ãã®å ´åˆã‚³ãƒ³ãƒ†ã‚ストをメモリã«æ ¼ç´ã—ãŸã‚Šãƒ¡ãƒ¢ãƒªã‹ã‚‰å¾©å¸°ã•ã›ãŸã‚Šã¨ã„ã£ãŸã“ã¨ã‚’ã™ã‚‹å¿…è¦ãŒãªã„。極端ãªã‚±ãƒ¼ã‚¹ã¨ã—ã¦ãƒãƒ¬ãƒ«ãƒ—ãƒã‚»ãƒƒã‚µã‚¢ãƒ¼ã‚テクãƒãƒ£ã§ã¯ãƒžã‚·ãƒ³ã‚µã‚¤ã‚¯ãƒ«æ¯Žã«ã‚¹ãƒ¬ãƒƒãƒ‰é–“ã§ã‚¹ã‚¤ãƒƒãƒã—ãªãŒã‚‰å‹•ä½œã™ã‚‹ã€‚