📄 sched.htm
字号:
<a name=L108 href="source/include/linux/sched.h#L108">108</a> <a name=L109 href="source/include/linux/sched.h#L109">109</a> <b><i>/*</i></b><a name=L110 href="source/include/linux/sched.h#L110">110</a> <b><i> * INIT_TASK is used to set up the first task table, touch at</i></b><a name=L111 href="source/include/linux/sched.h#L111">111</a> <b><i> * your own risk!. Base=0, limit=0x9ffff (=640kB)</i></b><a name=L112 href="source/include/linux/sched.h#L112">112</a> <b><i> */</i></b><a name=L113 href="source/include/linux/sched.h#L113">113</a> #define <a href="ident?i=INIT_TASK">INIT_TASK</a> \<a name=L114 href="source/include/linux/sched.h#L114">114</a> <b><i>/* state etc */</i></b> { 0,15,15, \<a name=L115 href="source/include/linux/sched.h#L115">115</a> <b><i>/* signals */</i></b> 0,{{},},0, \<a name=L116 href="source/include/linux/sched.h#L116">116</a> <b><i>/* ec,brk... */</i></b> 0,0,0,0,0,0, \<a name=L117 href="source/include/linux/sched.h#L117">117</a> <b><i>/* pid etc.. */</i></b> 0,-1,0,0,0, \<a name=L118 href="source/include/linux/sched.h#L118">118</a> <b><i>/* uid etc */</i></b> 0,0,0,0,0,0, \<a name=L119 href="source/include/linux/sched.h#L119">119</a> <b><i>/* alarm */</i></b> 0,0,0,0,0,0, \<a name=L120 href="source/include/linux/sched.h#L120">120</a> <b><i>/* math */</i></b> 0, \<a name=L121 href="source/include/linux/sched.h#L121">121</a> <b><i>/* fs info */</i></b> -1,0022,<a href="ident?i=NULL">NULL</a>,<a href="ident?i=NULL">NULL</a>,<a href="ident?i=NULL">NULL</a>,0, \<a name=L122 href="source/include/linux/sched.h#L122">122</a> <b><i>/* filp */</i></b> {<a href="ident?i=NULL">NULL</a>,}, \<a name=L123 href="source/include/linux/sched.h#L123">123</a> { \<a name=L124 href="source/include/linux/sched.h#L124">124</a> {0,0}, \<a name=L125 href="source/include/linux/sched.h#L125">125</a> <b><i>/* ldt */</i></b> {0x9f,0xc0fa00}, \<a name=L126 href="source/include/linux/sched.h#L126">126</a> {0x9f,0xc0f200}, \<a name=L127 href="source/include/linux/sched.h#L127">127</a> }, \<a name=L128 href="source/include/linux/sched.h#L128">128</a> <b><i>/*tss*/</i></b> {0,<a href="ident?i=PAGE_SIZE">PAGE_SIZE</a>+(long)&<a href="ident?i=init_task">init_task</a>,0x10,0,0,0,0,(long)&<a href="ident?i=pg_dir">pg_dir</a>,\<a name=L129 href="source/include/linux/sched.h#L129">129</a> 0,0,0,0,0,0,0,0, \<a name=L130 href="source/include/linux/sched.h#L130">130</a> 0,0,0x17,0x17,0x17,0x17,0x17,0x17, \<a name=L131 href="source/include/linux/sched.h#L131">131</a> <a href="ident?i=_LDT">_LDT</a>(0),0x80000000, \<a name=L132 href="source/include/linux/sched.h#L132">132</a> {} \<a name=L133 href="source/include/linux/sched.h#L133">133</a> }, \<a name=L134 href="source/include/linux/sched.h#L134">134</a> }<a name=L135 href="source/include/linux/sched.h#L135">135</a> <a name=L136 href="source/include/linux/sched.h#L136">136</a> extern struct <a href="ident?i=task_struct">task_struct</a> *<a href="ident?i=task">task</a>[<a href="ident?i=NR_TASKS">NR_TASKS</a>];<a name=L137 href="source/include/linux/sched.h#L137">137</a> extern struct <a href="ident?i=task_struct">task_struct</a> *<a href="ident?i=last_task_used_math">last_task_used_math</a>;<a name=L138 href="source/include/linux/sched.h#L138">138</a> extern struct <a href="ident?i=task_struct">task_struct</a> *<a href="ident?i=current">current</a>;<a name=L139 href="source/include/linux/sched.h#L139">139</a> extern long volatile <a href="ident?i=jiffies">jiffies</a>;<a name=L140 href="source/include/linux/sched.h#L140">140</a> extern long <a href="ident?i=startup_time">startup_time</a>;<a name=L141 href="source/include/linux/sched.h#L141">141</a> <a name=L142 href="source/include/linux/sched.h#L142">142</a> #define <a href="ident?i=CURRENT_TIME">CURRENT_TIME</a> (<a href="ident?i=startup_time">startup_time</a>+<a href="ident?i=jiffies">jiffies</a>/<a href="ident?i=HZ">HZ</a>)<a name=L143 href="source/include/linux/sched.h#L143">143</a> <a name=L144 href="source/include/linux/sched.h#L144">144</a> extern void <a href="ident?i=add_timer">add_timer</a>(long <a href="ident?i=jiffies">jiffies</a>, void (*fn)(void));<a name=L145 href="source/include/linux/sched.h#L145">145</a> extern void <a href="ident?i=sleep_on">sleep_on</a>(struct <a href="ident?i=task_struct">task_struct</a> ** p);<a name=L146 href="source/include/linux/sched.h#L146">146</a> extern void <a href="ident?i=interruptible_sleep_on">interruptible_sleep_on</a>(struct <a href="ident?i=task_struct">task_struct</a> ** p);<a name=L147 href="source/include/linux/sched.h#L147">147</a> extern void <a href="ident?i=wake_up">wake_up</a>(struct <a href="ident?i=task_struct">task_struct</a> ** p);<a name=L148 href="source/include/linux/sched.h#L148">148</a> <a name=L149 href="source/include/linux/sched.h#L149">149</a> <b><i>/*</i></b><a name=L150 href="source/include/linux/sched.h#L150">150</a> <b><i> * Entry into gdt where to find first TSS. 0-nul, 1-cs, 2-ds, 3-syscall</i></b><a name=L151 href="source/include/linux/sched.h#L151">151</a> <b><i> * 4-TSS0, 5-LDT0, 6-TSS1 etc ...</i></b><a name=L152 href="source/include/linux/sched.h#L152">152</a> <b><i> */</i></b><a name=L153 href="source/include/linux/sched.h#L153">153</a> #define <a href="ident?i=FIRST_TSS_ENTRY">FIRST_TSS_ENTRY</a> 4<a name=L154 href="source/include/linux/sched.h#L154">154</a> #define <a href="ident?i=FIRST_LDT_ENTRY">FIRST_LDT_ENTRY</a> (<a href="ident?i=FIRST_TSS_ENTRY">FIRST_TSS_ENTRY</a>+1)<a name=L155 href="source/include/linux/sched.h#L155">155</a> #define <a href="ident?i=_TSS">_TSS</a>(n) ((((unsigned long) n)<<4)+(<a href="ident?i=FIRST_TSS_ENTRY">FIRST_TSS_ENTRY</a><<3))<a name=L156 href="source/include/linux/sched.h#L156">156</a> #define <a href="ident?i=_LDT">_LDT</a>(n) ((((unsigned long) n)<<4)+(<a href="ident?i=FIRST_LDT_ENTRY">FIRST_LDT_ENTRY</a><<3))<a name=L157 href="source/include/linux/sched.h#L157">157</a> #define <a href="ident?i=ltr">ltr</a>(n) __asm__(<i>"ltr %%ax"</i>::<i>"a"</i> (<a href="ident?i=_TSS">_TSS</a>(n)))<a name=L158 href="source/include/linux/sched.h#L158">158</a> #define <a href="ident?i=lldt">lldt</a>(n) __asm__(<i>"lldt %%ax"</i>::<i>"a"</i> (<a href="ident?i=_LDT">_LDT</a>(n)))<a name=L159 href="source/include/linux/sched.h#L159">159</a> #define <a href="ident?i=str">str</a>(n) \<a name=L160 href="source/include/linux/sched.h#L160">160</a> __asm__(<i>"str %%ax\n\t"</i> \<a name=L161 href="source/include/linux/sched.h#L161">161</a> <i>"subl %2,%%eax\n\t"</i> \<a name=L162 href="source/include/linux/sched.h#L162">162</a> <i>"shrl $4,%%eax"</i> \<a name=L163 href="source/include/linux/sched.h#L163">163</a> :<i>"=a"</i> (n) \<a name=L164 href="source/include/linux/sched.h#L164">164</a> :<i>"a"</i> (0),<i>"i"</i> (<a href="ident?i=FIRST_TSS_ENTRY">FIRST_TSS_ENTRY</a><<3))<a name=L165 href="source/include/linux/sched.h#L165">165</a> <b><i>/*</i></b><a name=L166 href="source/include/linux/sched.h#L166">166</a> <b><i> * switch_to(n) should switch tasks to task nr n, first</i></b><a name=L167 href="source/include/linux/sched.h#L167">167</a> <b><i> * checking that n isn't the current task, in which case it does nothing.</i></b><a name=L168 href="source/include/linux/sched.h#L168">168</a> <b><i> * This also clears the TS-flag if the task we switched to has used</i></b><a name=L169 href="source/include/linux/sched.h#L169">169</a> <b><i> * tha math co-processor latest.</i></b><a name=L170 href="source/include/linux/sched.h#L170">170</a> <b><i> */</i></b><a name=L171 href="source/include/linux/sched.h#L171">171</a> #define <a href="ident?i=switch_to">switch_to</a>(n) {\<a name=L172 href="source/include/linux/sched.h#L172">172</a> struct {long a,b;} __tmp; \<a name=L173 href="source/include/linux/sched.h#L173">173</a> __asm__(<i>"cmpl %%ecx,_current\n\t"</i> \<a name=L174 href="source/include/linux/sched.h#L174">174</a> <i>"je 1f\n\t"</i> \<a name=L175 href="source/include/linux/sched.h#L175">175</a> <i>"movw %%dx,%1\n\t"</i> \<a name=L176 href="source/include/linux/sched.h#L176">176</a> <i>"xchgl %%ecx,_current\n\t"</i> \<a name=L177 href="source/include/linux/sched.h#L177">177</a> <i>"ljmp %0\n\t"</i> \<a name=L178 href="source/include/linux/sched.h#L178">178</a> <i>"cmpl %%ecx,_last_task_used_math\n\t"</i> \<a name=L179 href="source/include/linux/sched.h#L179">179</a> <i>"jne 1f\n\t"</i> \<a name=L180 href="source/include/linux/sched.h#L180">180</a> <i>"clts\n"</i> \<a name=L181 href="source/include/linux/sched.h#L181">181</a> <i>"1:"</i> \<a name=L182 href="source/include/linux/sched.h#L182">182</a> ::<i>"m"</i> (*&__tmp.a),<i>"m"</i> (*&__tmp.b), \<a name=L183 href="source/include/linux/sched.h#L183">183</a> <i>"d"</i> (<a href="ident?i=_TSS">_TSS</a>(n)),<i>"c"</i> ((long) <a href="ident?i=task">task</a>[n])); \<a name=L184 href="source/include/linux/sched.h#L184">184</a> }<a name=L185 href="source/include/linux/sched.h#L185">185</a> <a name=L186 href="source/include/linux/sched.h#L186">186</a> #define <a href="ident?i=PAGE_ALIGN">PAGE_ALIGN</a>(n) (((n)+0xfff)&0xfffff000)<a name=L187 href="source/include/linux/sched.h#L187">187</a> <a name=L188 href="source/include/linux/sched.h#L188">188</a> #define <a href="ident?i=_set_base">_set_base</a>(addr,base) \<a name=L189 href="source/include/linux/sched.h#L189">189</a> __asm__(<i>"movw %%dx,%0\n\t"</i> \<a name=L190 href="source/include/linux/sched.h#L190">190</a> <i>"rorl $16,%%edx\n\t"</i> \<a name=L191 href="source/include/linux/sched.h#L191">191</a> <i>"movb %%dl,%1\n\t"</i> \<a name=L192 href="source/include/linux/sched.h#L192">192</a> <i>"movb %%dh,%2"</i> \<a name=L193 href="source/include/linux/sched.h#L193">193</a> ::<i>"m"</i> (*((addr)+2)), \<a name=L194 href="source/include/linux/sched.h#L194">194</a> <i>"m"</i> (*((addr)+4)), \<a name=L195 href="source/include/linux/sched.h#L195">195</a> <i>"m"</i> (*((addr)+7)), \<a name=L196 href="source/include/linux/sched.h#L196">196</a> <i>"d"</i> (base) \<a name=L197 href="source/include/linux/sched.h#L197">197</a> :<i>"dx"</i>)<a name=L198 href="source/include/linux/sched.h#L198">198</a> <a name=L199 href="source/include/linux/sched.h#L199">199</a> #define <a href="ident?i=_set_limit">_set_limit</a>(addr,limit) \<a name=L200 href="source/include/linux/sched.h#L200">200</a> __asm__(<i>"movw %%dx,%0\n\t"</i> \<a name=L201 href="source/include/linux/sched.h#L201">201</a> <i>"rorl $16,%%edx\n\t"</i> \<a name=L202 href="source/include/linux/sched.h#L202">202</a> <i>"movb %1,%%dh\n\t"</i> \<a name=L203 href="source/include/linux/sched.h#L203">203</a> <i>"andb $0xf0,%%dh\n\t"</i> \<a name=L204 href="source/include/linux/sched.h#L204">204</a> <i>"orb %%dh,%%dl\n\t"</i> \<a name=L205 href="source/include/linux/sched.h#L205">205</a> <i>"movb %%dl,%1"</i> \<a name=L206 href="source/include/linux/sched.h#L206">206</a> ::<i>"m"</i> (*(addr)), \<a name=L207 href="source/include/linux/sched.h#L207">207</a> <i>"m"</i> (*((addr)+6)), \<a name=L208 href="source/include/linux/sched.h#L208">208</a> <i>"d"</i> (limit) \<a name=L209 href="source/include/linux/sched.h#L209">209</a> :<i>"dx"</i>)<a name=L210 href="source/include/linux/sched.h#L210">210</a> <a name=L211 href="source/include/linux/sched.h#L211">211</a> #define <a href="ident?i=set_base">set_base</a>(ldt,base) <a href="ident?i=_set_base">_set_base</a>( ((char *)&(ldt)) , base )<a name=L212 href="source/include/linux/sched.h#L212">212</a> #define <a href="ident?i=set_limit">set_limit</a>(ldt,limit) <a href="ident?i=_set_limit">_set_limit</a>( ((char *)&(ldt)) , (limit-1)>>12 )<a name=L213 href="source/include/linux/sched.h#L213">213</a> <a name=L214 href="source/include/linux/sched.h#L214">214</a> #define <a href="ident?i=_get_base">_get_base</a>(addr) ({\<a name=L215 href="source/include/linux/sched.h#L215">215</a> unsigned long __base; \<a name=L216 href="source/include/linux/sched.h#L216">216</a> __asm__(<i>"movb %3,%%dh\n\t"</i> \<a name=L217 href="source/include/linux/sched.h#L217">217</a> <i>"movb %2,%%dl\n\t"</i> \<a name=L218 href="source/include/linux/sched.h#L218">218</a> <i>"shll $16,%%edx\n\t"</i> \<a name=L219 href="source/include/linux/sched.h#L219">219</a> <i>"movw %1,%%dx"</i> \<a name=L220 href="source/include/linux/sched.h#L220">220</a> :<i>"=d"</i> (__base) \<a name=L221 href="source/include/linux/sched.h#L221">221</a> :<i>"m"</i> (*((addr)+2)), \<a name=L222 href="source/include/linux/sched.h#L222">222</a> <i>"m"</i> (*((addr)+4)), \<a name=L223 href="source/include/linux/sched.h#L223">223</a> <i>"m"</i> (*((addr)+7))); \<a name=L224 href="source/include/linux/sched.h#L224">224</a> __base;})<a name=L225 href="source/include/linux/sched.h#L225">225</a> <a name=L226 href="source/include/linux/sched.h#L226">226</a> #define <a href="ident?i=get_base">get_base</a>(ldt) <a href="ident?i=_get_base">_get_base</a>( ((char *)&(ldt)) )<a name=L227 href="source/include/linux/sched.h#L227">227</a> <a name=L228 href="source/include/linux/sched.h#L228">228</a> #define <a href="ident?i=get_limit">get_limit</a>(segment) ({ \<a name=L229 href="source/include/linux/sched.h#L229">229</a> unsigned long __limit; \<a name=L230 href="source/include/linux/sched.h#L230">230</a> __asm__(<i>"lsll %1,%0\n\tincl %0"</i>:<i>"=r"</i> (__limit):<i>"r"</i> (segment)); \<a name=L231 href="source/include/linux/sched.h#L231">231</a> __limit;})<a name=L232 href="source/include/linux/sched.h#L232">232</a> <a name=L233 href="source/include/linux/sched.h#L233">233</a> #endif<a name=L234 href="source/include/linux/sched.h#L234">234</a> </pre><hr><div align=center> [<b><i>源代码浏览</i></b>] [<a href="diff/include/linux/sched.h">区别标定</a>] [<a href="ident">标识符搜索</a>] [<a href="search">文本搜索</a>] [<a href="find">文件搜索</a>] </div><hr>本网页由 <a href="http:blurb.html">LXR引擎</a> 自动生成.<br></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -