Redirecting you to the OSDev wiki. OS Development Wiki
Redirecting you to the OSDev wiki. OS Development Wiki
ã²ã¨ã¤åã®ã¨ã³ã㪠id:naoya:20070924:1190653790 ã§ã¯ Linux ã®ã³ã³ããã¹ãã¹ã¤ããã«ãããã主ã«ãã¼ãã¦ã§ã¢ã³ã³ããã¹ãã®éé¿/復帰ã®å¦çã追ã£ã¦ã¿ã¾ããããã®ä¸ã§ ã«ã¼ãã«ã¹ã¿ã㯠(switch_to() å ã§ pushl %ebp ã¨ããã¦å¤ãç©ã¾ããã¹ã¿ãã¯)ã¨ã¯ãã®ã¨ãã®å®è¡ã³ã³ããã¹ãã«ç´ã¥ãã«ã¼ãã«ããã»ã¹ã¹ã¿ãã¯ã¨ããçè§£ã§ãããã ã¨ããçåãããããæ¹§ãã¦åºã¦ãã¾ãããããæ°æ¥ ã¯ããã¦èªã486â32ãããã³ã³ãã¥ã¼ã¿ãããããèªã ãèªãã§ããã®ã§ããããã®ä¸ã«ãã®çåã¸ã®çãã¸ã®å ¥ãå£ãè¼ã£ã¦ãã¾ãã¦ãããã糸å£ã«èª¿ã¹ã¦ã¿ã¾ãããã§ãçµæã¨ãã¦ã¯ çã: è¯ã ã§ããã x86 ã¯ç¹æ¨©ã¬ãã«ã®ç§»è¡ã¨é£åãã¦ã¹ã¿ãã¯ãã¤ã³ã¿ãåãæ¿ããä»çµã¿ãæã£ã¦ãã¾ããLinux ã®å ´åã¢ã¼ãã¯ã«ã¼ãã«ã¢ã¼ã(ç¹æ¨©ã¬ãã«0) ã¨ã¦ã¼ã¶ã¼ã¢ã¼ã
Linux ã«ã¼ãã«ã®ããã»ã¹ã¹ã±ã¸ã¥ã¼ã©ã®æ ¸ã§ãã kernel/sched.c ã® schedule() ãèªã¿é²ãã¦ããã¨ãã¿ã¹ã¯åãæ¿ã(å®è¡ã³ã³ããã¹ãåãæ¿ã)ã¯ãã®åã context_switch() ã¨ãã颿°ã«éç´ããã¦ãããã¨ãåããã¾ãã2.6.20 ã® kernel/sched.c ã ã¨ä»¥ä¸ã®ã³ã¼ãã§ãã 1839 static inline struct task_struct * 1840 context_switch(struct rq *rq, struct task_struct *prev, 1841 struct task_struct *next) 1842 { 1843 struct mm_struct *mm = next->mm; 1844 struct mm_struct *oldmm = prev->active_mm; 1845 184
ã¾ã Linux ã«ã¼ãã«ã®è©±ã§ãã Linux ã§ã¯ fork ã«ãããã«ãããã»ã¹ã¨ãpthread ã«ãããã«ãã¹ã¬ããã§ã®ä¸¦è¡å¦çãæ¯è¼ããå ´åãå¾è ã®æ¹ãã³ã¹ããä½ãé«éã¨è¨ããã¾ãããã¹ã¬ããã¯ã¡ã¢ãªç©ºéãå ±æããã®ã§ããã«ãããã»ã¹ã¨ã¯ç°ãªãã³ã³ããã¹ãã¹ã¤ããæã«ã¡ã¢ãªç©ºéã®åãæ¿ããçç¥ã§ãããåãæ¿ãã«ä¼´ããªã¼ãã¼ããããå°ãªãããã¨ããã®ã FAQ ã®çããã¨æãã¾ãã ãããªã¼ãã¼ããããå°ãªããã¨ä¸è¨ã«ãããã¦ãå ·ä½çã«ã©ããããã¨ãªã®ããã¤ã¡ã¼ã¸ã§ãã¾ãããããã§ Linux ã®ã¹ã¬ããå¨ãã®å®è£ ãè¦ã¦è¦ãããããªãããã¨ããã®ãä»åã®ãã¼ãã§ãã 3åã§ããã(?) ãã«ãããã»ã¹ã¨ãã«ãã¹ã¬ãã ã¾ãã¯ããã¡ãããã«ãããã»ã¹ã¨ãã«ãã¹ã¬ããã®éãã®å³ã以åã«ç¤¾å ã§åå¼·ä¼ãããã¨ãã«ä½ã£ãè³æã«ã¡ããã©è¯ãã®ããã£ãã®ã§æ²è¼ãã¾ããPthreadsããã°ã©ã
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}