⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000031.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;foxsen&nbsp;(曙光初现),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;linux运行多任务难到这么难么&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Fri&nbsp;Oct&nbsp;&nbsp;6&nbsp;18:59:49&nbsp;2000)&nbsp;<BR>&nbsp;<BR>这里有一个简化版的for&nbsp;2.4.0-test8&nbsp;<BR>---&nbsp;linux-2.4.0-test8/include/linux/sched.h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sat&nbsp;Sep&nbsp;&nbsp;9&nbsp;16:19:30&nbsp;2000&nbsp;<BR>+++&nbsp;linux-akpm/include/linux/sched.h&nbsp;&nbsp;&nbsp;&nbsp;Tue&nbsp;Sep&nbsp;12&nbsp;19:45:11&nbsp;2000&nbsp;<BR>@@&nbsp;-150,6&nbsp;+150,9&nbsp;@@&nbsp;<BR>&nbsp;extern&nbsp;signed&nbsp;long&nbsp;FASTCALL(schedule_timeout(signed&nbsp;long&nbsp;timeout));&nbsp;<BR>&nbsp;asmlinkage&nbsp;void&nbsp;schedule(void);&nbsp;<BR>&nbsp;&nbsp;<BR>+#define&nbsp;conditional_schedule_needed()&nbsp;(current-&gt;need_resched)&nbsp;<BR>+#define&nbsp;conditional_schedule()&nbsp;do&nbsp;{&nbsp;if&nbsp;&nbsp;<BR>(conditional_schedule_needed())&nbsp;schedule();&nbsp;}&nbsp;while&nbsp;(0)&nbsp;<BR>+&nbsp;<BR>&nbsp;/*&nbsp;<BR>&nbsp;&nbsp;*&nbsp;The&nbsp;default&nbsp;fd&nbsp;array&nbsp;needs&nbsp;to&nbsp;be&nbsp;at&nbsp;least&nbsp;BITS_PER_LONG,&nbsp;<BR>&nbsp;&nbsp;*&nbsp;as&nbsp;this&nbsp;is&nbsp;the&nbsp;granularity&nbsp;returned&nbsp;by&nbsp;copy_fdset().&nbsp;<BR>---&nbsp;linux-2.4.0-test8/include/linux/mm.h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sat&nbsp;Sep&nbsp;&nbsp;9&nbsp;16:19:30&nbsp;2000&nbsp;<BR>+++&nbsp;linux-akpm/include/linux/mm.h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tue&nbsp;Sep&nbsp;12&nbsp;19:45:11&nbsp;2000&nbsp;<BR>@@&nbsp;-179,6&nbsp;+179,10&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;bits&nbsp;21-30&nbsp;unused&nbsp;*/&nbsp;<BR>&nbsp;#define&nbsp;PG_reserved&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31&nbsp;<BR>&nbsp;&nbsp;<BR>+/*&nbsp;Actions&nbsp;for&nbsp;zap_page_range()&nbsp;*/&nbsp;<BR>+#define&nbsp;ZPR_FLUSH_CACHE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Do&nbsp;flush_cache_range()&nbsp;prior&nbsp;to&nbsp;releasing&nbsp;<BR>&nbsp;pages&nbsp;*/&nbsp;<BR>+#define&nbsp;ZPR_FLUSH_TLB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Do&nbsp;flush_tlb_range()&nbsp;after&nbsp;releasing&nbsp;&nbsp;<BR>pages&nbsp;*/&nbsp;<BR>+#define&nbsp;ZPR_COND_RESCHED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Do&nbsp;a&nbsp;conditional_schedule()&nbsp;&nbsp;<BR>occasionally&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;/*&nbsp;Make&nbsp;it&nbsp;prettier&nbsp;to&nbsp;test&nbsp;the&nbsp;above...&nbsp;*/&nbsp;<BR>&nbsp;#define&nbsp;Page_Uptodate(page)&nbsp;&nbsp;&nbsp;&nbsp;test_bit(PG_uptodate,&nbsp;&amp;(page)-&gt;flags)&nbsp;<BR>@@&nbsp;-360,7&nbsp;+364,7&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;extern&nbsp;int&nbsp;map_zero_setup(struct&nbsp;vm_area_struct&nbsp;*);&nbsp;<BR>&nbsp;&nbsp;<BR>-extern&nbsp;void&nbsp;zap_page_range(struct&nbsp;mm_struct&nbsp;*mm,&nbsp;unsigned&nbsp;long&nbsp;address,&nbsp;<BR>&nbsp;unsigned&nbsp;long&nbsp;size);&nbsp;<BR>+extern&nbsp;void&nbsp;zap_page_range(struct&nbsp;mm_struct&nbsp;*mm,&nbsp;unsigned&nbsp;long&nbsp;address,&nbsp;<BR>&nbsp;unsigned&nbsp;long&nbsp;size,&nbsp;int&nbsp;actions);&nbsp;<BR>&nbsp;extern&nbsp;int&nbsp;copy_page_range(struct&nbsp;mm_struct&nbsp;*dst,&nbsp;struct&nbsp;mm_struct&nbsp;&nbsp;<BR>*src,&nbsp;struct&nbsp;vm_area_struct&nbsp;*vma);&nbsp;<BR>&nbsp;extern&nbsp;int&nbsp;remap_page_range(unsigned&nbsp;long&nbsp;from,&nbsp;unsigned&nbsp;long&nbsp;to,&nbsp;&nbsp;<BR>unsigned&nbsp;long&nbsp;size,&nbsp;pgprot_t&nbsp;prot);&nbsp;<BR>&nbsp;extern&nbsp;int&nbsp;zeromap_page_range(unsigned&nbsp;long&nbsp;from,&nbsp;unsigned&nbsp;long&nbsp;size,&nbsp;&nbsp;<BR>pgprot_t&nbsp;prot);&nbsp;<BR>---&nbsp;linux-2.4.0-test8/mm/filemap.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sat&nbsp;Sep&nbsp;&nbsp;9&nbsp;16:19:30&nbsp;2000&nbsp;<BR>+++&nbsp;linux-akpm/mm/filemap.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tue&nbsp;Sep&nbsp;12&nbsp;19:36:55&nbsp;2000&nbsp;<BR>@@&nbsp;-191,6&nbsp;+191,7&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;=&nbsp;(lstart&nbsp;+&nbsp;PAGE_CACHE_SIZE&nbsp;-&nbsp;1)&nbsp;&gt;&gt;&nbsp;PAGE_CACHE_SHIFT;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;repeat:&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conditional_schedule();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sys_unlink()&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;=&nbsp;&amp;mapping-&gt;pages;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin_lock(&amp;pagecache_lock);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curr&nbsp;=&nbsp;head-&gt;next;&nbsp;<BR>@@&nbsp;-252,6&nbsp;+253,8&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;we&nbsp;need&nbsp;pagemap_lru_lock&nbsp;for&nbsp;list_del()&nbsp;...&nbsp;subtle&nbsp;code&nbsp;below&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin_lock(&amp;pagemap_lru_lock);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(count&nbsp;&gt;&nbsp;0&nbsp;&amp;&amp;&nbsp;(page_lru&nbsp;=&nbsp;lru_cache.prev)&nbsp;!=&nbsp;&amp;lru_cache)&nbsp;{&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(conditional_schedule_needed())&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;out_resched;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page&nbsp;=&nbsp;list_entry(page_lru,&nbsp;struct&nbsp;page,&nbsp;lru);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list_del(page_lru);&nbsp;<BR>&nbsp;&nbsp;<BR>@@&nbsp;-368,6&nbsp;+371,10&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin_unlock(&amp;pagemap_lru_lock);&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;&nbsp;<BR>+out_resched:&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin_unlock(&amp;pagemap_lru_lock);&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;schedule();&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ret;&nbsp;<BR>&nbsp;}&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;static&nbsp;inline&nbsp;struct&nbsp;page&nbsp;*&nbsp;__find_page_nolock(struct&nbsp;address_space&nbsp;&nbsp;<BR>*mapping,&nbsp;unsigned&nbsp;long&nbsp;offset,&nbsp;struct&nbsp;page&nbsp;*page)&nbsp;<BR>@@&nbsp;-446,6&nbsp;+453,7&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;page_cache_get(page);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin_unlock(&amp;pagecache_lock);&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conditional_schedule();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sys_msync()&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lock_page(page);&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;The&nbsp;buffers&nbsp;could&nbsp;have&nbsp;been&nbsp;free'd&nbsp;while&nbsp;we&nbsp;waited&nbsp;for&nbsp;the&nbsp;page&nbsp;&nbsp;<BR>lock&nbsp;*/&nbsp;<BR>@@&nbsp;-1081,6&nbsp;+1089,7&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&quot;pos&quot;&nbsp;here&nbsp;(the&nbsp;actor&nbsp;routine&nbsp;has&nbsp;to&nbsp;update&nbsp;the&nbsp;user&nbsp;buffer&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;pointers&nbsp;and&nbsp;the&nbsp;remaining&nbsp;count).&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conditional_schedule();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sys_read()&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nr&nbsp;=&nbsp;actor(desc,&nbsp;page,&nbsp;offset,&nbsp;nr);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;offset&nbsp;+=&nbsp;nr;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;+=&nbsp;offset&nbsp;&gt;&gt;&nbsp;PAGE_CACHE_SHIFT;&nbsp;<BR>@@&nbsp;-1533,6&nbsp;+1542,7&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;vma/file&nbsp;is&nbsp;guaranteed&nbsp;to&nbsp;exist&nbsp;in&nbsp;the&nbsp;unmap/sync&nbsp;cases&nbsp;because&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;mmap_sem&nbsp;is&nbsp;held.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conditional_schedule();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;sys_msync()&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;page-&gt;mapping-&gt;a_ops-&gt;writepage(file,&nbsp;page);&nbsp;<BR>&nbsp;}&nbsp;<BR>&nbsp;&nbsp;<BR>@@&nbsp;-1670,6&nbsp;+1680,7&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(address&nbsp;&gt;=&nbsp;end)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BUG();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;{&nbsp;<BR>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conditional_schedule();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;unmapping&nbsp;large&nbsp;mapped&nbsp;files&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error&nbsp;|=&nbsp;filemap_sync_pmd_range(dir,&nbsp;address,&nbsp;end&nbsp;-&nbsp;address,&nbsp;vma,&nbsp;&nbsp;<BR>flags);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;=&nbsp;(address&nbsp;+&nbsp;PGDIR_SIZE)&nbsp;&amp;&nbsp;PGDIR_MASK;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir++;&nbsp;<BR>@@&nbsp;-2020,9&nbsp;+2031,8&nbsp;@@&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(vma-&gt;vm_flags&nbsp;&amp;&nbsp;VM_LOCKED)&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -